还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
(2)|M£3^|
2.车辆离开请选择
23.车辆信息请选择
34.退出程序请选择4现在请选择以上信息37请选择11213:
1.车场
2.便道
3.返回1车场位置到达时间车牌号19121024车辆信息(便道)D:\CYuYan\bin\wwtemp.exe〔=!回请选择11213:
1.车场
2.便道
3.返回23等待车辆的号码为34请选择1|2|3:
1.车场
2.便道
3.返回5退出程序D:\CYuYan\bin\wwtemp.exe10!回▲
1.车辆到达请选择
12.车辆离开请选择
23.车辆信息请选择
34.退出程序请选择4现在请选择以上信息4Press anykey tocontinue
五、详细设计
1、结构滴定仪typedef structnode{int num;int reachtime;int leavetime;}CarNode;/*车辆信息结点*/typedef structNODE{CarNode*stack[MAX+l];int top;}SeqStackCar;/*模拟车站*/typedef struct car{CarNode*data;struct car*next;}QueueNode;typedef structNode{QueueNode*head;QueueNode*rear;}LinkQueueCar;/*模拟通道*/
2、主菜单void main,z whilelprintf(\n\n\t\t\t
2.车辆离开请选择2〃);z,printf\n\n\t\t\tl.车辆到达请选择1〃);z,printf\n\n\t\t\t
3.车辆信息请选择3;z,printf\n\n\t\t\t
4.退出程序请选择4;printf(〃\n\n\t\t\t现在请选择以上信息〃);switchch case1:Arrival ftEnter,Wait;break;/*车辆到达*/case2:LeaveEnter,Temp,Wait;break;/*车辆离开*/case3:Li stEnter,Wait;break;/*列表打印信息*/case4:exit0;/*退出主程序*/default:break;}
3、车辆到达车辆到达时首先判断车场内是否有车满,如果没有车满则车辆进入车场,如果车满则车辆进入便道int ArrivalSeqStackCar*Enter,LinkQueueCar*W/*车辆到达*/ifEnter-topMAX/*车场未满,车进车场*/else/*车场已满,车进便道*/printf〃\n\t\t\t停车场已满该车辆需在便道上等待!〃;
4、车辆离开首先,判断车场内是否有车如果车场内有车则输入要离开车的位置并调用一个PRINTp函数用于打印离开车辆的信息之后便道的第一辆车进入车场并要输入现在的时间用于离开时计算价格,如果便道没有车则显示便道上没有车辆如果车场内没有车则显示车场里没有车Void LeaveSeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W/*车辆离开*/ifEnter-top0/*有车*/whileEnter-toproom/*车辆离开*//*判断通道上是否有车及车站是否已满*/ifW-head!=W-rearEnter-topMAX/*便道的车辆进入车场else printf\n\n\t\t\t便道里没有车.\n〃;else z,printf\n\n\t\t\t车场里没有车.〃;/*没车*/
5、列表信息列表显示信息中共调用2个函数,一个函数用于判断车场里是否有车,如果有车则显示车辆信息,如果没有则显示车场里没有车;另一个函数用于判断便道里是否有车,如果有车则显示车辆信息,如果没有则显示便道里没有车void Listl SeqStackCar*S/*列表显示车场信息*/ifS-top0/*判断车站内是否有车*/z,else printf\n\t\t\t车场里没有车〃;void List2LinkQueueCar*W/*列表显示便道信息*/ifW-head!=W-rear/*判断通道上是否有车*/else printfC\n\t\t\t便道里没有车.〃;void ListSeqStackCarS,LinkQueueCar Wwhileflag printf〃\n\t\t\t请选择1⑵3:〃;z,printf\n\n\t\t\tl.车场\n\n\t\t\t
2.便道\n\n\t\t\t
3.返回\n\n\t\t\t;switchtag case1:Listl S;break;/*列表显示车场信息*/case2:List2W;break;/*列表显示便道信息*/case3:flag=0;break;default:break;
六、课程总结通过这一次的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握;同时,通过对停车场管理系统的开发,使得我将以前课程所学知识与实际问题很好地相联接在了一起在这次课程设计中,培养了我开发一个中小型程序的能力在这次课程设计中,使得我很好地了解了在开发程序重要性在这次课程设计中,我所开发的停车场管理系统,基本上可以完成每一项功能汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现但是,该程序也有不足的地方主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中,为了简便起见,我就车牌号定义为了整型,这个与现实是有些不符的还有一个可以改进的地方就是记录车辆进入停车场以及离开停车场的时间,应该精确到小时以及分钟的,可是在程序中,为了简便起见,我只是设置成了一个时刻,所以,在这方面还是有待改进的改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天还有一个很重要的问题,对于停车场内可以停放的最多车辆数,为了测试数据的方便,我在程序中,定为了2,在实际使用中,可以改变程度开头的宏定义以增加停车场的容量总之,在这次的课程设计中,我以及我的收获还是挺大的,对于专业课有了更好的认识⑴谭浩强.C语言程序设计(第三版)[M].北京清华大学出版社,2005⑵廖雷、罗代忠.C语言程序设计基础实验教程[M].北京高等教育出版社,2005⑶谭浩强.C程序设计解题与上机指导(第三版)[M].北京清华大学出主要版社,2005参考⑷廖雷等.C语言程序设计基础[M].北京高等教育出版社,2004资⑸谭浩强,张基温,唐永炎.C语言程序设计教程.北京高等料教育出版社,2003附录源程序#includestdio.h#includestdlib.h#includestring.h ttdefineMAX2/*车库容量*/#define price3/*每车每时刻费用*/typedef structnode{int num;int reachtime;int leavetime;}CarNode;/*车辆信息结点*/typedef structNODE{CarNode*stack[MAX+l];int top;}SeqStackCar;/*模拟车站*/typedef structcar{CarNode*data;structcar*next;}QueueNode;typedef structNode{QueueNode*head;QueueNode*rear;
一、课程设计目的
1、通过课程设计,加深对《数据结构》这一课程所学内容的进一步理解与巩固
2、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程
6、通话课程设计,培养分析问题、解决实际问题的能力}LinkQueueCar;/*模拟通道*//*函数声明部分*/void TnitStackSeqStackCar*;/*初始化栈*/int InitQueueLinkQueueCar*;/*初始化便道*/int ArrivalSeqStackCar LinkQueueCar*;/*车辆到达*/void LeaveSeqStackCarSeqStackCar LinkQueueCar*;/*车辆离开*/void ListSeqStackCar,LinkQueueCar;/*显示存车信息*/void PRINTCarNode*p;void main{SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStackEnter;/*初始化车站*/InitStackTemp;/*初始化让路的临时栈*/InitQueueWait:/*初始化通道*/whilelz,printf\n\n\t\t\tl.车辆到达请选择1〃;z,printf\n\n\t\t\t
2.车辆离开请选择2〃;z,printf\n\n\t\t\t
3.车辆信息请选择3〃;/z printf\n\n\t\t\t
4.退出程序请选择4〃;printf(〃\n\n\t\t\t现在请选择以上信息〃);whilel{scanf级d〃,ch;printf〃\n〃;ifch=lch=4break;else printf〃\n\t\t\t错误!请再次做出选择!\n\n\t\t\t〃;switchch{case1:Arrival Enter,Wait;break;/*车辆到达*/case2:LeaveEnter,Temp,Wait;break;/*车辆离开*/case3:List Enter,Wait;break;/*列表打印信息*/case4:exit0;/*退出主程序*/default:break;}}void InitStackSeqStackCar*s/*初始化栈*/{int i;s-top=0;fori=0;i=MAX;i++s-stack[s-top]=NULL;int TnitQueueLinkQueueCar*Q/*初始化便道*/{Q-head=QueueNode*mallocsizeofQueueNode;ifQ-head!=NULL{Q-head-next=NULL;Q-rear=Q-head;return1;else return-1;void PRINTCarNode*p/*打印出站车的信息*/{int Al,A2;printf〃\n\t\t\t请输入离开时间〃;,,/,scanf%d,p-leavetime;printf〃\n\t\t\t离开车辆的车牌号%d〃,p-num;,printf〃\n\n\t\t\t离开车辆到达时间z%d,p-reachtime;printf\n\n\t\t\t离开车辆离开时间%d”,p-leavetime;Al=p-reachtime;A2=p-leavetime;printf〃\n\n\t\t\t停车场管理费用%d”,A2-Al*price;freep;int ArrivalSeqStackCar*Enter,LinkQueueCar*W/*车辆到达*/CarNode*p;QueueNode*t;p=CarNode*mallocsizeofCarNode;flushall;printf〃\t\t\t请输入到达车辆车牌号〃;scanf〃%d〃,p-num;ifEnter-topMAX/*车场未满,车进车场*/{Enter-top++;printf〃\n\t\t\t该车辆在停车场的位置是%d\n〃,Enter-top;printf〃\n\t\t\t请输入该车辆到达的时间〃;scanf p-reachtime;Enter-stack[Enter-top]=p;return1;}else/*车场已满,车进便道*/{printf〃\n\t\t\t停车场已满该车辆需在便道上等待!〃;getchar;t=QueueNode*mallocsizeofQueueNode;t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return1;void LeaveSeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W/*车辆离开*/{int room;CarNode*p,*t;QueueNode*q;/*判断车场内是否有车*/ifEnter-top0/*有车*/{whilel/*输入离开车辆的信息*/{printf〃\t\t\t停车场里停放的车辆总数%d〃,Enter-top;printf〃\n\n\t\t\t请输入要离开车辆的位置〃;scanf〃%d〃,room;if room=lroom=Enter-top break;whileEnter-toproom/*车辆离开*/{Temp-top++;Temp-stack[Temp-top]=Enter-stack[Enter-Mop];Enter-stack[Enter-top]=NULL;Enter-top-;}p=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top-;while Temp-top=l{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〃\口\11\1:\1\1便道的%€1号车进入车场第%1位置,t-num,Enter-top;printf〃\n\n\t\t\t请输入现在的时间:〃;z/z/scanf%d,t-reachtime;W-head-next=q-next;if q-W-rear W-rear=W-head;Enter-stack[Enter-top]=t;freeq;else printf〃\n\n\t\t\t便道里没有车.\n〃;}else printf〃\n\n\t\t\t车场里没有车.〃;/*没车*/}void ListlSeqStackCar*S/*列表显示车场信息*/{int i;ifS-top0/*判断车站内是否有车*/{printf〃\n\t\t\t车场〃;printf〃\n\n\t\t\t位置到达时间车牌号\n〃;for i=l;i=S-top;i++{printf〃9626d〃,i;printfS-stack[i]-reachtime;printf〃%10cT,S-stack[i]-num;z,printf C\n;else printf〃\n\t\t\t车场里没有车〃;void List2LinkQueueCar*W/*列表显示便道信息*/{QueueNode*p;p=W-head-next;ifW-head!=W-rear/*判断通道上是否有车*/{printf〃\n\t\t\t等待车辆的号码为〃;whilep!=NULL,/,/{printf%-10d,p-data-num;p=p-next;printf C\n;else printf〃\n\t\t\t便道里没有车.〃;void ListSeqStackCarS,LinkQueueCar W{int flag,tag;flag=l;while flag{printf〃\n\t\t\t请选择11213/;z,printf\n\n\t\t\tl.车场、n\n\t\t\t
2.便道\n\n\t\t\t
3.返回\n\n\t\t\t〃;whilel{scanf〃%d〃,tag;iftag=l||tag=3break;/else printf〃\n\t\t\t请选择z11213:;}switchtag{case1:ListlS;break;/*列表显示车场信息*/case2:List2W;break;/*列表显示便道信息*/case3:flag=0;break;default:break;
二、课程设计内容
①问题描述设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序编制一程序模拟该停车场的管理
②基本要求要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间
③实现提示汽车的模拟输入信息格式可以是(到达/离去,汽车牌照号码,到达/离去的时刻)例如,(A,1,5)表示1号牌照车在5这个时刻到达,而(DL5,20)表示5号牌照车在20这个时刻离去整个程序可以在输入信息为(EL0,0)时结束本题可用栈和队列来实现
三、概要设计
1、设计思想此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了
2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了
3、主要模块
①此停车场管理系统,主要分为以下若干模块首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用在主函数中首先调用option函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数最后,从调鼐的这四个函数中回到主函数结束整个程序的运行
②在以上各个模块中,出现的调用的函数为void InitStackSeqStackCar*s;int InitQueueLinkQueueCar*Q;int ArrivalSeqStackCar*Enter,LinkQueueCar*W;void LeaveSeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W;void PRINTCarNode*p;void ListSeqStackCarS,LinkQueueCar W;void ListlSeqStackCar*S;void List2LinkQueueCar*W;
4、模块间关系
四、调试分析1调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便本程序的调试运行,总体上情况良好,但中间也出现了一些小问题其中比较有代表性的主要问题有当停车场已经达到最大容量,但仍有车辆进入停车场的时候,运行界面上没有出现或者说出现了但又跳掉了“停车场已满,该车辆需在便道上等待!”的提示信息我们经过反复商量讨论,并且在查阅了多种资料后,在那一个printf语句后加了一个getch,此时,程序运行结果就符合要求了2测试结果的分析与讨论1车辆到达•D:\CYuY an\bi n\wwte mp.exe
1.车辆到达请选择
12.车辆离开请选择
23.车辆信息请选择
34.退出程序请选择4现在请选择以上信息1请输入到达车辆车牌号1该车辆在停车场的位置是1请输入该车辆到达的时间
91.车辆到达请选择
12.车辆离开请选择
23.车辆信息请选择32车辆离开,D:\CYuYan\bin\wwtemp.exe
4.车辆信息请选择
35.退出程序请选择4现在请选择以上信息2停车场里停放的车辆总数2请输入要离开车辆的位置1请输入离开时间12离开车辆的车牌号1离开车辆到达时间9离开车辆离开时间12停车场管理费用9便道的3号车进入车场第2位置.请输入现在的时间12。