数据结构课程设计--停车场管理系统.doc
《数据结构课程设计--停车场管理系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计--停车场管理系统.doc(10页珍藏版)》请在咨信网上搜索。
实验二停车场管理 班级:A0712 学号:12 姓名:冷清淼 成绩:__________ 指导教师签名:__________ 一、问题描述 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端).若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。 设计要求: 1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 2.从终端读入汽车到达或离去的数据,每组数据包括三项: (1)是“到达"还是“离开”; (2)汽车牌照号码; (3)“到达"或“离开”的时刻。 3.与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用. 二、算法说明 1.数据结构说明 (1)用到两个堆栈:一个为车场栈;另一个为临时栈temp typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车场*/ (2) 一个队列结构,存储便道车辆信息: typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ 2.算法说明 (1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 图1 (2)以模块为单位分析算法 1、“到达"模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。如图2。 图2 2。“离开”模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3。 “显示”模块:显示模块有两个显示选项,即:车场与便道.如图4。 图4 三、测试结果 (一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性) 1.第一组测试用例 (1)测试输入:停车场的车辆离开,如下表: 服务选择 车牌号/车位 到达/离开时间 1 QH058 15:25 1 AB123 18:45 1 EA642 23:15 2 2 0:30 2 1 0:65(错误) (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。 (3)正确输出:第一次离开的是AB123,应交费3.45元.第二次时,当在输入65时,应该提示输入错误,重输。 (4)实际输出: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式控制. (6)当前状态:已改正 2.第二组测试用例 (1)测试输入:连续6辆车到达,如下表: 服务选择 车牌号 到达时间 1 A8828 7:56 1 S2296 8:25 1 WW666 8:45 1 HK456 15:50 1 GH999 12:30 1 DD555 13:40 (2) 测试目的:测试到达方法与列表显示方法能否正确完成。 (3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。 (4)实际输出: (5)错误原因:没有作出时间先后的判断,而是先输入先进入。 (6)当前状态:待修改 3.第三组测试用例 (1)测试输入:接上一步输入离开信息,下表: 服务选择 离开车位 离开时间 便道车进入时间 2 3 13:30 13:40 (2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。 (3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场. (4)实际输出: (5) 错误原因:没有错误。 (6)当前状态:通过 (二)测试结果分析 此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时,那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃.若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。 附录:源代码 ///系统说明:本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场. //在此系统中,车库容量设置为5,便于测试。在实际使用中可以对容量大小按实际情况设置。 #include〈iostream。h〉 #include〈stdio.h〉 #include<stdlib。h〉 #include〈string.h> #define MAX 5 /*车库容量,可以根据实际情况改变*/ #define price 0。01 /*一辆车每分钟费用,可变*/ typedef struct time { int hour; int min; }Time; /*时间结点*/ typedef struct node { char num[10]; Time reach; Time leave; }CarNode; /*车辆信息结点*/ typedef struct NODE { CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟停车场*/ typedef struct car { CarNode *data; struct car *next; }QueueNode; 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 PRINT(CarNode *p,int room); /*输出离开车辆的信息清单*/ void main() { system(”color F2”); /*设置系统颜色,本系统为白底绿字f2*/ SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) { cout<<” ※※※※ @欢迎使用本停车管理系统 @ ※※※※ "<〈endl; cout〈<"********************************************************”<<endl; cout〈〈” ※ ——※ 1。 车辆到达 ※ -- ※ "<〈endl; cout〈〈" ※ —-※ 2。 车辆离开 ※ -— ※ "<〈endl; cout<〈" ※ -—※ 3。 列表显示 ※ -- ※ ”〈〈endl; cout<〈" ※ —-※ 4。 退出系统 ※ —— ※ "<<endl; cout〈〈”********************************************************"〈<endl; cout<〈”!说明:请注意正确输入时间,在输入“时"后,按“ENTER"或者“空格”,再输入“分”.不要为非数字!”〈〈endl; cout<〈"请选择所需要的服务! (1-4).”〈<endl; while(1) { cin〉〉ch; if(ch>=1&&ch<=4)break; else cout<〈"输入错误!请选择:(1-4).”<〈endl; } switch(ch) { case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表显示信息*/ case 4:exit(0); /*退出主程序*/ default: break; } } } void InitStack(SeqStackCar *s) /*初始化栈*/ { int i; s—〉top=0; for(i=0;i〈=MAX;i++) s—>stack[s->top]=NULL; } int InitQueue(LinkQueueCar *Q) /*初始化便道*/ { Q-〉head=(QueueNode *)malloc(sizeof(QueueNode)); if(Q—〉head!=NULL) { Q-〉head—>next=NULL; Q-〉rear=Q-〉head; return(1); } else return(—1); } int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/ { CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode)); flushall(); cout〈〈"请输入车牌号(例:A1234):”<〈endl; gets(p—>num); if(Enter-〉top〈MAX) /*车场未满,车进车场*/ { Enter-〉top++; cout<〈”车辆在车场第”<〈Enter-〉top 〈〈”位置!”<<endl; cout<〈"请输入到达时间:(小时:分钟)"<〈endl; cin>>p—>reach.hour; while(p->reach。hour〈0||p—〉reach。hour〉23) //控制时间格式正确 { cout〈〈"输入错误!”〈<endl; cout〈〈"请重输入到达时间的时(0-23)!”〈〈endl; cin〉>p->reach。hour; } cin〉〉p—>reach。min; while(p—〉reach.min〈0||p—>reach。min〉59) //控制分钟输入正确 { cout<<”输入错误!”〈<endl; cout〈<”请重输入到达时间的分(0—59)!”〈〈endl; cin>〉p-〉reach.min; } Enter—〉stack[Enter—〉top]=p; return(1); } else /*车场已满,车进便道*/ { cout〈〈"车场已满,请在便道等待!”〈〈endl; t=(QueueNode *)malloc(sizeof(QueueNode)); t-〉data=p; t—〉next=NULL; W-〉rear-〉next=t; W—>rear=t; return(1); } } void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ { int room; CarNode *p; QueueNode *q; /*判断车场内是否有车*/ if(Enter—>top〉0) /*有车*/ { while(1) /*输入离开车辆的信息*/ { cout〈<”请输入车在车场的位置1—-”<<Enter—〉top〈〈”:”; 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); if((W-〉head!=W—〉rear)&&Enter->top〈MAX) /*车站是未满*/ { /*便道的车辆进入车场*/ q=W—>head—>next; p=q—〉data; /*p指向链队头*/ Enter—〉top++; cout〈〈”便道的”〈<p—〉num〈<"号车进入车场第”〈<Enter—〉top<<”位置!"〈〈endl; cout<〈"请输入现在的时间如(小时:分钟):"<<endl; cin〉〉p—〉reach.hour; if(p—〉reach。hour〈0||p-〉reach。hour>23) { cout〈〈”输入错误!"〈〈endl; cout〈<"请重输入到达时间的时(0—23)!"〈〈endl; cin〉〉p—〉reach。hour; } cin〉〉p—〉reach。min; if(p-〉reach.min〈0||p—>reach.min〉59) { cout〈<”输入错误!”〈〈endl; cout〈〈"请重输入到达时间的分(0—59)!”〈〈endl; cin>>p—〉reach.min; } Enter—〉stack[Enter—〉top]=p; W-〉head—〉next=q->next; if(q==W->rear) W—>rear=W-〉head; free(q); /*释放q地址*/ } else cout〈〈”便道里没有车!"〈〈endl; /*便道没车*/ } else cout〈〈”车场里没有车!"<<endl; /*车场没车*/ } void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/ { int A1,A2,B1,B2; cout〈<”请输入离开的时间:(小时:分钟)”<<endl; cin〉〉p-〉leave。hour; while(p->leave。hour〈0||p—〉leave。hour〉23) { cout〈<"输入错误!"〈<endl; cout〈〈"请重输入离开的时间的时(0—23)"〈〈endl; cin〉〉p-〉leave。hour; B1=p—>leave。hour; } cin〉>p—〉leave。min; if(p—〉leave。min〈0||p—〉leave.min〉59) { cout<〈”输入错误!"<〈endl; cout〈<”请重输入到达时间的分(0—59)!"〈〈endl; cin〉>p-〉leave。min; } cout〈<endl〈<”离开车辆的车牌号为:”<〈endl; puts(p—〉num); cout<〈”其到达时间为: "〈<p—〉reach。hour<<”:"〈<p—〉reach。min〈〈endl; cout<〈”离开时间为: "〈〈p->leave。hour<〈”:”〈〈p—〉leave.min<〈endl; A1=p—〉reach.hour; A2=p—〉reach.min; B1=p—>leave。hour; B2=p-〉leave。min; cout〈〈"应交费用为: "〈<(((B1-A1)*60+(B2-A2))+1440)%1440*price<〈"元!"〈<endl; free(p); } void List1(SeqStackCar *S) /*列表显示车场信息*/ { cout〈〈”您选择的是车场停车情况!”〈<endl; int i; if(S->top〉0) /*判断车站内是否有车*/ { cout<<” 位置 到达时间 车牌号”〈〈endl; for(i=1;i〈=S-〉top;i++) { cout<〈” "<<i<〈” ”〈〈S—〉stack[i]—〉reach.hour<<":”〈〈S-〉stack[i]—>reach.min〈〈" "<〈S—>stack[i]—>num<〈endl; } } else cout〈<”车场里没有车!”<<endl; } void List2(LinkQueueCar *W) /*列表显示便道信息*/ { cout〈〈”您选择的是便道停车情况!”〈<endl; int j=1; QueueNode *p; p=W-〉head—>next; if(W—〉head!=W-〉rear) /*判断通道上是否有车*/ { cout<<"等待车辆的车牌号码为:”〈<endl; while(p!=NULL) { //cout<<j; //puts(p—〉data—>num); cout〈<j〈<" ”<<p—〉data-〉num〈〈endl; p=p—>next; j++; } //开始时显示不正确,没有按照正常输出 } else cout<〈”便道里没有车!"; } void List(SeqStackCar S,LinkQueueCar W) /*列表界面*/ { int flag,tag; flag=1; while(flag) /*列表显示循环控制*/ { cout〈〈"请选择您要显示信息! (1—3):”<<endl; cout〈〈"※——1。车场——※”<〈endl; cout〈〈”※——2。便道——※"〈〈endl; cout〈〈"※-—3.返回-—※"〈<endl; while(1) { cin〉>tag; if(tag〉=1||tag<=3) break; else cout〈<”输入错误!请选择 (1—3):"〈<endl; } switch(tag) { case 1:List1(&S);break; /*列表显示车场信息*/ case 2:List2(&W);break; /*列表显示便道信息*/ case 3:flag=0;break; default: break; } } } 10- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 停车场 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文