中南民族大学数据结构课程设计停车场管理系统方案_第1页
中南民族大学数据结构课程设计停车场管理系统方案_第2页
中南民族大学数据结构课程设计停车场管理系统方案_第3页
中南民族大学数据结构课程设计停车场管理系统方案_第4页
中南民族大学数据结构课程设计停车场管理系统方案_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、 . . . 停车场管理模拟1. 需求分析1.总体要求设停车场是一个可停放N辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到达时间的先后顺序,依次由北向南排列(大门在南端,最先到达的第一辆车停放在停车场的最北端),若停车场已停了n辆汽车,则后来的汽车只能在门外的通道上等候,一旦有车开走,则排在通道上的第一辆车即可开入;当停车场每辆车要离开时,在它之后进入的车辆必须先退出停车场为其让路,待该辆车开出大门,其他车辆再按原次序进入停车场。请为停车场编写按上述要求进行管理的模拟程序。2.分析1 用栈来表示停车场,用队列来表示停车道。2 用户需输入车辆的必要信息,如车辆的到达或离开,汽

2、车牌号以与到达或离去的时刻。停车场的容量与单位时间的停车费由编程序者自行设置,结构需输出车辆停车所需缴纳的费用。3 本程序要求对车辆的动态能够输出具体的信息容,包括停车或离开的时间,位置,与所需缴纳的停车费。4 测试数据为:N=2,输入数据为:(A,1,5),(A,2.,10), (D,1,15), (A,3,20), (A,4,25), (A,5,30), (D,2,35), (D,4,40), (E,0,0). 其中:A表示到达,D表示离去,E表示输入结束。5. 程序执行的命令为:1. 创建栈和队列。 2.对车辆的行为进行相应的处理。 3.输出车辆的信息。三 概要设计1、 本程序基本模块(

3、1) 主程序部分: int main() /读入文件数据/文件读入判断/第一次输入数据不需要检测 /处理车辆到达模块; /处理车辆离开模块;2.停车场模拟的抽象数据类型定义typedef struct Elem/定义车辆数据结构类型int carnum;/车牌号int time;/停车时刻Elem;typedef struct Elem *base; Elem *top; int stacksize;/栈大小Sqstack;void initStack(Sqstack &S)/建一个停车场空栈/传入参数:stack 栈结构/传出参数:分配有存空间的栈结构/初始化栈int push(Sqstac

4、k &S,Elem &e)/插入元素/输入参数:S栈结构,e要入栈的节点/完成入栈操作int lengthstack(Sqstack S)/求栈的长度/返回栈的长度int pop(Sqstack &S,Elem &e)/输入参数S栈结构,e要出栈的节点/完成出栈操作void initqueue(LinkQueue &Q)/构造一个车道空队列/传入参数Q要初始化的队列/传出参数:Q带有头结点的队列/初始化队列void enqueue(LinkQueue &Q,int carnum,int time)/车道入队操作/传入参数:Q队列,carnumber,time 要入队的数据/完成入栈操作int

5、lengthqueue(LinkQueue Q)/求车道队列长度/返回队的长度void dequeue(LinkQueue &Q,Elem &e)/从对头离队操作,并返回其值/传入参数:Q队列结构,e的节点数据/删除队头void carin(Sqstack &S,LinkQueue &Q,Elem car)/进场函数/传入参数:S栈结构,Q队列结构,car的节点数据int k=0;/检测信号,当值为k=0时表示栈和队中都找不到该车牌号/赋值为栈底 /在栈中寻找是否有同一编号的车 /找到了有同一编号的车/如果在栈中未找到,在队列中查找/队头 /找不到继续找/栈和队列中都找不到一样车牌号,执行入栈

6、操作;/栈未满void carleave(Sqstack &S,LinkQueue &Q,Elem car)/车辆退出函数/传入参数:S栈结构,Q队列结构,car的节点数据/在栈中没有找到与要离开的车/先在栈中寻找;/在栈中找到/备用栈/先在栈中寻找;/其他车退出停车场暂存在零时栈/栈中有车离开,将队列中的车进入栈中 /离队,并返回数据e/栈中没找到要离开的车/在队列中找到要离开的车 四 详细设计1、 程序整体流程2、 程序函数调用关系3、 汽车离开,到达流程图5.源代码#include #include #include#define OVERFLOW -2 #define ERROR 0#

7、define N 2 /停车场的容量设为2#define price 5/将单位时间的停车费设为5using namespace std;typedef struct Elem/定义车辆数据结构类型int carnum;/车牌号int time;/停车时刻Elem;typedef structElem *base;Elem *top;int stacksize;Sqstack;void initStack(Sqstack &S)/建一个停车场空栈S.base=(Elem*)malloc(N*sizeof(Elem);if(!S.base) exit(OVERFLOW);S.top=S.base

8、;S.stacksize=N;int push(Sqstack &S,Elem &e)/插入元素Elem *temp;if(S.top-S.base=S.stacksize)/栈满,退出return 1;elsetemp=S.top;temp-carnum=e.carnum;temp-time=e.time;S.top+;return 0;int lengthstack(Sqstack S)/求栈的长度return S.top-S.base;int pop(Sqstack &S,Elem &e) /若栈不空,则删除S的栈顶元素,用E返回其值,并返回OK;否则返回ERRORif(S.top=S.

9、base)return ERROR;e=*-S.top;return 1;typedef struct QNode/定义车道队列struct QNode *next;Elem Qelem;QNode,*QueuePtr;typedef struct/队头指针,队尾指针QueuePtr front;QueuePtr rear;LinkQueue;void initqueue(LinkQueue &Q)/构造一个车道空队列Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode);if(!Q.front)exit(OVERFLOW);Q.front-next=Q.r

