C语言课程设计报告停车场管理系统_第1页
C语言课程设计报告停车场管理系统_第2页
C语言课程设计报告停车场管理系统_第3页
C语言课程设计报告停车场管理系统_第4页
C语言课程设计报告停车场管理系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、兰州理工大学软件学院2011级毕业生算法与数据结构课程设计题 目: 停车场管理 专业班级: 软件四班 姓 名: 孙健龙 学 号: 指导教师: 王连相 成 绩:_目 录一、题目及要求2二、题目分析3三、数据结构说明4四、各函数算法分析6(1)主函数6(2)车辆到达函数7(3)车辆离开函数8(4)列表显示函数10五、程序测试14(1)测试信息对错误的处理14(2)列表显示15(3)同时输出等待的提示作息16(4)计算它们的应交费用17六、课程设计感悟与收获18七、源代码19八、参考文献25一、题目及要求要求设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早

2、晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆国就进入停车场。停车场内如有某辆车要走,在它之后进来的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且其他在便道上等待的车辆的次序不变。编制一程序模拟停车场管理。提示汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去时刻)。例如:(A,1,5

3、)表示1号牌照车在5这个时刻到达,而(D,5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为(E,0,0)时结束。基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交的费用和它在停车场内停留的时间。根据题目要求,停车场可以用一个长度为n的堆栈来模拟。由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。所以可以设两个堆栈。二、题目分析由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到用结

4、构体数组来存储车库信息。又每个汽车的车牌号都不一样,这样一来就可以根据车牌号准确找到汽车位置。当停车场内某辆车要离开时,在他之后进入的汽车必须再按原次序进入车库。这是一个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个结构体数组,用来暂时存放为出站汽车暂时让道的汽车车牌号。当车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车有汽车开走,这完全是一个先进先出模型,因此可以设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场是根据汽车在停车场内停放的总长来收费的,在便道上的时间不计费,

5、因此必须记录车辆进入车库时的时间,车辆离开车库时的时间不需要记录,当从终端输入时可直接使用。另外,题目提示中的表示方法(A,1,5)表示1号牌照车在5这个时刻到达有两点不好;一、对用户友好程度不高,用起来并不方便;二、不接近实际情况,生活中表示时间的格式为“-:-”,完全可以建立一个时间结点来实现。因此,实际编程中将对这一方面予以优化。三、数据结构说明根据题意,停车场中的空间分为车库和便道。这里用结构体来模拟车库和便道,按照从端读入数据序进行管理。模拟车库和模拟便道中分别用结构体数组和链表来存储车辆信息。模拟车库和模拟便道的数据结构如下表1和表2所示:Moni_cheku结构体CarNode

6、*stackMAX+1结构体数组char num10Time reach结构体int hourint minTime leave结构体int hourint minint top表1 模拟车库的数据结构Moni_biandao结构体QueueNode*head链表CarNode *data数组char num 10Time reach结构体int hourint minTime leave结构体int hourint minStruct car *nextQueueNode *rear链表CarNode *data数组char num 10Time reach结构体int hourint mi

7、nTime leave结构体int hourint minStruct car *next表2 模拟便道的数据结构用C语言实现这一部分为:typedef struct time int hour; int min; Time; /*时间结点*/typedef struct node char num10; Time reach; Time leave; CarNode;/*车辆信息结点*/ typedef struct NODE CarNode *stackMAX+1; int top; Moni_Cheku; typedef struct car CarNode *data; struct

8、car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; Moni_Biandao;四、各函数算法分析(1)主函数void main() Moni_Cheku Enter,Temp; Moni_Biandao Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时链表*/ InitQueue(&Wait); /*初始化便道*/ printf(n); printf( _欢迎进入停车场管理系统1!_n); printf

9、(n); printf(提示! (1).该车库的最大容量为:%d;n ,MAX); printf( (2).该车库的收费标准为:%4.2f元/(辆*分钟).n,price); while(1) printf(*主菜单*n); printf(1.车辆到达); printf( 2.车辆离开); printf( 3.列表显示); printf( 4.退出系统n); printf(*n); printf(请选择(1-4): bb); while(1) scanf(%d,&ch); if(ch=1&chnum); if(Enter-toptop+; printf(该车在车库位置%d.n,Enter-to

10、p); printf(请输入到达时间(*:*):); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1); else /*车库已满,车进便道*/ printf(该车须在便道等待!n); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; return(1); 车辆到达输入车牌号车库满否否是车进车库车进便道(3)车辆离开函数void Leave(Moni_Cheku *

11、Enter,Moni_Cheku *Temp,Moni_Biandao *W) /*车辆离开*/ int i, room; CarNode *p,*t; QueueNode *q; /*判断车库内是否有车*/ if(Enter-top0) /*有车*/ printf(请输入车在车库的位置(1-%d):,Enter-top);/*输入车辆离开的信息*/while(1) scanf(%d,&room); if(room=1&roomtop) break; else printf(错误!请重选:); while(Enter-toproom) /*车辆离开*/ Temp-top+; Temp-stac

12、kTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p,room); /*判断通道上是否有车及车库是否已满*/ if(W-head!=W-rear)&Ente

