数据结构停车场模拟管理程序的设计与实现_第1页
数据结构停车场模拟管理程序的设计与实现_第2页
数据结构停车场模拟管理程序的设计与实现_第3页
数据结构停车场模拟管理程序的设计与实现_第4页
数据结构停车场模拟管理程序的设计与实现_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程设计报告河南科技大学课 程 设 计 说 明 书课程名称 数据结构课程设计 题 目 停车场模拟管理程序的设计与实现 数据结构课程设计任务书课程设计题目停车场模拟管理程序的设计与实现姓名学号专业班级指导教师课程设计目的进一步理解栈和队列的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力。课程设计环境运行环境为Visual C+ 6.0课程设计任务和要求设计停车场模拟管理程序,要求实现4个大的功能模块1. 程序功能介绍和操作提示2. 汽车进入停车位的管理模块3. 汽车离开停车位的管理模块4. 查看停车厂停车状态的的查询模块参考文献1、杨秀金等. 数据结构(C语言版). 西安电子

2、科技大学出版社20042、谭浩强. C语言程序设计. 清华大学出版社. 20023、李春保. 数据结构教程上机实验指导. 清华大学出版社. 2005 时 间 进 度 安 排序号起止日期工 作 内 容12016.6.62016.6.10下达课程设计任务、查阅资料、确定方案 22016.6.112016.6.16编写程序、调试、运行 32016.6.17验收 42016.6.182016.6.19撰写课程设计报告 52016.6.20提交文档停车场模拟管理程序的设计与实现一、 简介1.设计目的:理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。2.问题的描述:设停车场只

3、有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序。二、 数据结构的设计main主函数jm界面xz选择Leave离开List查询Arrival到达退出主要函数:1. jm函数:在设计好的两个界面中选择其中一个2. xz函数:显示出主菜单以供选择3. Ar

4、rival函数:实现车辆的进入4. Leave函数:实现车辆的离开5. List函数:实现停车场和便道的查询三、 功能(函数)设计1. 界面模块:选择界面经典简洁进入菜单 2. 车辆进入模块:车辆进入录入信息判断车站进入便道进入车站车辆离开3. 车辆离开模块:录入位置判断存在退出车辆离开4. 查询模块:查询返回便道查询车场查询四、 界面设计1. 首页选择界面: 2. 主菜单界面:3. 子菜单页面:五、程序设计#include#include#include#include#include#define MAX 5/*停车场容量*/void jm()/*界面函数*/char ch;int i,j

5、,xz,xz2;c:printf(请选择操作界面:n);printf(1,简洁 2,经典n);scanf(%d,&xz);printf(loadingn);/*打印loading,并运用Sleep函数延迟一秒,给人程序内部正在处理运行的现象(下面曾多次用到)*/Sleep(1000);switch (xz)case 1:goto a;/*运用goto函数使得设计的两个界面可以来回转换*/case 2:goto b;default :printf(输入有误n);Sleep(1000);goto getch;a:system(cls);for(i=0;i40;i+)printf(*);for(i=

6、0;i3;i+)printf(n);printf( 河南科技大学n);printf( -n);printf( 停车场管理系统n);printf( 欢迎您 );for(i=0;i3;i+)printf(n);for(i=0;i40;i+)printf(*);printf(nnnnnn);printf(输入0则返回界面选择菜单!n输入任意其它字符将继续n);scanf(%d,&xz2);if (xz2=0)printf(loadingn);Sleep(1000);system(cls);goto c;elseprintf(loadingn);Sleep(1000);goto getch;syste

