停车场实习报告 -实习报告
实习报告题目:停车场的管理班级:姓名:学号:完成日期:一.需求分析1.以栈模拟停车场,以队列模拟车场外车道,按照以终端读入的输入数据序列进行模拟管理。每一组输入数据项:汽车到达活离去的信息,汽车车牌号码以及到达离去的时间。对每一组数输入数据操作后的信息为:若是车辆离去,则输出汽车在停车场内停留的时间和应缴纳的费用。栈以顺序结构实现,队列以链表结构实现。2.演示程序以用户和计算机的对话方式执行,即在计算机终端上现实提示信息之后,由用户在键盘上输入演示中规定的运算命令;3.程序执行的命令包括:1)创建停车场,和车道2)车辆进入3)车辆离去,时间,车位以及停车费的输出4.测试数据数据:(A 15)(A 210)(D 115)(A 320)(A 425)(A 530)(D 235)(D 440)(E 00)二.概要设计1.ADT StackParking{数据对象:D={ai|ai∈car,i=1,2.n}数据关系:R={ai-1,ai|ai-1,ai∈D,i=2,.n}a1为栈头,an为栈尾2.ADT ChannelQueue{数据对象:D={ai|ai∈car,i=1,2.n}数据关系:R={ai-1,ai|ai-1,ai∈D,i=2,.n}a1为队列头,an队列尾}基本操作:initparking(parking&S)初始化停车场,创建一个规定大小的栈initchannel(channel&Q)初始化创建车道inchannel(channel&Q,car e)传入查找到的元素指针,进行输出,并删除节点,实现查找inparking(parking&S,car e)将元素e,压入停车场put(parking&A,channel&B,car e)初始条件:停车场栈内有元素操作结果:删除车辆元素,返回车费push(parking&S,car e)插入e,为栈顶元素Defirst(channel&Q,car&e)初始条件:过道队列有元素操作结果:删除过道对头元素,用e返回}三.详细设计#include iostream using namespace std;#define STACK_INIT_SIZE 2#define STACKINCREMENT 3#define ERROR 0#define OVERFLOW-2#define fare 1typedef struct car//定义车的类型{char ch;int num;int time;car*next;};typedef struct parking//定义停车场{car*base;car*top;int length;int stacksize;};typedef struct channel//定义过道{car data;int length;//记录过道车辆数channel*next;car*front;car*rear;}*Schannel;int initparking(parking&S)//初始化停车场{S.base=(car*)malloc(STACK_INIT_SIZE*sizeof(car));if(!S.base)exit(OVERFLOW);S.length=0;S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 1;}int initchannel(channel&Q)//初始化过道{Q.rear=Q.front=(car*)malloc(sizeof(car));Q.length=0;if(!Q.front)exit(OVERFLOW);return 1;}int inchannel(channel&Q,car e)//进入过道{car*p;cout"车在过道上:"endl;Q.length++;p=(car*)malloc(sizeof(car));if(!p)exit(OVERFLOW);*p=e;p-next=Q.rear;Q.rear=p;return 1;}int inparking(parking&S,car e)//进入停车场{*S.top=e;S.top++;S.length++;//cout"(重置时间)输入"e.num"号车进入停车场时间:";//cin e.time;cout"停在第"S.length"车位"endl;return 1;}void put(parking&A,channel&B,car e){int boo=1;car*p;for(p=A.base;p A.top;p++)//在停车场内查找是否有车牌相同的车辆,返回错误信息{if(e.num==(*p).num){cout"车牌错误!"endl;boo=0;break;}}if(B.length!=0)//过道内如果有车,也进行一次查找,返回错误信息{p=B.rear;if(B.length==1){if(e.num==(*p).num){cout"车牌错误!"endl;boo=0;}p=p-next;}for(int i=0;i B.length-1;i++){if(e.num==(*p).num){cout"车牌错误!"endl;boo=0;break;}p=p-next;}}if(boo)//假如该车信息正确,讲车放进停车场,或者过道{if((A.top-A.base)=A.stacksize){inchannel(B,e);cout"过道上第"B.length"车位"endl;}else{inparking(A,e);}}}int push(parking&S,car e)//插入e为栈顶元素{*S.top++=e;S.length++;return 1;}int Pop(parking&S,car&e)//删除栈顶元素,用e返回{if(S.top==S.base)return ERROR;e=*--S.top;S.length--;return 1;}int Defirst(channel&Q,car&e)//删除过道顶元素,用e返回?{car*p,*v;//if(Q.front==Q.rear)return ERROR;for(p=Q.rear;p-next!=Q.front;)p=p-next;//用p指向过道第一辆车e=*p;if(Q.length==1){Q.rear=Q.front;free(p);}//只有一辆车,特殊处理else{for(v=Q.rear;v-next!=p;v=v-next);v-next=Q.front;free(p);}//删除第一辆车Q.length--;return 1;}int out(parking&A,parking B,channel&C,car e){car*p,*w,*v,*L;int boo=1;car h,k;for(p=A.base;p A.top;p++)//查找离开的车辆{if((*p).num==e.num){boo=0;if((e.time-(*p).time)=0)cout"时间错误!"endl;//如果时间错误,返回错误信息else{cout e.num"号车的车费:"(e.time-(*p).time)*fare endl;}//如不错误,返回停车费for(L=A.top-1;L p;L--){Pop(A,h);push(B,h);//将停前面的车,退出栈}Pop(A,k);for(L=B.top-1;L=B.base;L--){Pop(B,h);push(A,h);//退出栈的车,进入栈}if(C.length==0);//假如过道有车,将过道第一辆车,进入停车场else{Defirst(C,h);h.time=e.time;push(A,h);}break;}}if(boo)cout"不在停车场/状态错误!"endl;//如未找到车牌相同的车,返回错误信息if(C.rear!=C.front)//如果车在过道上,直接删除节点,不用车费{w=C.rear;if((*w).num==e.num)//只有一辆车特殊处理{C.rear=C.front;free(w);cout"不用停车费!"endl;}else{for(w=C.rear;w-next!=C.front;w=w-next){if((*w).num==e.num){for(v=C.rear;v-next!=w;v=v-next);cout"不用停车费!"endl;v-next=v-next-next;free(w);break;}}}}return 1;}void main(){car a;cout"初始定义停车费9元/小时,停车场能容2辆车"endl;int n;parking b,c;initparking(b);initparking(c);channel t;initchannel(t);cout"输入车的状态,车牌,到达/离开时间:";cin a.ch a.num a.time;while(a.ch!=E){n=a.time;if(a.ch==A){put(b,t,a);}else if(a.ch==D){out(b,c,t,a);}cout"输入车的状态,车牌,到达/离开时间:";cin a.ch a.num a.time;if(a.ch==E)break;if(a.time=n){cout"时间错误!请重新输入时间:";cin a.time;}}}主程序put out Inparking inchannel pop push Defirst四.调试分析1.在设计栈和队列时,在查找的.时候很容易出现内存非法访问的错误,所以要小心。2.总得感觉这个程序设计不够合理,没有调理,还需改进3.函数put,out的时间复杂度都为O(n+m)栈和队列总的空间大小五.用户手册1.本程序的运行环境为DOS操作系统,执行文件为Tingchechang.exe 2.进入程序后显示用户界面:3.按提示输入合法的密码,以回车符表示结束4.接受命令后执行相应的查找删除和现实相应的序列六.测试结果输入车的状态,车牌,到达/离开时间:A 15停在第1车位输入车的状态,车牌,到达/离开时间:A 210停在第2车位输入车的状态,车牌,到达/离开时间:D 115 1号车的车费:10输入车的状态,车牌,到达/离开时间:A 320停在第2车位输入车的状态,车牌,到达/离开时间:A 425过道上第1车位输入车的状态,车牌,到达/离开时间:A 530过道上第2车位输入车的状态,车牌,到达/离开时间:D 235 2号车的车费:25输入车的状态,车牌,到达/离开时间:D 440 4号车的车费:5输入车的状态,车牌,到达/离开时间:E 00七.附录由函数写在同一文件下,无其他源程序文件名MSN空间完美搬家到新浪博客!版权声明:此文自动收集于网络,若有来源错误或者侵犯您的合法权益,您可通过邮箱与我们取得联系,我们将及时进行处理。
本文地址:https://www.gunzhua.com/fanwen/shixibaogao/585579.html