1.1设计要求
1.1.1问题描述
设计一个停车场管理系统,模拟停车场的运作,此程序具有以下功能: ① 汽车到达,则显示汽车在停车场内或便道上的停车位置。
② 若车离去,则显示汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不
收费)。 1.1.2基本要求
①要求以栈模拟停车场,以队列模拟车场外地便道,按照从终端读入的输入数据序列进行模拟管理。
② 求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息。汽车牌照号码以及
离去的时刻。
③ 要求栈以顺序结构实现,队列以链表实现。 1.1.3测试数据
自行设计一组在停车场上停车的数据和便道上停车的数据。 1.1.4实现提示
该停车场能容纳车辆的数量,便道上的停车数量。车辆到达对应栈的入栈操作,车辆离开对应栈的出栈操作。
1.2设计代码及注释
#include struct passLot//便道队列数据结构 { int num;//车位号 time_t timep;//停车时间 int carNum;//停车的车牌号码 }; struct potLot//停车场栈数据结构 { int num; time_t timep; int carNum; }; void printLine()//打印下划线(作为主界面图表的框架) { cout<<\"\\\___________________________________\"< cout< class erroEmp//停车位空时异常类 {public: }; erroEmp() { system(\"color 3c\"); } void ex() { cout<<\"停车场位为空!\"< system(\"color 3c\"); } void ex() { cout< class parkingLot//停车场类 { public: void passLG()//便道管理函数 { try { if(flag==20) throw erroFull();//如果停车位已满,则抛出车位慢得异常情况 system(\"cls\"); printStar(); cout<<\"\\\\您进入了便道停车界面\"< cout<<\"\\停车场数据已清空。\"< passLot* pa;//便道停车位指针 potLot* po;//停车场停车位指针 flag=0;//用来记忆队列(便道)中停车的数量 rear=front=0;//初始化队列头尾 base=0; top=base;//初始化栈头尾 int i=0;//初始化停车场和便道空间以及车位号 for(;i po=(potLot*)malloc(sizeof(potLot)); b[i]=po; b[i]->num=i+1; b[i]->carNum=0; \"< } cin>>a[rear]->carNum; } catch(erroFull &err) { err.ex(); } a[rear]->timep=time(NULL); cout< 上层界面!!\"< try { if(top==20) throw erroFull(); system(\"cls\"); printStar(); cout<<\"\\\\您进入了停车场停车界面\"< cin>>b[top]->carNum; } catch(erroFull &err) { err.ex(); } b[top]->timep=time(NULL); cout< 层界面!!\"< int choice=-1; for(;;) if(top==20&&flag==20) throw erroFull(); { system(\"cls\"); printStar(); cout<<\"\\\\欢迎进入停车场\"< int feep(time_t* tmp)//费用计算 { int gap=0,m=0,hour=0,min=0,sec=0;//设置数据用来计算时间间隔,停车时、分、秒。 local=localtime(tmp);//将存储的时间转化为当地时间日历 < min=local->tm_min; sec=local->tm_sec; now=time(NULL); cout<<\"\当前时间为:\"< < case 1:potLG();break; case 2:passLG();break; case 3:break; default:system(\"color 3c\");cout< _sleep(1000);break; switch(choice) printLine(); cout<<\"\\\|1.停车场停车\\\ |\"< nowp=localtime(&now); hour = nowp->tm_hour-hour;//求出停车的时间间隔 min= nowp->tm_min-min; sec= nowp->tm_sec-sec; if(sec<0){min--;sec=60+sec;}//进行秒、分钟、秒时间转换 } void passOut()//便道离开 { try } void potOut()//停车场离开 { try { } catch(erroEmp &err) { err.ex(); } cout<<\"\该车应缴纳停车费为:\"< cout< cout<<\"\车牌号码:\"<carNum<<\"\车位:便道\"<num fee=feep(&a[front]->timep)*0; { if(flag==0) throw erroEmp(); int fee=0; system(\"cls\"); printStar(); cout<<\"\\\\您进入了便道离开界面\"< return gap; gap= hour+m;//停车应收费的时间(单位:小时) if(min<0) {hour--;min=60+min;} cout<<\"\汽车共停了\"<< hour<<\"小时\"<< min<<\"分\"<< sec<<\"秒\"< system(\"cls\"); printStar(); cout<<\"\\\\您进入了停车场离开界面\"< void depart()//汽车离开 { int choice=-1; for(;;) { system(\"cls\"); if(top==0&&flag==0) throw erroEmp(); } catch(erroEmp &err) { err.ex(); } fee=feep(&b[top]->timep)*8;//计费公式,每小时8元 cout<<\"\该车应缴纳停车费为:\"< cout< system(\"color 3a\"); printStar(); cout<<\"\\\\欢迎下次光临停车场\"< cout<<\"\\\|1.停车场离开\\\ |\"< void searchNum()//查询车牌号码 { } void searchPot() { int potCar,nn; cout<<\"\\操作说明:按照停车类型加位置来输入所要查找的车位信息\\n\\如:停车场10号位,int numCar,i=0,flag=1; cin>>numCar; for(;i cout< cout< cin>>choice; { case 1:potOut();break; case 2:passOut();break; case 3:break; default:system(\"color 3c\");cout< _sleep(1000);break; switch(choice) return; 即输入110。停车场三号位,103。便道场5号位,205\"< cin>>potCar; if((potCar<121&&potCar>100)||(potCar<221&&potCar>200)){ if(potCar/100==1){ if(b[nn]->carNum==0) cout<<\"\\你说查询的车位没有停车\"< if(potCar/100==2){ } else cout<<\"\\您所输入的数字不正确!\"< void search()//号码查询 { int choice=-1; for(;;) { system(\"cls\"); if(top==0&&flag==0) throw erroEmp(); system(\"color 3a\"); printStar(); cout<<\"\\\\您进入了号码查询界面\"< cin>>choice; { case 1:searchNum();break; case 2:searchPot();break; case 3:break; default:system(\"color 3c\");cout< cout<<\"\\\|1.根据车牌号码查询\\ |\"< } _sleep(1000);break; if(choice==3)break; } return; private: void main()//程序运行主函数 { parkingLot a; int choice=-1; for(;;)//使主界面能够自动初始化和重复使用 { system(\"cls\"); system(\"color 3a\");//设为主背景为湖蓝色 printStar(); cout<<\"\\\\欢迎进入停车场管理系统\"< time_t now; //设置时间型变量 };//停车场类结束 time_t t; //时间结构或者对象 t=time(NULL); //获取当前系统的日历时间 cout<<\"\\\\\\\"< cout<<\"\\\|1.汽车到达\\\ |\"< try{ cout<<\"\\请输入你的选项:\"; switch(choice) } 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< _sleep(2000);;break; return; } 1.3测试结果以及运行情况 1.3.1运行主界面 1.3.2汽车到达界面 1.3.2.1停车场停车测试界面 测试数据(按输入的先后排序) 表1 序号 1 2 2002 12 2012 3 2003 13 2013 4 2004 14 2014 5 2005 15 2015 6 2006 16 2016 7 2007 17 2017 8 2008 18 2018 9 2009 19 2019 10 2010 20 2020 牌照2001 号 序号 11 牌照2011 号 输入情况界面(部分) 异常情况处理,当停车场已经满20位时,便抛出异常(界面显示为红色,并停止工作) 1.3.2.2便车道停车测试 测试数据 表2 序号 1 2 3002 12 3012 3 3003 13 3013 4 3004 14 3014 5 3005 15 3015 6 3006 16 3016 7 3007 17 3017 8 3008 18 3018 9 3009 19 3019 10 3010 20 3020 牌照3001 号 序号 11 牌照3011 号 输入界面(部分) 异常情况处理,当停车场已经满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改进 真正的停车场不可能只按栈或者队列的顺序来停车,故此系统具有一定的局限性。应根据停车场的具体情况对停车储存方式进行灵活地改善。 代码也比较冗余,希望能够不断简化。 因篇幅问题不能全部显示,请点此查看更多更全内容