车位管理课程设计报告.docx
《车位管理课程设计报告.docx》由会员分享,可在线阅读,更多相关《车位管理课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
![车位管理课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/16/7ab4ba18-d887-4e53-8df3-148bfe6fd7df/7ab4ba18-d887-4e53-8df3-148bfe6fd7df1.gif)
车位管理课程设计报告
课程设计报告
设计题目:
车位管理
学生姓名:
专业:
班级:
学号:
指导教师:
完成日期:
(一)需求和规格说明
随着家庭购买汽车的增加,停车场车位紧张的问题越来越突出。
请根据题目要求完成简单的车位管理程序。
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元/小时。
(二)设计
根据上述需求,设计一个结构体类型用于存储车辆相关信息;设计一个描述停车场的类Park;停车场类用除了构造函数与虚构函数外还具有判断车位是否已满,已空等相关信息;定义类Automobile,继承了Park类的相关信息,除了定义构造函数和析构函数以外,还有纯虚函数virtualvoidPay()const=0用于显示车辆信息以及车牌号及车辆类型等相关数据;enter()与leave()函数用于控制车辆进出,以及虚函数virtualvoidpay()用于保存车辆信息;定义派生类Truck,Carriage和Car,这些车辆除了拥有车牌号、之外,分别具有载重,乘坐人数,排气量等信息;
系统类图
classPark
park();
~park()
boolFull();boolEmpty();
intcount;nodelocation[N];
classAutomobile
Automobile();
~Automobile(){}
boolenter();
boolleave();
floatTL()const;
virtualvoidPay()const=0;
virtualvoidpay();
charC[64];
charty[16];
classTruck
classCarriage
classCar
Truck();
~Truck();
voidenter1();
virtualvoidPay()const;
virtualvoidpay();
Carriage();
~Carriage();
voidenter1();
virtualvoidPay()const;
virtualvoidpay();
Car();
~Car();
voidenter1();
virtualvoidPay()const;
virtualvoid
pay();
mutablefloatkio[N];
mutableintnum[N];
mutablefloatgas[N];
属性和方法定义
类名
成员类别
类型
成员名
描述
park
属性
int
count
计数
Node
Location[3]
车辆信息
方法
bool
Full()
判断是否停满
bool
Empty()
判断是否为空
类名
成员类别
类型
成员名
描述
Automobile
属性
char
C[64]
车牌号
char
Ty[16]
车辆类型
方法
bool
enter()
车辆进入
bool
leave()
车辆离开
float
TL()const
计算时间差(为方便计算,此处以秒计算)
virtualvoid
Pay()const=0
纯虚函数
virtualvoid
pay()
车辆类型,进入时间,车牌号,
Truck
属性
mutable
float
kio[N]
载重
方法
void
enter1()
Truck进入车场
virtualvoid
Pay()const=0
Truck离开车场车场,显示收费及载重
virtualvoid
Pay()
显示Truck的车辆类型,进入时间,车牌号,载重量
Carriage
属性
mutableint
num[N]
乘座人数
方法
void
enter1()
Carriage进入车场
virtualvoid
Pay()const=0
Carriage离开车场车场,显示收费及乘座人数
virtualvoid
Pay()
显示Carriage的车辆类型,进入时间,车牌号,乘座人数
Car
属性
mutablefloat
gas[N]
排气量
方法
void
enter1()
Car进入车场
virtualvoid
Pay()const=0
Car离开车场车场,显示收费及排气量
virtualvoid
Pay()
显示Car的车辆类型,进入时间,车牌号,排气量
(三)用户手册
运行时
1.程序运行时,首先提示输入1,然后根据提示,输入a(b,c)按enter根据提示输入车辆类型,车牌号,对应类型车辆附加信息。
进入车站完成!
返回开始输入界面。
2.根据提示,若输入1,则进行转入1继续执行1;如输入2,则根据提示输入a(b,c)
按enter输入要离开车辆的车牌号。
按enter输出对应车辆信息。
!
返回开始输入界面。
3.根据提示,若输入1,则进行转入1继续执行1;如输入2则进行转入1继续执行2;若输入3则显示车场中停留车辆相关信息。
返回开始输入界面。
4.根据提示,若输入1,则进行转入1继续执行1;如输入2则进行转入1继续执行2;若输入,则进行转入3继续执行3;若输入4,则保存车场中车辆信息。
返回开始输入界面。
5.根据提示,若输入1,则进行转入1继续执行1;如输入2则进行转入1继续执行2;若输入,则进行转入3继续执行3;若输入4,则进行转入4继续执行4;若输入5,则退出。
(四)调试及测试
由于公司每增加一个雇员,无论他(她)是哪一类人员,其编号均是顺序加1,也就是employee类的所有派生类对象创建时,都要访问同一个employeeNo,因此将employeeNo定义为静态数据成员。
运行实例:
请选择!
1按enter
请输入进入车场车辆:
a按enter
进入停车场!
请输入车辆类型:
Truck按enter
请输入车牌号:
123456按enter
显示进入时间:
请输入载重量:
5.5按enter
请选择:
1按enter
请输入进入车场车辆:
a按enter
进入停车场!
请输入车辆类型:
Truck按enter
请输入车牌号:
123abc按enter
显示进入时间:
请输入载重量:
6.5按enter
请选择!
1按enter
请输入进入车场车辆:
c按enter
进入停车场!
请输入车辆类型:
Car按enter
请输入车牌号:
1234ab按enter
显示进入时间:
请输入排气量:
1.2按enter
请选择!
3按enter
显示停车场中相关信息!
请选择:
4按enter
请选择!
2按enter
请输入离开车场车辆类型!
a按enter
请输入要离开车辆的车牌号:
123456按enter
显示:
要离开时间:
要离开车辆的相关信息:
车辆类型:
Truck
车牌号:
123456
收费:
载重:
5.5吨
请选择!
3按enter
显示停车场中相关信息!
请选择!
5按enter
请按任何键结束!
进一步改进
(1)可将输入界面改为MFC可视化操作。
(2)改变初始值N的大小以停放更多车辆。
(3)可添加车位监控函数,方便查看车场中空位!
附录源程序
/*
Name:
车位管理
Copyright:
Author:
Date:
*/
#include
#include//文件
#include//调用系统时间
#include//控制格式
#include
#include
usingnamespacestd;
constintN=3;//停车场规模
structnode//结构体描述停车场基本属性
{
charCarinformation[64];//车牌号
chartype[16];//车辆类型
boolfull;//判断是否停满
time_tt1,t2;//停车时间
};
classAutomobile;
classpark
{
public:
park();
~park(){}
boolFull();//车辆进入
boolEmpty();//车辆离开
intcount;//计数
nodelocation[N];//三个车位
};
park:
:
park()//初始化
{
count=0;
for(inti=0;i{
location[i].full=false;
location[i].Carinformation[64]=0;
location[i].type[16]=0;
location[i].t1=0;
location[i].t2=0;
}
}
boolpark:
:
Full()//判断是否停满
{
if(count>=N)
returntrue;
returnfalse;
}
boolpark:
:
Empty()//判断是否为空
{
if(count==0)
returntrue;
returnfalse;
}
classAutomobile:
publicpark
{
public:
Automobile();
~Automobile(){}
boolenter();//进入
boolleave();//离开
floatTL()const;//计算时间
virtualvoidPay()const=0;//纯虚函数控制输出
virtualvoidpay();
protected:
charC[64];
charty[16];
};
Automobile:
:
Automobile():
park()
{
C[64]=0;
ty[16]=0;
}
floatAutomobile:
:
TL()const
{
floats=0;
for(inti=0;iif(strcmp(location[i].Carinformation,C)==0)
{
s=location[i].t2-location[i].t1;//系统参数,为方便显示结果在此利用秒来计数
break;
}
returns;
}
boolAutomobile:
:
enter()//进入
{
cout<<"进入停车场!
"<if(Full()==1)
{
cout<<"车位已满!
"<returntrue;
}
else
{
cout<<"请输入车辆类型:
"<cin>>ty;
cout<<"请输入车牌号:
"<cin>>C;
for(inti=0;iif(location[i].full==false)
{
strcpy(location[i].Carinformation,C);
strcpy(location[i].type,ty);
count++;
location[i].full=true;
location[i].t1=time(0);//开始计时
chartmp[16];
strftime(tmp,sizeof(tmp),"%X",localtime(&location[i].t1));
cout<<"进入时间:
"<returnfalse;
}
else
i++;
cout<<"车位已满!
"<returntrue;
}
}
boolAutomobile:
:
leave()//离开
{
if(Empty()==1)
{
cout<<"车位已空!
"<returnfalse;
}
else
{
cout<<"请输入要离开车辆的车牌号:
"<cin>>C;
for(inti=0;iif(strcmp(location[i].Carinformation,C)==0)
{
location[i].t2=time(0);//离开时间
chartmp[16];
strftime(tmp,sizeof(tmp),"%X",localtime(&location[i].t2));
cout<<"离开时间时间:
"<cout<cout<<"要离开车辆的相关信息:
"<cout<<"车辆类型:
"<location[i].type[16]=0;
cout<<"车牌号:
"<location[i].Carinformation[64]=0;
location[i].full=false;
count--;
returntrue;
}
else
i++;
cout<<"该车不在其中!
"<returnfalse;
}
}
voidAutomobile:
:
pay()//显示车辆类型及车牌号
{
for(inti=0;iif(location[i].full==1)
{
cout<<"车辆类型:
"<cout<<"车牌号:
"<}
}
classTruck:
publicAutomobile
{
public:
Truck();
~Truck(){}
voidenter1();
virtualvoidPay()const;
virtualvoidpay();
mutablefloatkio[N];//const函数中修改数值
};
Truck:
:
Truck():
Automobile()
{
for(inti=0;ikio[i]=0;
}
voidTruck:
:
enter1()//输入载重
{
if(enter()!
=1)
{
cout<<"请输入载重量:
"<for(inti=0;iif(kio[i]==0)
{
cin>>kio[i];
break;
}
}
}
voidTruck:
:
Pay()const//显示费用及载重
{
cout<<"收费:
"<<2*TL()<<"元"<for(intl=0;lif((location[l].full==false)&&(kio[l]!
=0))//判断输出对应的车重
{
cout<<"载重量:
"<kio[l]=0;//改变车重
break;
}
}
voidTruck:
:
pay()
{
for(inti=0;iif(location[i].full==1)
{
cout<<"车辆类型:
"<chartmp[16];
strftime(tmp,sizeof(tmp),"%X",localtime(&location[i].t1));
cout<<"进入时间:
"<cout<<"车牌号:
"<cout<<"载重量:
"<cout<<"-------------"<}
}
classCarriage:
publicAutomobile
{
public:
Carriage();
~Carriage(){}
voidenter1();
virtualvoidPay()const;
virtualvoidpay();
mutableintnum[N];
};
Carriage:
:
Carriage():
Automobile()
{
for(inti=0;inum[i]=0;
}
voidCarriage:
:
enter1()//输入人数
{
if(enter()!
=1)
{
cout<<"请输入乘坐人数!
"<for(inti=0;iif(num[i]==0)
{
cin>>num[i];
break;
}
}
}
voidCarriage:
:
Pay()const//显示收费及乘坐人数
{
cout<<"收费:
"<<1.5*TL()<<"元"<for(intl=0;lif((location[l].full==false)&&(num[l]!
=0))
{
cout<<"乘坐人数:
"<num[l]=0;
break;
}
}
voidCarriage:
:
pay()
{
for(inti=0;iif(location[i].full==1)
{
cout<<"车辆类型:
"<chartmp[16];
strftime(tmp,sizeof(tmp),"%X",localtime(&location[i].t1));
cout<<"进入时间:
"<cout<<"车牌号:
"<cout<<"乘坐人数:
"<cout<<"-------------"<}
}
classCar:
publicAutomobile
{
public:
Car();
~Car(){}
voidenter1();
virtualvoidPay()const;
virtualvoidpay();
mutablefloatgas[N];
};
Car:
:
Car():
Automobile()
{
for(inti=0;igas[i]=0;
}
voidCar:
:
enter1()//输入排气量
{
if(enter()!
=1)
{
cout<<"请输入排气量:
"<for(inti=0;iif(gas[i]==0)
{
cin>>gas[i];
break;
}
}
}
voidCar:
:
Pay()const//显示收费与排气量
{
cout<<"收费:
"<<1*TL()<<"元"<for(intl=0;lif((location[l].full==false)&&(gas[l]!
=0))
{
cout<<"排气量:
"<gas[l]=0;
break;
}
}
voidCar:
:
pay()
{
for(inti=0;iif(location[i].full==1)
{
cout<<"车辆类型:
"<chartmp[16];
strftime(tmp,sizeof(tmp),"%X",localtime(&location[i].t1));
cout<<"进入时间:
"<cout<<"车牌号:
"<cout<<"排气量:
"<cout<<"-------------"<}
}
intmain()
{
TruckA;
CarriageB;
CarC;
parkD;
fstreamfile("f1.txt",ios:
:
out);
if(!
file)
{
cerr<<"openerror!
"<exit
(1)