1、停车场管理系统 课 程 设 计 报 告课程设计名称:数据结构课程设计 系 别 : 学 生 姓 名 : 班 级 : 学 号 : 成 绩 : 指 导 教 师 : 开 课 时 间 :2013-2014学年第一学期设计题目一:停车场管理系统一、 实习目的 通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。二、 问题描述实现功能:车辆进入,车辆离开,计费,统计停车场的车辆,统计候车场中的车辆,查询车辆,统计今日车流量。三、 需求分析 该程序所做的工作是对停车场车辆的管理,为人们
2、进行车辆的计费、查询提供方便。此程序规定: 1.在车辆进入停车场时,需要输入以数字组成的车号; 2.输入错误的指令时会弹出警告窗口,按确定可以继续进行操作;3.程序的功能主要包括:车辆进入,车辆离开,计费,统计停车场的车辆,查询车辆,统计候车场中的车辆,统计今日车流量。四、 概要设计系统用到的数据有:#define N 4 /停车场最多停放的停车数#define M 3 /后车场最多停放的停车数#define Price 2 /每分钟停车费用用到的主要函数:void InitStack(SqStack *&s); /初始化一个停车场bool StackEmpty(SqStack *s); /
3、判断停车场是否有车bool StackFull(SqStack *s); /判断停车场是否满了bool Push(SqStack *&s,int e1,int e2); /车辆进入停车场bool Pop(SqStack *&s,int &e1,int &e2); /车辆离开停车场void DispStack(SqStack *s); /显示停车场中的车辆void InitQueue(SqQueue *&q); /初始化一个候车场bool QueueEmpty(SqQueue *q); /判断候车场是否有车bool QueueFull(SqQueue *q); /判断候车场是否为满bool en
4、Queue(SqQueue *&q,int e); /进入候车场bool deQueue(SqQueue *&q,int &e ); /离开停车场void DispQueue(SqQueue *q); /显示候车场中的车辆int SumQueue(SqQueue *q); /总计今日停车数量int Caidan(SqQueue *q); /菜单函数五、 详细设计(要有注释)#includedecl.hvoid InitStack(SqStack *&s) /初始化一个停车场 s=(SqStack *)malloc(sizeof(SqStack); s-top=-1;bool StackEmpt
5、y(SqStack *s) / 判断停车场是否有车 return (s-top=-1);bool StackFull(SqStack *s) /判断停车场是否满状态 return (s-top=N-1);bool Push(SqStack *&s,int e1,int e2) /进入停车场 if(s-top=N-1) return false; s-top+; s-CarNos-top=e1; s-CarTimes-top=e2; return true;bool Pop(SqStack *&s,int &e1,int &e2) /离开停车场 if(s-top=-1) return false
6、; e1=s-CarNos-top; e2=s-CarTimes-top; s-top-; return true;void DispStack(SqStack *s) /显示停车场中的车辆 int i; for(i=s-top;i=0;i-) printf(%d ,s-CarNoi); printf(n);void InitQueue(SqQueue *&q) /初始化一个候车场 q=(SqQueue *)malloc(sizeof(SqQueue); q-front=q-rear=0;bool QueueEmpty(SqQueue *q) /判断候车场是否有车 return (q-fron
7、t=q-rear);bool QueueFull(SqQueue *q) /判断候车场是否满了 return (q-rear+1)%(M)=q-front);bool enQueue(SqQueue *&q,int e) /进入候车场 if(q-rear+1)%(M)=q-front) return false; q-rear=(q-rear+1)%(M); q-CarNoq-rear=e; return true;bool deQueue(SqQueue *&q,int &e ) /离开候车场 if(q-front=q-rear) return false; q-front=(q-front
8、+1)%(M); e=q-CarNoq-front; return true;void DispQueue(SqQueue *q) /显示候车场中的车辆 int i; i=(q-front+1)%(M); printf( %d,q-CarNoi); while(q-rear-i+M)%(M)0) i=(i+1)%(M); printf( %d,q-CarNoi); printf(n);int SumQueue(SqQueue *q) /总计今日停车数量 return(q-num);int Caidan(SqQueue *q) system(color f0); /DOS指令,将背景改为白色,字
9、的颜色改为黑色 system(title 停车场管理系统); /DOS指令,把标题栏改成停车场管理系统 MessageBox(NULL, 按确定开始使用, 本停车场收费标准每分钟2元,欢迎使用, MB_OK); /弹出标题为欢迎使用本停车场管理系统的窗口,提示开始操作 int comm; int Carwei=0; int no,e1,ti,e2; int i,j; SqStack *St,*St1; SqQueue *Qu; InitStack(St); InitStack(St1); InitQueue(Qu); Qu-num=0; printf(t*欢迎使用停车场管理系统*nnn); p
10、rintf(tttt小组组长: nn); printf(ttt小组成员: nnn); printf(t1:车辆到达nt2:车辆离开nt3:显示停车场中的车辆nt4:显示后车场中的候车场nt5: 查询车辆nt6: 显示今日车流量nt0:退出系统:n); printf(请输入指令:); do scanf(%d,&comm); if(comm=1) Qu-num+; switch(comm) case 1: /汽车到达 printf( 车号:); scanf(%d,&no); for(i=0;itop&St-CarNoi!=no;i+); if(St-CarNoi=no) printf(该车牌号已存
11、在!请重新输入:n); printf(请输入指令:); else if(!StackFull(St) /停车场不满 time_t rawtime; /定义一个时间变量 struct tm *timeinfo; /定义时间指针 time(&rawtime); /获取时间,以秒计,从1970年1月一日起算,存于rawtime timeinfo = localtime ( &rawtime ); /转为当地时间,tm 时间结构 printf ( 进入本停车站时间为:%4d-%02d-%02d %02d:%02d:%02dn,1900+timeinfo-tm_year, 1+timeinfo-tm_m
12、on,timeinfo-tm_mday,timeinfo-tm_hour,timeinfo-tm_min,timeinfo-tm_sec); ti=timeinfo-tm_hour*60+timeinfo-tm_min; /记入进来时间 Push(St,no,ti); /将信息压入栈中的 printf( 停车场车位号:%dn,St-top+1); Carwei=St-top; printf(请输入指令:); else /停车场满 if(!QueueFull(Qu) /候车场不满 time_t rawtime; /定义一个时间变量 struct tm *timeinfo; /定义时间指针 tim
13、e(&rawtime); /获取时间,以秒计,从1970年1月一日起算,存于rawtime timeinfo = localtime ( &rawtime ); /转为当地时间,tm 时间结构 printf ( 进入本停车站时间为:%4d-%02d-%02d %02d:%02d:%02dn,1900+timeinfo-tm_year, 1+timeinfo-tm_mon,timeinfo-tm_mday,timeinfo-tm_hour,timeinfo-tm_min,timeinfo-tm_sec); ti=timeinfo-tm_hour*60+timeinfo-tm_min; /记入进入
14、时间 enQueue(Qu,no); /停车场满了之后,进入候车场 printf( 候车场车位号:%dn,Qu-rear); else printf( 候车场已满,不能停车n); printf(请输入指令:); break; case 2: /汽车离开 printf( 车号:); scanf(%d,&no); for(i=0;itop&St-CarNoi!=no;i+); if(itop) time_t rawtimes; /定义一个时间变量 struct tm *timeinfoo; /定义时间指针 time(&rawtimes); /获取时间,以秒计,从1970年1月一日起算,存于rawt
15、ime timeinfoo = localtime ( &rawtimes ); /转为当地时间,tm 时间结构 printf ( 离开本停车场的时间为:%4d-%02d-%02d %02d:%02d:%02dn,1900+timeinfoo-tm_year, 1+timeinfoo-tm_mon,timeinfoo-tm_mday,timeinfoo-tm_hour,timeinfoo-tm_min,timeinfoo-tm_sec); ti=timeinfoo-tm_hour*60+timeinfoo-tm_min; /记录离开时间 for(i=0;itop&St-CarNoi!=no;i
16、+); if(iSt-top) printf( 未找到该编号的汽车n); printf(t请输入指令:); else for(j=i+1;jtop;) Pop(St,e1,e2); Push(St1,e1,e2); /倒车到临时栈St1中 Pop(St,e1,e2); /该汽车离开 printf( 车号为%d汽车停车时间:%dn,no,ti-e2); printf( 车号为%d汽车停车费用:%dn,no,(ti-e2)*Price); char str10 = 0; int a =(ti-e2)*Price; sprintf(str, 请付%d块钱, a); /格式化停车费用,以便放入Mess
17、ageBox MessageBox(NULL,str, 账单, MB_OK); /弹出一个窗口指示收费 printf(请输入指令:); while(!StackEmpty(St1)/将临时栈St1重新回到St中 Pop(St1,e1,e2); Push(St,e1,e2); if(!QueueEmpty(Qu) /队不空时,将队头进栈St deQueue(Qu,e1); Push(St,e1,ti); /以当前时间开始计费 break; case 3: /显示停车场情况 if(!StackEmpty(St) printf( 停车场中的车辆:);/输出停车场中的车辆 DispStack(St);
18、 else printf( 停车场中无车辆n); printf(请输入指令:); break; case 4: /显示候车场情况 if(!QueueEmpty(Qu) printf( 候车场中的车辆:);/输出候车场中的车辆 DispQueue(Qu); else printf( 候车场中无车辆n); printf(请输入指令:); break; case 5: /按车牌号查询 printf(输入您所需要查找的车牌号:); scanf(%d,&no); for(i=0;itop&St-CarNoi!=no;i+); if(itop) printf(车牌号为%d的车位号:%dn,no,i+1);
19、 else if(Qu-frontrear) for(j=Qu-front;j=Qu-front&jrear&Qu-CarNoj!=no;j+); if(jrear&jQu-front) printf(车牌号为%d在候车场,其位置为:%d,no,j); else for(j=0;(j=Qu-front|jrear)&Qu-CarNoj!=no;j+); if(j=Qu-front|jrear) printf(车牌号为%d在候车场,其位置为:%d,no,j); else printf(没有该辆车!n); printf(请输入指令:); break; case 6: printf(今日车流量为:%
20、dn,Qu-num); printf(请输入指令:); break; case 0: /结束 if(!StackEmpty(St) printf( 停车场中的车辆:);/输出停车场中的车辆 DispStack(St); if(!QueueEmpty(Qu) printf( 候车场中的车辆:);/输出候车场中的车辆 DispQueue(Qu); printf(nnn); printf(t*谢谢使用!*nn); break; default: /其他情况 MessageBox(NULL, 输入指令错误!, NULL, MB_OK); /弹出窗口,警告输入错误 printf(请输入指令:); bre
21、ak; while(comm!=0); return 0;六、 测试分析七、 使用说明 首先运行程序,包括六个选项,0.退出系统. 1.车辆到达 2.车辆离开. 3.显示停车场中的车辆4.显示候车场中的车辆 5.查询车辆6.显示今日车流量 然后可以根据不同的需要选择不同的选项进行操作 最后退出程序。八、 运行程序过程中产生的问题及采取的措施 在这次编程中,我们组遇到最大的问题就是时间这个变量,虽然在网上查找到了怎样运用系统时间的代码,但是始终都是记录的第一辆车的时间,车子离开后,也是记录的车子进来的时间,后来翻阅了很多书和在网上查了很多原因,后来突发奇想在队的内部加一个变量,用来记入车流量,还
22、有在头文件出加一个time.h;在考虑到人性化和操作环境的美观性,是我考虑的,在网上找到了代码,可是始终行不通,后来看书才知道要加windows.h头文件;还有一个问题就是候车场车辆的查询问题,主要还是对循环队列的运用问题。九、 总结和展望(400字以上)一个星期多的课程设计结束了,这次我们是以小组为单位,共同完成一个程序,很多人认为我们这样的编程的安排很不好,会参杂着很多抄袭,但是我认为,这样更有利于我们互相取长补短,更好的把自己一学期所学的东西运用到上面。这次编程分工明确,有效率的完成了程序,并花了大量时间去美化程序,大家互相讨论,指出可以通过修改能够更好的使程序运行后变得很醒目。在修改的
23、时候,大家虽然想法很好,但是动手操作起来都不是很娴熟,要去翻翻书,这可能就是温故而知新吧。大家通知次课程设计也很好的掌握了以前的知识。在答辩过程中,老师表扬我们程序有很多值得大家去学习的东西,我们感到很高兴,我们通过自己的努力能够获得老师的肯定觉得很开心。其实在社会现实中,很多好的编程都是通过很多人在一起商讨研究出来的,只要大家心往一处想,力往一处使,没有完不成的。其实,在这次编程中最让我体会很深的是,我们在遇到难题时,大家没有把这个问题留给一个人去想,而是大家一起去讨论,一起去查阅书籍,一起去解决,这是团结的力量,让我们的程序得以很好的展示给大家。通过这次课程设计,我对自己以后的编程生涯有了更好的展望,我觉得编一个很大的代码不是很困难的,只要你用心去编,渴望把它编好,带着一份学习的心去编写,这样会很好的去便边学边完成,这样受益匪浅.,还有最大的就是耐心,耐心能让我们把事做的更好。希望我的耐心能使我以后的学习更加好。十、参考文献1 李建学等著.数据结构课程设计案例精编.清华大学出版社,20072 唐宁九等主编.数据结构与算法(C+版)实验和课程设计教程. 清华大学出版社,2008
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1