还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
东北大学信息科学与工程学院数据结构课程设计报告题目立体化停车场管理课题组长张晓峰课题组成员曹乔家王子骄专业名称计算机科学与技术班级计1307指导教师杨雷2015年1月课程设计任务书题目立体化停车场管理问题描述设停车场有地上和地下两层,统一管理地下停车场采用单入口和单出口地上停车场采用南北方向的双口,每个口都有一个入口和出口停车顺序先地上,后地下地上入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等候通道直接开走设计要求设计停车场模拟管理程序
(1)采用栈、队列和有序表等数据结构
(2)等候车辆的管理
(3)地下、地上停车位的管理
(4)停车计费功能
(5)其它完善性功能 指导教师签字年 月 日目录1课题概述
11.1课题任务
11.2课题原理
11.3相关知识12需求分析
12.1课题调研
12.2用户需求分析13方案设计
23.1总体功能设计
23.2数据结构设计
23.3函数原型设计
33.4主算法设计
43.5用户界面设计44方案实现
44.1开发环境与工具
44.2程序设计关键技术
44.3个人设计实现
44.
3.1张晓峰设计实现
44.
3.2曹乔家设计实现
114.
3.3王子骄设计实现155测试与调试
195.1个人测试
195.
1.1张晓峰测试
195.
1.2曹乔家测试
205.
1.3王子骄测试
215.2组装与系统测试
215.3系统运行226课题总结
246.1课题评价
246.2团队协作
256.3团队协作
256.4个人设计小结
256.
4.1张晓峰设计小结
256.
4.2曹乔家设计小结
256.
4.3王子骄设计小结257附录A课题任务分工26A-1课题程序设计分工26A-2课题报告分工27附录B课题设计文档(光盘)28B-1课程设计报告(电子版)28B-2源程序代码(*.H,*.CPP)28B-3工程与可执行文件)28B-4屏幕演示录像文件(可选)28附录C用户操作手册(可选)28C.1运行环境说明28C.2操作说明281课题概述
1.1课题任务【问题描述】设停车场有地上和地下两层,统一管理地下停车场采用单入口和单出口地上停车场采用南北方向的双口,每个口都有一个入口和出口停车顺序先地上,后地下地上入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等待通道直接开走【设计要求】设计停车场模拟管理程序
(1)采用栈、队列和有序表等数据结构
(2)等候车辆的管理
(3)地下、地上停车位的管理
(4)停车计费功能
(5)其它完善性功能
1.2课题原理本程序主要运用栈来模拟停车场,建立上下两个栈来模拟上下停车场,一列表模拟车场便道,按照从终端输入的数据序列进行模拟管理,把停车的车位信息保存在新建的链表中,每组输入的数据保存车牌号,自动生成车位号和车辆到达时间保存在链表中,对每一组的数据输出信息,包括车辆到达时间,离开时间,及停车费用,用队列保存便车道停靠的车辆,以及车辆的登记和离开,最后的栈是以顺序栈结构实现,队列和链表以链式结构实现
1.3相关知识本实验主要运用链表、栈、队列等数据结构,运用C语言中的指针、数组字符串等相关知识2需求分析
2.1课题调研通过在网上对各个停车场的调查,我们查到停车场有车辆的入场登记,车辆的离开及费用,还有就是车辆的信息保存,每个车辆有车牌号,到达和离开时间及停车费用等等
2.2用户需求分析本程序采用简单的界面,使使用者可以简单可了解软件的使用,界面简单、大方链表保存的车位信息,只需输入车牌号,其他车位信息自动由系统生成,可以免去使用的其他操作,为使用者省事,省力同时本软件的使用达到人性化,方便化,便于使用者的使用3方案设计
3.1总体功能设计本软件要实现对进入停车场的车辆登记功能,车辆离开的收费功能,以及车辆进入便车道的等待及从便车道,还有对车辆信息的查询和对车场进入和离开车辆的统计
3.2数据结构设计
(1)时间的结构体structnow_time{intmday;inthour;intmin;}
(2)车位信息的结构体structinformation{intsetnumber;charnum
[10];structnow_timereach;structnow_timeleave;}set[MAX*2]
(3)便车道队列typedefstruct{char*base;intfront;intrear;}SqQueue
(4)停车场的栈typedefstruct{int*base;int*top;intstacksize;}SqStack
(5)车位信息的链表typedefstructLNode{struct{intstnumber;charnum
[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour;}data;structLNode*next;}LNode*LinkList
3.3函数原型设计()voidCreateList_LLinkListL建立车辆信息链表()StatusinitStack1SqStackS建立地上停车场的栈()StatusinitStack2SqStackS建立地下停车场的栈()StatusPushSqStackSinte车辆入栈即出场()StatusPopSqStackSinte车辆出栈即入场()StatusinitQueueSqQueueQ建立便车道的队列()StatusQueueLengthSqQueueQ计算便车道的车辆数量()Statusstack_emptySqStackS判断停车场是否车满()voidenterstopLinkListclistSqStackScharnumber
[10]int*comeinti车辆进入停车场()StatusleavestopLinkListllistLinkListclistSqStackSSqQueueQint*comeint*leaveinti车辆离开停车场()voidccordLinkListclistintiintsetnumber信息登记()StatusListInsert_LinkLinkListLintiintsetnumber保存车辆到来的信息()voidcopychar*achar*b进行车位号的比对()StatuslListInsert_LinkLinkListllistintiintlsetinttotalhourfloatfeeintdayinthourintmin保存车辆离开的信息()voidshowcomeLinkListlist显示车辆到来时间()voidshowleaveLinkListlist显示车辆离开时间
3.4主算法设计程序运行时,当车辆入场时,车辆信息保存在链表里,并出栈来表示进入一辆车,其车位和时间自动生成,当汽车离场时,输入车位信息,显示时间,费用并把车辆离开时间等保存在离开的链表里,然后通过车位信息的输入,即出场和离场链表表示输出
3.5用户界面设计主界面分别有车辆登记,车辆离场,车场信息,退出系统四个功能,进入车辆登记窗口输入车牌号,自动生成车位信息显示车辆离场窗口进入输入车场及车位信息,即弹出车位信息及停车费用车位信息即显示地上下停车场进出车辆的车辆信息,包括到达时间、离开时间、车位号、车牌号、停车费用等退出系统即退出本软件4方案实现
4.1开发环境与工具本程序在window7下实现和运行,并使用VisualC++
6.0编译的
4.2程序设计关键技术本程序主要用栈来保存车位车位的信息,当车场为空时,栈此时是满的,而当车场满时,栈是空的所以当车辆入场时是出栈,而车辆进场时时出栈此外就是车辆信息的保存在链表里因为是地上下两个停车场,故我们采用两个栈和两个链表来保存其对应的信息,我们还采用了系统时间,减少了使用者的输入
4.3个人设计实现
4.
3.1张晓峰设计实现设计时间车位两个结构体,以及时间函数主函数的设计保存车辆到达与离开信息(利用链表)
(1)时间与车位信息的结构体源程序structnow_time{intmday;inthour;intmin;};structinformation{intsetnumber;charnum
[10];structnow_timereach;structnow_timeleave;}set[MAX*2];
(2)保存车辆到来信息源程序车辆信息,包括车牌号,到达时间储存在链表中,后续查询车场信息中利用此函数StatusListInsert_LinkLinkListLintiintsetnumber{LNode*p*s;intj;p=L;j=0;whilepji-1{p=p-next;++j;}if!p||ji-1returnERROR;s=LinkListmallocsizeofLNode;s-data.stnumber=set[setnumber].setnumber;s-data.reach.hour=set[setnumber].reach.hour;s-data.reach.mday=set[setnumber].reach.mday;s-data.reach.min=set[setnumber].reach.min;copys-data.numset[setnumber].num;s-next=p-next;p-next=s;returnOK;}
(3)保存车辆离开离开时,记录离开时间,算出总时间,为后续计算费用做铺垫同样将信息储存在链表中,在离开停车场函数中利用该函数StatuslListInsert_LinkLinkListllistintiintlsetinttotalhourfloatfeeintdayinthourintmin{LNode*p*s;intj;p=llist;j=0;whilepji-1{p=p-next;++j;}if!p||ji-1returnERROR;s=LinkListmallocsizeofLNode;s-data.fee=fee;s-data.totalhour=totalhour;s-data.stnumber=lset;s-data.leave.mday=day;s-data.leave.hour=hour;s-data.leave.min=min;copys-data.numset[lset].num;s-next=p-next;p-next=s;returnOK;}
(4)时间函数源代码采用系统时间,日小时分钟格式分为入场时间和出场时间voidshowcomeLinkListlist{LNode*p;p=list-next;whilep{printf\n%s\t%d号\t%d日%d时%d分p-data.nump-data.stnumberp-data.reach.mdayp-data.reach.hourp-data.reach.min;p=p-next;}}voidshowleaveLinkListlist{LNode*p;p=list-next;whilep{printf\n%s\t%d号\t%d日%d时%d分p-data.nump-data.stnumberp-data.leave.mdayp-data.leave.hourp-data.leave.min;p=p-next;}}
(5)主函数本程序的关键所在对所有函数进行调用,并实现界面的显示登记,离开,查询,退出四个部分主菜单的建立,界面设计等voidmain{intchoice1choice2choice3waitture=1;inti;intcome1=0;intleave2=0;intcome3=0;intleave4=0;int*p1*p2*p3*p4;p1=come1;p2=leave2;p3=come3;p4=leave4;charnumber
[10];SqStackstack_set1;SqStackstack_set2;SqQueuequeue_turn;initStack1stack_set1;initStack2stack_set2;initQueuequeue_turn;LinkListllist1llist2clist1clist2;CreateList_Lllist1;CreateList_Lclist1;CreateList_Lllist2;CreateList_Lclist2;fori=1;i=MAX+1;i++{set[i].setnumber=i;set[i].num
[1]=#;}systemcolor3B;printf\n\n\n\n\n\n\n\n\n*******************欢迎使用停车场管理系统,按任意键进入主菜单******************;do{getchar;systemcls;printf欢迎使用停车场管理系统\n\n\n;printf主菜单\n\n;printf*1*汽车登记\n;printf*2*汽车离场\n;printf*3*车场信息\n;printf*0*退出系统\n\n;printf***请按提示输入\n;scanf%dchoice1;switchchoice1{case1:systemcls;printf***********************汽车登记******************\n\n\n;if!stack_emptystack_set1//进入停车场{printf\n*请输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclist1stack_set1numberp11;}elseif!stack_emptystack_set2{printf\n*请输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclist2stack_set2numberp32;}else//进入便车道等待{wait=w_totalqueue_turn;printf******您好,当前停车场已满,有%d在等待!*****\n您是否愿意进入便车道等待\nwait;printf*1*愿意等待!\t\t*2*不愿意等待\n;whileture==1{scanf%dchoice3;getchar;switchchoice3{case1:enterlanequeue_turnwait;//汽车进入便车道printf***您好,请进入便车道等待***!;ture=0;break;case2:printf\n***汽车离开!;ture=0;break;default:printf\n***您好,输入错误,请重新输入!;}}ture=1;}break;case2:systemcls;printf***********************汽车离场******************\n\n\n;printf*1*地上车场\n;printf*2*地下车场\n;scanf%dchoice2;switchchoice2{case1:printf****************地上停车场******************\n;leavestopllist1clist1stack_set1queue_turnp1p21;break;case2:printf*****************地下停车场*****************\n;leavestopllist2clist2stack_set2queue_turnp3p42;break;default:printf***您输入的有误,请重新输入;}break;case3:/*今天信息的显示*/systemcls;printf***********************车场信息******************\n\n;ifcome1+come3==0printf**********无车辆到达!\n;else{printf**********到达%d辆车:come1+come3;printf\n**汽车信息*车牌号*\t*车位号*\t*到达时间*\t;printf\n*地上车场*\t;showcomeclist1;printf\n*地下车场*\t;showcomeclist2;printf\n;}ifleave2+leave4==0printf**********无车辆离开!\n;else{printf**********离开%d辆车:leave2+leave4;printf\n**汽车信息**车牌号**\t**车位号**\t**到达时间**\t;printf\n**地上车场:\t;showleavellist1;printf\n**地下车场:\t;showleavellist2;}break;case0:systemcls;printf***************退出停车系统!******************\n;break;default:printf***您输入的有误,请重新输入;}getchar;}whilechoice1!=0;}
4.
3.2曹乔家设计实现设计进入停车场和离开停车场函数,结合之前栈,链表,队列以及数组
(1)进入停车场源代码voidenterstopLinkListclistSqStackScharnumber
[10]int*comeinti{inte;*come=*come+1;PopSe;set[e].setnumber=e;copyset[e].numnumber;structtm*newtime;charam_pm[]=AM;time_tlong_time;timelong_time;newtime=localtimelong_time;set[e].reach.hour=newtime-tm_hour;set[e].reach.mday=newtime-tm_mday;set[e].reach.min=newtime-tm_min;printf\n\n************请核对您的停车信息***************\n;printf*停车牌号*:%s\nset[e].num;ifi==1printf*地上车场*:%d\nset[e].setnumber;ifi==2printf*地下车场*:%d\nset[e].setnumber;printf*到达时间*:%d:%d:%d\nset[e].reach.mdayset[e].reach.hourset[e].reach.min;ccordclist*comeset[e].setnumber;}利用出栈函数来表示车辆进入停车场,等同于车位出停车场利用set数组,存储进入车场的车辆信息包括进入时间,车号等时间函数的时候,显示到达时间,并按先下后上的顺序,选择上下两个停车场,并输出2离开停车场源代码StatusleavestopLinkListllistLinkListclistSqStackSSqQueueQint*comeint*leaveinti{charnumber
[10];inttlset;intj=1;inttotalhour;floatfee;printf***请输入您的停车位号:;do{scanf%dlset;getchar;forinti=0;i=MAX;i++{ifset[lset].num
[1]==#j=0;}ifj==0{printf*****车场并没有停车*******\n;returnERROR;}else{iflsetMAX||lset1{printf*****您输入有误,该车号并不存在!*******\n***请重新输入您的车位号\n;t=1;}else{ifset[lset].num
[1]==#{printf***该车位为空,不能进行离开操作!***\n***请重新输入您的车位号\n;t=1;}else{structtm*newtime;charam_pm[]=AM;time_tlong_time;timelong_time;newtime=localtimelong_time;totalhour=newtime-tm_mday-set[lset].reach.mday*24*60+newtime-tm_hour-set[lset].reach.hour*60+newtime-tm_min-set[lset].reach.min;fee=price*totalhour;printf***********以下是您本次停车的信息************\n;printf*停车牌号*%s\nset[lset].num;printf*停车位号*%d\nset[lset].setnumber;printf*到达时间*%d:%d:%d\nset[lset].reach.mdayset[lset].reach.hourset[lset].reach.min;printf*离开时间*%d:%d:%d\nnewtime-tm_mdaynewtime-tm_hournewtime-tm_min;printf*停车费用*%ffee;printf\n\n\n\t*********谢谢您的光临,祝您一路平安********!\n\n;printf\n\n\n\n\t\t\tmention:pressanykeycontinue!;getchar;systemcls;*leave=*leave+1;lListInsert_Linkllist*leavelsettotalhourfeenewtime-tm_mdaynewtime-tm_hournewtime-tm_min;set[lset].num
[1]=#;PushSlset;if!EmptyQueueQ{DeQueueQ;printf\n***请停在停车便道的客户进入停车场!***\n;ifi==1//判断车场{printf\n***输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclistSnumbercome1;t=0;}ifi==2{printf\n***输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclistSnumbercome2;t=0;}}elset=0;}}}}whilet==1;returnOK;}离开停车场,包括计费的显示,信息存储在链表中其中包含出场费用的计算,按分钟计时实现输入车位号即显示车辆信息(车号,进场时间)离开时,显示所需费用最后利用一个便车道的判空,判断是否有车辆等待入场,如果有,则停在刚刚空出的车位上若没有,返回0;
4.
3.3王子骄设计实现停车场栈的建立,便车道的建立,保存车位信息,地上地下两个车场,判断车场是否已满,便车道上的车辆数目函数
(1)便车道的建立源代码便车道用一队列表示typedefstruct{char*base;intfront;intrear;}SqQueue;
(2)代表停车场的栈建立源代码typedefstruct{int*base;int*top;intstacksize;}SqStack;
(3)保存车位信息在进入停车场时,要把车辆信息保存在链表中,调用此函数可以实现该功能信息包括车牌号以及入场时间typedefstructLNode{struct{intstnumber;charnum
[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour;}data;structLNode*next;}LNode*LinkList;voidcopychar*achar*b{inti;fori=0;a[i]=b[i]!=\0;i++{;}}voidCreateList_LLinkListL{L=LinkListmallocsizeofLNode;L-next=NULL;}voidccordLinkListclistintiintsetnumber{ListInsert_Linkclistisetnumber;}
(4)建立地上地下两个停车场题目要求两个停车场,建立方法相同,最大车位号相等StatusinitStack1SqStackS{inti;S.base=int*mallocMAX*sizeofint;if!S.baseexitOVERFLOW;S.top=S.base;S.stacksize=MAX;fori=1;i=MAX;i++{*S.top++=i;}returnOK;}StatusinitStack2SqStackS{inti;S.base=int*mallocMAX*sizeofint;if!S.baseexitOVERFLOW;S.top=S.base;S.stacksize=MAX;fori=1;i=MAX;i++{*S.top++=i;}returnOK;}
(5)便车道的建立与判断是否已满便车道在后续的离开停车场时调用如车道上有车等待,当车场中有车离开时,进行一次车道判空若非空,则进入车场并停在对应的车位StatusinitQueueSqQueueQ{Q.base=char*malloc100*sizeofchar
[10];if!Q.baseexitOVERFLOW;Q.front=Q.rear=0;returnOK;}Statusstack_emptySqStackS{ifS.top==S.basereturnOK;elsereturnERROR;}
(6)栈的相关函数由于本程序设计的车场,是以满栈的形式即车位号已经将车场占满车辆入栈,相当于车位号出战以实现在车辆进入时,输出车位号信息所以入栈为有车离开车场,出栈为有车进入车场StatusPushSqStackSinte{ifS.top-S.base=S.stacksize{if!S.baseexitOVERFLOW;S.top=S.base+S.stacksize;}*S.top++=e;returnOK;StatusPopSqStackSinte{ifS.top==S.basereturnERROR;e=*--S.top;returnOK;}
(7)计算便车道车辆数目计算队列长度,即车辆数目StatusQueueLengthSqQueueQ{returnQ.rear-Q.front+MAXQSIZE%MAXQSIZE;}Statusw_totalSqQueueQ{returnQueueLengthQ;};
(8)队列判空StatusEnQueueSqQueueQinte{ifQ.rear+1%MAXQSIZE==Q.frontreturnERROR;Q.base[Q.rear]=e;Q.rear=Q.rear+1%MAXQSIZE;returnOK;}
(9)进入车道等待StatusenterlaneSqQueueQintwaitenumber{EnQueueQwaitenumber;returnOK;}设计的函数,均被后续进出停车场所使用,实现对应功能5测试与调试
5.1个人测试
5.
1.1张晓峰测试
5.
1.2曹乔家测试
5.
1.3王子骄测试
5.2组装与系统测试把各个函数通过主函数的调用来实现停车场的各个功能的实现,当进入主函数,再调用各个副函数来实现功能的实现操作名称操作流程操作结果和输出登录系统打开登录页面,按任意键进入主菜单从登录系统到进入主菜单,花费1秒时间基本满足了系统显示要求车辆登记输入车牌号确定即自动生成车位信息用列表的方式显示出了符合条件的记录从服务器端返回信息,花费50毫秒-100毫秒,满足要求汽车离场进入窗口,输入车场及车位信息自动生成车辆的到达离开时间及停车费用退出系统点击退出本软件执行结束,退出系统
5.3系统运行
(1).进入系统
(2).进入主菜单(
3.).进入汽车登记
(4).进入汽车离场系统
(5).进入车位信息6课题总结
6.1课题评价
(1)系统功能总结
①登记功能车辆进入停车场时,对车辆的信息进行登记,包括车牌号,进入停车场的时间,将信息储存在链表中;
②收费功能再离开停车场时,系统将利用时间函数计算出车辆在停车场中的时长,并计算出所需费用,显示在离开信息中;
③查询功能可查询停车场全天的信息,包括场内现有车辆以及离开车辆的信息,包含所有的登记信息以及离开时间费用信息;
(2)程序运行评价本程序说明清晰易懂,使用时按照说明操作即可用栈表示车场,队列存储车辆事项车辆与车号的一一对应但对于界面方面,不够美观,程序也不够实用由于本程序只做了管理方面的实现,所以在采集数据方面还需要手动输入由于开发能力和时间所限,本程序目前还需要在一定程度上进行改进和完善,根据以后运行问题以及学习的新知识,我们可以在功能方面进一步加强
6.2团队协作在此次数据结构课程实验中我们学会了在编程过程中要学会各个成员的合作,以及各个函数的组合调用,在编程中我们要积极向老师请教,各个成员之间的团队合作,积极配合,才能更好地完成一个完整的、成功的程序
6.3下一步工作通过这次编程实验,我们意识到了我们的知识还远远不过,我们还要继续学习我们尚未了解的知识,并且把我们现有的知识要学会灵活运用,熟练的掌握我们现在的知识,并为以后的学习打下坚实的基础我们还要继续学习数据结构的其他知识,为将来的编程打下基础
6.4个人设计小结
6.
4.1张晓峰设计小结经过这些天的编程上机实验,使我们更加深入的了解数据结构这门课程,数据结构不仅仅要求我们具有熟练的知识,还要我们有丰富的实际实验的经验,使我们能更加地熟练运用数据结构这门课来解决我们面对的问题,对我们将来做更大的程序有非常大的帮助还懂得了团队合作的重要性
6.
4.2曹乔家设计小结这次课程设计使我对配合的能力有了更深的了解还有规范的书写代码的格式和程序的调试,更重要的是又能熟练地运用数据结构这门课程学会的知识来解决实际中遇到的问题
6.
4.3王子骄设计小结我在这个编程实验中,充分的了解各个成员的默契配合的重要性结构的健壮性在一再的更改后已经初具容错能力,更具稳定性提高了用户的体验此次课程设计给日后的程序设计积累了宝贵的经验财富,日后的程序设计一定会更加顺畅,完善7附录A课题任务分工A-1课题程序设计分工学号姓名程序设计函数原型、类功能说明20133999张晓峰structnow_timestructinformationStatusListInsert_LinkLinkListLintiintsetnumber()StatuslListInsert_LinkLinkListllistintiintlsetinttotalhourfloatfeeintdayinthourintmin()voidshowcomeLinkListlistvoidshowleaveLinkListlist时间结构体车位信息的结构体保存车辆到来保存车辆离开时间函数主函数20133977曹乔家voidenterstopLinkListclistSqStackScharnumber
[10]int*comeinti()StatusleavestopLinkListllistLinkListclistSqStackSSqQueueQint*comeint*leaveinti()进入停车场离开停车场20133992王子骄typedefstruct()typedefstruct()typedefstructLNode()StatusinitStack1SqStackS()StatusinitStack2SqStackS()StatusinitQueueSqQueueQ()StatusPushSqStackSinte()StatusenterlaneSqQueueQintwaitenumber()便车道建立停车场上下建立保存车位信息入栈出栈计算便车道车辆数A-2课题报告分工章节内容完成人1课题概述
1.1课题任务
1.2课题原理
1.3相关知识张晓峰2需求分析
2.1课题调研
2.2用户需求分析曹乔家3方案设计
3.1总体功能设计
3.2数据结构设计
3.3函数原型设计
3.4主算法设计
3.5用户界面设计张晓峰曹乔家王子骄张晓峰4方案实现
4.1开发环境与工具
4.2程序设计关键技术
4.3个人设计实现
4.
3.
14.
3.
24.
3.3张晓峰张晓峰张晓峰曹乔家王子骄5测试与调试
5.1个人测试
5.
1.
15.
1.
25.
1.
35.2组装与系统测试
5.3系统运行张晓峰曹乔家王子骄王子骄曹乔家6课题总结
6.1课题评价
6.2团队协作
6.3下一步工作
6.4个人设计心得
6.
4.
16.
4.
26.
4.3张晓峰张晓峰曹乔家王子骄附录B课题设计文档(光盘)B-1课程设计报告(电子版)B-2源程序代码(*.H,*.CPP)B-3工程与可执行文件)B-4屏幕演示录像文件(可选)附录C用户操作手册C.1运行环境说明C.2操作说明B-
2.源程序代码#includestdio.h#includestdlib.h#includestring.h#includetime.h#defineOK1#defineNULL0#defineERROR0#defineTURE1#defineFALSE0#defineOVERFLOW-2#defineMAXQSIZE100//最大容量#defineMAX3//车库容量#defineprice
0.5//费用typedefintStatus;structnow_time{intmday;inthour;intmin;};//时间structinformation{intsetnumber;charnum
[10];structnow_timereach;structnow_timeleave;}set[MAX*2];//车位信息typedefstruct{char*base;intfront;intrear;}SqQueue;//便车道typedefstruct{int*base;int*top;intstacksize;}SqStack;//停车场typedefstructLNode{struct{intstnumber;charnum
[10];structnow_timereach;structnow_timeleave;floatfee;inttotalhour;}data;structLNode*next;}LNode*LinkList;//保存车位信息voidcopychar*achar*b{inti;fori=0;a[i]=b[i]!=\0;i++{;}}voidCreateList_LLinkListL{L=LinkListmallocsizeofLNode;L-next=NULL;}StatusListInsert_LinkLinkListLintiintsetnumber{LNode*p*s;intj;p=L;j=0;whilepji-1{p=p-next;++j;}if!p||ji-1returnERROR;s=LinkListmallocsizeofLNode;s-data.stnumber=set[setnumber].setnumber;s-data.reach.hour=set[setnumber].reach.hour;s-data.reach.mday=set[setnumber].reach.mday;s-data.reach.min=set[setnumber].reach.min;copys-data.numset[setnumber].num;s-next=p-next;p-next=s;returnOK;}//保存车辆到来StatuslListInsert_LinkLinkListllistintiintlsetinttotalhourfloatfeeintdayinthourintmin{LNode*p*s;intj;p=llist;j=0;whilepji-1{p=p-next;++j;}if!p||ji-1returnERROR;s=LinkListmallocsizeofLNode;s-data.fee=fee;s-data.totalhour=totalhour;s-data.stnumber=lset;s-data.leave.mday=day;s-data.leave.hour=hour;s-data.leave.min=min;copys-data.numset[lset].num;s-next=p-next;p-next=s;returnOK;}//保存车辆离开voidccordLinkListclistintiintsetnumber{ListInsert_Linkclistisetnumber;}StatusinitStack1SqStackS{inti;S.base=int*mallocMAX*sizeofint;if!S.baseexitOVERFLOW;S.top=S.base;S.stacksize=MAX;fori=1;i=MAX;i++{*S.top++=i;}returnOK;}//建立地上车库StatusinitStack2SqStackS{inti;S.base=int*mallocMAX*sizeofint;if!S.baseexitOVERFLOW;S.top=S.base;S.stacksize=MAX;fori=1;i=MAX;i++{*S.top++=i;}returnOK;}//建立地下车库StatusinitQueueSqQueueQ{Q.base=char*malloc100*sizeofchar
[10];if!Q.baseexitOVERFLOW;Q.front=Q.rear=0;returnOK;}//建立便车道Statusstack_emptySqStackS{ifS.top==S.basereturnOK;elsereturnERROR;}//判断车位是否满StatusPushSqStackSinte{ifS.top-S.base=S.stacksize{if!S.baseexitOVERFLOW;S.top=S.base+S.stacksize;}*S.top++=e;returnOK;}//入栈StatusPopSqStackSinte{ifS.top==S.basereturnERROR;e=*--S.top;returnOK;}//弹栈StatusQueueLengthSqQueueQ{returnQ.rear-Q.front+MAXQSIZE%MAXQSIZE;}Statusw_totalSqQueueQ{returnQueueLengthQ;};//计算在便车道的车辆总数StatusEnQueueSqQueueQinte{ifQ.rear+1%MAXQSIZE==Q.frontreturnERROR;Q.base[Q.rear]=e;Q.rear=Q.rear+1%MAXQSIZE;returnOK;}StatusenterlaneSqQueueQintwaitenumber{EnQueueQwaitenumber;returnOK;}//进入便车道等待voidenterstopLinkListclistSqStackScharnumber
[10]int*comeinti{inte;*come=*come+1;PopSe;set[e].setnumber=e;copyset[e].numnumber;structtm*newtime;charam_pm[]=AM;time_tlong_time;timelong_time;newtime=localtimelong_time;set[e].reach.hour=newtime-tm_hour;set[e].reach.mday=newtime-tm_mday;set[e].reach.min=newtime-tm_min;printf\n\n************请核对您的停车信息***************\n;printf*停车牌号*:%s\nset[e].num;ifi==1printf*地上车场*:%d\nset[e].setnumber;ifi==2printf*地下车场*:%d\nset[e].setnumber;printf*到达时间*:%d:%d:%d\nset[e].reach.mdayset[e].reach.hourset[e].reach.min;ccordclist*comeset[e].setnumber;}//进入停车场StatusDeQueueSqQueueQ{ifQ.front==Q.rearreturnERROR;Q.front=Q.front+1%MAXQSIZE;returnOK;}StatusEmptyQueueSqQueueQ{ifQ.front==Q.rearreturnOK;elsereturnERROR;}//离场StatusleavestopLinkListllistLinkListclistSqStackSSqQueueQint*comeint*leaveinti{charnumber
[10];inttlset;intj=1;inttotalhour;floatfee;printf***请输入您的停车位号:;do{scanf%dlset;getchar;forinti=0;i=MAX;i++{ifset[lset].num
[1]==#j=0;}ifj==0{printf*****车场并没有停车*******\n;returnERROR;}else{iflsetMAX||lset1{printf*****您输入有误,该车号并不存在!*******\n***请重新输入您的车位号\n;t=1;}else{ifset[lset].num
[1]==#{printf***该车位为空,不能进行离开操作!***\n***请重新输入您的车位号\n;t=1;}else{structtm*newtime;charam_pm[]=AM;time_tlong_time;timelong_time;newtime=localtimelong_time;totalhour=newtime-tm_mday-set[lset].reach.mday*24*60+newtime-tm_hour-set[lset].reach.hour*60+newtime-tm_min-set[lset].reach.min;fee=price*totalhour;printf***********以下是您本次停车的信息************\n;printf*停车牌号*%s\nset[lset].num;printf*停车位号*%d\nset[lset].setnumber;printf*到达时间*%d:%d:%d\nset[lset].reach.mdayset[lset].reach.hourset[lset].reach.min;printf*离开时间*%d:%d:%d\nnewtime-tm_mdaynewtime-tm_hournewtime-tm_min;printf*停车费用*%ffee;printf\n\n\n\t*********谢谢您的光临,祝您一路平安********!\n\n;printf\n\n\n\n\t\t\tmention:pressanykeycontinue!;getchar;systemcls;*leave=*leave+1;lListInsert_Linkllist*leavelsettotalhourfeenewtime-tm_mdaynewtime-tm_hournewtime-tm_min;set[lset].num
[1]=#;PushSlset;if!EmptyQueueQ{DeQueueQ;printf\n***请停在停车便道的客户进入停车场!***\n;ifi==1//判断车场{printf\n***输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclistSnumbercome1;t=0;}ifi==2{printf\n***输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclistSnumbercome2;t=0;}}elset=0;}}}}whilet==1;returnOK;}voidshowcomeLinkListlist{LNode*p;p=list-next;whilep{printf\n%s\t%d号\t%d日%d时%d分p-data.nump-data.stnumberp-data.reach.mdayp-data.reach.hourp-data.reach.min;p=p-next;}}//入场时间voidshowleaveLinkListlist{LNode*p;p=list-next;whilep{printf\n%s\t%d号\t%d日%d时%d分p-data.nump-data.stnumberp-data.leave.mdayp-data.leave.hourp-data.leave.min;p=p-next;}}//出场时间//主函数voidmain{intchoice1choice2choice3waitture=1;inti;intcome1=0;intleave2=0;intcome3=0;intleave4=0;int*p1*p2*p3*p4;p1=come1;p2=leave2;p3=come3;p4=leave4;charnumber
[10];SqStackstack_set1;SqStackstack_set2;SqQueuequeue_turn;initStack1stack_set1;initStack2stack_set2;initQueuequeue_turn;LinkListllist1llist2clist1clist2;CreateList_Lllist1;CreateList_Lclist1;CreateList_Lllist2;CreateList_Lclist2;fori=1;i=MAX+1;i++{set[i].setnumber=i;set[i].num
[1]=#;}systemcolor3B;printf\n\n\n\n\n\n\n\n\n*******************欢迎使用停车场管理系统,按任意键进入主菜单******************;do{getchar;systemcls;printf欢迎使用停车场管理系统\n\n\n;printf主菜单\n\n;printf*1*汽车登记\n;printf*2*汽车离场\n;printf*3*车场信息\n;printf*0*退出系统\n\n;printf***请按提示输入\n;scanf%dchoice1;switchchoice1{case1:systemcls;printf***********************汽车登记******************\n\n\n;if!stack_emptystack_set1//进入停车场{printf\n*请输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclist1stack_set1numberp11;}elseif!stack_emptystack_set2{printf\n*请输入您的车牌号例:辽A3475:;scanf%snumber;enterstopclist2stack_set2numberp32;}else//进入便车道等待{wait=w_totalqueue_turn;printf******您好,当前停车场已满,有%d在等待!*****\n您是否愿意进入便车道等待\nwait;printf*1*愿意等待!\t\t*2*不愿意等待\n;whileture==1{scanf%dchoice3;getchar;switchchoice3{case1:enterlanequeue_turnwait;//汽车进入便车道printf***您好,请进入便车道等待***!;ture=0;break;case2:printf\n***汽车离开!;ture=0;break;default:printf\n***您好,输入错误,请重新输入!;}}ture=1;}break;case2:systemcls;printf***********************汽车离场******************\n\n\n;printf*1*地上车场\n;printf*2*地下车场\n;scanf%dchoice2;switchchoice2{case1:printf****************地上停车场******************\n;leavestopllist1clist1stack_set1queue_turnp1p21;break;case2:printf*****************地下停车场*****************\n;leavestopllist2clist2stack_set2queue_turnp3p42;break;default:printf***您输入的有误,请重新输入;}break;case3:/*今天信息的显示*/systemcls;printf***********************车场信息******************\n\n;ifcome1+come3==0printf**********无车辆到达!\n;else{printf**********到达%d辆车:come1+come3;printf\n**汽车信息*车牌号*\t*车位号*\t*到达时间*\t;printf\n*地上车场*\t;showcomeclist1;printf\n*地下车场*\t;showcomeclist2;printf\n;}ifleave2+leave4==0printf**********无车辆离开!\n;else{printf**********离开%d辆车:leave2+leave4;printf\n**汽车信息**车牌号**\t**车位号**\t**到达时间**\t;printf\n**地上车场:\t;showleavellist1;printf\n**地下车场:\t;showleavellist2;}break;case0:systemcls;printf***************退出停车系统!******************\n;break;default:printf***您输入的有误,请重新输入;}getchar;}whilechoice1!=0;}。