![数据结构课程设计停车场_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e1.gif)
![数据结构课程设计停车场_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e2.gif)
![数据结构课程设计停车场_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e3.gif)
![数据结构课程设计停车场_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e4.gif)
![数据结构课程设计停车场_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/7/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e/cc0b73aa-aa7b-4e9d-9222-9415ebff8e2e5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1软软 件件 学学 院院课程设计报告书课程设计报告书课程名称课程名称 数据结构数据结构 设计题目设计题目 停车场管理系统停车场管理系统 专业班级专业班级 * 学学 号号 * 姓姓 名名 * 指导教师指导教师 * *年年 *月月2目录1 1 设计时间设计时间.3 32 2 设计目的设计目的.3 33 3 设计任务设计任务 .3 34 4 设计内容设计内容.3 34.1 需求分析.44.2 总体设计.44.3 详细设计.74.4 测试与分析.114.4.1 测试 .114.4.2 分析 .144.5 附录:源程序清单.155.5.总结总结.282831 设计时间设计时间2014 年 01 月 13
2、 日-2014 年 01 月 17 日2 设计目的设计目的1.加深对数据结构的学习和理解,对所学内容进一步进行巩固。2.通过进行上机进行课程设计,对所学的理论知识进行实践操作,加深对数据结构的理解。3.通过上机实验,增加对数据结构在计算机环境中进行的熟练程度。4.增强对实际情况的分析理解,增强对实际问题的解决能力。3 设计任务设计任务设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端) ,若车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,
3、则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。试为停车场编制按上述要求进行管理的模拟程序。4 设计内容设计内容以栈模拟停车场,以队列模拟停车场外的便道,按照从终端读入的输入数据序列进行模拟管理。(1)每一组输入数据包括三个数据项:汽车“到达”或者“离开”信息、汽车牌照号码以及汽车到达或离开的时刻。(2)对每一组输入数据进行操作后的输出信息为: a、若是车辆到达,则输出汽车在停车场内或便道上的停车位置;4 b、若是车辆离开,则输
4、出汽车在停车场内停留的时间和应缴的费用(在便道上停留的时间不收费) 。(3)栈以顺序结构实现,队列以链表结构实现。 4.14.1 需求分析需求分析程序所能达到的功能:利用栈实现停车场,要求程序输出每辆车到达后的停车位置, 通过对栈的操作可对车辆进行收费,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。利用队列实现便道。需另设一个栈,临时停放为给要离开的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离开的时刻有序。栈中每一个元素表示一辆汽车,包含 2 个数据项:汽车的牌照号码和进入停车场的时刻。4.24.2 总体设计总体设计1.本程序首先定义了用来模拟停车场的
5、堆栈模块和用来模拟便道的链队列模块为全局变量,然后编写主函数,在主函数中实现对其他各个模块的调用。在进入菜单界面后程序分别调用车辆到达、车辆离开、存车信息、退出这四个模块。其中车辆离开模块中又调用了打印离开车辆信息的函数,在存车信息模块中有调用了显示停车场车辆信息函数及显示便道车辆信息函数。最后从调用的四个函数模块回到主函数结束程序运行。2.数据结构: typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10; Time reach; 5 Time leave; CarNode; /
6、*车辆信息结点*/ typedef struct NODE CarNode *stackMax+1; int top; SeqStackCar; /*模拟车站*/ typedef struct car CarNode *data; struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/63.流程图 车场容量为 020初始化栈及队列车辆到达车辆离开退出主菜单车厂为空是否进入便道车场是否为空是进入车场否车辆离开便道是否为空开始否便道车辆进入车场
7、是结束是否74.34.3 详细设计详细设计1时间结点类型typedef struct time int hour; int min; Time; /*时间结点*/ 2车辆进出站信息类型typedef struct node char num10;Time reach; Time leave; CarNode; /*车辆信息结点*/ 3停车场和便道信息类型typedef struct NODE CarNode *stackMax+1;int top; SeqStackCar; /*模拟车站*/typedef struct car 8CarNode *data;struct car *next;
8、QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /*模拟通道*/ 4初始化,创建栈void InitStack(SeqStackCar *,int n); /*声明栈*/ int i; s-top=0; for(i=0;istacks-top=NULL; 5初始化,创建一个队列用于便道int InitQueue(LinkQueueCar *); /*声明便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL)
9、 Q-head-next=NULL; 9Q-rear=Q-head; return(1); else return(-1); 6车辆到达int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*车辆进站*/if(Enter-toptop0) /*有车*/else8主函数Void main() InitStack(&Enter,n); /*初始化车场*/InitStack(&Temp,n); /*初始化让路的临时栈*/10InitQueue(&Wait); /*初始化便道*/while(1)scanf(.);/根据提示信息输入想
10、要 的操作 switch(ch) /根据输入的数调用不同的函数case 1:case 2:case 3:case 4:default:break;114.44.4 测试与分析测试与分析4.4.1 测试程序运行的界面及为了便于观察,停车场中最多可停 2 辆车。1.试运行122.停车场进站的车多于停车场可容纳的车133.车牌号码格式停车时间格式上有错误144.车辆离开停车场时,该车的车牌号、进出车场时间、停留时间、应缴费用的信息,以及便道上的车辆进入停车场时的信息。4.4.2 分析通过这次课程设计使我充分的理解了用栈和队列实现模拟停车场的基本原理,知道了栈的顺序存储结构和队列的链式存储结构的定义和
11、算法描述,同时也学会了编写停车场问题的程序。虽然此次的程序不是很完善,还缺少许多更好的功能,比如车牌号只要是六位字符就会输出,像三位字母三位数字就可以15运行;比如时间上没有范围,如果车从第一天停到第二天,程序计算上就会出现错误,但是总体还是一个比较能体现数据结构知识点能力的程序了,当然只是相对于我这个初学者来说。4.54.5 附录:源程序清单附录:源程序清单#include#include#include#include#define Max 20int getn()int n;printf(本停车场停车每分钟 0.1 元.n);printf(请输入停车场可容纳的车(最多 20 辆):);s
12、canf(%d,&n);fflush(stdin);doif(n20)printf(输入的车辆数不在要求范围内,请重新输入!);scanf(%d,&n);fflush(stdin);else break;16while(n20);return n;typedef struct time int hour; int min; Time; /时间结点typedef struct node char num20;Time reach; Time leave; CarNode; /车辆到达离开信息结点typedef struct NODE CarNode *stackMax+1;int
13、 top; SeqStackCar; /模拟车站typedef struct car CarNode *data;struct car *next; QueueNode; typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar; /模拟通道 17void InitStack(SeqStackCar *,int n); /*声明栈*/int InitQueue(LinkQueueCar *); /*声明便道*/int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*车辆进站
14、*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*车辆出站*/ void InitStack(SeqStackCar *s,int n) /*初始化栈*/ int i; s-top=0; for(i=0;istacks-top=NULL; int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode); if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; re
15、turn(1); else return(-1); 18void PRINT(CarNode *p) /*打印出站车的信息*/ int A1,A2,B1,B2;int a,b,c; printf(n 请输入离开的时间:/*:*/); scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);doif(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.min)printf(输入离开时间比进站时间早,请重新输入!n);scanf
16、(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);if(p-leave.hourleave.hour=24 | p-leave.minleave.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);fflush(stdin);else break;19while(p-leave.hourreach.hour | (p-leave.hour=p-reach.hour & p-leave.minreach.m
17、in) | p-leave.hourleave.hour=24 | p-leave.minleave.min=60);printf(车场现在有一辆车离开,请便道里的第一辆车进入车场!n);printf(出站的车的车牌号为:);puts(p-num);printf(n);A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min;a=(B1-A1)*60+B2-A2;if(a=60)b=a/60;c=a-60*b;elseb=0;c=a;printf(车牌号: );puts(p-num);20printf(n);printf(
18、=n);printf(|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|n);printf(=n);printf(| %d:%d,p-reach.hour,p-reach.min);printf( | %d:%d,p-leave.hour,p-leave.min);printf( | %d:%d,b,c);printf( | %2.1f,0.1*a);printf( |n);printf(-n);free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*车辆到达*/ CarNode *p; QueueNode *
19、t; int a,b;p=(CarNode *)malloc(sizeof(CarNode); flushall(); printf(n 请输入车牌号(例:qA1234):n);printf(请严格按照要求输入车牌号,否则系统会出错!n); 21doa=strlen(qA1234);b=strlen(gets(p-num);fflush(stdin);if(a!=b)printf(输入车牌号格式错误,请重新输入!n);gets(p-num);fflush(stdin);else break;if(a!=b)printf(输入车牌号格式错误,请重新输入!n);while(a!=b);if(Ent
20、er-toptop+; printf(n 车辆在车场第%d 位置.,Enter-top); fflush(stdin);printf(n 请输入到达时间:/*:*/); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);doif(p-reach.hourreach.hour=24 | p-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin);els
21、ebreak;while(p-reach.hourreach.hour=24 | p-reach.minreach.min=60);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); 23void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueu
22、eCar *W,int n) /*车辆离开*/ int i,room;CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(n 请输入要离开的车在车场的位置/1-%d/:,Enter-top);scanf(%d,&room);fflush(stdin);if(room=1&roomtop) break; while(Enter-toproom) /*车辆离开*/ Temp-top+; Temp-stackTemp-top=Enter-stack
23、Enter-top; Enter-stackEnter-top=NULL; Enter-top-; 24p=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);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-d
24、ata; Enter-top+; printf(n 现在请便道上的车进入车场.该车的车牌号为:);puts(t-num);printf(n 该车进入车场第%d 位置.,Enter-top);printf(n 请输入现在的时间(即该车进站的时间)/*:*/:);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin); do25if(t-reach.hourreach.hour=24 | t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!);scanf(%d:%d,&(t-
25、reach.hour),&(t-reach.min);fflush(stdin);elsebreak;while(t-reach.hourreach.hour=24 | t-reach.minreach.min=60);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 目前车场里没有车,来车请直接进入车场!); /*没车*/ void List1(SeqStackCar *S) /*列表显示车场存车信息*/ int i; if(S-top0) /*判断车站内是否有车*/ 26 printf(n 车场:); printf(n 位置 到达时间 车牌号n); for(i=1;itop;i+) printf( %d ,i); printf(%d:%d ,S-stacki-reach.hour,S-stacki-reach.min);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60811-1-1:1993 EN-FR Common test methods for insulating and sheathing materials of electric cables - Part 1: Methods for general application - Section 1: Measurement of thickness
- 【正版授权】 IEC 60809:1995/AMD3:2004 EN-FR Amendment 3 - Lamps for road vehicles - Dimensional,electrical and luminous requirements
- 【正版授权】 IEC 60793-1-60:2017 EN Optical fibres - Part 1-60: Measurement methods and test procedures - Beat length
- 《安安全全滑滑梯》小班教案
- 四年级下学期语文表格教案
- 《山海经》的社会教案
- 定点印刷合同范本
- 出庭授权委托书格式教程
- 防水包工合同范本
- 买卖合同买方需要履行的义务
- 教育信息化建设工作汇报
- 海南凤梨:酸甜可口的热带水果
- 变革管理与组织重构课件
- 《银河帝国-基地》阅读试卷及答案
- 2024年江苏有线江阴分公司招聘笔试参考题库附带答案详解
- 2024年江苏银宝控股集团有限公司招聘笔试参考题库附带答案详解
- 医疗法律法规知识培训课件1
- 感染性休克早期集束化治疗课件
- 医美整形美容培训课件皮肤激光技术的选择与操作
- 《工业分析技术》课程标准
- 小学大单元-二下第2单元学生用书作业设计
评论
0/150
提交评论