收藏 分销(赏)

数据结构课程设计-停车场模拟管理系统报告(含源码).doc

上传人:精*** 文档编号:3999931 上传时间:2024-07-24 格式:DOC 页数:17 大小:66.04KB
下载 相关 举报
数据结构课程设计-停车场模拟管理系统报告(含源码).doc_第1页
第1页 / 共17页
数据结构课程设计-停车场模拟管理系统报告(含源码).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述
《数据结构课程设计》报告 专 业: 软件工程 班 级: T1123—03 学 号: 姓 名:XXX 课设题目:停车场模拟管理系统 指导教师: 马春江 成 绩: 2013—07—03 目 录 一、设计题目1 二、设计目的1 三、总体设计1 (一)问题描述1 (二)设计要求1 (三)数据结构1 四、详细设计2 (一)分析与实现2 (二)系统模块设计2 (三)界面设计3 五、设计结果与分析4 六、总结(收获和不足)5 (一)课设的不足5 (二)课设的收获5 附录程序源码5 参考文献:16 指导教师意见16 一、设计题目 停车场模拟管理系统. 二、设计目的 利用所学的知识,模拟设计一个停车场管理系统。通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。 三、总体设计 (一)问题描述 假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场.当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。 (二)设计要求 用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍. (三)数据结构 本课程设计使用的数据结构有:顺序栈和链式队列。 四、详细设计 (一)分析与实现 1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。 2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义print()函数实现. 3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车,要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作. 4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作,这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。 5、系统帮助则只需设计一个函数instruct(),将要说明的东西写进去,可以直接调用。 6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。 (二)系统模块设计 主函数 用户操作界面 车辆到达 车辆离开 列表显示 车辆查询 系统帮助 退出程序 (三)界面设计 1、主菜单界面 图 1 2、车辆到达界面 图 2 3、车辆离开界面 图 3 4、列表显示界面 图 4 列表显示菜单 图 5 停车场情况 图 6 便道等待情况 5、车辆查询界面 图 7 五、设计结果与分析 测试结果已达到我预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。 六、总结(收获和不足) (一)课设的不足 本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存.而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的. (二)课设的收获 历时四天,终于把数据结构课程设计做完了! 本次课设,我还是挑了比较简单的题目(停车场模拟管理系统)来做,在这个题目里,只用到了两个数据结构:顺序栈和链式队列。顺序栈模拟停车场,队列模拟便道.通过这次课设,确实对自己的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用.记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。当时间一天天逼近时,不能再拖了,就只能开工了.抱着试一试的心态,我参考着资料上面的指示,一步一步地做,居然做出了一个简单的系统;最后通过请教XX同学,对系统做了些完善(虽然还不是很完善),在此对他表示感谢! 通过这次课设,我再次强烈的感受到:只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的.勇于尝试,定有收获! 附录 程序源码 #include 〈iostream。h〉 #include 〈fstream.h> #include <iomanip.h〉 #include 〈windows。h〉 #include 〈stdio。h> #include <math.h〉 #define maxnum 5 #define price 0.5 enum returninfo{ok,error}; typedef struct time//时间结构体 { int hour; int minute; }TIME; typedef struct nodea//汽车结构体 { char number[10]; TIME reach; TIME leave; }CARNODE; typedef struct nodeb//停车场 { CARNODE *stack[maxnum+1]; int top; }SEQSTACKCAR; typedef struct car//车场中已停有的车链表结点 { CARNODE * data; struct car * next; }QUEUENODE; class LINKQUEUECAR//链表,存放等待进入停车场的车 { public: QUEUENODE * head; QUEUENODE * rear; LINKQUEUECAR() { head=rear=NULL; }; }; void stackpark(SEQSTACKCAR * s) { int i; s->top=0; for(i=0;i<=maxnum;i++) s—>stack[i]=NULL; } int queuehall(LINKQUEUECAR * q)// { if (q—〉head==NULL) { q->head=(QUEUENODE *)malloc(sizeof(QUEUENODE)); q—〉head->next=NULL; q->rear=q—〉head; return ok; } else return error; } void print(CARNODE * p,int room)//已选中的停车场中的车,确定其离开的时间,并显示计费 { int a1,a2,b1,b2; double Price; cout〈<"请输入车辆离开的时间(时和分用空格隔开):”; cin>〉p-〉leave.hour>〉p—〉leave。minute; while(p—〉leave.hour〈0||p—>leave.hour〉24||p—〉leave。minute〈0||p—〉leave。minute〉60) { cout<〈”时间输入有错,请重新输入:”; cin>〉p—〉leave。hour〉〉p—〉leave.minute; } cout<<"\n离开车辆的车牌号码:”; cout〈<p—>number; cout<〈"\n该车辆到达的时间为:”; if(p—〉reach。hour<10) cout〈<"0”<〈p—>reach。hour〈〈”:"; else cout〈〈p-〉reach.hour<<”:”; if(p—〉reach。minute<10) cout〈<"0”<〈p—>reach。minute<〈endl; else cout〈〈p-〉reach。minute〈〈endl; cout〈<"离开时间为:”; if(p-〉leave.hour〈10) cout<〈”0”〈<p->leave。hour〈<":”; else cout<〈p—〉leave。hour〈<":”; if(p—〉leave。minute〈10) cout<<"0"<〈p—>leave.minute〈〈endl; else cout〈〈p->leave.minute<<endl; a1=p—>reach。hour; a2=p—〉reach。minute; b1=p—>leave.hour; b2=p-〉leave。minute; Price=((b1—a1)*60+(b2-a2))*price; if(Price〈1) Price=1; cout〈〈"\n该车应交费用为:"〈〈setprecision(2)〈<setiosflags(ios::fixed)<〈Price〈〈”元"〈<endl; free(p); } int Arrive(SEQSTACKCAR * enter,LINKQUEUECAR *w)//车进入停车场 { CARNODE * p; QUEUENODE * t; p=(CARNODE *)malloc(sizeof(CARNODE)); cout<<"请输入车牌号码(鄂C12345):”; cin>〉p-〉number; if(enter-〉top<maxnum) { enter->top++; cout<<”\n车辆在停车场的第”<<enter—〉top<〈"个位置。”<<endl; cout〈〈”请输入车辆到达的时间的时和分(用空格隔开):"; cin>>p—〉reach。hour〉〉p—〉reach.minute; while(p->reach。hour<0||p—〉reach.hour>24||p—〉reach。minute<0||p—〉reach.minute〉60) { cout<<”时间输入有错,请重新输入:”; cin〉〉p—〉reach.hour〉〉p—〉reach。minute; } enter->stack[enter—〉top]=p; cout〈〈"车辆停放完毕!"<〈endl; return ok; } else { cout〈〈"\n该车辆需在便道等待!\n"〈<flush; t=(QUEUENODE *)malloc(sizeof(QUEUENODE)); t-〉data=p; t—〉next=NULL; w—〉rear-〉next=t; w—>rear=t; return ok; } } void Leave(SEQSTACKCAR * enter,SEQSTACKCAR * temp,LINKQUEUECAR * w)//确定要离开的车所在的车道 { int room; CARNODE *p,* t; QUEUENODE * q; if (enter—〉top〉0) { while (1) { cout<<”\n请输入车所在停车场的位置:”; cin〉>room; if(room>=1&&room〈=enter—〉top) break; } while (enter—〉top>room) { temp->top++; temp-〉stack[temp—>top]=enter—〉stack[enter—〉top]; enter—〉stack[enter-〉top]=NULL; enter—>top——; } p=enter—>stack[enter-〉top]; enter—〉stack[enter—>top]=NULL; enter-〉top—-; while (temp—>top〉=1) { enter->top++; enter-〉stack[enter—〉top]=temp-〉stack[temp-〉top]; temp—〉stack[temp—〉top]=NULL; temp—〉top——; } print(p,room); cout<〈”\n车辆已离开!"<〈endl; system("pause"); if ((w—〉head!=w—〉rear)&&enter-〉top〈maxnum) { q=w->head—〉next; t=q—>data; enter—〉top++; cout〈〈"\n便道的”〈〈t—〉number〈〈”号车进入停车场”〈〈enter->top<<”号位置."〈〈endl; cout〈<”请输入现在的时间(时和分用空格隔开):”; cin〉〉t—〉reach。hour〉>t—〉reach。minute; while(t—〉reach.hour<0||t-〉reach.hour>24||t—>reach.minute〈0||t—>reach。minute〉60) { cout〈〈"时间输入有错,请重新输入:”; cin〉〉t->reach。hour>>t->reach.minute; } w—〉head-〉next=q—〉next; if(q==w—〉rear) w—>rear=w—>head; enter->stack[enter—>top]=t; free(q); } } else { cout<〈”停车场里没有车!"〈〈endl〈<flush; system("pause"); } } int searchcar(SEQSTACKCAR * enter,LINKQUEUECAR * w) { char num[256]="”; int pos=enter—〉top,flag=0; QUEUENODE *p=NULL; cout<<"请输入要查询的车牌号:”<〈endl; cin>>num; while(pos〉0) { if(!strcmp(enter—>stack[pos]—〉number,num)) { flag=1; break; } pos——; } if(flag) { cout〈〈”车位号 到达时间 车牌号\n"; if(pos<10) cout<〈” ”〈〈”0”〈〈pos〈〈"\t\t”; else cout〈<" "〈〈pos〈<”\t\t"; if(enter—>stack[pos]—〉reach。hour〈10) cout<〈"0"〈<enter-〉stack[pos]-〉reach.hour〈〈":”; else cout〈〈enter—〉stack[pos]—〉reach。hour〈<”:"; if(enter—>stack[pos]—〉reach.minute〈10) cout〈〈"0"<<enter->stack[pos]—〉reach。minute; else cout<〈enter—〉stack[pos]—>reach。minute; cout〈<" \t\t"〈〈enter-〉stack[pos]—〉number〈<endl; system(”pause"); } else { p=w—〉head—>next; while(p) { if(!strcmp(p—〉data—〉number,num)) { flag=1; break; } p=p->next; } if(flag) { cout〈<”\n 车牌号 状态\n”; cout〈<” "〈〈p—〉data-〉number〈<”\t\t等待中”<〈endl〈<endl; system(”pause"); } else { cout〈<”停车场内没有此车!”<〈endl; system(”pause"); } } return flag; } void list1(SEQSTACKCAR * s)//显示停车场中的停车情况 { int i; if (s—〉top〉0) { cout〈<”\n停车场:"〈〈endl; cout〈〈”车位号 到达时间 车牌号\n”; for (i=1;i〈=s-〉top;i++) { if(i〈10) cout〈〈" 0”〈〈i〈<”\t\t ”; else cout<<” ”〈<i〈<"\t\t ”; if(s-〉stack[i]—>reach。hour〈10) cout〈〈”0"〈〈s—>stack[i]—〉reach。hour〈<”:"; else cout〈<s—〉stack[i]—〉reach.hour<〈”:”; if(s—>stack[i]—>reach。minute<10) cout〈<"0"〈〈s-〉stack[i]—〉reach。minute<〈"\t\t"; else cout〈〈s-〉stack[i]-〉reach.minute〈〈”\t\t”; cout<〈s->stack[i]—〉number〈〈endl; } cout〈<endl; } else { cout<<”\n停车场里没有车!”〈〈endl; system("pause”); } } void list2(LINKQUEUECAR * w)//显示正在等待进入停车场的车 { QUEUENODE * p; p=w->head—〉next; if(w—>head!=w—〉rear) { cout<<”\n等待车辆的号码有:"; while(p!=NULL) { cout<〈p->data—〉number〈〈” ”; p=p—〉next; } cout〈〈endl; } else { cout<<”\n便道里没有车!”〈<endl; system("pause"); } } void list(SEQSTACKCAR s,LINKQUEUECAR w)//列表显示 { int flag,tag; flag=1; while(flag) { system(”cls"); cout〈〈"**************************”〈〈endl; cout〈〈"| 列表显示菜单 |”〈<endl; cout〈〈”**************************"<〈endl; cout〈<”| |”〈<endl; cout<<"| 1.车场停车情况 |”<<endl; cout〈〈”| 2.便道车辆等待情况 |”<<endl; cout〈〈”| 3。返回主菜单 |”〈〈endl; cout〈<”| |”〈〈endl; cout〈〈"**************************"〈〈endl; cout〈<”请输入你的选择:"; cin〉〉tag; while(tag〈1||tag>3) { cout〈<”你的输入有错!请重新输入:”; cin〉〉tag; } switch(tag) { case 1: system("cls"); list1(&s); system(”pause”); break; case 2: system(”cls"); list2(&w); system("pause”); break; case 3: system(”cls"); flag=0; break; default: break; } } } int instruct()//说明 { rewind(stdin); cout<〈” =====================欢迎阅读系统说明=========================”<〈endl; cout〈<" || ||"<<endl; cout〈〈” || 请仔细阅读以下说明: ||"〈〈endl; cout〈〈” || ||”〈<endl; cout<<” || 1、本系统设置车位数固定,车位数为2(便于操作); ||”〈<endl; cout<〈” || 2、该停车场最低收费1元,小于1元均按1元收费; ||”〈〈endl; cout〈<" || 3、时间输入:按24进制输入,时和分用空格隔开; ||"<<endl; cout〈<” || 4、车牌输入:先输入一个省号简称和字母,后输入一串数字 ;||”〈<endl; cout〈〈" || 5、车辆离开:当输入车位号时,再输入离开的时间; ||”<〈endl; cout<<" || 车辆离开后,便道的第一辆车进入停车场; ||”<〈endl; cout<〈" || 6、车辆停留时间最长为一天,驶离时间应大于驶入时间; ||”<〈endl; cout〈〈" || ||"〈〈endl; cout〈〈" =======================停车场,谢谢阅读=======================”〈〈endl; return 0; } int main() { SEQSTACKCAR enter,temp; LINKQUEUECAR wait; int choice; system(”color f0”); stackpark(&enter); stackpark(&temp); queuehall(&wait); while(1) { system(”cls"); cout<〈" ╭────────────╮ ”<〈endl; cout〈〈” | 停车场模拟管理系统 | "<〈endl; cout<<" | T1123—03— | ”<〈endl; cout〈〈" | 2013。7。1 | ”〈〈endl; cout〈〈”╰─────────────╯"〈〈endl; cout〈<” =========================== "<<endl; cout〈〈" ||*******功能菜单********|| "〈〈endl; cout〈<" || || ”〈〈endl; cout〈〈” || 1。车辆到达 || ”<〈endl; cout<〈" || 2。车辆离开 || ”〈〈endl; cout〈〈" || 3.列表显示 || ”〈<endl; cout〈〈" || 4.系统帮助 || ”〈〈endl; cout〈<” || 5。车辆查询 || ”〈〈endl; cout〈<" || 0.退出系统 || "〈<endl; cout<〈” || || ”〈〈endl; cout〈〈” || 收费说明:0。5元/分 || ”〈〈endl; cout〈<" || 竭诚为您服务! || ”<〈endl; cout<<" || || ”〈<endl; cout<〈" =========================== ”〈〈endl; cout〈〈" 请选择操作:"; cin>>choice; rewind(stdin); while (choice<0||choice〉5) { cout<〈"你的输入有错,请重新输入:”; cin>>choice; } switch(choice) { case 1: system(”cls”); Arrive(&enter,&wait); system(”pause”); break; case 2: system(”cls"); Leave(&enter,&temp,&wait); break; case 3: system(”cls"); list(enter,wait); break; case 4: system(”cls”); instruct(); system("pause”); break; case 5: system("cls"); searchcar(&enter,&wait); break; case 0: system(”cls”); cout〈<”谢谢使用本系统!"<<endl; exit(0); default: break; } } return 0; } 参考文献: [1] 谭浩强。C程序设计(第三版).清华大学出版社. [2] 马春江,付勇智,孟繁军。数据结构与程序构建。清华大学出版社。 [3] 滕国文。数据结构课程设计。清华大学出版社. 指导教师意见 第 15 页 共 17 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服