1、数据结构课程设计报告项目名称:停车管理系统安徽大学计算机科学与技术学院 姓名:鉏飞祥 学号:E21414018 专业:软件工程20166-281 。需求分析1.1问题描述停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离
2、开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序.1.2基本要求(1) 输入的形式和输入值的范围;七位字符车牌号 空格 时间(12:30)如:A123456 12:30(2) 输出的形式;车牌号 时间如:A123456 12:30(3) 程序所能达到的功能.模拟车子排队和进出车库的情况,并且根据时间计费,随时显示当前车库车辆情况。2。 概要设计(1)数据结构 每个汽车的基本元素:struct carchar id8;int h;/时*/int m;/分/struct car next;;栈的基本元素:structsqstackstruct car base;
3、struct car top;intstacksize;(2)程序模块void intstack(structsqstack &S)/构造栈*/voidpush_stack(structsqstack &S,struct car *e)/*e入栈/voidpop_stack(structsqstack S,struct car *e)/出栈顶元素到e/void creat_q()/创建队列/void push_q(struct car p)/车辆入队/struct car pop_q()/车辆出队*/void come_in()/*车辆离开/void go_out()/*车辆进入*/void
4、interface()/主菜单/(4) 各模块之间的调用关系以及算法设计Interface输入:1230Intstack pushstackCreat_q pushqCome-inGo_outPop_stack pop_qPrintReturn 03。 详细设计流程图及模块调用如下:开始创建队列,栈结束程序主菜单0223输出车库车辆21车辆离开车辆进入是否在栈中进入队列栈是否满是否进入栈否是否在队列是元素出列显示费用否找不到4。 测试与分析主界面如下:车库中假设最多停三辆车,加入进入四辆车abcd,则d需要在便道排队:此时若b车开走,显示费用信息,则在便道的d车进入车库:若此时有车进入,则继续
5、在便道排队:5。 附录源程序清单:includestdio。h#includeincludemalloc。hincludeid);S。top-h=e-h;S.topm=em;S.top+;voidpop_stack(structsqstack &S,struct car *e)S。top-;strcpy(eid,S。topid);e-h=S.toph;e-m=S。topm;voidcreat_q() p1=(struct car )malloc(sizeof(struct car); p1next=NULL;voidpush_q(struct car *p)struct car p2; p2=
6、p1;while(p2next!=NULL) p2=p2next; p2next=p;pnext=NULL;struct car * pop_q()struct car p; p=p1-next; p1next=p1nextnext;return p;voidcome_in()void interface();printf(请输入7位车辆车牌号和进入时间n例如:nA123456 12:30n);if(n=MAX) struct car p; p=(struct car)malloc(sizeof(struct car);scanf(s,pid);scanf(”d:d”,&ph,pm);push
7、_q(p);m+; else struct car p; p=(struct car)malloc(sizeof(struct car);scanf(s”,p-id);scanf(%d:d”,p-h,&p-m);push_stack(S1,p);n+; interface();voidgo_out()struct car* pop_q();void interface();printf(请输入7位车牌号和离开时间n”);char b8;int h1;int m1;scanf(%s,b);scanf(”d:%d”,h1,&m1);inti;intbiaozhi=0;for(i=0;in;i+)
8、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);int j;for(j=0;jn-i;j+) struct car p2; p2=(struct car )malloc(sizeof(struct car);pop_stack(S1,p2);push_stack(S2,p2); struct car pp
9、;pop_stack(S2,pp);for(j=1;jni;j+) pop_stack(S2,pp);push_stack(S1,pp);printf(”222n); n-;biaozhi=1;if(p1-next!=NULL) /*若便道有车,则便道的车进入车库/ struct car ppp;ppp=pop_q();push_stack(S1,ppp);n+; break; if(biaozhi=0) struct car *p,*pp;pp=p1;while(ppnext!=NULL) p=pp;pp=ppnext;if(strcmp(b,pp-id)=0) printf(”%s 已离开
10、n,b);printf(”%s 已离开n计费信息:n进入时间%d:%d,离开时间d:d,(每分钟1元)n”,b,pp-h,ppm,h1,m1);printf(”费用为:d元n,(60(h1-pp-h)+m1ppm)*1);p-next=pp-next;m;biaozhi=1;break; if(biaozhi=0)printf(”找不到sn”,b);interface();void print()voidpush_stack(structsqstackS,struct car e);voidpop_stack(structsqstackS,struct car e);void interfac
11、e();if(n=0)printf(没有车辆n”);else printf(车库现有车辆信息:n);inti;for(i=0;im);struct car *p; p=p1;if(pnext=NULL)printf(便道无车辆n”);else printf(便道现有车辆信息:n”);while(pnext!=NULL) p=pnext;printf(” %s %d:dn,p-id,p-h,pm); interface();void interface()inti;printf(” 请输入操作指令nn 1:汽车开入n 2:车辆离开n 3:显示当前车辆信息n 0:结束程序n*n);scanf(”%
12、d,i);switch(i) case 0:return ;break;case 1:come_in();break;case 2:go_out();break;case 3:print();break; ;int main() system(color a0); /可以写成 red 调出颜色组 system(”title 车库管理系统”); /设置cmd窗口标题printf(” *欢迎使用停车管理系统*nn);system(date /T”);system(”TIME /T”);creat_q();intstack(S1);intstack(S2);interface();return 0;6. 用户使用手册欢迎使用车辆管理系统.输入1,表示车辆进入输入七位车牌号和进入时间,如:A123789 12:30输入2,表示车辆离开输入离开车牌号和时间输入3,表示显示车库信息输入0,结束程序谢谢使用!8鉏飞祥E21414018