13、r-tophead-next; t=q-data; Enter-top+; printf(n便道的%s号车进入车场第%d位置.,t-num,Enter-top); printf(n请输入现在的时间(*:*):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n便道里没有车.n); else printf(车库里没有车!n); /*没车*/该位置的车离开,且输出该车的收

14、费等信息车库有车否车辆离开有输入车的位置是否输入错误是否输出“便道里没有车”无便道若有车,便道的第一辆车进入车库,若便道无车,则不做处理(4)列表显示函数void List(Moni_Cheku S,Moni_Biandao W) int flag,tag; flag=1; while(flag) printf(*查看*n); printf(1.车库 2.便道 3.返回n); printf(*n); printf(请选择(1-3): bb); while(1) scanf(%d,&tag); f(tag=1&tagtop0) /*判断车库内是否有车*/ printf(车库:); printf(

15、n位置 到达时间 车牌号n); for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num); else printf(车库里没有车n);输出“车库里没有车”否是车库是否有车输出车库里的车辆作息void List2(Moni_Biandao *W) /*列表显示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-rear) /*判断便道上是否有车*/ printf(在便道里等待的车辆的号码为:n)

16、; while(p!=NULL) puts(p-data-num); p=p-next; else printf(便道里没有车.n); 便道上是否有车是否输出等待车辆的号码输出“便道里没有车”五、程序测试(1)测试信息对错误的处理(2)进入2辆车 ,进入车库,道上无车,并进行列表显示。(3)再进入3辆车,第一辆车进车库,后2辆车在便道等待,同时输出等待的提示作息,最后列表显示以查寻结果,此时车库已满,便道上有2辆车在等待。(4)离开停车位1和停车位2上的2辆车,同时输入它们离开的时间,并计算它们的应交费用。离开后,车库里便有空出2个停车位,这时便道里的前2辆车就可进入车库,便道里的进入车库里要

17、记录它们进去的时间,开始计时收费。说明:该系统仍可继续工作,随时在主菜单中选择4便可退出系统。六、课程设计感悟与收获(1)在此次课程设计中第一次真正体会到了编程的感觉,当投入其中时,感觉不到时间的流逝,只有突然会发现一个下午或是一个晚上过去了。(2)由于课本上只介绍了数组、结构体、链表的用法,而此次课程设计中要用到堆、栈、队列的知识,因此我利用课余时间查找这方面的内容,通过自学不仅了解到了一些这方面的知识,还锻炼了自己的自学能力。(3)这次课程设计不同于平时的练习,平时的练习都是一些小程序,虽然知道模块化编程的好处,但从没有这一次体会得深。七、源代码#include #include #inc

18、lude #define MAX 3 /*车库容量*/#define price 0.5 /*每车每分钟费用*/ typedef struct time int hour; int min; Time; /*时间结点*/typedef struct node char num10; Time reach; Time leave; CarNode;/*车辆信息结点*/ typedef struct NODE CarNode *stackMAX+1; int top; Moni_Cheku; typedef struct car CarNode *data; struct car *next; Q

