数据结构--停车场管理.doc
《数据结构--停车场管理.doc》由会员分享,可在线阅读,更多相关《数据结构--停车场管理.doc(6页珍藏版)》请在咨信网上搜索。
实习报告 题目:停车场管理 姓名:袁韬博 学号:16030120021 完成日期:2017.10.23 一、 需求分析 1. 本题目要求建立一个可指定长度的栈,和长度可变化的队列,以当作停车场和便道的车的存放。 2. 本题目要求在停车场的车离开时,便道的车按照先后顺序进入一辆,并开始于此时记录时间。 3. 在本题目之中在便道的停车不计费用,在此题中应判断在停车场还是在便道的信息。 4. 本题目要求根据数据的第一位数据判断进入还是离开,根据要求输出信息。 5. 程序执行命令为:1.存入车辆时输出停车信息2.车辆离开时输出停车时间和应缴纳费用 3.输入‘E’时表示结束。 6. 测试数据: n=2,m(每小时停车费用)=3,(A,1,5)(A,2,10)(D,1,15)(A,3,20)(A,4,25)(A,5,30) (D,2,35)(D,4,40)(E,0,0)其中A表示为Arrival(到达),D表示为Departure(离开),E表示为End(结束)。 二、 概要设计 1. 设定栈的抽象数据类型定义 数据对象 :D={ai|ai∈SStop,i=1,2,3,······,n} 数据关系 :R={<ai>|ai∈D, i=1,2,3,······,n } 基本操作: initStack(&S,d) 操作结果:建立一个长度为d的空栈 Push(&S, &e, &d) 初始条件:栈已存在,长度为d 操作结果:如栈已满返回false,否则将e,压入栈中,返回true Pop(&S, e) 初始条件:栈已存在 操作结果:如栈为空返回false,否则弹栈入e,返回true 2. 设定队列的抽象数据类型定义 数据对象 :D={ai|ai∈SStop,i=1,2,3,······,n} 数据关系 :R={<ai>|ai∈D, i=1,2,3,······,n } *SQTypeInit() 操作结果:建立一个空队列 InSQType(*q, &data) 初始条件:队列已存在 操作结果:将data压入队列之中 *OutSQType( *q) 初始条件:队列已存在 操作结果:弹出队列,返回其指针。 3. 程序包含6个模块 1) 主程序模块:包含栈与队列的对象建立,输入值的判断以及函数的实现 2) 栈模块:实现停车场抽象数据类型 3) 队列模块:实现便道抽象数据类型 4) 函数模块:实现数据的输入,进入和离开的弹栈与压栈及输出操作 三、 详细设计 #include<stdio.h> #include<iostream> #include<malloc.h> using namespace std; typedef struct{ //定义车辆的结构体 char a; //进入与离开信息 int b; //车牌号 int c; //进入或离开时间 int d; //在停车场或便道的序号 int e; //在停车场为1,在便道为0 }SStop; typedef struct{ //定义栈结构体 SStop *base; //定义栈底指针 SStop *top; //定义栈顶指针 SStop a; //定义栈元素 }Stop; struct SQType //定义队列结构体 { SStop data[100]; //分配队列neicun int head; //定义队列头 int tail; //定义队列尾 }; SQType *SQTypeInit()//建立空队列 { SQType * q; //定义队列指针 if(q=new SQType) //建立队列 { q->head=0; //将队列的头的定为0 q->tail=0; //将队列的尾的定为0 return q; //返回队列指针 } else { return NULL; //建立不成功返回NULL } } int InSQType(SQType *q,SStop &data)//入队列操作 { if(q->tail==100) //如果队列满返回"队列已满!操作失败!" { cout<<"队列已满!操作失败!"<<endl; return 0; }else //如果队列不满将data入队列并设置该车的停车位置 { data.d=1-q->head+q->tail; q->data[q->tail++]=data; return 1; } } SStop *OutSQType(SQType *q)//出队列操作 { if(q->tail==q->head) //如果队列为空返回NULL { return NULL; }else //如果队列不为空出队列并返回此数据指针 { return &(q->data[q->head++]); } } bool initStack(Stop &S,int d){ //建立空栈 S.base=(SStop*)malloc(d*sizeof(SStop)); //分配长达d的内存 if(!S.base)return false; //分配不成功返回false S.top=S.base; //是栈顶指针等于栈底指针 return true; //建立成功返回ture } bool Push(Stop &S,SStop &e,int &d){ //压栈操作 if(S.top-S.base>=d)return false; //如果栈满返回false if(S.top==S.base)e.d=1; //如果栈为空将e的停车位置设为1 else e.d=1+S.top-S.base; //设置e的停车位置 *S.top++=e; //将e压入栈中 return true; //返回true } bool Pop(Stop &S,SStop &e){ //弹栈操作 if(S.top==S.base)return false; //如果栈为空返回false e=*--S.top; //弹栈并将其值赋给e return true; //返回true } int Scanf(SStop &e){ //输入数据操作 cin>>e.a; //输入操作 cin>>e.b; //输入车牌号 cin>>e.c; //输入进入或离开时间 e.d=0; return 0; } int Arrival(Stop &stop,SQType *wait,SStop &e,int &n,SStop a[],int &y){//进入操作 if(Push(stop,e,n)){ //如果栈不满将e压入栈 e.e=1; //将判断数据设置为1 a[y]=e;y++; //将数据存入数组 cout<<e.b<<"车停在停车场的"<<e.d<<"位置"<<endl ;//打印停车位置 } else{ //如果栈满将e入队列 InSQType(wait,e); e.e=0; //将判断数据数值为0 a[y]=e;y++; //将数据存入数组 cout<<e.b<<"车停在便道的"<<e.d<<"位置"<<endl; //打印停车位置 } } int Departure(Stop &stop,SStop a[],Stop &wait1,SQType *wait,SStop &e,int &n,int &y,int &rt){//离开操作 int o=0; SStop *q,u,mn,*kl; for(int i=0;i<y;i++){ //应用循环判断停车时间 if(e.b==a[i].b){ e.e=a[i].e; e.d=a[i].d; o=e.c-a[i].c; } } int ui=0; if(e.e==0){cout<<"该车在停车场停车时间为:0"<<" "<<"费用为0"<<endl; //如果未进入停车场,打印停车时间与费用 while(e.d-wait->head>1){ //将e之前的数据出队列再入队列 kl=OutSQType(wait); InSQType(wait,*kl);} if(wait!=NULL)OutSQType(wait); //将e出队列 while(wait->tail-e.d-wait->head>1&&wait!=NULL){// 将e之后的数据出队列再入队列 mn=*OutSQType(wait); InSQType(wait,mn);} } if(e.e==1){cout<<"该车在停车场停车时间为:"<<o<<" "<<"费用为:"<<o*rt<<endl; //如果在停车场之中,计算费用并输出 while(ui<n-e.d){ //将e之后的数据出栈 Pop(stop,u); Push(wait1,u,n); ui++; } Pop(stop,mn); //将e出栈 while(wait1.top!=wait1.base){//将先前出栈数据压入栈中 Pop(wait1,u); Push(stop,u,n); } q=OutSQType(wait); //从队列中出一个数据 if(q!=NULL){ Push(stop,*q,n); //将q压入栈中 for(int i=0;i<y;i++){ if(q->b==a[i].b){ a[i].e=1; //用循环将q的判断数据设置为1 a[i].c=e.c; //用循环将q的如停车场时间设为e离开时间 } }}} return 0; } int main(){ //主函数模块 SStop as[100]; //定义一个数组存储车辆信息 Stop stop,wait1; //定义两个栈 SQType *wait; //定义队列 int n,m,y=0; cout<<"输入停车场长度:"; //输入n cin>>n; cout<<"请输入每小时停车费用:"; //输入m cin>>m; initStack(stop,n); //建立空栈stop initStack(wait1,n); //建立空栈wait1 wait=SQTypeInit(); //建立空队列wait SStop a; loop:cout<<"请输入数据:"; Scanf(a); //应用函数输入数据 if(a.a=='A'){ //如果为进入执行进入操作 Arrival(stop,wait,a,n,as,y); } if(a.a=='D'){ //如果为离开执行离开操作 Departure(stop,as,wait1,wait,a,n,y,m); } if(a.a!='E')goto loop; cout<<"结束"<<endl; //如果为‘E’结束 return 0; } 四、 调试分析 1. 在此程序之中,一开始在栈与队列的建立是出现指针的错乱,检查后更改。 2. 在一开始未曾考虑过对车辆的停车位置的判断,在发现问题后将判断数据加上。 3. 在编写时为曾判断从何处出车,造成费用的计算混乱。 4. 在车队列的操作中未曾判断出队列指针是否为NULL,调试后改正。 5. 出队列的while循环操作的判断依据搞错致使陷入死循环,调试后改正。 五、 用户手册 1. 本程序在DOS命令界面下执行stop_port.exe 2. 按照提示语输入数据 3. 程序界面如下 六、 测试结果 输入:n=2 输入:m=3 输入:A 1 5 输出:1车停在停车场1位置 输入:A 2 10 输出:2车停在停车场 2位置 输入:D 1 15 输出:该车在停车场停车时间为:10 费用为:30 输入:A 3 20 输出:3车停在停车场 3位置 输入:A 4 25 输出:4车停在便道1位置 输入:A 5 30 输出:5车停在便道2位置 输入:D 2 35 输出:该车在停车场停车时间为:25 费用为:75 输入:D 4 40 输出:该车在停车场停车时间为:5 费用为:15 输入:E 0 0 输出:结束- 配套讲稿:
如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。
关于本文