版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《数据结构大型实验》实验报告学生姓名:学号:学院:专业:实验题目:停车场管理完成时间:2010.09.03指导教师:需求分析:1、概述本系统力求简洁,功能完善又实用,经过分析得将系统分为六个模块:车辆进入停车场,车辆驶出停车场,记录停车时间和车号,查询停车场和停车便道,计费,退出系统。2、运行环境的需求WindowsXP操作系统VisualC++6.03、功能的需求对本系统的功能进行分析后可作如下的模块化设计:车辆进入停车场2)记录车号和停车时间查询停车场和停车便道车辆驶出停车场计费退出系统概要设计:1、设计思想此停车场管理系统是在一个狭长的通道上的,且只有一个大门可以供车辆进出,并且当停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上。2、实现方法对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。3、主要模块此停车场管理系统,分为若干模块:首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。在主函数中首先调用menu()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。最后,从这四个函数中回到主函数结束整个程序的运行。4、模块间关系开始开始初始化栈及一个队列Wait。进入主菜单车到达车离开退出Room前车辆进临时栈对room计费便道车信息车场内信息判便道是否有车车场是否为空列表显示栈Enter元素出栈队列中元素进栈队列Wait中元素出队元素进栈Enter便道车进车场元素进队列Wait判断栈是否为满结束退出列表显示是否否是否是详细设计:1、数据结构说明1)停车场是一个可停放n辆汽车的狭长通道且只有一个大门供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,因此,需要两个栈结构,CarStack为停车场,TmpStack暂时存储为离开车辆让道的车辆,以使得先驶入的车辆可以在后驶入的车辆未离开时顺利驶出停车场。2)判断停车场是否停满,需要用一个if语句实现。3)查看停车场,即是判断这个栈结构是否为空,若不为空,则输出该栈结构中的数据。2、算法说明1)“到达”模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。车辆到达停车场是否满车辆到达停车场是否满进入停车场进入便道结束“显示”模块列表显示列表显示判断输入值3,查看停车场显示车辆结束程序设计与程序调试:调试过程中的主要问题由于此停车场管理系统是分模块设计的,而且在程序的实现过程中又使用了清屏函数,所以,运行时用户选择任务并且执行完任务后,又会回到供用户选择功能的主界面,因此整个程序从整体上来讲结构清晰,使用方便。本程序的调试运行,总体上情况良好,但中间也出现了一些小问题。本程序中我使用的是VC++6.0进行的编译和运行!测试结果:实验总结:通过这次课题设计,不仅学会了如何开发软件,更重要的是教会了我如何去面对问题,如何去解决问题。在解决这些问题过程中,提高了我的自学能力和实际应用能力,学习到了许多书本以外的知识。经过俩周的设计和开发,停车场管理系统基本开发完毕,其功能基本符合用户需求,能够完成对车辆的管理和查询以及各类相关报表的打印。对于数据的一致性的问题也通过程序进行了有效的解决。这个程序操作简单,对于车牌号,只需输入车牌号上的数字就行,而且对于进出停车场的时间,也简化了操作,只需输入当时的时刻就行,没有具体到小时和分钟,但也许这也是该程序不足之处所在。而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入n或N退出该运行程序。但是由于设计时间较短,该系统还有许多不尽如人意的地方,如车辆停车位的管理做得不够完善等多方面问题。这些都有待进一步改善。附录:题目:停车场管理系统完成日期:2010.09.031、停车场容量设定停车收费设定 SqStackCarStack,TmpStack;LinkQueueQ;intlength;floatprice_stack,price_queue;/chari;voidMenu() { printf("请选择以下选项之一以执行其功能:\n\n"); printf("1.车辆进入停车场\n"); printf("2.车辆离开停车场并且计费\n"); printf("3.查看停车场\n"); printf("4.查看便道\n"); printf("5.退出\n\n");}2、车辆进入停车场void InCarStack() /*车辆进入停车场*/{ Car e; printf("您选择的是1.车辆进入停车场\n"); printf("请输入车号:"); scanf("%d",&e.number); int i=StackLength(CarStack); if(i>=length)/*停车场满时车辆就在便道上等待*/ { printf("\n停车场车位已满,请在便道上等待!\n\n"); printf("请输入在便道上开始等待的时间(格式:四位数字xxxx,前两位表示小时,后两位表示分钟):"); scanf("%d",&oQtime); EnQueue(&Q,e); } else /*停车场没满,车辆进入*/ { printf("请输入到达停车场时间(格式:四位数字xxxx,前两位表示小时,后两位表示分钟):"); scanf("%d",&e.inTime); Push(&CarStack,e); printf("\n车辆%d已于%d时%d分停放在第%d位。\n\n",e.number,e.inTime/100,e.inTime-e.inTime/100*100,i+1); }}3、计费/*计算费用并输出*/ int intoQhour,intoQminute,outhour,outminute,inhour,inminute,m1,h1,m2,h2; float money; /*停车费*/ inhour=Carleave->inTime/100; inminute=Carleave->inTime-inhour*100; outhour=Carleave->outTime/100;outminute=Carleave->outTime-outhour*100; if(Carleave->intoQtime>=0)/*当车辆是从便道进入停车场时,使用下面的方法计算费用*/ { intoQhour=Carleave->intoQtime/100; intoQminute=Carleave->intoQtime-intoQhour*100; if(inminute-intoQminute<0) { m1=60+inminute-intoQminute; h1=inhour-intoQhour-1; } else { m1=inminute-intoQminute; h1=inhour-intoQhour; } if(outminute-inminute<0) { m2=60+outminute-inminute; h2=outhour-inhour-1; } else { m2=outminute-inminute; h2=outhour-inhour; } money=(float)((h1*60+m1)*price_queue+(h2*60+m2)*price_stack); } else/*当车辆未通过便道而直接进入停车场时使用以下计算方法*/ { if(outminute-inminute<0) { m2=60+outminute-inminute; h2=outhour-inhour-1; } else { m2=outminute-inminute; h2=outhour-inhour; } money=(float)((h2*60+m2)*price_stack); } printf("您本次的停车费用为%2.1f元。谢谢使用。\n\n",money); /*目标车辆后面的车先离开停车场并入栈TmpStack临时存储*/4、查看停车场/StatusInitStack(SqStack*S) /*构造一个空栈S*/{ (*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!(*S).base) exit(OVERFLOW); (*S).top=(*S).base; (*S).stacksize=STACK_INIT_SIZE; return OK;}StatusDestroyStack(SqStack*S) /*销毁栈S*/{ free((*S).base); return OK;}Status StackEmpty(SqStackS) /*若栈S为空栈,则返回TRUE,否则返回FALSE*/{ if(S.top==S.base) return TRUE; else return FALSE;}int StackLength(SqStackS) /*返回S的元素的个数,即栈的长度*/{ return S.top-S.base;}StatusPush(SqStack*S,SElemTypee) /*插入元素e为新的栈顶元素*/{ if((*S).top-(*S).base>=(*S).stacksize) /*栈满,追加存储空间*/ { (*S).base=(SElemType*)realloc((*S).base, ((*S).stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!(*S).base) exit(OVERFLOW);//存储分配失败 (*S).top=(*S).base+(*S).stacksize; (*S).stacksize+=STACKINCREMENT; } *((*S).top)++=e; return OK;}StatusPop(SqStack*S,SElemTy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年祁门县网格员招聘考试参考题库及答案解析
- 2026年磴口县网格员招聘考试模拟试题及答案解析
- 药物分离纯化工安全理论能力考核试卷含答案
- 皮革服装服饰制作工标准化评优考核试卷含答案
- 水工混凝土维修工班组考核模拟考核试卷含答案
- 电子产品制版工岗中生产安全意识考核试卷含答案
- 轧制备品工安全文化水平考核试卷含答案
- 塑料真空成型工岗位情绪管理考核试卷含答案
- 宣纸书画纸制作工诚信道德竞赛考核试卷含答案
- 海洋浮标工交接考核试卷含答案
- 电脑记账会计管理制度
- 一年级劳动上册全册教案
- 崖上的波妞二声部合唱谱
- T/CADBM 69-2023环氧卷材地板
- TCCIASC 0025-2024 5G 工厂测评认证规范
- 《风险导向审计方法》课件
- 国家电网企业文化、电力与能源战略题库(含答案)
- 兼职安全员安全培训
- 100以内进退位加减法口算题(20000道 可直接打印 每页100道)
- 可用性控制程序
- 物业电话催费技巧
评论
0/150
提交评论