数据结构课程设计报告项目名称:停车管理系统姓名:鉏飞祥学号:E21414018专业:软件工程2016-6-28安徽大学计算机科学与技术学院1鉏飞祥E214140181.需求分析1.1问题描述停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。1.2基本要求(1)输入的形式和输入值的范围;七位字符车牌号空格时间(12:30)如:A12345612:30(2)输出的形式;车牌号时间如:A12345612:30(3)程序所能达到的功能。模拟车子排队和进出车库的情况,并且根据时间计费,随时显示当前车库车辆情况。2.概要设计(1)数据结构每个汽车的基本元素:structcar{charid[8];inth;/*时*/intm;/*分*/2鉏飞祥E21414018structcar*next;};栈的基本元素:structsqstack{structcar*base;structcar*top;intstacksize;};(2)程序模块voidintstack(structsqstack&S)/*构造栈*/voidpush_stack(structsqstack&S,structcar*e)/*e入栈*/voidpop_stack(structsqstack&S,structcar*e)/*出栈顶元素到e*/voidcreat_q()/*创建队列*/voidpush_q(structcar*p)/*车辆入队*/structcar*pop_q()/*车辆出队*/voidcome_in()/*车辆离开*/voidgo_out()/*车辆进入*/voidinterface()/*主菜单*/3鉏飞祥E21414018(4)各模块之间的调用关系以及算法设计Interface输入:1230Intstackpush—stackCreat_qpush—qCome-inGo_outPop_stackpop_qPrintReturn04鉏飞祥E214140183.详细设计流程图及模块调用如下:0321是否否是否开始创建队列,栈主菜单22输出车库车辆车辆进入栈是否满进入队列进入栈车辆离开是否在栈中是否在队列找不到元素出列显示费用结束程序5鉏飞祥E214140184.测试与分析主界面如下:车库中假设最多停三辆车,加入进入四辆车abcd,则d需要在便道排队:此时若b车开走,显示费用信息,则在便道的d车进入车库:6鉏飞祥E21414018若此时有车进入,则继续在便道排队:5.附录源程序清单:#includestdio.h#includestdlib.h#includemalloc.h#includestring.h#defineMAX3/*宏定义车库最大车辆*/structcar{charid[8];inth;/*时*/intm;/*分*/structcar*next;};7鉏飞祥E21414018intn=0;/*当前车库内的车辆数*/intm=0;/*当前便道的车辆数*/structcar*p1;structsqstack{structcar*base;structcar*top;intstacksize;};structsqstackS1,S2;voidintstack(structsqstack&S){S.base=(structcar*)malloc(MAX*sizeof(structcar));S.top=S.base;S.stacksize=MAX;}voidpush_stack(structsqstack&S,structcar*e){strcpy(S.top-id,e-id);S.top-h=e-h;S.top-m=e-m;S.top++;}voidpop_stack(structsqstack&S,structcar*e){S.top--;strcpy(e-id,S.top-id);e-h=S.top-h;e-m=S.top-m;}voidcreat_q(){p1=(structcar*)malloc(sizeof(structcar));8鉏飞祥E21414018p1-next=NULL;}voidpush_q(structcar*p){structcar*p2;p2=p1;while(p2-next!=NULL){p2=p2-next;}p2-next=p;p-next=NULL;}structcar*pop_q(){structcar*p;p=p1-next;p1-next=p1-next-next;returnp;}voidcome_in(){voidinterface();printf(请输入7位车辆车牌号和进入时间\n例如:\nA12345612:30\n);if(n==MAX){structcar*p;p=(structcar*)malloc(sizeof(structcar));scanf(%s,p-id);scanf(%d:%d,&p-h,&p-m);push_q(p);m++;}else{structcar*p;p=(structcar*)malloc(sizeof(structcar));scanf(%s,p-id);scanf(%d:%d,&p-h,&p-m);push_stack(S1,p);9鉏飞祥E21414018n++;}interface();}voidgo_out(){structcar*pop_q();voidinterface();printf(请输入7位车牌号和离开时间\n);charb[8];inth1;intm1;scanf(%s,b);scanf(%d:%d,&h1,&m1);inti;intbiaozhi=0;for(i=0;in;i++){if(strcmp(b,(S1.base+i)-id)==0){printf(%s已离开\n计费信息:\n进入时间%d:%d,离开时间%d:%d,(每分钟1元)\n,b,(S1.base+i)-h,(S1.base+i)-m,h1,m1);printf(费用为:%d元\n,(60*(h1-(S1.base+i)-h)+m1-(S1.base+i)-m)*1);intj;for(j=0;jn-i;j++){structcar*p2;p2=(structcar*)malloc(sizeof(structcar));pop_stack(S1,p2);push_stack(S2,p2);}structcar*pp;pop_stack(S2,pp);for(j=1;jn-i;j++)10鉏飞祥E21414018{pop_stack(S2,pp);push_stack(S1,pp);printf(222\n);}n--;biaozhi=1;if(p1-next!=NULL)/*若便道有车,则便道的车进入车库*/{structcar*ppp;ppp=pop_q();push_stack(S1,ppp);n++;}break;}}if(biaozhi==0){structcar*p,*pp;pp=p1;while(pp-next!=NULL){p=pp;pp=pp-next;if(strcmp(b,pp-id)==0){printf(%s已离开\n,b);printf(%s已离开\n计费信息:\n进入时间%d:%d,离开时间%d:%d,(每分钟1元)\n,b,pp-h,pp-m,h1,m1);printf(费用为:%d元\n,(60*(h1-pp-h)+m1-pp-m)*1);p-next=pp-next;m--;biaozhi=1;break;}}}if(biaozhi==0)printf(找不到%s\n,b);interface();11鉏飞祥E21414018}voidprint(){voidpush_stack(structsqstackS,structcar*e);voidpop_stack(structsqstackS,structcar*e);voidinterface();if(n==0)printf(没有车辆\n);else{printf(**车库现有车辆信息:\n);inti;for(i=0;in;i++)printf(%s%d:%d\n,(S1.base+i)-id,(S1.base+i)-h,(S1.base+i)-m);structcar*p;p=p1;if(p-next==NULL)printf(**便道无车辆\n);else{printf(**便道现有车辆信息:\n);while(p-next!=NULL){p=p-next;printf(%s%d:%d\n,p-id,p-h,p-m);}}}interface();}voidinterface(){inti;printf(请输入操作指令\n\n1:汽车开入\n2:车辆离开\n3:显示当前车辆信息\n0:结束程序\n*******************\n);scanf(%d,&i);switch(i){case0:return;break;12鉏飞祥E21414018case1:come_in();break;case2:go_out();break;case3:print();break;};}intmain(){system(colora0);//可以写成red调出颜色组system(title车库管理系统);//设置cmd窗口标题printf(****************欢迎使用停车管理系统*********************\n\n);system(date/T);system(TIME/T);creat_q();intstack(S1);intstack(S2);interface();return0;}6.用户使用手册欢迎使用车辆管理系统。输入1,表示车辆进入输入七位车牌号和进入时间,如:A12378912:30输入2,表示车辆离开输入离开车牌号和时间输入3,表示显示车库信息输入0,结束程序谢谢使用!