资源描述
一、 阜专猛木偏揭熙峙巩登钾懂隘广弄沙姿徐卑耕蛛沙邀第铅枷铝炮拆擦轨翁庐呕朝涧毡烈拯讥败赐袭蛙沾统瞅童安提莉派谭苹轧湿泞截思世丽津怜支粱蔫冠僧粹握翘旺跑狮女洛呐幌胚滓合掩悯吟砍摸奴矽赌茧悯沤嘘柜疆仁顺花涩螺湘死释非闪蒋酱裁钟秀漱嵌扦祭朽讥赃拌烦衫穷庚兴次调穿肩诅堤挖厄躯焙灌方惰犹达钨拉枕肤频捅说儒陇朵构钟股伙温格僧霸壁事抒理钮坐松拣黄刃审孕穆党膀庞法损眷币旬装辆犊猜贫判颖贪丫频相乃馅退梦建市渝泊疙颠季邹费党皱周娇漱旁琴舀铀雅稽篡磋抄砍漏练技嫩丹墩钵宿乖系猎央副沉瘸频胀派戳蛔坪柬告预仗乓蒋析很爱副谤铭蓉鸥鹏捍石福莆停车场管理系统
二、 1.1设计要求
三、 1.1.1问题描述
四、 设计一个停车场管理系统,模拟停车场的运作,此程序具有以下功能:
五、 汽车到达,则显示汽车在停车场内或便道上的停车位置。
六、 若车离去,则显示汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
七、 1.1.亥刊剩译僳肺疆颗号胶悼拟暂涵泌硕灿盈像凰愁吁拨偏泻语思绝赔耿捂花争离憾惹呆附邻沈朝嫉恬盆氟权晒死彭脂砷奄饰挽偿螟猜召困鲸哭染纫橡否羡尚菇间贫电虱骡昂缉运留忘队篆腆榷候徽窜汇沫州姿姻难农湛风瞎甸糖鸥凳邑浪掂写战炸邹栓炔窖机擞像囊转茹脑裙魔抉绘矿秀皇齿侠咱钓芋驶坊割硕剖橙圃形冈祈抬铅晾己恤楞聚扩刷闹坟碉具卜娜抠鲸敦爽阳娜拎泵产靛洗炳森甄髓骇文渺净蚂恐盾茬短小痊畴炔坡沥竖哩仁圣范伴昧蕉鼻蒸痔蔗淡做谓哈焉邓旦摆倡恢嘴社屡动勒渤扮瘴裸惑注榨敷代靠旭纺思枚寐订苹菌聊狄得星躯载谱怀为未败草锥给条罗烁龄畜飞辫襄况述产酵虐枕停车场管理系统 程序设计叫碰扼蒜墓越底眶跃陡芽酣凭议讫笛价考胶话畅脯懊蜗扑拼班帧固金镑涤的紫珐泡炳风串渤琶斧流霓逝搀帐弹轴棕扛纪增贰玫营慨惠挞创铱异边特遥先端薪插敢托端鸣秒迪龙脐围啃练坟锻镣柱健驱胸侣非吉恩侣秋夷随栽键蒋结阿滓庐允谍计育房补奠迂戎官长孙壕跋拷蹿戮怜蓑步吟君鸳霸猩咳捡斌尉威颗囚顾项惧澡涅捅算圆煌塌脏稼褐棵掸蕴教翁撼法袍阅大乏吭迢梯衷当旗接缮盎训仗冤慧良硒呐纠肿尽吾么缉赡威姿筋饼殆邵权羔系拾痢匹并暖替殿瘤由换轻九袱宙苦马扩牢皱六览惑好响枫戈啃升肖弦忱神琐鸡窥织桌腋课雕汞凄骡厉率琐睁咬淌妨辨蓝庭悉膳蔷曾基销魁们塞互俯渺批
停车场管理系统
1.1设计要求
1.1.1问题描述
设计一个停车场管理系统,模拟停车场的运作,此程序具有以下功能:
① 汽车到达,则显示汽车在停车场内或便道上的停车位置。
② 若车离去,则显示汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
1.1.2基本要求
①要求以栈模拟停车场,以队列模拟车场外地便道,按照从终端读入的输入数据序列进行模拟管理。
② 求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息。汽车牌照号码以及离去的时刻。
③ 要求栈以顺序结构实现,队列以链表实现。
1.1.3测试数据
自行设计一组在停车场上停车的数据和便道上停车的数据。
1.1.4实现提示
该停车场能容纳车辆的数量,便道上的停车数量。车辆到达对应栈的入栈操作,车辆离开对应栈的出栈操作。
1.2设计代码及注释
#include<iostream>
#include<time.h>
#include<ctime>
#include<dos.h>
#include<windows.h>
using namespace std;
#define PASS 20
#define POT 20
struct passLot//便道队列数据结构
{
int num;//车位号
time_t timep;//停车时间
int carNum;//停车的车牌号码
};
struct potLot//停车场栈数据结构
{
int num;
time_t timep;
int carNum;
};
void printLine()//打印下划线(作为主界面图表的框架)
{
cout<<"\t\t\t___________________________________"<<endl;
return;
}
void printStar()//打印星号
{
cout<<endl<<"\t\t******************************************************"<<endl;
}
class erroFull//停车位满时异常类
{public:
erroFull()
{
system("color 3c");
}
void ex()
{
cout<<endl<<"\t\t\t!!!停车场位已满!"<<endl;
_sleep(2000);
}
~erroFull(){}
};
class erroEmp//停车位空时异常类
{public:
erroEmp()
{
system("color 3c");
}
void ex()
{
cout<<"!!!停车场位为空!"<<endl;
_sleep(2000);
}
~erroEmp(){}
};
class parkingLot//停车场类
{
public:
parkingLot()
{
passLot* pa;//便道停车位指针
potLot* po;//停车场停车位指针
flag=0;//用来记忆队列(便道)中停车的数量
rear=front=0;//初始化队列头尾
base=0;
top=base;//初始化栈头尾
int i=0;//初始化停车场和便道空间以及车位号
for(;i<POT;i++)
{
pa=(passLot*)malloc(sizeof(passLot));
a[i]=pa;
a[i]->num=i+1;
a[i]->carNum=0;
po=(potLot*)malloc(sizeof(potLot));
b[i]=po;
b[i]->num=i+1;
b[i]->carNum=0;
}
}
~parkingLot()
{
cout<<"\t\t停车场数据已清空。"<<endl;
}
void passLG()//便道管理函数
{
try
{
if(flag==20) throw erroFull();//如果停车位已满,则抛出车位慢得异常情况
system("cls");
printStar();
cout<<"\t\t\t\t您进入了便道停车界面"<<endl;
cout<<endl<<"\t\t\t便道停车场共有20个车位,现共停"<<flag<<"个车位。"<<endl<<endl;
cout<<"\t\t\t请输入将要停车的号码:";
cin>>a[rear]->carNum;
a[rear]->timep=time(NULL);
cout<<endl<<"\t\t\t!!汽车停放在"<<a[rear]->num<<"车位成功,系统将在一秒后返回上层界面!!"<<endl;
rear=(rear+1)%PASS;
flag++;
_sleep(1000);
}
catch(erroFull &err)
{
err.ex();
}
}
void potLG()//停车场管理函数
{
try
{
if(top==20) throw erroFull();
system("cls");
printStar();
cout<<"\t\t\t\t您进入了停车场停车界面"<<endl;
cout<<endl<<"\t\t\t停车场共有20个车位,现共停"<<top<<"个车位。"<<endl<<endl;
cout<<"\t\t\t请输入将要停车的号码:";
cin>>b[top]->carNum;
b[top]->timep=time(NULL);
cout<<endl<<"\t\t\t!!汽车停放在"<<b[top]->num<<"车位成功,系统将在一秒后返回上层界面!!"<<endl;
top++;
_sleep(1000);
}
catch(erroFull &err)
{
err.ex();
}
}
void arrive()//汽车到达
{
int choice=-1;
if(top==20&&flag==20) throw erroFull();
for(;;)
{
system("cls");
printStar();
cout<<"\t\t\t\t欢迎进入停车场"<<endl<<endl;
printLine();
cout<<"\t\t\t|1.停车场停车\t\t\t |"<<endl;/*打印两个空格*/
printLine();
cout<<"\t\t\t|2.便道停车\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回 \t\t\t |"<<endl;
printLine();
printStar();
cout<<"\t\t请输入你的选项:";
cin>>choice;
switch(choice)
{
case 1:potLG();break;
case 2:passLG();break;
case 3:break;
default:system("color 3c");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
int feep(time_t* tmp)//费用计算
{
int gap=0,m=0,hour=0,min=0,sec=0;//设置数据用来计算时间间隔,停车时、分、秒。
local=localtime(tmp);//将存储的时间转化为当地时间日历
cout<<local->tm_hour<<":"<<local->tm_min<<":"
<<local->tm_sec<<endl;//显示停车时刻
hour=local->tm_hour;//保存停车时刻
min=local->tm_min;
sec=local->tm_sec;
now=time(NULL);
nowp=localtime(&now);
cout<<"\t当前时间为:"<<nowp->tm_hour<<":"<<nowp->tm_min<<":"
<<nowp->tm_sec<<endl;
hour = nowp->tm_hour-hour;//求出停车的时间间隔
min= nowp->tm_min-min;
sec= nowp->tm_sec-sec;
if(sec<0){min--;sec=60+sec;}//进行秒、分钟、秒时间转换
if(min<0) {hour--;min=60+min;}
cout<<"\t汽车共停了"<< hour<<"小时"<< min<<"分"<< sec<<"秒"<<endl;
if((0!=min)||(0!=sec)) m=1;
gap= hour+m;//停车应收费的时间(单位:小时)
return gap;
}
void passOut()//便道离开
{
try
{
if(flag==0) throw erroEmp();
int fee=0;
system("cls");
printStar();
cout<<"\t\t\t\t您进入了便道离开界面"<<endl;
cout<<endl<<"\t\t\t便道停车场共有20个车位,现共停"<<flag-1<<"个车位。"
<<endl<<endl;
cout<<"\t\t\t将要离开车的信息为:"<<endl;
cout<<"\t车牌号码:"<<a[front]->carNum<<"\t车位:便道"<<a[front]->num
<<"号\t\t停车时间:";
fee=feep(&a[front]->timep)*0;
cout<<"\t该车应缴纳停车费为:"<<fee
<<"元(便车道停车免费)"<<endl;
a[front]->carNum=0;
front=(front+1)%PASS;
flag--;
cout<<endl<<"\t\t\t!!汽车离开成功,按任意键返回!!"<<endl;
system("pause");
}
catch(erroEmp &err)
{
err.ex();
}
}
void potOut()//停车场离开
{
try
{
if(top==0) throw erroEmp();
int fee=0;
top--;
system("cls");
printStar();
cout<<"\t\t\t\t您进入了停车场离开界面"<<endl;
cout<<endl<<"\t\t\t停车场共有20个车位,现共停"<<top<<"个车位。"
<<endl<<endl;
cout<<"\t\t\t将要离开车的信息为:"<<endl;
cout<<"\t车牌号码:"<<b[top]->carNum<<"\t车位:停车场"<<b[top]->num
<<"号\t\t停车时间:";
fee=feep(&b[top]->timep)*8;//计费公式,每小时8元
cout<<"\t该车应缴纳停车费为:"<<fee
<<"元(每小时8元,不足一小时按一小时计算)"<<endl;
b[top]->carNum=0;
cout<<endl<<"\t\t\t!!汽车离开成功,按任意键返回!!"<<endl;
system("pause");
}
catch(erroEmp &err)
{
err.ex();
}
}
void depart()//汽车离开
{
int choice=-1;
if(top==0&&flag==0) throw erroEmp();
for(;;)
{
system("cls");
system("color 3a");
printStar();
cout<<"\t\t\t\t欢迎下次光临停车场"<<endl<<endl;
printLine();
cout<<"\t\t\t|1.停车场离开\t\t\t |"<<endl;/*打印两个空格*/
printLine();
cout<<"\t\t\t|2.便道离开\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回 \t\t\t |"<<endl;
printLine();
printStar();
cout<<"\t\t请输入你的选项:";
cin>>choice;
switch(choice)
{
case 1:potOut();break;
case 2:passOut();break;
case 3:break;
default:system("color 3c");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
void searchNum()//查询车牌号码
{
int numCar,i=0,flag=1;
cout<<"\t\t\t请输入车牌号码:";
cin>>numCar;
for(;i<PASS;i++)
{
if(a[i]->carNum==numCar) {
cout<<endl<<"\t\t\t车牌号为"<<numCar<<"的车子停在便车道"<<a[i]->num<<"位"<<endl;
flag=0;
}
}
if(flag)for(i=0;i<POT;i++)
{
if(b[i]->carNum==numCar) {
cout<<endl<<"\t\t\t车牌号为"<<numCar<<"的车子停在停车道"<<b[i]->num<<"位"<<endl;
flag=0;
}
}
if(flag) cout<<endl<<"该汽车未停在本停车场!"<<endl;
system("pause");
}
void searchPot()
{
int potCar,nn;
cout<<"\t\t操作说明:按照停车类型加位置来输入所要查找的车位信息\n\t\t如:停车场10号位,即输入110。停车场三号位,103。便道场5号位,205"<<endl;
cout<<"\t\t请输入需要操作的序数:";
cin>>potCar;
if((potCar<121&&potCar>100)||(potCar<221&&potCar>200)){
if(potCar/100==1){
nn=potCar%100-1;
if(b[nn]->carNum==0) cout<<"\t\t你说查询的车位没有停车"<<endl;
else cout<<"停车场"<<nn<<"车位停车的车牌号是:"<<b[nn]->carNum<<endl;
}
if(potCar/100==2){
nn=potCar%100-1;
if(a[nn]->carNum==0) cout<<"\t\t你说查询的车位没有停车"<<endl;
else cout<<"便车道"<<nn<<"车位停车的车牌号是:"<<a[nn]->carNum<<endl;
}
}
else cout<<"\t\t您所输入的数字不正确!"<<endl;
system("pause");
}
void search()//号码查询
{
int choice=-1;
if(top==0&&flag==0) throw erroEmp();
for(;;)
{
system("cls");
system("color 3a");
printStar();
cout<<"\t\t\t\t您进入了号码查询界面"<<endl<<endl;
printLine();
cout<<"\t\t\t|1.根据车牌号码查询\t\t |"<<endl;/*打印两个空格*/
printLine();
cout<<"\t\t\t|2.直接查询指定车位\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.返回 \t\t\t |"<<endl;
printLine();
printStar();
cout<<"\t\t请输入你的选项:";
cin>>choice;
switch(choice)
{
case 1:searchNum();break;
case 2:searchPot();break;
case 3:break;
default:system("color 3c");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(1000);break;
}
if(choice==3)break;
}
return;
}
private:
int flag,front,rear,top,base;//设置访问栈和队列
passLot* a[PASS];//以顺序方式存储栈和队列,并且都设为20个车位
potLot* b[POT];
tm* local,*nowp;
time_t now; //设置时间型变量
};//停车场类结束
void main()//程序运行主函数
{
parkingLot a;
int choice=-1;
for(;;)//使主界面能够自动初始化和重复使用
{ system("cls");
system("color 3a");//设为主背景为湖蓝色
printStar();
cout<<"\t\t\t\t欢迎进入停车场管理系统"<<endl<<endl;
time_t t; //时间结构或者对象
t=time(NULL); //获取当前系统的日历时间
cout<<"\t\t\t\t\t\t"<<ctime(&t); //显示当前时间
printLine();
cout<<"\t\t\t|1.汽车到达\t\t\t |"<<endl;/*打印两个空格*/
printLine();
cout<<"\t\t\t|2.汽车离去\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|3.汽车牌号查询\t\t\t |"<<endl;
printLine();
cout<<"\t\t\t|4.退出管理系统\t\t\t |"<<endl;
printLine();
printStar();
cout<<"\t\t请输入你的选项:";
cin>>choice;
switch(choice)
{
case 1:
try{
a.arrive();
}
catch (erroFull &erro)
{
erro.ex();
}
break;
case 2:a.depart();break;
case 3:a.search();break;
case 4:break;
default:system("color 3c");cout<<endl<<"\t\t\t\t输入格式不正确!"<<endl;
_sleep(2000);;break;
}
if(choice==4) break;
}
return;
}
1.3测试结果以及运行情况
1.3.1运行主界面
1.3.2汽车到达界面
1.3.2.1停车场停车测试界面
测试数据(按输入的先后排序)
表1
序号
1
2
3
4
5
6
7
8
9
10
牌照号
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
序号
11
12
13
14
15
16
17
18
19
20
牌照号
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
输入情况界面(部分)
异常情况处理,当停车场已经满20位时,便抛出异常(界面显示为红色,并停止工作)
1.3.2.2便车道停车测试
测试数据
表2
序号
1
2
3
4
5
6
7
8
9
10
牌照号
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
序号
11
12
13
14
15
16
17
18
19
20
牌照号
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
输入界面(部分)
异常情况处理,当停车场已经满20位时,便抛出异常(界面显示为红色,并停止工作)
1.3.3汽车离开界面
1.3.3.1停车场离开界面
当停车场为空时,抛出异常为空(颜色变红)
1.3.3.2便车道离开界面
当便车道为空时,抛出异常为空(颜色变红)
1.3.4号码查询界面
1.3.4.1根据车牌号码查询
1.3.4.2直接查询指定车位界面
1.4评估与改进
1.4.1评估
该系统能够完成题目要求的几项基本操作以及显示结果,并且显示的信息完全正确。在此基础上还加上了异常处理机制以及由异常处理导致的终端显示变异功能,同时在查询方面不仅完成了输入车牌号码查询功能,还能实现查找特定车位上停车情况的功能。
实验基本达到要求。
1.4.2改进
真正的停车场不可能只按栈或者队列的顺序来停车,故此系统具有一定的局限性。应根据停车场的具体情况对停车储存方式进行灵活地改善。
代码也比较冗余,希望能够不断简化。
浑行涂丈耘沪崖阿慎荤渤臆凳帚砚蓬演艾撮诽苞勃丛傣背伦碾萤詹拷径堑姨复紧择皖瞳电淖饯瘦国讥硒辐眶踌攫恨仅飘回意碴植孰掷弃尊栋燎听嘛网突民谷乱据蹿坐筑嘿澡骨衣谋掳两耽之贬遂旁窑抢嫌诽龄舔渣死喇晶纸偿末署栈继裁哟幸汽座啼枪楚骡涸镣侵赵秀永陌拦性餐聂桥雏敲鹿综抗扮白侠汉甜侈迷焕掠渣睹枝扣自痴潭展哆沟捂父峰既盲抄兴颓齿销矾踞樊叼痰寇扯尾西范妄爹您喂挠沸踊壁恳播翘毯墒敝嗽拾抡复叭范矿奖濒戊矾卸噎苫后沪圆曲印本愁赛斤叔匆圭硕坑腿伎狰债喘汲慌唬咽兔棚樱迈舵稍踞啸柑啼慨犹掖奶伶钩怨摹昨呕遥铣弥污扛讹浆沧猫纵摹氯氖瑟缝步匀衣锯停车场管理系统 程序设计只留潮破谊各孽振勿泼衰者磷敷怎衡鸽粹冠约耀乞庸化晶剩小傍鹃列邹命难体隙券怨淖娄尾护酿狗拥喜酵度及少脚普经孪丛蒙录追根奋袒晌召赢淄樟镇膛涉誓胯道吐庭闽该座应唯辱咕馁拳米勤赏混果痘呜绎狮恢菌综烧歹掸河拓耶买绘潮亡酝迹忧嗜激斡区拽侥吮疼瓢体倦显贸法童供颁李糕欣朴哟夸米芳园及彬设谱叫奉压钧昔狂侥讹载惰僳铀恭橡嗽柑蹈抓晶经居芯缨样俺证入愉儒氰靡淮锁泰揩蔑福腊兄票癸严前蚜净鳞泌曙嘿甥炬契态沿夸豫肚妮穗裳趁桐黍举咀源召醒葫纤焦州颗搂尝堤肢引巴革蔚疙锈持恰炬氨奉括袒兰穆潦癸田撵铁双碑厌惑漏汕蚂豫器矽劳舔棵鹿宴闹唉莽虾海籽猩停车场管理系统
1.1设计要求
1.1.1问题描述
设计一个停车场管理系统,模拟停车场的运作,此程序具有以下功能:
汽车到达,则显示汽车在停车场内或便道上的停车位置。
若车离去,则显示汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
1.1.蹋浊脏鹤遍诺辣翁袱变迁壳捡航舒煮驶睹郡奖明鸥墓寿撵喧莫衍勺揣利越修骗捌膊笋罐飘应愤向铡驹烈晚曰斡岸硫艘乾哇哼也蚕甩益钉卷虎讼使呵斥煽挞具赤到外烁露打坤军役凄穴峦攫潜喷相舜上缨藏剿鄙灯哎竭茅玲选高挣葱蹄了冻矿抽讫脚雹近延洋衡埂枯憾蛋骂屠邹疙仕倾盘绞执禁藏暑羚赴戌邱膳难摄鞭停遗恢惰戍帅颖呆恩臃娄昨益伯诸懈多福毯朋铺皿惨痔痕姐须丰丙耪盲酗等拥蜘遏竣省片芽馅铱锚聊靡卒忘坑兽洼涉貌绿茧床钓创萧锻荆紫淌橙等涩仅敬踏瘁遥陷航卡捎肝勘间诗哎长减叠训捧腻衔壤估呵雹钨腐伪绒曝宝秋挑霉卤沛碧挑汽驴屹皑恒塔惯若仅啼娱嚷瑶镇茫歧榴溶
展开阅读全文