车位管理课程设计报告
- 格式:docx
- 大小:66.53 KB
- 文档页数:9
课程设计报告设计题目:车位管理学生姓名:专业:计算机科学与技术班级:学号:指导老师:完成日期:2012.7.4合肥工业大学计算机与信息学院(一)需求和规格说明车位管理随着家庭购买汽车的增加,停车场车位紧张的问题越来越突出。
请根据题目要求完成简单的车位管理程序。
1.停车场有若干停车位(为说明问题,假定为3个),每个位置可以存放不同种类的汽车,包括卡车Truck,客车Carriage和小轿车Car,但同一时刻一个位置只能存放0或1辆汽车。
2.管理系统模拟实际车辆停车的情况:①停车:新来车辆时如果有空位,按顺序为该车分配停车位,并自动记录开始停车的时间(用系统的时间);②计费:车辆开走时,输入车位编号,自动记录结束停车的时间(用系统的时间);计算出相应停车费;③显示:显示停车场中各类车辆的信息。
④保存⑤退出3.定义描述停车场的类Park,其中有3个位置用于存放各类车辆。
4.定义基类Automobile,至少包括纯虚函数Pay用于显示车辆信息并交纳相应停车费。
5.定义派生类Truck,Carriage和Car,这些车辆除了拥有车牌号、之外,Truck还拥有载重量(浮点数,单位吨)属性,Carriage还拥有乘坐人数(整数,单位座)属性,Car还拥有排气量(浮点数,单位L)属性。
具体实现上述纯虚函数Pay,显示每类车辆的相应信息,并给出计价提示,其中Truck收费2元/小时,Carriage收费1.5元/小时,Car收费1元/小时。
(二)设计根据上述需求,设计一个基类Automobile,然后派生出Truck(卡车),Carriage(客车),Car(小轿车)。
定义描述停车场的类Park,其中有3个位置用于存放各类车辆。
在基类中,除了定义公用变量time和number以外,还应统一定义对各类车都应有的操作,这样可以规范各派生类的基本行为。
但是各类人员的情况不同,不能在基类Automobile中统一定义计算方法。
各类人员信息的显示内容也不同,同样不能在基类中统一定义显示方法。
因此,在Automobile类中用纯虚函数的方式定义了计算收费函数pay()和取车函数pick(),然后在派生类中再根据各自的同名函数实现具体的功能。
即先定义基类Automobile,在通过公有继承得到Car, Carriage,Car.同时定义含有Automobile Park[3]的类Park。
(三)用户手册按程序提示进行即可。
(四)调试及测试进一步改进能灵活选取停车位置,而不是顺序依次选取。
附录 源程序#include<iostream.h>#include<time.h>class Automobile{public:virtual void pay()=0;virtual void pick()=0;~Automobile(){}; protected:char *Number;int time;clock_t start,finish;};class Truck:public virtual Automobile {public:Truck();void pay();void pick();static int number();~Truck(){};protected:float zzl;static int trucksum;};class Carriage:public Automobile {public:Carriage();void pay();void pick();static int number();~Carriage(){};protected:int chairs;static int carriagesum;};class Car:public Automobile{public:Car();void pay();void pick();static int number();~Car(){};protected:float air;static int carsum;};class Park{public:Park();void pick(int n);void statistics();friend int Judge(Park p);Automobile *park[3];};int Truck::trucksum=0;Truck::Truck(){Number=new char[20];trucksum++;cout<<"该卡车车牌号为:";cin>>Number;cout<<"该卡车的载重量为(吨):";cin>>zzl;start=clock();}void Truck::pay(){finish=clock();time=int(finish-start)/36000000+1;cout<<"*************************** ******"<<endl;cout<<"车辆类型:卡车"<<endl;cout<<"车牌号:"<<Number<<endl;cout<<"卡车的载重量为:"<<zzl<<"吨"<<endl;cout<<"卡车的收费标准为每小时2元." <<endl;cout<<"停车的时间为:"<<time<<"小时"<<endl;cout<<"所需费用为:"<<2*time<<"元"<<endl;cout<<"*************************** ******"<<endl;}void Truck::pick(){trucksum--;}int Truck::number(){return trucksum;}int Carriage::carriagesum=0;Carriage::Carriage(){Number=new char[20];carriagesum++;cout<<"该客车牌号为:";cin>>Number;cout<<"该客车的乘坐人数(座):";cin>>chairs;start=clock();}void Carriage::pay(){finish=clock();time=int(finish-start)/36000000+1;cout<<"*************************** ******"<<endl;cout<<"车辆类型:客车"<<endl;cout<<"车牌号:"<<Number<<endl;cout<<"客车可以乘坐的人数:"<<chairs<<"吨"<<endl;cout<<"客车的收费标准为每小时 1.5元." <<endl;cout<<"停车的时间为:"<<time<<"小时"<<endl;cout<<"所需费用为:"<<1.5*time<<"元"<<endl;cout<<"*************************** ******"<<endl;}void Carriage::pick(){carriagesum--; }int Carriage::number(){return carriagesum;}int Car::carsum=0;Car::Car(){Number=new char[20];carsum++;cout<<"该小轿车车牌号为:";cin>>Number;cout<<"该小轿车的排气量(L):";cin>>air;start=clock();}void Car::pay(){finish=clock();time=int(finish-start)/36000000+1;cout<<"******************************* **"<<endl;cout<<"车辆类型:小轿车"<<endl;cout<<"车牌号:"<<Number<<endl;cout<<"小轿车的排气量:"<<air<<"L"<<endl;cout<<"小轿车的收费标准为每小时1元." <<endl;cout<<"停车的时间为:"<<time<<"小时"<<endl;cout<<"所需费用为:"<<1*time<<"元"<<endl;cout<<"*************************** ******"<<endl;}void Car::pick(){carsum--;}int Car::number(){return carsum;}Park::Park(){for(int i=0;i<3;i++)park[i]=NULL;}void Park::pick(int n){if(park[n]==NULL)cout<<"第"<<n<<"个车位上没有车!"<<endl;else{park[n]->pay();park[n]->pick();delete park[n];park[n]=NULL;cout<<"取车成功!"<<endl;}}void Park::statistics(){cout<<"目前停车场有:"<<Truck::number()<<"辆卡车,"<<Carriage::number()<<"辆客车,"<<Car::number()<<"辆小轿车!"<<endl;for(int i=0;i<3;i++){if(park[i]!=NULL){park[i]->pay();} }}int Judge(Park p){for(int j=0;j<3;j++){if(p.park[j]==NULL){return j;break;}}return 0;}int main(){Park *park=new Park;Truck *truck; Carriage *carriage;Car *car;int n=0,k,m;int i=0;char kind;while(1){cout<<"*************************** ************"<<endl;cout<<"---------------------------------------" <<endl;cout<<"**"<<endl;cout<<"* "<<"欢迎进入停车场交费管理系统"<<" *"<<endl;cout<<"**"<<endl;cout<<"---------------------------------------" <<endl;cout<<"*************************** ************"<<endl;cout<<endl;cout<<"请选择(1--3):"<<endl;cout<<" "<<"1:停车"<<endl;cout<<" "<<"2:取车交费"<<endl;cout<<" "<<"3:车辆状态"<<endl;cin>>i;while(i<1||i>3){cout<<"错误输入!"<<endl;cout<<"请重新输入(1-3)选择相应的功能: ";cin>>i;}switch(i){case 1:if(n>2) {cout<<"车库已满,无法再停车"<<endl; break;}cout<<"a:卡车b:客车c:轿车"<<endl;cout<<"请选择你车辆的类型:";cin>>kind;while(kind!='a'&&kind!='b'&&kind!='c'){cout<<"你输入的车辆种类不正确,请重新从a,b,c选择车辆类型: ";cin>>kind;}m=Judge(*park);switch(kind){case 'a':truck=new Truck;park->park[m]=truck;n++;cout<<"\n停车成功!"<<endl;break;case 'b':carriage=new Carriage;park->park[m]=carriage;n++;cout<<"\n停车成功!"<<endl;break;case 'c':car=new Car;park->park[m]=car;n++;cout<<"\n停车成功!"<<endl;break;}break;case 2:cout<<"请输入车位号(0~2):";cin>>n;park->pick(n);break;case 3:park->statistics();break;}cout<<"是否继续?Yes(1)/No(0) ";cin>>k;if(k==0) return 0;cout<<endl<<endl<<endl;}}。