数据结构课程设计_停车场模拟管理系统报告.doc_第1页
数据结构课程设计_停车场模拟管理系统报告.doc_第2页
数据结构课程设计_停车场模拟管理系统报告.doc_第3页
数据结构课程设计_停车场模拟管理系统报告.doc_第4页
数据结构课程设计_停车场模拟管理系统报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

计算机科学技术学院计算机科学技术学院 数据结构课程设计数据结构课程设计报报 告告 专专 业:业: 计算机科学与技术计算机科学与技术 班班 级:级: 计计 13-113-1 学学 号:号: 2424、2525 姓姓 名:名: 王莹、肖林英王莹、肖林英 课设题目:课设题目: 停车场模拟管理系统停车场模拟管理系统 指导教师:指导教师: 姜卓姜卓 2014-12-23 目目 录录 一、设计题目一、设计题目.1 二、设计目的二、设计目的.1 三、总体设计三、总体设计.1 (一)问题描述.1 (二)设计要求.1 (三)数据结构.1 四、详细设计四、详细设计.2 (一)分析与实现.2 (二)系统模块设计.2 (三)界面设计.3 五、设计结果与分析五、设计结果与分析.4 六、总结(收获和不足)六、总结(收获和不足).5 (一)课设的不足.5 (二)课设的收获.5 附录附录 程序源码程序源码.5 参考文献:参考文献:.16 指导教师意见指导教师意见.16 第 0 页 共 19 页 一、设计题目一、设计题目 停车场模拟管理系统。 二、设计目的二、设计目的 利用所学的知识,模拟设计一个停车场管理系统。通过程序设计,了解停 车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场 的情况,和收费情况。 三、总体设计三、总体设计 (一)问题描述(一)问题描述 假设停车场可以停放 n 辆车的狭长通道,而且只有一个入口出口,汽车进 入停车场的停放按照先进先放的顺序,依次排满车道。当停车场已经停满时 (已存放了 n 辆汽车),想进入停车场的车就只能在便道上等待,等到停车有 车离开时,便道上的第一辆车进入停车场。当停车场内的某辆车要离开时,在 它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场, 车辆离开时,按时间缴纳费用。 (二)设计要求(二)设计要求 用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据 的方式进行模拟管理。输入 1,表示车辆到达;输入 2,表示车辆离开;输入 3,表示列表显示停车场内外情况;输入 4,表示系统帮助;输入 5,表示查询 车辆;输入 0,表示退出程序。车辆进入停车时,要输入车牌号码和到达时间; 车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时, 要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。 (三)数据结构(三)数据结构 本课程设计使用的数据结构有:顺序栈和链式队列。 第 1 页 共 19 页 四、详细设计四、详细设计 (一)分析与实现(一)分析与实现 1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到 达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类 型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。 2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应 缴纳的费用。定义 print()函数实现。 3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车, 要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待; 若未满,则进行进栈操作。 4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆 要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上 是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作, 这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。 5、系统帮助则只需设计一个函数,将要说明的东西写进去,可以直接调用。 6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车 辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。 (二)系统模块设计(二)系统模块设计 主函数 车 辆 到 达 车 辆 离 开 车 辆 停 靠 退 出 程 序 用户操作界面 第 2 页 共 19 页 (三)界面设计(三)界面设计 1、主菜单界面 第 3 页 共 19 页 2、车辆到达界面 3、车辆离开界面 4、车辆停靠界面 第 4 页 共 19 页 停车场情况 便道停车情况 5、退出系统 第 5 页 共 19 页 五、设计结果与分析五、设计结果与分析 测试结果已达到我们预期的结果,可以模拟实现车辆的进入、离开停车场, 可以大体上让人了解到停车场的工作情况。 六、总结(收获和不足)六、总结(收获和不足) (一)课设的不足(一)课设的不足 本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况 和查询功能,没有将进入停车场的车辆信息进行存盘保存。而且功能单一,有 车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车 场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的; 按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都 应该是要完善的。 (二)课设的收获(二)课设的收获 本次课设,我们组选了停车场模拟管理系统来做,在这个题目里,只用到 了两个数据结构:顺序栈和链式队列。顺序栈模拟停车场,队列模拟便道。通 过这次课设,确实对我们的水平提高了很多,至少再次熟悉了本学期所学的栈 和队列的使用和应用。记得在刚开始的时候,看到课设指导书上面的题目,感 觉自己什么都做不出来,所以迟迟不敢动手。当时间一天天逼近时,不能再拖 了,就只能开工了。抱着试一试的心态,我们参考着资料上面的指示,一步一 步地做,居然做出了一个简单的系统;最后,对系统做了些完善(虽然还不是 很完善),在此对同组的小伙伴表示感谢! 第 6 页 共 19 页 通过这次课设,我们再次强烈的感受到:只要敢于尝试,很多我们自己认 为做不到的事情都是可能做到的。勇于尝试,定有收获! 附附录录 程序源码程序源码 #include #include #include #include #include #include using namespace std; #define MAX 3 /停车场车位数 #define price 0.05 /每分钟收取的费用 typedef struct time int hour; int min; Time;/定义时间结点 typedef struct node string num; Time reach; Time leave; CarNode;/定义每辆车的牌号,进入时刻,开出时刻 typedef struct NODE CarNode *stackMAX+1; int top; SeqStackCar;/用栈定义,构造停车场 typedef struct car CarNode *data; struct car *next; QueueNode;/用队列结点定义,构造停车场外的单个等候车辆 第 7 页 共 19 页 typedef struct Node QueueNode *head; QueueNode *rear; LinkQueueCar;/用队列定义,构造停车场外的等候便道 void InitStack(SeqStackCar *); /初始化堆栈函数声明 int InitQueue(LinkQueueCar *); /初始化队列头结点函数声明 int Arrival(SeqStackCar *,LinkQueueCar *); /车辆进入时登记函数声明 void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);/车辆离开时函数声明 void List(SeqStackCar,LinkQueueCar); /查看停车场内车辆情况及便道上车辆情况的函 数声明 void myouttextxy(int x, int y, LPCTSTR s); /绘制滚动文字 void myouttextxy(int x, int y, LPCTSTR s) static IMAGE tmp;/ 用来保存被文字覆盖的区域背景 if (s = NULL) / 恢复区域 putimage(x, y, else int w = textwidth(s);/ 获取字符串占用的宽度 int h = textheight(s);/ 获取字符串占用的高度 / 保存区域 getimage( / 文字输出 outtextxy(x, y, s); /车辆进入 int Arrival(SeqStackCar *Enter,LinkQueueCar *W) CarNode *p; QueueNode *t; p=new CarNode; cout-endl; cout车辆到达登记开始:endl; 第 8 页 共 19 页 coutendlp-num; if(Enter-toptop+; coutendl车辆在车场第top位置.endl; coutendl车辆到达时间:; cout(例:11 11)p-reach.hourp-reach.min; coutendl车辆到达登记完毕!endl; cout-top=p; return 1; else /如果车位已满,则停靠在便道上 cout-endl; coutendl车位已满,请稍等next=NULL; W-rear-next=t; W-rear=t; return 1; void InitStack(SeqStackCar *s) /堆栈初始化 s-top=0; s-stacks-top=NULL; int InitQueue(LinkQueueCar *Q)/队列初始化 Q-head=new QueueNode ; if(Q-head!=NULL) Q-head-next=NULL; Q-rear=Q-head; return 1; else return -1; 第 9 页 共 19 页 void PRINT(CarNode *p,int room) /输出离开停车场的车辆情况 int A,B,C,D; coutn 车辆离开的时间:; cout(例:11 11)p-leave.hourp-leave.min; cout离开车辆的车牌号为:; coutnum; coutendl其到达时间为: reach.hour:reach.min; cout离开时间为: leave.hour:reach.hour; B=p-reach.min; C=p-leave.hour; D=p-leave.min; coutendl应交费用为: (C-A)*60+(D-B)*price元0) while(1) cout-endl; cout车辆离开登记开始:endl; coutendl请输入车在车场的位置/1-toproom; if(room=1 while(Enter-toproom)/从停车场堆栈向中转堆栈移动车辆,直到要离开车辆的位置停 止 Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; 第 10 页 共 19 页 Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1)/将中转堆栈中的车辆移回停车场堆栈 Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; cout-endl; cout车辆离开登记结算:rear) t=q-data; Enter-top+; coutendl便道的num号车进入车场第; couttop位置.endl; cout请输入numt-reach.hourt-reach.min; W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; delete q; else coutendl便道里没有车endl; else coutendl车场里没有车.0) cout-endl; coutendl车场内部车辆停靠情况:endl; coutendl位置 到达时间 车牌号endl; for(i=1;itop;i+) couti; cout reach.hour:reach.min; 第 11 页 共 19 页 cout numendl; else coutendl车场里没有车endl; cout-next; if(W-head!=W-rear) cout-endl; coutendl便道停靠车辆情况:endl; while(p!=NULL) coutendl车辆牌号:; coutnumnext; else coutendl便道里没有车.endl; cout-endl; void List(SeqStackCar S,LinkQueueCar W) /车辆列表显示函数 int flag,tag; flag=1; while(flag) cout-endl; cout车辆停靠查询开始:endl; coutendl请选择 1|2|3:endl; cout1.车场列表endl2.便道列表endl3.返回主菜单tag; if(tag=1|tag=3) break; else coutendl; cout错误,请选择 13 任意数字:; switch(tag) 第 12 页 共 19 页 case 1:List1( cout车辆停靠查询结束!endl;break; case 2:List2( cout车辆停靠查询结束!endl;break; case 3:flag=0;break; default: break; cout-endl; /主函数 int main( ) system(color 5F); / 创建绘图窗口 initgraph(640, 480); / 定义字符串 TCHAR s = _T( 制作人:王莹 肖林英); TCHAR ss = _T( 请按“Esc”键进入管理系统 ); TCHAR ssss = _T( 计算机科学与技术专业 13-1 班); TCHAR sss = _T(数据结构课程设计:停车场管理系统); / 创建绘图窗口 / 初始化 int w = textwidth(s);/ 获取字符串占用的宽度 int h = textheight(s);/ 获取字符串占用的高度 IMAGE tmp;/ 定义临时对象,保存被文字破坏的背景 / 绘制背景 for(int i = 0; i 640; i+) setlinecolor( HSLtoRGB(float)i, 1.0, 0.3) ); line(i, 0, i, 479); / 设置文字效果 settextcolor(WHITE);/ 设置文字颜色为白色 setbkmode(TRANSPARENT);/ 设置文字背景为透明色 / 绘制移动的文字 第 13 页 共 19 页 for(int j = 0; j 600; j+) / 绘制文字 myouttextxy(j, 200, s); myouttextxy(j, 250, ss); myouttextxy(j, 150, ssss); myouttextxy(j, 100, sss); Sleep(10); / 擦掉文字 myouttextxy(j, 200, NULL); myouttextxy(j, 250, NULL); myouttextxy(j, 150, NULL); myouttextxy(j, 100, NULL); / 退出 _getch(); closegraph(); SeqStackCar Enter,Temp;/初始栈,中转栈 LinkQueueCar Wait;/便道队列

温馨提示

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

最新文档

评论

0/150

提交评论