《停车场管理系统的设计与实现 数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《停车场管理系统的设计与实现 数据结构课程设计.docx(43页珍藏版)》请在优知文库上搜索。
1、熬据信相裸程被计题目:停车场管理系统班级:网络工程姓名:朱锦涛学号:E31314037完成日期:2015年口月15日一.需求分析1.停在便道;2 .停在车库;3 .从车库移到便道;4 .从便道移到车库;5 .从车库取车;6 .从便道取车;综上所述可知,总共有4种停车方式。1 .若始终停在便道中,须要在进入便道时以浮点数输入进入时间,当选择6取车时,须要输入在便道中停车的时间。在便道中提车时会显示进入的时间,以及是否须要发票,在计算完停车费用后退出主菜单。F面是菜单,请继续选择或者按。退出了迎理到便道停卒,我们将谒诚为无原务!育输入列达利血窗嬲3膘罐盛蹄制!择道库选里行蜀至wis库is系-S12
2、34S606.小便迫取车。.通出系统元祝圭曷是r.车的发.M票统!的羊要1.*t道S6ss本便34的华再到,甫3趋人择.曾S迎选好俣谢s下面是菜注,请维会选择或者按。退出Iis库is系4s1.2.3.4.s.6.*诩-IT2 .若始终停在车库中,会在进入时检测车库是否满,若不满,允许进入,同样提示检入到达时间,当选择5取车时,须要输入在车库停车时间。提车时,会显示进入的时间,以及是否须要发票,在计算完停车费用后退到主菜单。,请继续迷件或者传。退出面是菜单,请继续选择或者按e退出Is)3245车库停车成功!请输入”走进1停在便也停在半从馔咀杉到华从丰虎取车小便货电车5.从丰盛第64便读思穴艘到丰
3、度堤丰,我们将画诚为您服务!青敏到达军库时间,来堡is库系64i1.H出痛1.2.3.4.S.6.理库路鸣fAH-但并,6迩夜道电军入车牌照!牌照为3!王元.生宰的S.00统雷等5.系库4s善本车32契0三三到:你手使次是企.您迎83晶瞽黑叫球呢氧SJ发惘.1要65需3 .若先在车库停车后又转到便道停车,则会先检测车库是否满了,这是这个状况满意的放大前提,之后须要输入到达车库时间,其实这也没什么用,因为最终计算费用时,只会加上转移位宽的20元费用和在便道停的费用。在提车时会显示有在本停车场转移位五的信息。E:CeMgDebugaenj.1.exe-4 .沙电皆理车库5 .从中座即丰6汕便满成本
4、。.退出系统更4到tr努费,车间4S间停时21时道库.的1三到达的便检到牌达.6,.15-!纪的车辆已经移动到便道I谓继续选择或者按。退出请输入86来进行选择.ff1.2 .像在主库3 .从军虚校到便道4.从快道核同丰厚S.从奉库取孥6A1.!。.退出系统F面是菜单,请缠矮选择或者按。退出I6日同路发要H1.-主有高票财!舌的发.M票统某与要s6晶:的tS4要道45车tt本便21三tSB你M到集甫第.11;.迎Bg的霍好保谢普请你择道库更丰来aH库系6在在车出4 .若先在便道上停车,后又到车库停,原理同3,在此不再赘述C迎,更知到壬庠停至!的爱军到达也的时军是2-1的瞪车啤寞是:4321辐入狗
5、送车库的时间I=!喇军辆已经移动到车库!面是菜单.请继续选择或名按。退出1,请继续选仔或者按。退出,6是Js-不示W21?WtS本43s不喙前I8MW发要wt.s三迎B3saf选好保谢?*J*B*TnTrr-*,!王有高票!.一T古的发.2票统用的珞车要32/票发.8要露.一穴行翦至道库道系r6Hii车U出9停停以K=,退S1234S择道库选僵行进道库蓊eH戛道系F爰wh平便出&tr1.*=J畲12345Gg时库车达至!S的位二.概要设计1 .由于栈的特殊出栈入栈依次,所以全部进入车库的车辆必需遵守“先进后出”的依次来停车和提车,由于栈是依次结构,所以在进入车库时须要检测车库是否饱和,在提车时
6、也须要检测车库是否为空;2 .同时,队列须要满意“先进先出”的思想,但此次试脸用的链式结构,一般来说,不存在饱和状况,但在提车时候须要检测便道是否有车。3 .栈的数据域存放进入车库的时间,车牌,队列节点数据域存放进入便道的时间车牌,设置f1.ag标记是否在停车场内更改停车位置,有更改则矍为1,否则为0。4 .假如一辆车车库移到便道,除了更换进入便道的时间外,车牌号从链表的数据里得到,从便道移到车库也类似。另外,更改位置前停放费用不计入最终的费用。5 .除了要输入进入时间,在更换停车位置时须要揄入进入时间,在最终提车时须要输入离开时间,便利计算总费用。三.具体设计1 .主函数设置两个选择:最外层
7、的选择显示是用户自己选择停车还是系统选择停车位置,最里层的选择为主菜单。2 .进入车库(入栈)voidPush(STACKAGarage,f1.oatc_garage_time.intid,intf1.ag);c_garage_time:进入车库时间id;车牌号f1.ag:显示是否更改过停车位矍3 .离开车库(出栈)voidPop(STACK&Garage.f1.oat&cgarage-time.int&id.int&fIag);将后面三个形参设置为引用调用是为了得到数据域里的数据,供主函数运用4 .进入便道voidEnQueue(1.inkOueue&Shortcut,f1.oatc_sho
8、rtcut_time,intidtintf1.ag);5 .离开便道voidDeOueue(1.inkueeShortcut,f1.oat&c_shortcut_time,int&id,int&f1.ag);将后面三个形参设置为引用调用是为了得到数据域里的数据,供主函数运用。(其实在主函数传地址给调用函数也可以,但是不知道为什么没有试脸胜利。)6 .showmenu()和ShOWChOiCeO都是显示菜单函数7 .8 .f1.oatcharge(f1.oatsum_time,intf1.ag,intinvoice);f1.oat函数是计算费用函数,sum_timesh是在最近一个停车位置的停车
9、时间,在主函数已经由离开时间减去进入时间计算好,f1.ag为标记位,为1,须要多支付20元的管理费用,invoice是须要发票的标记,须要为1,则最终费用为原有费用的基础上增加5,同时用一个浮点型的返回值返回给主函数运用,同时主函数用.2f来限制最终只显示小数点最终两位。四.源程序/*2015年11月15日21:21:37本次试验主要熟识栈和队列的存储方式,同时结合依次表和链表学问具体试验要求见代码底部*/incIude# inc1.ude# incIude# incIude# incIudetypedefstructCar车库(f1.oatc_garage_time;到达在车库时间intid
10、;汽车牌照intf1.ag;/标记位置,在车库为1,在便道为0CAR;typedefstructCar1/便道f1.oatc_shortcut_time;到达便道上的时间,以小时为单位(下同)intid;汽车牌照intf1.ag;structCar_1*next;CAR_1;typedefstructStack/依次栈(CAR*base;栈顶指针CAR*top;栈底指针STACK;此次代码形参力口实参之间是引用调用,故不须要传地址typedefstructQueue链式队列(CAR_1*front;队头指针CAR1*rear;/队尾指针I1.inkQueue;f1.oatprice(f1.oa
11、tz);/计算停车费用voidInitStack(STACKSGarage);/初始化车库的依次栈!boo1.Is_empty(STACKGaraage);boo1.Is_fu1.I(STACK&Garaage);voidPush(STACK&Garage,f1.oatc_garage_time,intid,intf1.ag);voidPop(STACK&Garage,f1.oat&c_garage_time,int&id,int&f1.ag);voidInitQueue(1.inkQueue&Shortcut);voidEnQueue(1.inkQueue&Shortcut,f1.oatc_
12、shortcut_time,intid,intf1.ag);voidDeQueue(1.inkQueue&Shortcut,f1.oat&c_shortcut_time,int&id,int&fIag);voidshowmenu();voidshowchoice();f1.oatcharge(f1.oatsum_time,intf1.ag,intinvoice);计费函数intmain()f1.oatsum_time;在停车场的时间f1.oatc_shortcut_time;/到达便道上的时间,以小时为单位(下同)f1.oatr_shortcut_time;离开便道世间f1.oatc_gara
13、ge_time;到达在车库时间f1.oatJgaragejtime;离开车库时间intid;汽车牌照intinvoice;是否须要发票,须要为1,不须要为0srand(time(0);f1.oatr_c_garage_time;intr_id;intr_f1.ag;f1.oatr_c_shortcut_time;intr_id1;intr_fIag1;STACKGarage;InitStack(Garage);初始化车库1.inkQueueShortcut;InitQueue(Shortcut);初始化便道charchoice2;showchoice();scanf(%c,choice2);w
14、hiIe(choice2!=Q&choice2!=q)switch(choice?)casep:case,P:intchoice1;showmenu();scanf(d,&choice1);whiIe(choice1!=0)switch(choice1)(case 1 :Printf(欢迎您到便道停车,我们将竭诚为您服务!n);Printf(请输入到达时间:n);scanf(%f,&c_shortcut_time);Printf(请输入车牌照(阿拉伯数字);scanfid);EnQueue(Shortcut,c_shortcut_time,id,0);Printf(恭喜!牌照为$d的车主在便道停车胜利!,id);break;case 2 :Printf(欢迎您到车库停车,