停车场管理系统设计.docx
《停车场管理系统设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统设计.docx(45页珍藏版)》请在冰豆网上搜索。
停车场管理系统设计
面向对象程序设计(C++课程大作业
设计题目:
停车场管理系统设计
院系:
计算机科学与信息工程学院
专业班级:
学号姓名:
指导教师:
一、成员分工1
二、需求分析2
三、总体设计3
四、详细设计6
五、系统测试17
六、总结20
七、参考文献21
成员分工
VC++课程设计,我们小组进行了详
我们小组成员共有三名,分别是,为了能按时圆满的完成这次
细的分工,以确保设计能按时完成。
经过周密的考虑和详细的调查最终确定该停车场管理系统需要以下
几个功能模块:
(1)
需求分析
(2)
界面的设计
(3)
添加功能
(4)
显示功能
(5)
查询功能
(6)
编辑功能
(7)
删除功能
(8)
统计功能
(9)
保存功能
(10)
读取功能
经过小组成员的讨论,并根据个人的特长和具体爱好做如下具体分工
神1具体完成以下模块的设计与实现:
(1)
需求分析
(2)
界面的设计
(3)
添加功能
(4)
保存功能
神2具体完成以下模块的设计与实现:
(1)
显示功能
(2)
查询功能
(3)
显示功能
神3主要具体完成以下模块的设计与实现:
(1)
编辑功能
(2)
删除功能
(3)
读取功能
二需求分析
1.问题描述
定义车辆类,属性有车牌号、颜色、车型(小汽车、小卡、中卡和大卡)、至U达的时间和离开的时间等信息和相关的对属性做操作的行为。
定义一个管理类,完成对停车场的管理。
停车场的具体
要求:
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场
内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,
则排在便道上的第一辆车即可开入;每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
2.基本要求
(1)添加功能:
程序能够添加到达停车场的车辆信息,要求车辆的车牌号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据车牌号、车型等信息对已添加的停车场中的车辆信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:
可显示当前系统中所有车辆的信息,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意车牌号的唯一性。
(5)删除功能:
主要实现对已添加的车辆记录进行删除。
如果当前系统中没有相应的人员记录,贝U提示“记录为空!
”并返回操作。
(6)统计功能:
能统计停车场中车辆的总数、按车型、按到达时间进行统计等。
(7)保存功能:
可将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3.系统运行环境
三总体设计
(1)设计思想
本停车场n个车位,所以可以用数组表示,每辆车用一结构体表示,包括车牌号、颜色、车型、车位号、停车时间和停车标志位(标志是否停车)。
当车入库时,将更改信息,当车出库时,
将信息写入car.dat中。
再次进入该系统时,还用这个该数组,来接受car.dat数据的读入,便
于用户以后的操作,防止停车信息的流失。
此外,由于需要显示所有汽车的停车信息,所以我们又加了一个顾客结构体,一个顾客链表,当存车时,新建用户节点,并使用头插法,插于链表(便于取车时查到用户,补充完整用户的信息),填写用户的相关信息(车牌号,颜色,车型,车位号,车入库时刻)。
当出库时,查找相应节点,补充完整用户信息,包括(用户留言,停车时间总计,花费)。
当退出系统后,将已出库的汽车的车主信息,写入历史文件list.dat中,便于管理员的查询。
将还未取走车的车主的信息存入临时文件temp.dat中,防
止系统关闭后数据信息的丢失,车主取车时找不到车。
同时,还要将成员信息写入临时文件user.dat;
(2)数据结构
结构体Car,保存每个车位的停车信息。
结构体Gustomer,保存每个客户的信息。
结构体User,保存管理员信息。
数组Cars,保存整个停车状况。
数组user;
链表CustList,保存所有客户的信息,包括车已取走,和车未取走的。
(3)程序模块
(1)此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车的数组,用来保存顾客信息的链表,保存管理员信息的结构以及全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用option()函数,出现欢迎用户使用的界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的主界面(包括顾客界面和停车场管理员管理界面)。
当用户选择顾客界面时,跳入到顾客界面,再次界面,用户可以选择存车、取车及返回主页面。
在用户的选择过程中,程序又分别存车,取车函数调用以及退出程序这三个函数模块。
其中,当存车时,调用了显示空闲车位状态的信息函数,并调用了保存car.dat的函数;当取车时,调用显示本
次停车情况以及消费金额的函数,并调用了保存car.dat的函数。
建立user.dat存放管理人
员的信息。
最后,在主界面选择"退出",保存历史文件list.dat和临时文件temp.dat。
当用
户选择车管系统时,调用管理员身份验证函数,从而跳入车管界面,然后相应的功能函数,实现查询所有停车信息。
(2)各模块之间的调用关系以及算法设计
下图是个模块之间的调用关系:
(3)函数设计
intUsertestAdd();
voidSaveUsers(Userusers[6]);
voidloa(Userusers[6]);
注:
在取、存操作后,会自动保存信息到
car.dat中。
在每次退出系统时,会保存list.dat
和temp.dat。
voidFourUserIn(Userusers[6]);
voidLoad(Carcars[6]);
voidShowusers(Userusers[6]);
voidloausers[6],charname[10],charid[10],charpassword[10],intqingjia,intempty);
voidLoadcars[6],charlicense[10],charpchexing[10],charpcolor[2],intpnumber,intptime,intempty);
voidFourCarIn(CarCars[6]);
voidEnterpark(Carcars[6]);
voidShowcars(Carcars[6]);
voidSavecars(Carcars[6]);
boolIsEmpty(Carcars[6]);
voidPrint(charlicense[10],charpchexing[10],charpcolor[2],intpnumber,intptime,float&cost);
voidLeavepark(Carcars[6],charlicense[],charpchexing[],charpcolor[],int&pnumber,int&ptime,float&cost,charnote[100]);
voidCarOutMenu(charlicense[],charpchexing[],charpcolor[],int&pnumber,int&ptime,float&cost,charnote[100]);
voidManage(Carcars[6]);
voidInitCustList(CustList*&cl);
voidCreateCustList(CustList*&cl,char*license,char*pchexing,char*pcolor);
voidGetDate(chartmp[64]);
voidSearchCust(CustList*&cl,char*license,char*pchexing,char*pcolor,floatcost,intpcount);
voidCustomer(Carcars[6]);
voidCustomerNote(charnote[100]);
voidEachGuideInfor(Carc);
四详细设计
实现概要设计中定义的所有数据类型,对主要操作写出实现算法,对主程序和其他模块写出算法,
写出函数的调用关系。
(1)数据类型
结构体Car,保存每个车位的停车信息。
structCar
{
charlicense[8];
intpnumber;
charpcolor[2];
charpchexing[10];
intptime;
intempty;//标志位,有车为1,无车为0};
structCustomer
{
charlicense[10];//车牌号
charpchexing[10];//车的型号
charpcolor[2];//车的颜色
chardate[64];//停车的时刻
intptimecount;//本次停车总时间
floatcost;
charnote[100];//顾客留言
Customer*next;
};
structUser
{
charid[10];//编号
charname[10];//姓名
charpassword[10];//留言
intqingjia;
intempty;//标志位,有车为1,无车为0};
数组Cars,保存整个停车状况。
数组User,保存整个管理人员的信息。
CarCars[PNUMBER];
链表,保存所有客户的信息,包括车已取走,和车未取走的。
typedefstructSnodeCustList;
2)主要操作
1)存车
voidEnterpark(Carcars[6])
{
cout<<"inputyourlicense,chexing,color"<charlicen[10],pche[10],pcolo[2];cin>>licen>>pcolo>>pche;
while(!
licen)
{
cout<<"inputyourlicense,chexing,color"<>licen>>pcolo>>pche;
}
//判断车库是否已经满了
inti;
for(i=0;i<6;i++)
{
if(cars[i].empty==1)
{
cars[i].ptime+=5;
}
else
{
cars[i].pnumber=i+1;
cars[i].ptime=5;
cars[i].empty=1;
strcpy(cars[i].license,licen);
return;//如果使用break,则只能跳出单层循环,
}
}
2)取车
&pnumber,int
voidLeavepark(Carcars[FLOOR][PNUMBER],charlicense[],int&floor,int&ptime,charnote[100])
{
//判断车位是否已空
if(IsEmpty(cars)==1)
{
cout<<"停车场已没有车停放!
请确定您是否停车。
"<return;
}//查找车位
intsign=1;//标志位,车库有该车为1,没有赋值为零,初始值为0inti,j;
while(sign)
{
for(i=0;i{for(j=0;j{
if(strcmp(cars[i][j].license,license)==0)
{
sign=0;
floor=i;
pnumber=j;
ptime=cars[i][j].ptime;
}
}
}
if(sign)
{
cout<<"您刚才输入的车牌号不存在!
"<cout<<"请重新输入:
";
cin>>license;
}
}
if(sign==0)
cout<<"车已找到,请稍等。
。
。
"<strcpy(note,"0000000000");
floor+=1;
pnumber+=1;
//system("cls");
for(i=0;i<100000000;i++);
cars[floor-1][pnumber-1].floor=0;
cars[floor-1][pnumber-1].pnumber=0;
cars[floor-1][pnumber-1].ptime=0;cars[floor-1][pnumber-1].empty=0;
strcpy(cars[floor-1][pnumber-1].license,"");
}
3)添加管理员的信息到User.txt中
voidSaveUsers(Userusers[6])
{
FILE*fp=fopen("user.txt","wb");
if(fp==NULL)
{
cout<<"Cannotopenthisfile"<}
Useruser;
intj=0;
while(j<6)
{
if(users[j].empty==1)
{
strcpy(user.name,users[j].name);
strcpy(user.id,users[j].id);
strcpy(user.password,users[j].password);
user.qingjia=users[j].qingjia;
fwrite(&user,sizeof(user),1,fp);
}
j++;
}
fclose(fp);
}
4)登录界面
intUsertestAdd()
{//simple登陆验证和注册用户功能
UserUserArr[10]={"031010216","神1","031010216"};//默认用户
intcount=0;//统计输入用户名和密码错误次数
inti=0;//遍历变量或找到用户的ID
intk=1;//表示已存在的用户数
while
(1)
{
intn=0;//标识是否匹配,若匹配,则退出外循环
cout<<"请输入您的管理账号"<charid[10];
cin>>id;
cout<<"请输入密码"<charpassword[10];cin>>password;for(i=0;i<10;i++){if(!
strcmp(UserArr[i].id,id)&&!
strcmp(UserArr[i].password,password)){
n=1;
break;
}
}
if(n)
{
break;
}
i=0;
count++;
cout<<"密码或账号错误,";
if(count==2||k==2)
{
cout<<"您今天已累计输错"<cout<<"您是否要注册用户?
(否则您将自动退出系统)"<cout<<"输入数字1表示同意注册,其他则表示不同意条款"<cin>>tip;
if(tip==1)
{
if(k==2)
{
cout<<"很遗憾,系统管理员用户总数达到上限,无法注册,若需注册,请联系管理员"<return0;
}
else{
cout<<"请输入要注册账号"<charid[10];
cin>>id;
strcpy(UserArr[k+1].id,id);
cout<<"请输入您的姓名"<charname[10];
cin>>name;
strcpy(UserArr[k+1].name,name);
cout<<"请输入您的密码"<charpassword[10];
cin>>password;
strcpy(UserArr[k+1].password,password);
cout<<"注册成功,系统正在为您跳转到登陆界面"<intj=0;
while(j<1000000000){j++;}
cout<++k;
}}elsereturn0;
}}
cout<cout<<"
*******************************************
"<
cout<<"欢迎进"<cout<}
5)顾客界面
voidCustomer(Carcars[6]){
cout<<"
停车场
"<
while
(1)
{
cout<<"1存车"<";
inti;chara;cin>>i;
if(i<1||i>3){cout<<"您的操作非法!
!
!
"<if(i==1||i==2)
{switch(i)
{
case1:
system("cls");
Enterpark(cars);
Savecars(cars);
cout<<"退出?
(Y:
是,N:
不)"<cout<<"请输入:
";
cin>>a;
Brea;
case2:
system("cls");
cout<<"
停车场
"<
intpnumber,ptime;
intpcount=0;floatcost;
charnote[100];
cout<<"请输入您的车牌号:
";
charlicen[10],pche[10],pcolo[2];cin>>licen>>pche>>pcolo;
Leavepark(cars,licen,pche,pcolo,pnumber,ptime,cost,note);
CarOutMenu(licen,pche,pcolo,pnumber,ptime,cost,note);system("cls");
//SearchCust(cl,licen,cost,pcount);
Savecars(cars);
break;
}
}
if(a=='Y')
{
system("cls");
break;
}
}
else
{
system("cls");
break;
}
}
}
6)后台程序
voidManage(Carcars[6])
{
cout<<"Welcome!
"<while
(1)
{
cout<<"1初始停车场"<cout<<"2显示所有车辆信息"<cout<<"3输入管理员信息"<cout<<"4显示管理员信息"<cout<<"请选择:
inti;
chara;
cin>>i;
if(i<1||i>4)
{
cout<<"您的操作非法!
!
!
"<continue;
}
if(i==1||i==2||i==3||i==4)
{
switch(i)
{
case1:
{system("cls");
FourCarIn(cars);
cout<<"退出?
(Y:
是,N:
不)"<cout<<"请输入:
";
cin>>a;
break;
}
case2:
{
system("cls");
Showcars(cars);
break;
}
case3:
{
system("cls");
FourUserIn(users);
break;
}
case4:
{
system("cls");
Showusers(users);
break;
}
if(a=='Y')
{
system("cls");break;
}
}
else
{
system("cls");break;
}
}
7)主函数
}
intmain()
{UsertestAdd();
Carcars[6];
intj;
for(j=0;j<6;j++)
{
cars[j].pnumber=0;
cars[j].ptime=0;cars[j].empty=0;
strcpy(cars[j].license,"");}
//CustList*cl;
//InitCustList(cl);
Load(cars);
while
(1)
{
cout<<"1客户界面"<";inti;
cin>>i;
if(i<1||i>3)
{
cout<<"您的操作非法!
!
!
"<continue;
}system("cls");switch(i)
{
case1:
Customer(cars);break;
case2:
Manage(cars);break;
case3:
exit(-1);
}
}
}
五系统测试
1)登陆界面
2)客户界面
3)存车
4)取车
5)车管界面
一回
息
场丰员貝of馬暮・wole<_s4fi请
六总结
这次通过课程设计首先加深啦对《对C++程序设计》这一课程所学内容进一步理解和巩固,特别是对
顺序进栈以及链式队列的结构还有保存程序到文件着几块,一次停车场系统的设计开发主要用的就是这几种,在进行系统开发的准备阶段,也就是进行需求分析阶段,对系统功能进行分析,并设计合理
的模块化结构,提高了对问题分析和设计的能力。
在进行系统开发的阶段能运用合理的控制流程编写
清晰高效的程序,也训练了C++语言程序的调试能力,能将一个小型各级组织系统联调通过,