还剩95页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计题目停车场管理系统《数据结构》课程设计停车场管理系统
1、课程设计目的
1、通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固
2、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程
6、通话课程设计,培养分析问题、解决实际问题的能力
二、课程设计内容1问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序编制一程序模拟该停车场的管理2基本要求要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间3实现提示汽车的模拟输入信息格式可以是(到达/离去,汽车牌照号码,到达/离去的时刻)例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去整个程序可以在输入信息为(‘E’,0,0)时结束本题可用栈和队列来实现
三、概要设计
1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了
2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了
3、主要模块
①此停车场管理系统,主要分为以下若干模块首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用在主函数中首先调用option函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数最后,从调鼐的这四个函数中回到主函数结束整个程序的运行
②在以上各个模块中,出现的调用的函数为voidInitStackSeqStackCar*s;intInitQueueLinkQueueCar*Q;option;intArrivalSeqStackCar*EnterLinkQueueCar*W;voidLeaveSeqStackCar*EnterSeqStackCar*TempLinkQueueCar*W;voidPRINTCarNode*p;voidListSeqStackCarSLinkQueueCarW;voidList1SeqStackCar*S;voidList2LinkQueueCar*W;
4、模块间关系
四、调试分析
(1)调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便本程序的调试运行,总体上情况良好,但中间也出现了一些小问题其中比较有代表性的主要问题有当停车场已经达到最大容量,但仍有车辆进入停车场的时候,运行界面上没有出现或者说出现了但又跳掉了“停车场已满,该车辆需在便道上等待!”的提示信息我们小组成员经过反复商量讨论,并且在查阅了多种资料后,在那一个printf语句后加了一个getch,此时,程序运行结果就符合要求了本程序中我使用的是VC6++进行的编译和运行!
(2)测试结果的分析与讨论
①欢迎界面
②车辆到达
③车辆离开
④车辆信息(车场)
⑤车辆信息(便道)
五、用户手册这个程序用来实现对停车场内车辆的管理,整个操作界面为中文,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作这个程序操作简单,对于车牌号,只需输入车牌号上的数字就行,而且对于进出停车场的时间,也简化了操作,只需输入当时的时刻就行,没有具体到小时和分钟,但也许这也是该程序不足之处所在而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入n或N退出该运行程序至于使用过程中的更具体的问题,可以参照该报告书中调试分析那一项的屏幕截图,整个程序的运行界面大致就如上述屏幕截图的内容
六、附录
1、源程序代码#includestdio.h#includestdlib.h#includestring.h#defineMAX2/*车库容量*/#defineprice3/*每车每时刻费用*/typedefstructnode{intnum;intreachtime;intleavetime;}CarNode;/*车辆信息结点*/typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;/*模拟车站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;/*模拟通道*//*---------------------------------------------------------------------------*//*函数声明部分*/voidInitStackSeqStackCar*;/*初始化栈*/intInitQueueLinkQueueCar*;/*初始化便道*/intArrivalSeqStackCar*LinkQueueCar*;/*车辆到达*/voidLeaveSeqStackCar*SeqStackCar*LinkQueueCar*;/*车辆离开*/voidListSeqStackCarLinkQueueCar;/*显示存车信息*/voidPRINTCarNode*p;/*---------------------------------------------------------------------------*/voidoption{inti;charchoice;gotoxy00;fori=1;i=240;i++systemgraftabl936;printf\004;gotoxy338;printf停车场管理系统;gotoxy2512;printf小组成员:周晓宇;gotoxy3316;printf班级ZK073032;gotoxy120;printf\n********************************************************************************;printf\t
1.车辆到达--
12.车辆离开--
23.车辆信息--
34.退出程序--4;printf\n********************************************************************************;printf\n\n\n\t是否进入该系统(y/n)?;choice=getchar;ifchoice==N||choice==nexit0;}voidmain{SeqStackCarEnterTemp;LinkQueueCarWait;intch;systemgraftabl936;option;InitStackEnter;/*初始化车站*/InitStackTemp;/*初始化让路的临时栈*/InitQueueWait;/*初始化通道*/while1{clrscr;printf\n\n\t\t\t
1.车辆到达请选择1;printf\n\n\t\t\t
2.车辆离开请选择2;printf\n\n\t\t\t
3.车辆信息请选择3;printf\n\n\t\t\t
4.退出程序请选择4;printf\n\n\t\t\t现在请选择以上信息:;while1{scanf%dch;printf\n;ifch=1ch=4break;elseprintf\n\t\t\t错误!请再次做出选择!\n\n\t\t\t;}switchch{case1:ArrivalEnterWait;break;/*车辆到达*/case2:LeaveEnterTempWait;break;/*车辆离开*/case3:ListEnterWait;break;/*列表打印信息*/case4:exit0;/*退出主程序*/default:break;}}}/*------------------------------------------------------------------------------*/voidInitStackSeqStackCar*s/*初始化栈*/{inti;s-top=0;fori=0;i=MAX;i++s-stack[s-top]=NULL;}intInitQueueLinkQueueCar*Q/*初始化便道*/{Q-head=QueueNode*mallocsizeofQueueNode;ifQ-head!=NULL{Q-head-next=NULL;Q-rear=Q-head;return1;}elsereturn-1;}voidPRINTCarNode*p/*打印出站车的信息*/{intA1A2;printf\n\t\t\t请输入离开时间:;scanf%dp-leavetime;printf\n\t\t\t离开车辆的车牌号:%dp-num;printf\n\n\t\t\t离开车辆到达时间:%dp-reachtime;printf\n\n\t\t\t离开车辆离开时间:%dp-leavetime;A1=p-reachtime;A2=p-leavetime;printf\n\n\t\t\t停车场管理费用:%dA2-A1*price;freep;}intArrivalSeqStackCar*EnterLinkQueueCar*W/*车辆到达*/{CarNode*p;QueueNode*t;p=CarNode*mallocsizeofCarNode;flushall;printf\t\t\t请输入到达车辆车牌号:;scanf%dp-num;ifEnter-topMAX/*车场未满,车进车场*/{Enter-top++;printf\n\t\t\t该车辆在停车场的位置是:%d\nEnter-top;printf\n\t\t\t请输入该车辆到达的时间:;scanf%dp-reachtime;Enter-stack[Enter-top]=p;return1;}else/*车场已满,车进便道*/{printf\n\t\t\t停车场已满该车辆需在便道上等待!;getch;t=QueueNode*mallocsizeofQueueNode;t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return1;}}voidLeaveSeqStackCar*EnterSeqStackCar*TempLinkQueueCar*W/*车辆离开*/{intiroom;CarNode*p*t;QueueNode*q;/*判断车场内是否有车*/ifEnter-top0/*有车*/{while1/*输入离开车辆的信息*/{printf\t\t\t停车场里停放的车辆总数:%dEnter-top;printf\n\n\t\t\t请输入要离开车辆的位置:;scanf%droom;ifroom=1room=Enter-topbreak;}whileEnter-toproom/*车辆离开*/{Temp-top++;Temp-stack[Temp-top]=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;}p=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;whileTemp-top=1{Enter-top++;Enter-stack[Enter-top]=Temp-stack[Temp-top];Temp-stack[Temp-top]=NULL;Temp-top--;}PRINTp;/*判断通道上是否有车及车站是否已满*/ifW-head!=W-rearEnter-topMAX/*便道的车辆进入车场*/{q=W-head-next;t=q-data;Enter-top++;printf\n\n\t\t\t便道的%d号车进入车场第%d位置.t-numEnter-top;printf\n\n\t\t\t请输入现在的时间:;scanf%dt-reachtime;W-head-next=q-next;ifq==W-rearW-rear=W-head;Enter-stack[Enter-top]=t;freeq;}elseprintf\n\n\t\t\t便道里没有车.\n;}elseprintf\n\n\t\t\t车场里没有车.;/*没车*/}voidList1SeqStackCar*S/*列表显示车场信息*/{inti;ifS-top0/*判断车站内是否有车*/{printf\n\t\t\t车场:;printf\n\n\t\t\t位置到达时间车牌号\n;fori=1;i=S-top;i++{printf%26di;printf%6dS-stack[i]-reachtime;printf%10dS-stack[i]-num;printf\n;}}elseprintf\n\t\t\t车场里没有车;}voidList2LinkQueueCar*W/*列表显示便道信息*/{QueueNode*p;p=W-head-next;ifW-head!=W-rear/*判断通道上是否有车*/{printf\n\t\t\t等待车辆的号码为:;whilep!=NULL{printf%-10dp-data-num;p=p-next;}printf\n;}elseprintf\n\t\t\t便道里没有车.;}voidListSeqStackCarSLinkQueueCarW{intflagtag;flag=1;whileflag{printf\n\t\t\t请选择1|2|3:;printf\n\n\t\t\t
1.车场\n\n\t\t\t
2.便道\n\n\t\t\t
3.返回\n\n\t\t\t;while1{scanf%dtag;iftag=1||tag=3break;elseprintf\n\t\t\t请选择1|2|3:;}switchtag{case1:List1S;break;/*列表显示车场信息*/case2:List2W;break;/*列表显示便道信息*/case3:flag=0;break;default:break;}}}
2、设计体会通过这一周的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握;同时,通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也培养了我的团队合作能力在这次对停车场管理系统的开发过程中,我们小组成员互相合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫在这次课程设计中,使得我很好地了解了在开发程序过程中合作的重要性在这周课程设计中,我们小组所开发的停车场管理系统,基本上可以完成每一项功能汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现但是,该程序也有不足的地方主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,我们就车牌号定义为了整型,这个与现实是有些不符的还有一个可以改进的地方就是记录车辆进入停车场以及离开停车场的时间,应该精确到小时以及分钟的,可是在程序中,为了简便起见,我们只是设置成了一个时刻,所以,在这方面还是有待改进的改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天还有一个很重要的问题,对于停车场内可以停放的最多车辆数,为了测试数据的方便,我在程序中,定为了2,在实际使用中,可以改变程度开头的宏定义以增加停车场的容量总之,在这周的课程设计中,我以及我们这组的收获还是挺大的,不仅对于专业课有了更好的认识,而且在合作的过程中更加了解了团队精神的重要性主要参考资料谭浩强.C语言程序设计(第三版)[M].北京清华大学出版社,2005廖雷、罗代忠.C语言程序设计基础实验教程[M].北京高等教育出版社,2005谭浩强.C程序设计解题与上机指导第三版[M].北京清华大学出版社,2005廖雷等.C语言程序设计基础[M].北京高等教育出版社,2004谭浩强,张基温,唐永炎.C语言程序设计教程. 北京:高等教育出版社,2003可供选择源程序代码一/*******************************停车场管理器*************************************/#includestdio.h#includestdlib.h#includestring.h#includeconio.h/********************************************************************************/#defineMAXSTACKSIZE2/*车库容量*/#defineprice
0.1/*每车每分钟费用*/typedefstructtime{inthour;intmin;}Time;/*时间结点*/typedefstruct{charnum
[10];Timereach;Timeleave;}CarNode;/*车辆信息结点*/typedefstruct{CarNode*base;CarNode*top;intstacksize;}SqStackCar;/*模拟车站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstruct{QueueNode*front;QueueNode*rear;}LinkQueueCar;/*模拟通道*/intQueueEmptyLinkQueueCarQ/*便道判空函数*/{ifQ.front==Q.rearreturn1;elsereturn0;}/********************************************************************************/voidInitStackSqStackCar*s/*初始化栈*/{s-base=CarNode*mallocMAXSTACKSIZE*sizeofCarNode;if!s-baseexit0;/*分配失败*/s-top=s-base;s-stacksize=MAXSTACKSIZE;}intPushSqStackCar*sCarNode*e/*进站函数*/{ifs-top-s-base=s-stacksizereturn0;else*s-top++=*e;return1;}intPopSqStackCar*sCarNode*e/*出站函数*/{ifs-top==s-basereturn0;*e=*--s-top;return1;}intStackEmptySqStackCars/*判空函数*/{ifs.base==s.topreturn1;elsereturn0;}intInitQueueLinkQueueCar*Q/*初始化便道*/{Q-front=Q-rear=QueueNode*mallocsizeofQueueNode;if!Q-frontexit0;Q-front-next=NULL;return1;}/**************************************************************/intEnQueueLinkQueueCar*QCarNode*e/*便道插入函数*/{QueueNode*p;p=QueueNode*mallocsizeofQueueNode;if!pexit0;p-data=e;p-next=NULL;Q-rear-next=p;Q-rear=p;return1;}intDeQueueLinkQueueCar*QCarNode*e/*便道删除函数*/{QueueNode*p;ifQ-front==Q-rearreturn0;p=Q-front-next;e=p-data;Q-front-next=p-next;ifQ-rear==pQ-rear=Q-front;freep;return1;}/********************************************************************************/intArriveSqStackCar*InLinkQueueCar*Wait/*车辆到达函数*/{CarNode*i;QueueNode*w;i=CarNode*mallocsizeofCarNode;flushall;printfInputthecarnumber:;getsi-num;ifIn-top-In-baseMAXSTACKSIZE/*车场未满,车辆进栈*/{printf\nThetimethecararrive00:00:;scanf%d:%di-reach.houri-reach.min;PushIni;printf\nCarinsuccess!!;sleep1;return1;}else/*停车场已满,车进便道*/{w=QueueNode*mallocsizeofQueueNode;w-data=i;w-next=NULL;Wait-rear-next=w;Wait-rear=w;printfThePARTisfullcarmustwaitintheroad!;sleep1;return1;}return0;}/********************************************************************************/intDepartureSqStackCar*InSqStackCar*tempLinkQueueCar*Wait/*车辆离开函数*/{intflag=0a1a2b1b2money;CarNode*p*t;QueueNode*q;p=CarNode*mallocsizeofCarNode;flushall;printfInputtheoutcarnumber:;getsp-num;while!StackEmpty*In{t=CarNode*mallocsizeofCarNode;PopInt;ifstrcmpp-numt-num==0/*比较车场中有无这辆车,有即出站*/{printfInputthetimethecarout00:00:;scanf%d:%dp-leave.hourp-leave.min;printfThe;printf%sp-num;printfCaroutthepart!;a1=p-leave.hour;a2=t-reach.hour;b1=p-leave.min;b2=t-reach.min;money=a1-a2+24%24*60+b1-b2+60%60*price;/*计算车辆需要的费用*/printf\nThetimethecararrive:%d:%dt-reach.hourt-reach.min;printf\nThetimethecarleave:%d:%dp-leave.hourp-leave.min;printf\nNeed:%dyuanmoney;flag=1;getch;freet;break;}elsePushtempt;}/*while*/if!flag{printfNothiscar!!;getch;}while!StackEmpty*temp{Poptempp;PushInp;}freep;ifflagWait-front!=Wait-rear/*车站中有空位,便道有车,车入站*/{q=QueueNode*mallocsizeofQueueNode;q=Wait-front-next;t=q-data;ifq!=NULL{PushInt;printf\nThe;printf%st-num;printfcarinpart!;printf\nInputthetimethecararrive00:00:;scanf%d:%dt-reach.hourt-leave.min;}Wait-front-next=q-next;ifq==Wait-rearWait-rear=Wait-front;freeq;}return1;}/********************************************************************************/voidPrintSqStackCar*InSqStackCar*TempLinkQueueCar*Wait/*打印函数*/{intc=0;intcount=1;CarNode*p*t;QueueNode*q;q=QueueNode*mallocsizeofQueueNode;p=CarNode*mallocsizeofCarNode;t=CarNode*mallocsizeofCarNode;while1c!=3{clrscr;gotoxy110;printf
1.Printtheroad!;gotoxy111;printf
2.Printthepart!;gotoxy112;printf
3.return.;do{printf\nInputyourchoice:;c=getche;printf\n;}whilec!=1c!=2c!=3;ifc==2/*打印停车场*/{printfThecarinthepart!\n;count=1;while!StackEmpty*In{PopInt;PushTempt;}while!StackEmpty*Temp{PopTempt;printfThe;printf%dcount;printfcarnumberis:;count++;putst-num;PushInt;}printfPressanykeytocontinue...;getch;}ifc==1/*打印便道*/{printfThecarintheroad!\n;count=1;q=Wait-front-next;ifWait-front!=Wait-rear/**/{whileq!=NULL{p=q-data;printfThe;printf%dcount;printfCarnumberis:;putsp-num;q=q-next;count++;}}elseprintf\nNocarintheroad.;printfPressanykeytocontinue...;getch;}}}/***************************主程序***********************************************/intArriveSqStackCar*InLinkQueueCar*Wait;intDepartureSqStackCar*InSqStackCar*tempLinkQueueCar*Wait;voidPrintSqStackCar*InSqStackCar*tempLinkQueueCar*Wait;voidinitialization;charreadcommand;voidinterpretcharcmd;main{charcmd;SqStackCarparttemp;LinkQueueCarroad;InitStackpart;InitStacktemp;InitQueueroad;printfPressanykeytocontinue......;getch;while1{initialization;/*初始化界面*/cmd=readcommand;/*读取停车场状况*/clrscr;switchcmd{casea:Arrivepartroad;break;caseA:Arrivepartroad;break;cased:Departureparttemproad;break;caseD:Departureparttemproad;break;casep:Printparttemproad;break;caseP:Printparttemproad;break;casee:printfPressanytocontinue...;getch;exit0;break;caseE:printfPressanytocontinue...;getch;exit0;break;default:printfERROR!;break;}}}/********************************************************************************/voidinitialization/*初始函数*/{inti;clrscr;gotoxy00;fori=1;i=240;i++printf\1;gotoxy158;printfTHISISACARPARTMANAGESYSYTEM!;gotoxy1512;printfNAME:GAOHE.;gotoxy1513;printfNUM:
200812010205.;gotoxy1514;printfGRADE:
2008.;gotoxy1515;printfCLASS:INTERNET02;gotoxy120;printf\n********************************************************************************;printf
1.CarArrive--A
2.CarDeparture--D
3.PrintCar--P
4.Exit--E;printf\n********************************************************************************;printfInputCDPEchoose!!\n;}charreadcommand/*选择函数*/{charcmd;do{printfInputyourchoice:;cmd=getche;printf\n;}whilecmd!=acmd!=Acmd!=dcmd!=Dcmd!=pcmd!=Pcmd!=Ecmd!=e;returncmd;}二#includeiostream#includefstreamusingnamespacestd;#defineMAX_SIZE2//停车场能够容纳的车的数量#defineFARE5//表示停车场的收费为每小时FARE元intCountForStack=0;//此全局变量用来计数堆栈现有的车数intCountForQueue=0;//此全局变量用来计数队列现有的车数typedefstruct//这个节点用来保存每辆车的信息{charCondition;//用来表示“到达”或者“离开”的状态intArriveTime;//用来记录到达时间,默认为-1,说明还没有到达intLeaveTime;//用来记录离开时间,默认为-1,说明还没有离开intLicense;//记录车牌号}CarNode;typedefstruct//栈的定义{CarNode*base;//栈底指针指向0CarNode*top;//栈顶指针,如果指向0,说明栈为空intstacksize;//栈的容量大小}CarStack;typedefstructQNode//队列节点的定义{charCondition;//用来表示“到达”或者“离开”的状态intArriveTime;//用来记录到达时间,默认为-1,说明还没有到达intLeaveTime;//用来记录离开时间,默认为-1,说明还没有离开intLicense;//记录车牌号QNode*next;//指向下一个节点的指针}QNode;typedefstruct//队列的定义{QNode*front;//队头指针QNode*rear;//队尾指针}Queue;boolInitStackCarStackS//此函数用来初始化栈{S.base=CarNode*mallocMAX_SIZE*sizeofCarNode;if!S.base{cout内存分配失败!endl;returnfalse;//说明内存分配失败,返回false}S.top=S.base;S.stacksize=MAX_SIZE;returntrue;}boolInitQueueQueueQ//此函数用来初始化队列{Q.front=QNode*mallocsizeofQNode;if!Q.front{cout内存分配失败!endl;returnfalse;}Q.rear=Q.front;Q.front-next=0;//下一个节点指空returntrue;}boolEnQueueQueueQQNodeqnode//此函数用来入队一个节点{QNode*p=QNode*mallocsizeofQNode;if!p{cout内存分配失败!endl;returnfalse;}p-ArriveTime=qnode.ArriveTime;p-Condition=qnode.Condition;p-LeaveTime=qnode.LeaveTime;p-License=qnode.License;p-next=0;Q.rear-next=p;Q.rear=p;returntrue;}boolDeQueueQueueQQNodet//此函数用来出队{ifQ.front==Q.rear{cout队列为空!endl;returnfalse;}QNode*p=Q.front-next;t.ArriveTime=p-ArriveTime;t.Condition=p-Condition;t.LeaveTime=p-LeaveTime;t.License=p-License;Q.front-next=p-next;ifQ.rear==p//如果P是指向最后一个出队的元素Q.rear=Q.front;freep;returntrue;}voidInitCarNodeCarNodeCcharconditionintarrivetimeintleavetimeintlicense//本函数用来初始化一个CarNode节点{C.ArriveTime=arrivetime;C.Condition=condition;C.LeaveTime=leavetime;C.License=license;}boolPushCarStackSCarNodecar//此函数用来入栈一个CarNode节点{ifS.top-S.base=S.stacksize{cout此栈已满,不能压入新的信息endl;returnfalse;}*S.top.ArriveTime=car.ArriveTime;*S.top.Condition=car.Condition;*S.top.LeaveTime=car.LeaveTime;*S.top.License=car.License;++S.top;//栈顶指针上移returntrue;}boolPopCarStackSCarNodet//此函数用来弹出栈内元素{ifS.top==S.base{cout栈空,不能执行出栈操作!endl;returnfalse;}--S.top;//栈顶指针下移t.ArriveTime=*S.top.ArriveTime;t.Condition=*S.top.Condition;t.LeaveTime=*S.top.LeaveTime;t.License=*S.top.License;returntrue;}boolIsStackFullCarStackS//此函数用来判断堆栈是否已满{ifS.top-S.base=S.stacksizereturntrue;elsereturnfalse;}boolIsStackEmputyCarStackS//此函数用来判断堆栈是否为空{ifS.top==S.basereturntrue;elsereturnfalse;}boolIsQueueEmputyQueueQ//此函数用来判断队列是否为空{ifQ.front==Q.rearreturntrue;elsereturnfalse;}boolSearchInStackCarStackSinta{booltag=false;if!IsStackEmputyS{CarNode*p=S.top-1;whilep!=S.base{if*p.License==atag=true;--p;}if*p.License==atag=true;}returntag;}boolSearchInQueueQueueQinta//a表示要查找的车牌号{booltag=false;if!IsQueueEmputyQ//如果队列非空{QNode*p=Q.front-next;whilep!=Q.rear{if*p.License==atag=true;}//退出此while循环时p指向最后一个元素if*p.License==atag=true;}returntag;}voidInCarCarStackSQueueQinta1inta2//此函数用来表示进入车辆参数a1用来表示到达时间,参数a2表示车牌号码{ifSearchInStackSa2{cout车号a2已经存在于停车场内,输入有误endl;return;}ifSearchInQueueQa2{cout车号a2已经存在于通道内,输入有误endl;return;}ifIsStackFullS//如果堆栈已满,说明停车场已满,需要停车在通道{QNodeqnode;qnode.ArriveTime=-1;//在通道时间不收费,所以不计时qnode.Condition=A;qnode.LeaveTime=-1;//定义为-1,说明还没有开始离开qnode.License=a2;EnQueueQqnode;//停在通道上++CountForQueue;cout车号qnode.License停在通道的第CountForQueue号位置endl;}else{CarNodecarnode;carnode.ArriveTime=a1;carnode.Condition=A;carnode.LeaveTime=-1;carnode.License=a2;PushScarnode;++CountForStack;cout车号carnode.License到达时间carnode.ArriveTime停在停车场的第CountForStack号位置endl;}}voidOutCarCarStackSQueueQinta1inta2//此函数用来出车,参数a1用来表示离开时间,参数a2表示车牌号码{ifSearchInQueueQa2{cout车号a2存在于通道内,还未进入停车场,不能离开endl;return;}if!SearchInStackSa2{cout车号a2不在停车场内,输入有误endl;return;}CarStacktempstack;InitStacktempstack;//建立并且初始化用于暂存出车时让车的堆栈booltag1=false;//标志这个停车场出车以前是否已满,默认为没有满tag1=IsStackFullS;booltag2=true;//标志通道是否有汽车在等待默认为通道为空tag2=IsQueueEmputyQ;CarNodetemp;//用来保存暂时取出的汽车booltag3=false;//用来标志是否是离开时间小于到达时间而导致离开失败,true表示离开失败while1//让车离开{PopStemp;iftemp.License==a2{ifa1temp.ArriveTime{cout输入有误,离开时间不能小于到达时间,离开失败endl;tag3=true;Pushtempstacktemp;}elsecout车号a2现在离开停车场,所用的时间为a1-temp.ArriveTime收费为a1-temp.ArriveTime*FAREendl;break;}elsePushtempstacktemp;//进入暂存栈}while!IsStackEmputytempstack//倒出的车再次进入停车场{Poptempstacktemp;PushStemp;}QNodetempqnode;//用来暂时保存从通道出来的汽车iftag1==truetag2==falsetag3==false{DeQueueQtempqnode;--CountForQueue;temp.ArriveTime=a1;temp.Condition=tempqnode.Condition;temp.LeaveTime=tempqnode.LeaveTime;temp.License=tempqnode.License;PushStemp;}iftag2==truetag3==false//如果停车场没有满,并且离开成功--CountForStack;}voidshowmenuCarStackSQueueQ{cout******************************选择菜单*******************************endl;cout1:停车endl;cout2:离开endl;cout3:退出endl;cout*****************************请按键选择******************************endl;inttag;cintag;whiletag!=1tag!=2tag!=3cintag;inta1;unsignedinta2;switchtag{case1:cout请输入到达的车号endl;cina1;cout请输入到达时间endl;cina2;InCarSQa2a1;break;case2:cout请输入离开的车号endl;cina1;cout请输入离开的时间endl;cina2;OutCarSQa2a1;break;case3:return;break;}charch;cout*******************按E/e退出,按任意键返回菜单**************************endl;cinch;ifch!=Ech!=eshowmenuSQ;}intmain{CarStackcarstack;InitStackcarstack;//建立并且初始化用于停车场的堆栈Queuecarqueue;InitQueuecarqueue;//建立并且初始化用于通道的队列showmenucarstackcarqueue;}三#includeiostream#includestringusingnamespacestd;#defineMAX2//停车场车位数#defineprice
0.05//每分钟收取的费用typedefstructtime{inthour;intmin;}Time;//定义时间结点typedefstructnode{stringnum;Timereach;Timeleave;}CarNode;//定义每辆车的牌号,进入时刻,开出时刻typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;//用栈定义,构造停车场typedefstructcar{CarNode*data;structcar*next;}QueueNode;//用队列结点定义,构造停车场外的单个等候车辆typedefstructNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;//用队列定义,构造停车场外的等候便道voidInitStackSeqStackCar*;//初始化堆栈函数声明intInitQueueLinkQueueCar*;//初始化队列头结点函数声明intArrivalSeqStackCar*LinkQueueCar*;//车辆进入时登记函数声明voidLeaveSeqStackCar*SeqStackCar*LinkQueueCar*;//车辆离开时函数声明voidListSeqStackCarLinkQueueCar;/*查看停车场内车辆情况及便道上车辆情况的函数声明*/voidmain{SeqStackCarEnterTemp;//初始栈,中转栈LinkQueueCarWait;//便道队列inta;InitStackEnter;InitStackTemp;InitQueueWait;//初始化while1{cout********************************************************************endl;cout欢迎光临停车场!;cout*^__^*!;coutendl车辆到达登记-请按1;cout车辆离开登记-请按2endl;cout车辆停靠查询-请按3;cout退出系统-请按4endl;//系统选项设置while1{cina;ifa=1a=4break;elsecoutendl请选择1~
4.;}switcha{case1:ArrivalEnterWait;break;//调用入停车场函数case2:LeaveEnterTempWait;break;//调用出停车场函数case3:ListEnterWait;break;//调用查看函数case4:exit0;default:break;}}}voidInitStackSeqStackCar*s//堆栈初始化{s-top=0;s-stack[s-top]=NULL;}intInitQueueLinkQueueCar*Q//队列初始化{Q-head=newQueueNode;ifQ-head!=NULL{Q-head-next=NULL;Q-rear=Q-head;return1;}elsereturn-1;}voidPRINTCarNode*pintroom//输出离开停车场的车辆情况{intABCD;cout\n车辆离开的时间:;cinp-leave.hourp-leave.min;cout离开车辆的车牌号为:;coutp-num;coutendl其到达时间为:p-reach.hour:p-reach.min;cout离开时间为:p-leave.hour:p-leave.min;A=p-reach.hour;B=p-reach.min;C=p-leave.hour;D=p-leave.min;coutendl应交费用为:C-A*60+D-B*price元endl;cout车辆离开登记完毕!endl;cout*********************************************************************endl;deletep;}intArrivalSeqStackCar*EnterLinkQueueCar*W{CarNode*p;QueueNode*t;p=newCarNode;cout********************************************************************endl;cout车辆到达登记开始endl;coutendl请输入车牌号:;cinp-num;ifEnter-topMAX//如果车位未满则进停车场内{Enter-top++;coutendl车辆在车场第Enter-top位置.;coutendl车辆到达时间:;cinp-reach.hourp-reach.min;coutendl车辆到达登记完毕!endl;cout*********************************************************************endl;Enter-stack[Enter-top]=p;return1;}else//如果车位已满,则停靠在便道上{cout*********************************************************************endl;coutendl该车须在便道等待!有车位时进入车场endl;t=newQueueNode;t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return1;}}voidLeaveSeqStackCar*EnterSeqStackCar*TempLinkQueueCar*W{introom;CarNode*p*t;QueueNode*q;ifEnter-top0{while1{cout*********************************************************************endl;cout车辆离开登记开始:endl;coutendl请输入车在车场的位置/1--Enter-top/:;cinroom;ifroom=1room=Enter-topbreak;}whileEnter-toproom//从停车场堆栈向中转堆栈移动车辆,直到要离开车辆的位置停止{Temp-top++;Temp-stack[Temp-top]=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;}p=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;whileTemp-top=1//将中转堆栈中的车辆移回停车场堆栈{Enter-top++;Enter-stack[Enter-top]=Temp-stack[Temp-top];Temp-stack[Temp-top]=NULL;Temp-top--;}cout*********************************************************************endl;cout车辆离开登记结算endl;PRINTproom;ifW-head!=W-rearEnter-topMAX{q=W-head-next;t=q-data;Enter-top++;coutendl便道的t-num号车进入车场第;coutEnter-top位置.endl;cout请输入t-num号车进入车场的时间:;cint-reach.hourt-reach.min;W-head-next=q-next;ifq==W-rearW-rear=W-head;Enter-stack[Enter-top]=t;deleteq;}elsecoutendl便道里没有车endl;}elsecoutendl车场里没有车.endl;}voidList1SeqStackCar*S//查看停车场内车辆情况的函数定义{inti;ifS-top0{cout********************************************************************endl;coutendl车场内部车辆停靠情况:endl;coutendl位置到达时间车牌号endl;fori=1;i=S-top;i++{couti;coutS-stack[i]-reach.hour:S-stack[i]-reach.min;coutS-stack[i]-numendl;}}elsecoutendl车场里没有车endl;cout********************************************************************endl;}voidList2LinkQueueCar*W//查看便道上停靠车辆情况的函数定义{QueueNode*p;p=W-head-next;ifW-head!=W-rear{cout********************************************************************endl;coutendl便道停靠车辆情况:endl;whilep!=NULL{coutendl车辆牌号;coutp-data-numendl;p=p-next;}}elsecoutendl便道里没有车.endl;cout********************************************************************endl;}voidListSeqStackCarSLinkQueueCarW//车辆列表显示函数{intflagtag;flag=1;whileflag{cout********************************************************************endl;cout车辆停靠查询开始endl;coutendl请选择1|2|3:endl;cout
1.车场列表endl
2.便道列表endl
3.返回主菜单endl;while1{cintag;iftag=1||tag=3break;elsecoutendl;cout请选择1~3:;}switchtag{case1:List1S;cout车辆停靠查询结束!endl;break;case2:List2W;cout车辆停靠查询结束!endl;break;case3:flag=0;break;default:break;}}cout********************************************************************endl;}四voidInitStackSqStackCar*s/*初始化栈*/{s-base=CarNode*mallocMAXSTACKSIZE*sizeofCarNode;if!s-baseexit0;/*分配失败*/s-top=s-base;s-stacksize=MAXSTACKSIZE;}intPushSqStackCar*sCarNode*e/*进站函数*/{ifs-top-s-base=s-stacksizereturn0;else*s-top++=*e;return1;}intPopSqStackCar*sCarNode*e/*出站函数*/{ifs-top==s-basereturn0;*e=*--s-top;return1;}intStackEmptySqStackCars/*判空函数*/{ifs.base==s.topreturn1;elsereturn0;}intInitQueueLinkQueueCar*Q/*初始化便道*/{Q-front=Q-rear=QueueNode*mallocsizeofQueueNode;if!Q-frontexit0;Q-front-next=NULL;return1;}/**************************************************************/intEnQueueLinkQueueCar*QCarNode*e/*便道插入函数*/{QueueNode*p;p=QueueNode*mallocsizeofQueueNode;if!pexit0;p-data=e;p-next=NULL;Q-rear-next=p;Q-rear=p;return1;}intDeQueueLinkQueueCar*QCarNode*e/*便道删除函数*/{QueueNode*p;ifQ-front==Q-rearreturn0;p=Q-front-next;e=p-data;Q-front-next=p-next;ifQ-rear==pQ-rear=Q-front;freep;return1;}/********************************************************************************/intArriveSqStackCar*InLinkQueueCar*Wait/*车辆到达函数*/{CarNode*i;QueueNode*w;i=CarNode*mallocsizeofCarNode;flushall;printfInputthecarnumber:;getsi-num;
六、源代码/*******************************停车场管理器*************************************/#includestdio.h#includestdlib.h#includestring.h#includeconio.h/********************************************************************************/#defineMAXSTACKSIZE2/*车库容量*/#defineprice
0.1/*每车每分钟费用*/typedefstructtime{inthour;intmin;}Time;/*时间结点*/typedefstruct{charnum
[10];Timereach;Timeleave;}CarNode;/*车辆信息结点*/typedefstruct{CarNode*base;CarNode*top;intstacksize;}SqStackCar;/*模拟车站*/typedefstructcar{CarNode*data;structcar*next;}QueueNode;typedefstruct{QueueNode*front;QueueNode*rear;}LinkQueueCar;/*模拟通道*/intQueueEmptyLinkQueueCarQ/*便道判空函数*/{ifQ.front==Q.rearreturn1;elsereturn0;}/********************************************************************************/voidInitStackSqStackCar*s/*初始化栈*/{s-base=CarNode*mallocMAXSTACKSIZE*sizeofCarNode;if!s-baseexit0;/*分配失败*/s-top=s-base;s-stacksize=MAXSTACKSIZE;}intPushSqStackCar*sCarNode*e/*进站函数*/{ifs-top-s-base=s-stacksizereturn0;else*s-top++=*e;return1;}intPopSqStackCar*sCarNode*e/*出站函数*/{ifs-top==s-basereturn0;*e=*--s-top;return1;}intStackEmptySqStackCars/*判空函数*/{ifs.base==s.topreturn1;elsereturn0;}intInitQueueLinkQueueCar*Q/*初始化便道*/{Q-front=Q-rear=QueueNode*mallocsizeofQueueNode;if!Q-frontexit0;Q-front-next=NULL;return1;}/**************************************************************/intEnQueueLinkQueueCar*QCarNode*e/*便道插入函数*/{QueueNode*p;p=QueueNode*mallocsizeofQueueNode;if!pexit0;p-data=e;p-next=NULL;Q-rear-next=p;Q-rear=p;return1;}intDeQueueLinkQueueCar*QCarNode*e/*便道删除函数*/{QueueNode*p;ifQ-front==Q-rearreturn0;p=Q-front-next;e=p-data;Q-front-next=p-next;ifQ-rear==pQ-rear=Q-front;freep;return1;}/********************************************************************************/intArriveSqStackCar*InLinkQueueCar*Wait/*车辆到达函数*/{CarNode*i;QueueNode*w;i=CarNode*mallocsizeofCarNode;flushall;printfInputthecarnumber:;getsi-num;ifIn-top-In-baseMAXSTACKSIZE/*车场未满,车辆进栈*/{printf\nThetimethecararrive00:00:;scanf%d:%di-reach.houri-reach.min;PushIni;printf\nCarinsuccess!!;sleep1;return1;}else/*停车场已满,车进便道*/{w=QueueNode*mallocsizeofQueueNode;w-data=i;w-next=NULL;Wait-rear-next=w;Wait-rear=w;printfThePARTisfullcarmustwaitintheroad!;sleep1;return1;}return0;}/********************************************************************************/intDepartureSqStackCar*InSqStackCar*tempLinkQueueCar*Wait/*车辆离开函数*/{intflag=0a1a2b1b2money;CarNode*p*t;QueueNode*q;p=CarNode*mallocsizeofCarNode;flushall;printfInputtheoutcarnumber:;getsp-num;while!StackEmpty*In{t=CarNode*mallocsizeofCarNode;PopInt;ifstrcmpp-numt-num==0/*比较车场中有无这辆车,有即出站*/{printfInputthetimethecarout00:00:;scanf%d:%dp-leave.hourp-leave.min;printfThe;printf%sp-num;printfCaroutthepart!;a1=p-leave.hour;a2=t-reach.hour;b1=p-leave.min;b2=t-reach.min;money=a1-a2+24%24*60+b1-b2+60%60*price;/*计算车辆需要的费用*/printf\nThetimethecararrive:%d:%dt-reach.hourt-reach.min;printf\nThetimethecarleave:%d:%dp-leave.hourp-leave.min;printf\nNeed:%dyuanmoney;flag=1;getch;freet;break;}elsePushtempt;}/*while*/if!flag{printfNothiscar!!;getch;}while!StackEmpty*temp{Poptempp;PushInp;}freep;ifflagWait-front!=Wait-rear/*车站中有空位,便道有车,车入站*/{q=QueueNode*mallocsizeofQueueNode;q=Wait-front-next;t=q-data;ifq!=NULL{PushInt;printf\nThe;printf%st-num;printfcarinpart!;printf\nInputthetimethecararrive00:00:;scanf%d:%dt-reach.hourt-leave.min;}Wait-front-next=q-next;ifq==Wait-rearWait-rear=Wait-front;freeq;}return1;}/********************************************************************************/voidPrintSqStackCar*InSqStackCar*TempLinkQueueCar*Wait/*打印函数*/{intc=0;intcount=1;CarNode*p*t;QueueNode*q;q=QueueNode*mallocsizeofQueueNode;p=CarNode*mallocsizeofCarNode;t=CarNode*mallocsizeofCarNode;while1c!=3{clrscr;gotoxy110;printf
1.Printtheroad!;gotoxy111;printf
2.Printthepart!;gotoxy112;printf
3.return.;do{printf\nInputyourchoice:;c=getche;printf\n;}whilec!=1c!=2c!=3;ifc==2/*打印停车场*/{printfThecarinthepart!\n;count=1;while!StackEmpty*In{PopInt;PushTempt;}while!StackEmpty*Temp{PopTempt;printfThe;printf%dcount;printfcarnumberis:;count++;putst-num;PushInt;}printfPressanykeytocontinue...;getch;}ifc==1/*打印便道*/{printfThecarintheroad!\n;count=1;q=Wait-front-next;ifWait-front!=Wait-rear/**/{whileq!=NULL{p=q-data;printfThe;printf%dcount;printfCarnumberis:;putsp-num;q=q-next;count++;}}elseprintf\nNocarintheroad.;printfPressanykeytocontinue...;getch;}}}/***************************主程序***********************************************/intArriveSqStackCar*InLinkQueueCar*Wait;intDepartureSqStackCar*InSqStackCar*tempLinkQueueCar*Wait;voidPrintSqStackCar*InSqStackCar*tempLinkQueueCar*Wait;voidinitialization;charreadcommand;voidinterpretcharcmd;main{charcmd;SqStackCarparttemp;LinkQueueCarroad;InitStackpart;InitStacktemp;InitQueueroad;printfPressanykeytocontinue......;getch;while1{initialization;/*初始化界面*/cmd=readcommand;/*读取停车场状况*/clrscr;switchcmd{casea:Arrivepartroad;break;caseA:Arrivepartroad;break;cased:Departureparttemproad;break;caseD:Departureparttemproad;break;casep:Printparttemproad;break;caseP:Printparttemproad;break;casee:printfPressanytocontinue...;getch;exit0;break;caseE:printfPressanytocontinue...;getch;exit0;break;default:printfERROR!;break;}}}/********************************************************************************/voidinitialization/*初始函数*/{inti;clrscr;gotoxy00;fori=1;i=240;i++printf\1;gotoxy158;printfTHISISACARPARTMANAGESYSYTEM!;gotoxy1512;printfNAME:LIYONGJUN.;gotoxy1513;printfNUM:
3104006893.;gotoxy1514;printfGRADE:
2004.;gotoxy1515;printfCLASS:COMPUTERSCIENCEANDTECHNOLOGY10;gotoxy120;printf\n********************************************************************************;printf
1.CarArrive--A
2.CarDeparture--D
3.PrintCar--P
4.Exit--E;printf\n********************************************************************************;printfInputCDPEchoose!!\n;}charreadcommand/*选择函数*/{charcmd;do{printfInputyourchoice:;cmd=getche;printf\n;}whilecmd!=acmd!=Acmd!=dcmd!=Dcmd!=pcmd!=Pcmd!=Ecmd!=e;returncmd;}五#includestdio.h#defineSize3/*车库容量*/#definePrice5/*单位价格*/#defineNull0typedefstructtime{inthour;/*时间结点*/}Time;typedefstruct{intcar_number;Timearrivetimeleavetime;/*车信息结点*/intfee;}car_info;typedefstruct{car_info*north;car_info*south;/*停车场信息*/intnumber;}car_park;typedefstruct{car_info*west;car_info*east;/*倒车场信息*/intnumber;}car_park_back;Typedefstructcar{car_info*data;structcar*next;/*结点信息*/}carnode;typedefstructnode{carnode*head;carnode*rear;/*便道信息*/intnumber;}car_park_temp;voidinit_car_parkcar_park*cp{cp-north=car_info*mallocSize*sizeofcar_info;/*初始化停车场*/if!cp-northprintferror\n;cp-south=cp-north;/*令栈顶等于栈底*/cp-number=0;}voidenter_car_parkcar_park*cpcar_info*car{*cp-south++=*car;/*车辆进入停车场*/cp-number++;}intnotfull_car_parkcar_park*cp{inte;ifcp-south-cp-north=Size/*判断常常是否已满*/e=0;elsee=1;returne;}intnotempty_car_park_backcar_park_back*cpb{inte;ifcpb-east==cpb-weste=0;/*判断倒车场是否不空*/elsee=1;returne;}voidback_car_parkcar_park*cpcar_info*car{*car=*cp-south;/*进行倒车操作*/cp-number--;}voidinit_car_park_backcar_park_back*cpb{cpb-west=car_info*mallocSize*sizeofcar_info;if!cpb-westprintferror\n;/*倒车场初始化*/cpb-east=cpb-west;cpb-number=0;}voidenter_car_park_backcar_park_back*cpbcar_info*car{*cpb-east++=*car;cpb-number++;/*进入倒车场操作*/}voidleave_car_park_backcar_park_back*cpbcar_info*car{*car=*--cpb-east;cpb-number--;/*离开倒车场操作*/}voidinit_car_park_tempcar_park_temp*cpt{cpt-head=cpt-rear=carnode*mallocsizeofcarnode;/*初始化便道*/cpt-head-next=Null;cpt-number=0;}voidenter_car_park_tempcar_park_temp*cptcar_info*car{carnode*p;p=carnode*mallocsizeofcarnode;/*进入便道操作*/p-data=car;p-next=Null;cpt-rear-next=p;cpt-rear=p;cpt-number++;}voidleave_car_park_tempcar_park_temp*cptcar_info*carcar_park*cp{carnode*p;p=cpt-head-next;car=p-data;/*离开便道操作*/cpt-head-next=p-next;enter_car_parkcpcar;/*进入停车场操作*/cpt-number--;}intnotempty_car_park_tempcar_park_temp*cpt{inte;ifcpt-head==cpt-rear/*判断便道是否为空*/e=0;elsee=1;returne;}voidleave_car_parkcar_park*cpcar_info*carcar_park_back*cpb{intea1b1t;/*定义时间变量*/car_info*car1*car2;car1=car_info*mallocsizeofcar_info;/*车辆实体化*/car2=car_info*mallocsizeofcar_info;while--cp-south-car_number!=car-car_number/*判断车号是否为要出去的车号*/{back_car_parkcpcar1;/*进行倒车操作*/enter_car_park_backcpbcar1;/*进入倒车场*/}car-arrivetime.hour=cp-south-arrivetime.hour;a1=car-arrivetime.hour;b1=car-leavetime.hour;t=b1-a1;car-fee=t*Price;/*计算价格*/printfthetimeofthecaris%3dhour\nt;printfthemoneyis%3dyuan\ncar-fee;e=notempty_car_park_backcpb;/*判断倒车场是否为空*/whilee==1{leave_car_park_backcpbcar2;/*离开倒车场enter_car_parkcpcar2;进入停车场e=notempty_car_park_backcpb;判断倒车场是否为空*/}cp-number--;}voidmain/*主函数*/{charch;/*定义字符和inteni;整形变量*/car_park_back*cpb;/*定义停车场,倒车场以及便道的变量*/car_park*cp;car_park_temp*cpt*cpt2;car_info*car;cp=car_park*mallocsizeofcar_park;/*实体化变量*/cpb=car_park_back*mallocsizeofcar_park;cpt=car_park_temp*mallocsizeofcar_park_temp;init_car_parkcp;/*实体化停车场,倒车场,便道*/init_car_park_backcpb;init_car_park_tempcpt;do{car=car_info*mallocsizeofcar_info;printf\ninputtheAorLorXendwith0:;/*输入待操作的命令*/scanf%sch;e=notfull_car_parkcp;/*判断车场是否为空*/switchch/*判断要输入的命令*/{caseA:ife==1/*车场不满,进入车辆*/{printfinputthecar_number:;/*输入车辆的基本信息*/scanf%dcar-car_number;printfinputthearrivetime:;scanf%d*car.arrivetime.hour;enter_car_parkcpcar;/*进入车场*/printfthecarisinthecar_parktheplaceis%d\ncp-number;}else/*若车场满,进入便道*/{enter_car_park_tempcptcar;printfinputthecar_number:;scanf%dcar-car_number;printfthecarisinthecar_park_temptheplaceoftempis%d\ncpt-number;}break;caseL:/*离开停车场*/printfinputthecar_number:;/*输入要离开车辆的号码以及离开时间*/scanf%dcar-car_number;printfinputtheleavetimeofthecar:;scanf%d*car.leavetime.hour;leave_car_parkcpcarcpb;/*执行离开车场*/i=*car.leavetime.hour;/*令便道里车辆进入车场的时间和车场里面的车离开的时间相等*/n=notempty_car_park_tempcpt;/*判断便道是否不空*/ifn==1printfThecar%dcpt-head-next-data-car_number;/*记住便道里第一辆车的号码*/leave_car_park_tempcptcarcp;/*离开便道,进入停车场*/printfisenterthecar_parkarrivetimeis%dtheplaceofcarparkis%d\nicp-number;break;caseX:/*查看车场以及便道里的车辆信息*/printf\nThereare%dcarsincarpark!\nFolowingisthecarnumberinthecarpark:\ncp-number;fori=1;i=cp-number;i++/*做循环,依次输出停车场里车辆的信息*/printf%dcp-north++-car_number;cp-north=cp-north-cp-number;cpt2-head=cpt-head;/*设一个虚拟指针使其指向头结点的下一个位置*/ifcpt-number==0/*便道里没有车的情况*/printf\nThereisnocarsintemp!;else{printf\nThereare%dcarsincartemp!\nFolowingisthecarnumberinthecartemp:\ncpt-number;fori=1;i=cpt-number;i++/*做一个循环,输出便道里车辆的信息*/{printf%dcpt2-head-next-data-car_number;/*输出车辆的号码*/cpt2-head=cpt2-head-next;}}break;default:break;/*退出循环*/}}whilech!=0;/*退出操作*/}毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意作者签名 日 期 指导教师签名 日 期 使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容作者签名 日 期 学位论文原创性声明本人郑重声明所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明本人完全意识到本声明的法律后果由本人承担作者签名日期年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文涉密论文按学校规定处理作者签名日期年月日导师签名日期年月日注意事项
1.设计(论文)的内容包括1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)
2.论文字数要求理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于
1.2万字
3.附件包括任务书、开题报告、外文译文、译文原文(复印件)
4.文字、图表要求1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序1)设计(论文)2)附件按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它开始初始化两个栈Enter和Temp及一个队列Wait进入主菜单车到达车离开退出Room前车辆进临时栈对room计费便道车信息车场内信息判便道是否有车车场是否为空列表显示栈Enter元素出栈队列中元素进栈队列Wait中元素出队元素进栈Enter便道车进车场元素进队列Wait判断栈是否为满结束退出列表显示是否否是否是PAGE2。