7、m(cls);b:system(cls);for(i=0;i3;i+)for(j=0;j40;j+)printf(*);printf(n);for(i=0;i4;i+)printf(*);printf( 河南科技大学停车场管理系统 );for(i=0;i4;i+)printf(*);printf(n);for(i=0;i4;i+)printf(*);printf( 欢迎您进入 );for(i=0;i4;i+)printf(*);printf(n);for(i=0;i3;i+)for(j=0;j40;j+)printf(*);printf(n);printf(nnnnn);printf(输入0则

8、返回界面选择菜单!n输入任意其它字符将继续n);scanf(%d,&xz2);if (xz2=0)printf(loadingn);Sleep(1000);system(cls);goto c;elseprintf(loadingn);Sleep(1000);goto getch;getch:system(cls);void xz()/*将选择界面做成函数,目的是使主函数看起来简洁*/int i;printf(nn 河南科技大学停车场管理系统nn);for(i=0;i40;i+)printf(*);printf(nn);printf( -n);printf( 1.车辆到达n);printf(

9、2.车辆离开n);printf( 3.查询信息n);printf( 4.退出系统n);printf( -n);printf(nn);for(i=0;itop=0;for(i=0;istacki=NULL;int InitQueue(LinkQueueCar *q)/*初始化队列便道*/q-front=(QueueNode *)malloc(sizeof(QueueNode);if (q-front!=NULL)q-front-next=NULL;q-rear=q-front;return (1);elsereturn (-1);void Print(CarNode *p)/*打印车辆信息,调用

10、system(date/t)函数,使可以得到离开时间*/printf(n离开车辆的车牌号为:);puts(p-num);printf(离开的时间为:);system(date/t);int Arrival(SeqStackCar *Enter,LinkQueueCar *W)/*车辆到达*/static int i=1;CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();printf(n请输入车辆的车牌号(例:豫C8888):n);gets(p-num);if(Enter-toptop+;printf(n

11、车辆进入停车场%d号位置n,Enter-top);Enter-stackEnter-top=p;return (1);else/*停车场已满,进入便道*/printf(n您好,停车场已满!n该车在%d号便道等待!n,i+);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;printf(nloading.n);Sleep(1000);printf(车辆进入便道n);return (1);void Leave(SeqStackCar *Enter,SeqStackCar *Tem

12、p,LinkQueueCar* W)/*车辆离开*/int i,room;CarNode *p,*t;QueueNode *q;if(Enter-top0)/*判断停车场是否有车*/while(1)printf(n请输入车在车场的位置1%d:n,Enter-top);scanf(%d,&room);if(room=1&roomtop)break;while (Enter-toproom)/*打印出需要让道的车辆*/printf(n牌号为%s的车辆需要让道n,Enter-stackEnter-top);Temp-top+;Temp-stackTemp-top=Enter-stackEnter-t

13、op;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);printf(nloading.n);Sleep(1000);if(W-front!=W-rear)&Enter-topfront-next

14、;t=q-data;Enter-top+;printf(n便道的%s号车进入车场第%d位置n,t-num,Enter-top);W-front-next=q-next;if(q=W-rear)W-rear=W-front;Enter-stackEnter-top=t;free(q);elseprintf(n对不起,便道里没有车!n);elseprintf(n车站没有车!n);void List1(SeqStackCar *s)/*查询停车场*/int i;if (s-top0)printf(n车场:n);printf(位置 车牌号n);for(i=0;itop;i+)printf(%d ,i+

15、1);puts(s-stacki+1-num);printf(n);elseprintf(n车场没有车!n);void List2(LinkQueueCar *W)/*查询便道*/QueueNode *p;p=W-front-next;if(W-front!=W-rear)printf(n等待车辆的号码为:n);while (p!=NULL)puts(p-data-num);printf(n);p=p-next;elseprintf(n便道里没有车!n);void List(SeqStackCar S,LinkQueueCar W)/*查询函数*/int flag,tag;flag=1;whi

16、le (flag)printf(-);/*这里没有用system(cls)清屏,为了美观加上分割线*/printf(n请输入对应的数字选择你要查询的内容:n);printf(n1.查询车场 2.查询便道 3.返回n);while (1)scanf(%d,&tag);if (tag=1|tag=3) break;elseprintf(-);printf(n请输入对应的数字选择你要查询的内容:n);printf(n1.查询车场 2.查询便道 3.返回n);switch (tag)case 1:List1(&S);break;case 2:List2(&W);break;case 3:flag=0;

17、printf(请再敲击任意键方可退出!n);break;default:break;int main()SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);jm();while(1)system(cls);/*清屏,使每次循环操作时可以更简洁*/xz();scanf(%d,&ch);if(ch3)/*继续使用goto函数,使得输入无关项以及“4.退出系统”时可以直接跳出*/goto tc;switch (ch)case 1:Arrival(&Ent

18、er,&Wait);break;case 2:Leave(&Enter,&Temp,&Wait);break;case 3:List(Enter,Wait);break;default:break;getch();Sleep(1000);getch();tc:printf(n感谢您的使用,再见!n);Sleep(2000);return 0;编写代码遇到的问题及其解决方法:(1)在编辑界面函数的时候,经常遇到上下行内容对不齐使得界面不美观的现象。另外在调用goto函数编辑时,逻辑没调整好好,经常系统崩溃。解决:每改动调整一次就运行一次,不行就继续编辑,直到上下行对齐界面美观。在逻辑混乱的问题上

19、,在纸上多画几次关系图,一次次的敲进去直到实现功能为止。(2)在编写Print函数时,想让程序打印出车辆离开的时间,就定义各种变量、编辑各种循环以及敲了各种代码,最终都无法实现离开打印时间的功能。解决:通过百度查资料,了解到system(“date/t”)这个函数可以直接从本机获得时间,就把这个敲进去了。五、 运行及测试1. 七辆车到来(1)前五辆: (2)后两辆: 2. 牌照为CF003的车辆离开3. 查询当前状态4. 测试运行遇到的问题及其解决方法(1)在主菜单进行四项的选择时,总是执行完立马就退出。解决:把选择的四个选项放在while(1)循环中,并且加上system(“cls”)清屏使

20、每次的循环看起来页面整洁。(2)执行停车场到达和离开两个函数:当到达的车辆不足MAX(5)时,执行离开函数的选择就会正常(例如12、13、14),而当到达的车辆大于等于MAX(5)时,执行离开函数的选择就会乱码(例如17456123)。解决:把定义的 “SeqStackCar”这个结构体里面的stackMAX改为stackMAX+1。(3)执行查询函数:查询便道时可以正常运行,查询停车场时就会意外终止运行,程序崩溃。解决:同2,将结构体stackMAX 改为stackMAX+1,之后将List1函数里的printf(%d,i)和puts(s-stacki-num)改为printf(%d,i+1)和puts(s-stacki+1-num)。(4)在编写进入便道的函数时,为了给每个便道固定的编号,就定义了一个变量i使得记录每次进入便道的顺序,但

温馨提示

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

评论

0/150

提交评论