程序设计停车场管理系统汇总.docx
《程序设计停车场管理系统汇总.docx》由会员分享,可在线阅读,更多相关《程序设计停车场管理系统汇总.docx(27页珍藏版)》请在冰豆网上搜索。
程序设计停车场管理系统汇总
程序设计报告
(2014/2015学年第1学期)
题目:
停车场管理系统
专业
组长学号姓名
组员学号姓名
指导教师
指导单位
日期
成员分工
组长()
代码部分:
取车、查询信息、修改停车费费率模块
实验报告:
测试数据和结果分析、调试过程中的问
题
组员()
代码部分:
管理员登陆模块
实验报告:
概要设计和课程小结
组员()
代码部分:
停车模块的实现
实验报告:
课程内容和要求、需求分析
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
停车场管理系统
一、课题内容和要求
停车场管理是一个计时收费系统,同时也是一个能对车位进行管理的系统,最基本的功能是实现停车、取车、查询以及修改停车费费率等功能。
同时,为了使用的方便和安全的考虑设计了管理员能对密码进行修改的功能。
在停车的功能中采用了文件流的形式,对车位、车牌号、车型都进行了保存,以便于查询功能的实现,除此之外,也是为了能够实现在取车模块中利用输入的车牌号自动计算出停车的费用。
停车位第一个为空的位置,由程序查询自动给出车位号,如果车位已满要给出提示。
取车时,需要根据车辆停泊时间自动计算费用(半小时内以半价计算,超出半小时不足一小时按一小时计算)并显示在屏幕上,可以随时根据车牌查询是否入库。
可以随时根据车位查询该位置上的相关信息。
本系统对不同车型的费率给出了默认值,管理员可以根据实际需要对费率进行修改。
功能要求:
用C/C++设计一个程序实现停车场管理系统,要求如下:
(1)管理人员根据口令进入系统;
(2)管理人员有权限对登陆账号和密码进行修改;
(3)管理车位信息(车位编号,状态)和每小时的收费费率;
(4)停车时录入汽车停泊信息(车牌号,车型,停泊位置,停泊开始时间);如果车位已满要给出提示;
(5)取车时,根据车牌取,如果没有给出提示;需要根据车辆停泊时间自动计算费用并显示在屏幕上。
(6)管理人员可以根据需要随时更改每小时的收费费率。
二、需求分析
停车场管理系统的功能框架图如图1所示。
图1功能框架图
(1)系统主要包括了管理员登陆、停车操作、取车操作、信息查询、费率修改这五大模块,每个模块都用用相应的函数来实现这些功能。
(2)在管理员登陆模块中,设置了三次输入机会,用户名和密码事先用文档存储,供使用者进入系统;若管理员连续输入密码错误超过提示,则系统给出修改密码或者退出系统的提示,这些功能在函数名为loadin()的函数中实现。
(3)管理员登陆模块结束之后便到了系统的主要界面,选择操作1是停车模块。
在选择停车操作之后,系统能够实现“将第一个为空的位置,由程序查询自动给出车位号,如果车位已满要给出提示”这一功能用函数compare()和jugement()共同实现的。
进入停车模块后,还应选择不同的车型进行停车,这一过程会调用putcar()和gettime()函数,用来给出不同车型的费率和调用停车时的系统时间。
(4)通常选择了停车操作之后取车和查询功能才会有意义,所以取车和查询公共主要是使用了campare()函数,调用strcmp()字符串比较函数对输入的车牌号和停车时的车牌号进行比较,若相同,则返回该车位,达到取车和查询的作用。
(5)不同的停车场可以根据需要修改每种车型的车辆对应的费率。
这个功能在修改费率的模块中实现。
(6)根据不同的车型以及其停泊时间收费,间差乘以单价就是最后收费,其中取车时,需要根据车辆停泊时间自动计算费用(半小时内以半价计算,超出半小时不足一小时按一小时计算)并显示在屏幕上。
这个功能需要调用系统时间,因此在整个程序中包含了头文件后(#include)利用结构这种数据类型来实现。
三、概要设计
1.主要结构体
为了实现停车场管理系统的停车、取车、查询、修改功能,主要用一个while循环,通过输入的数字选择相应的操作。
同时为了实现每个模块的功能,引用一些相应的子函数。
下面是主要结构体的流程图:
图2主要结构体流程图
2.主要函数流程图
(1)管理员登陆模块
管理员登陆模块是用函数loadin()来实现的,在loadin()函数中对账号和密码都有三次的输入机会,用变量ai来记录输入的次数,当ai>=3时,进入修改密码的界面。
在修改密码模块了,用strcpy()函数将输入的字符串adpassword1赋值给密码adpassword(adpassword为全局变量,所以才能起到修改的作用)。
修改完成密码后,在loadin()函数中再次调用loadin()函数,这样在修改密码后就能重新回到登陆界面进行登陆,大体程序流程图如下:
图3管理员登陆模块流程图
(2)比较函数compare()
在停车场管理系统的取车、查询模块中都需要用到输入“车牌号判断停车场中是否有该车”这个功能,而compare()函数就是用来实现这个功能的。
其大概思路是,通过输入的字符串与系统储存有的字符串进行比较,如果字符串相等就返回一个0,如果不相等就返回非0,而通过0和非0的控制,便能实现判断的功能,其流程图如下所示:
图4字符串比较函数流程图
(3)搜索空车位函数jugement()
对于停车操作来说,需要在所有停车位中找到第一个空车位,并返回这个车位。
在该系统中,这个功能由函数jugement()来实现。
设int型变量j为车位编号,利用数字position[j]的值是否为1,来判断是车位是否为空(这里是将1视为有车,0为无车)。
图5搜索空车位函数流程图
在这个函数中还要注意:
在用while循环对每个车位进行逐个判断的时候,j一定要小于停车场的总车位。
除此之外,返回第一个空车位表示将要在这个车位进行停车,因此要重新将position[j]的值置为1。
四、源程序代码
#include
#include
#include
#include
usingnamespacestd;
classcar
{
public:
charno[10];
intpos;
doublefee;
voidputcar();
voidtakecar();
voidchangefee();
};
classTime
{
public:
inthour;
intmin;
voidgetime();
};
charadpassword[10]="123456";
charadname[10]="wcx";
inti,poi;
intposition[50]={0};//全局变量
carcarin[50];
Timecatime[50];
doubleFee1=6.0,Fee2=5.0,Fee3=4.0,Fee4=3.0;
intjugement();
intcompare();
voidsearch_no();
voidsearch_position();
voidloadin();
voidmain(){
//---------------------------------------------管理员登陆模块----------------------------
loadin();
//--------------------------------------------------登陆模块结束---------------------
intk=0;
cout<<""<cout<<"请选择:
"
<<"\n\n\t---------------------------"
<<"\n\n\t●1.停车操作"
<<"\n\n\t●2.取车操作"
<<"\n\n\t●3.查询信息"
<<"\n\n\t●4.修改车费"
<<"\n\n\t●5.退出"
<<"\n\n\t---------------------------\n\n";
ofstreamoutfile("车辆信息.txt",ios:
:
app);
if(!
outfile)
{cerr<<"openerror!
"<exit
(1);
}
while(cin>>k)
{
if(k==1)
{
i=jugement();//--------------通过jugement()函数返回第一个空的车位i
cout<<"-------------------------------------------------"<cout<<"\t请输入车牌号:
";
cin>>carin[i].no;//用户输入停在第i个车位的车牌号
carin[i].putcar();
cout<<"请选择:
"
<<"\n\n\t-----------------------------"
<<"\n\n\t●1.停车操作"
<<"\n\n\t●2.取车操作"
<<"\n\n\t●3.查询信息"
<<"\n\n\t●4.修改车费"
<<"\n\n\t●5.退出"
<<"\n\n\t----------------------------\n\n";
stringtime1;
time_tt;
time(&t);
time1=ctime(&t);
cout<outfile<continue;
}
if(k==2)
{
poi=compare();
carin[poi].takecar();
cout<<"请选择:
"
<<"\n\n\t-----------------------------"
<<"\n\n\t●1.停车操作"
<<"\n\n\t●2.取车操作"
<<"\n\n\t●3.查询信息"
<<"\n\n\t●4.修改车费"
<<"\n\n\t●5.退出"
<<"\n\n\t----------------------------\n\n";
continue;
}
if(k==3)
{
intx;
while
(1)
{
cout<<"请输入数字选择需要的操作:
"<cout<<""<cout<<"\n\n\t-------------------------------------"
<<"\n\n\t●1.查询车牌号"
<<"\n\n\t●2.查询车位"
<<"\n\n\t●3.退出查询"
<<"\n\n\t-------------------------------------\n\n";
cin>>x;
if(x==1)
{
search_no();
break;
}
elseif(x==2)
{
search_position();
break;
}
elseif(x==3)
{
break;
}
else
cout<<"\t选择错误,请重新选择:
";
}
cout<<"请选择:
"
<<"\n\n\t-----------------------------"
<<"\n\n\t●1.停车操作"
<<"\n\n\t●2.取车操作"
<<"\n\n\t●3.查询信息"
<<"\n\n\t●4.修改车费"
<<"\n\n\t●5.退出"
<<"\n\n\t----------------------------\n\n";
}
//outfile.close();
if(k==4){
carin[i].changefee();
continue;
}
if(k==5){
exit(0);
}
}
}
//-----------------------------------------------loadin()-----------------------------------
voidloadin(){
charan[10],ap[10];
intai=0;
cout<<"-------------欢迎使用XX停车场管理系统-------------"<while
(1)
{
cout<<""<cout<<"请输入管理员用户名:
";
cin>>an;
if(strcmp(adname,an))
{
cout<<"此用户名不存在!
\n";
ai++;
if(ai==3)
exit(0);
continue;
}
else
{
cout<<"请输入密码:
";
cin>>ap;
if(!
strcmp(adpassword,ap)){
break;}
else
{
cout<<"密码错误!
\n";
ai++;
if(ai==3){
cout<<""<cout<<"密码连续输入错误3次,请重新选择操作:
"<cout<<"--------------------------------"<cout<<"●1.修改密码"<cout<<"●2.退出系统"<cout<<"--------------------------------"<intk;
while(cin>>k){
if(k==1){
cout<<"请输入新的密码,密码不超过10位数:
"<charadpassword1[10];
cin>>adpassword1;
strcpy(adpassword,adpassword1);
cout<<"你的新密码是:
"<cout<loadin();
break;
}
if(k==2){
exit(0);}
if(k!
=1&&k!
=2){
cout<<"输入错误,请重新输入:
";
}
}
return;
}
continue;
}
}
cout<<"登陆成功!
"<}
}
//--------------------------------------------------------------jugement()--------------------
intjugement()//-------------------------判断出第一个空的车位
{
intj=0;
while(position[j]==1&&j<50)
{
j++;
}
cout<<"共有50个停车位,当前可使用停车位:
"<<50-j<cout<<""<cout<<"本停车场收费标准如下:
"<cout<<""<cout<<"货车每小时"<"<cout<<"注:
停车时间小于30分钟的按0.5个小时计算,超过30分钟但不足1小时的按1个小时收费"<if(j<50)
position[j]=1;//当找到第一个空车位时(即position=0时,并且满足车位号j<100的情况下),然后选择该车位停车,
//停车后将position重新置为1,表示该车位现在已经停车了。
(在这种情况下表示找到空车位后就必须停在这个车位上)
returnj;
}
//-------------------------------------------------compare()----------------------------
intcompare()
{
charch[10];
cout<<"\t请输入车牌号:
";
cin>>ch;
for(intk=0;k<50;k++)
{
if(!
strcmp(ch,carin[k].no))//---------------------将输入的车牌号与停车场上的每个位子的车辆进行比较(包括那些没停车的车位)
{
if(position[carin[k].pos-1]==1)//在car:
:
putcar()函数中因为要输出车位号,所以将对象数组carin[k].pos变为了carin[k].pos+1,
//于是用数组position[]找已经停车的车位时要将其处理为carin[k].pos-1
{
return(carin[k].pos-1);
break;
}
}
}
if(k=50)
returnk;
}
//-------------------------------------------car:
:
putcar()---------------------------------
voidcar:
:
putcar()
{
intt;//车辆类型的变量
while
(1)
{
cout<<"请选择车型:
"<cout<<""<cout<<"\n\n\t-------------------------------------------------"
<<"\n\n\t■货车请输入1"
<<"\n\n\t■客车请输入2"
<<"\n\n\t■轿车请输入3"
<<"\n\n\t■其他车辆请输入4"
<<"\n\n\t-------------------------------------------------\n\n";
cin>>t;
if(t==1)
{
carin[i].fee=Fee1;break;
}
elseif(t==2)
{
carin[i].fee=Fee2;break;
}
elseif(t==3)
{
carin[i].fee=Fee3;break;
}
elseif(t==4)
{
carin[i].fee=Fee4;break;
}
cout<<"输入错误!
请重新输入:
\n";
}
if(i==50)
cout<<"对不起,车位已满!
\n";
carin[i].pos=i+1;//-------------------自动输出车位号,数组里0表示第一位,而车位的第一位是1,所以carin[i].pos=i+1;
cout<<"\n\n\t-------------------------------------------------";
cout<<"\n\n\t已成功选择车位!
车位号是:
"<catime[i].getime();
cout<<"\n\n\t现在时间是:
"<"<cout<<"\n\n\t-------------------------------------------------"<}
//-------------------------------------------------car:
:
takecar()----------------
voidcar:
:
takecar()
{
inthour1,min1;
doublecharge;
if(poi<50)
{
position[poi]=0;//-------------------通过取车操作后,重新将该车位设定为空车位
hour1=catime[poi].hour;
min1=catime[poi].min;
catime[poi].getime();
hour1=catime[poi].hour-hour1;
min1=catime[poi].min-min1;
if(min1<30)//计算出停车时间,不足30分钟的按30分钟计算
charge=carin[poi].fee*hour1+carin[poi].fee*0.5;
else
charge=carin[poi].fee*hour1+carin[poi].fee;
cout<<"\t车费为:
"<}
else
cout<<"\t无此车!
\n";
}
//----------------------------------------Time:
:
getime()-----------------------
voidTime:
:
getime()
{
structtm*newtime;
time_tlong_time;//time_t用来定义长整型数long_time
time(&long_time);
newtime=localtime(&long_time);
hour=newtime->tm_hour;
min=newtime->tm_min;
}
//--------------------------------search_no()-----------------------------
voidsearch_no()
{
intpoi=compare();
if(poi<50)
cout<<"\t此车已入库,车位为:
"<else
cout<<"\t此车没有入库。
\n";//根据车牌号查询是否入库
}
//-------------------------------------------search_positon()---------------------