数据结构课程设计-停车场模拟管理系统报告(含源码).doc
《数据结构课程设计-停车场模拟管理系统报告(含源码).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计-停车场模拟管理系统报告(含源码).doc(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 页- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 停车场 模拟 管理 系统 报告 源码
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文