19、ueueNode; typedef struct Node QueueNode *head; QueueNode *rear; Moni_Biandao; void InitStack(Moni_Cheku *); /*初始化车库*/int InitQueue(Moni_Biandao *); /*初始化便道*/int Arrival(Moni_Cheku *,Moni_Biandao *); /*车辆到达*/void Leave(Moni_Cheku *,Moni_Cheku *,Moni_Biandao *); /*车辆离开*/void List(Moni_Cheku,Moni_Biand

20、ao); /*显示车库和便道的存车信息*/void main() Moni_Cheku Enter,Temp; Moni_Biandao Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时链表*/ InitQueue(&Wait); /*初始化便道*/ printf(n); printf( _欢迎进入停车场管理系统1!_n); printf(n); printf(提示! (1).该车库的最大容量为:%d;n ,MAX); printf( (2).该车库的收费标准为:%4.2f元/(辆*分钟).n,pri

21、ce); while(1) printf(*主菜单*n); printf(1.车辆到达); printf( 2.车辆离开); printf( 3.列表显示); printf( 4.退出系统n); printf(*n); printf(请选择(1-4): bb); while(1) scanf(%d,&ch); if(ch=1&chtop=0; for(i=0;istacks-top=NULL; int InitQueue(Moni_Biandao *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NUL

22、L) Q-head-next=NULL; Q-rear=Q-head; return(1); else return(-1); void PRINT(CarNode *p,int room) /*输出出库车的信息*/ int A1,A2,B1,B2; printf(请输入离开的时间:/*:*/); scanf(%d:%d,&(p-leave.hour),&(p-leave.min); printf(离开车辆的车牌号为:); puts(p-num); printf(其到达时间为: %d:%dn,p-reach.hour,p-reach.min); printf(离开时间为: %d:%dn,p-l

23、eave.hour,p-leave.min); A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min; printf(应交费用为:%4.2f元,(B1-A1)*60+(B2-A2)*price); free(p); int Arrival(Moni_Cheku *Enter,Moni_Biandao *W) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(请输入车牌号(例如:中CUG88

24、8):); gets(p-num); if(Enter-toptop+; printf(该车在车库位置%d.n,Enter-top); printf(请输入到达时间(*:*):); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); Enter-stackEnter-top=p; return(1); else /*车库已满,车进便道*/ printf(该车须在便道等待!n); t=(QueueNode *)malloc(sizeof(QueueNode); t-data=p; t-next=NULL; W-rear-next=t; W-rear=t; re

25、turn(1); void Leave(Moni_Cheku *Enter,Moni_Cheku *Temp,Moni_Biandao *W) /*车辆离开*/ int i, room; CarNode *p,*t; QueueNode *q; /*判断车库内是否有车*/ if(Enter-top0) /*有车*/ printf(请输入车在车库的位置(1-%d):,Enter-top);/*输入车辆离开的信息*/ while(1) scanf(%d,&room); if(room=1&roomtop) break; else printf(错误!请重选:); while(Enter-topro

26、om) /*车辆离开*/ Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p,room); /*判断通道上是否有车

27、及车库是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n便道的%s号车进入车场第%d位置.,t-num,Enter-top); printf(n请输入现在的时间(*:*):); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n便道里没有车.n); else printf

28、(车库里没有车!n); /*没车*/void List1(Moni_Cheku *S) /*列表显示车库信息*/ int i; if(S-top0) /*判断车库内是否有车*/ printf(车库:); printf(n位置 到达时间 车牌号n); for(i=1;itop;i+) printf( %d ,i); printf( %d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-num); else printf(车库里没有车n); void List2(Moni_Biandao *W) /*列表显示便道信息*/ QueueNode *p; p=W-head-next; if(W-head!=W-rear) /*判断便道上是否有车*/ printf(在便道里等待的车辆的号码为:n); while(p!=NULL) puts(p-data-num); p=p-next; else printf(便道里没有车.n); void List(Moni_Cheku S,Moni_Biandao W) int flag,ta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论