Hi ,這裏給妳整理了壹段小代碼僅供參考:
ExpressManager.h
#ifndef?__EXPRESSMANAGER_H__#define?__EXPRESSMANAGER_H__
#include?<memory>
enum?e_CarType
{
E_CARTYPE_S,
E_CARTYPE_M,
E_CARTYPE_B,
E_CARTYPE_SIZE,
};
struct?s_Car
{
float?passCharge;
float?trip?;
enum?e_CarType?type;
};
static?float?CHARGE_DEF[E_CARTYPE_SIZE]={0.3F,0.4F,0.5F};
const?int?NAME_LEN=16;
class?ExpressManager
{
public:
explicit?ExpressManager(const?char*?name="Express"):_passCharge(0.0f),_tempCharge(0.0f)
{
memcpy(?_name,name,NAME_LEN?);
}
~ExpressManager(void){}
//?pass?the?express?manager
//?@?car?the?pass?car
//?@?passCharge?the?charge?for?passing?
float?Pass(?const?struct?s_Car*?car,float?passCharge,float&?rCharge?);
//?show?the?charge?for?passing
//?@?car?the?pass?car?
float?ShowCharge(?const?struct?s_Car*?car?)?const?;
float?ShowTotal(?)?const
{?
printf("\t?Total?is:%0.2f\n",_passCharge);
return?_passCharge;
}
void?PassCar();
void?PassTest();
private:
//?caculate?the?charge?for?passing
//?@?car?the?parss?car
//?@?return?!0?,succss?to?get?the?value;?-1?,bad?data
inline?float?Caculate(?const?struct?s_Car*?car?)?const
{
return?car->trip*CHARGE_DEF[car->type];
}
float?_passCharge;
float?_tempCharge;
char?_name[NAME_LEN];
};
#endif
ExpressManager.cpp
#include?"stdafx.h"#include?"ExpressManager.h"
//?pass?the?express?manager
//?@?car?the?pass?car
//?@?passCharge?the?charge?for?passing?
float?ExpressManager::Pass(?const?struct?s_Car*?car,float?passCharge,float&?rCharge?)
{
if(?car?!=NULL?)
{
float?need?=?Caculate(?car?);
_tempCharge+=passCharge;
if(?_tempCharge?>=?need?)
{
_passCharge?+=?need;
rCharge?=?_tempCharge?-?need;
_tempCharge?=?0;
return?true;
}
else
{
printf(?"Fail?to?pass?!?less?%0.2f\n",need-_tempCharge?);
return?false;
}
}
else
{
printf("Fail?to?pass?Null?data!\n");
}
return?false;
}
//?show?the?charge?for?passing
//?@?car?the?pass?car?
float?ExpressManager::ShowCharge(?const?struct?s_Car*?car?)?const?
{
if(?car?!=?NULL?)
{
return?Caculate(?car?);
}
else
{
printf("Fail?to?show?Null?data!\n");
return?0.0f;
}
}
void?ExpressManager::PassCar()
{
struct?s_Car?temp={0};
float?pCharge=0.0f;
float?rCharge=0.0f;
printf("plz,input?car?info!?e.?type?trip\n");
if(?scanf_s("%d?%f",&temp.type,&temp.trip?)!=?EOF?)
{
temp.passCharge?=?ShowCharge(?&temp?);
printf("plz?pay?%0.2f?for?passing\n",temp.passCharge?);
while(true)
{
if(?scanf_s(?"%f",&pCharge?)?!=?EOF?)
{
if(?Pass(?&temp,pCharge,rCharge?)?)
{
if(?rCharge==0.0f)
{
printf("congratulation!?see?you?next?time!\n");
}
else
{
printf("congratulation!?payback?you?%0.2f?see?you?next?time!\n",rCharge);
}
break;
}
}
}
}
}
void?ExpressManager::PassTest()
{
int?cmd?=?0;
while(true)
{
printf("welcome?to?%s\n",_name);
printf("\t'p'?-?pass?the?car!\n");
printf("\t's'?-?show?the?total?charge!\n");
printf("\t'q'?-?Exit!\n");
fflush(stdin);
if(?(cmd?=?getchar())?!=EOF?)
{
if(?cmd?==?'q'?)?break;
else?if(?cmd?==?'s'?)
{
ShowTotal();
}
else?if(?cmd?==?'p'?)
{
PassCar();
}
}
}
}
測試代碼:
#include?"ExpressManager.h"#include?<stdio.h>
int?main(int?argc,?char*?argv[])
{
ExpressManager?*Express1=new?ExpressManager("G2023");
Express1->PassTest();
return?0;
}
以上代碼僅供參考,更多源碼可以聯系我,更多源碼地址:/forum.php?mod=forumdisplay&fid=48