10、ear-next=NULL;void enqueue(LinkQueue &Q,int carnum,int time)/车道入队操作QueuePtr p=(QueuePtr)malloc(sizeof(QNode);p-Qelem.carnum=carnum;p-Qelem.time=time;p-next=NULL;Q.rear-next=p;Q.rear=p;int lengthqueue(LinkQueue Q)/求车道队列长度int i=0;QueuePtr p;p=Q.front-next;while(p!=Q.rear)i+;p=p-next;i+;return i;void d

11、equeue(LinkQueue &Q,Elem &e)/从对头离队操作,并返回其值QueuePtr p=(QueuePtr)malloc(sizeof(QNode);if(Q.front=Q.rear)cout车道中没有车辆!next;e=p-Qelem;Q.front-next=p-next;if(Q.rear=p) Q.rear=Q.front;free(p);void carin(Sqstack &S,LinkQueue &Q,Elem car)/进场函数int k=0;/检测信号,当值为k=0时表示栈和队中都找不到该车牌号QueuePtr r;Elem *temp;temp=S.ba

12、se;/赋值为栈底while(temp!=S.top)if(temp-carnum=car.carnum)/在栈中寻找是否有同一编号的车cout该车号在停车场中已存在,请重新输入!next; /队头 while(r&r-Qelem.carnum!=car.carnum)r=r-next;/找不到继续找if(r&r-Qelem.carnum=car.carnum)cout该车号在车道中已存在,请重新输入!carnum=car.carnum;S.top-time=car.time;S.top+;coutcarnum号车于car.time时刻进入停车场lengthstack(S)号车位!endl;e

13、lseenqueue(Q,car.carnum,car.time);/栈满已满,把车安排在车道队列中cout停车场已满,请car.carnum号车在便车道lengthqueue(Q)稍等!carnum=car.carnum)int temp_cost;temp_cost=(car.time-temp-time)*price;ture=1;/在栈中找到coutcar.carnum号车在car.time时刻离开,停车时间为time刻钟,应交停车费用为:temp_costcarnum=e.carnum;S.top-time=car.time;S.top+;cout请便道的第一辆车牌号为e.carnu

14、m的车辆转入停车场,停车位置为lengthstack(S)号,停车时刻为:car.timenext; /队头while(r&r-Qelem.carnum!=car.carnum)p=r;r=r-next;if(r&r-Qelem.carnum=car.carnum)/在队列中找到要离开的车 ture=2;cout便道Qelem.carnum号车离开,不收取费用!next=r-next;free(r);/直接从队列离开 if(ture=0)cout没有该辆车!endl;int main()char c; int j=0,temp_time,i=1;/i=0,判断临时记录时间的temp_time应

15、该去该次的值,还是上次的值。j=0,表示第一次输入数据,不需要检测数据是否正确LinkQueue Q;Sqstack S;Elem car;initqueue (Q);initStack(S);ifstream infile; cout欢迎使用停车场管理系统!endl;cout请稍等!信息正在载入,endl;system(PAUSE);/暂停函数,模拟仿真infile.open(aaa.txt); /读入文件数据if(infile.fail()/文件读入判断coutccar.carnumcar.time)if(j=1)if(S.top=S.base)cout停车场中没有车!endl;else

16、if(car.timetemp_time&c!=E)/temp_time还是记录上次的值cout您输入的时间有误,请重新输入!endl;i=0;elsetemp_time=car.time;i=1;if(i=1) /正确的数据if(c=A)/到达carin(S,Q,car);else if(c=D) if(S.top=S.base) cout停车场中没有车!endl;elsecarleave(S,Q,car);j=1;if(j=0)/第一次输入数据不需要检测if(c=A)/到达carin(S,Q,car);else if(c=D) cout停车场中没有车!endl;j=1;temp_time=

17、car.time;if(c=E) cout输入结束!endl;break;infile.close() ;return 0;五 调试分析1. 程序执行调试时,读取文件失败,原因是“aaa.txt”文件放错了位置2. 在数据输入检测时,经常出现车号重复报错信息,这时候得考虑这个检测信号放置情况。3. 车道停车不收费,时间却被一直计入计费时间,这时考虑调用值情况。4.本程序循环用的很多,找车,排队,等等六 测试结果1.模拟仿真,进入登录界面并载入信息,按任意键进入下一个界面。2.清屏函数去除不必要的信息,显示主要容:七 用户使用说明用户将数据写入aaa.txt的文件中,文件中的数据格式是A 1 5

18、A 2 10D 1 15A 3 20A 4 25A 5 30D 2 35D 4 40E 0 0其中A表示到达,D表示离去,E表示输入结束。这种格式,且其中的数据都必须是英文字符,然后执行文件即可。八 . 课程设计总结通过此次实验我深刻了解到数据结构的真正用处,这是一门纯属于设计的科目,它需用把理论变为上机调试。老师会给我们讲了一些设计的思想,顺着老师的思路,来完成自己的设计,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写。当为停车场编写栈,为车道编写队列遇到了很多自己都不了解的茫点,想了很久,还是想不出改怎么完善,但是程序还是得继续下去,我多次请教了同学,逐渐能自己找出错误,并加以改正,读取数据文件那段编码中,自己认为用getlin函

温馨提示

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

评论

0/150

提交评论