停车场管理系统.docx
《停车场管理系统.docx》由会员分享,可在线阅读,更多相关《停车场管理系统.docx(15页珍藏版)》请在冰豆网上搜索。
![停车场管理系统.docx](https://file1.bdocx.com/fileroot1/2023-4/2/4d344a05-e44b-4d3d-b9d7-900110ea0ed9/4d344a05-e44b-4d3d-b9d7-900110ea0ed91.gif)
停车场管理系统
课程设计报告
课程设计名称:
数据结构课程设计
系别:
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:
2013-2014学年第一学期
设计题目一:
停车场管理系统
一、实习目的
通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。
二、问题描述
实现功能:
车辆进入,车辆离开,计费,统计停车场的车辆,统计候车场中的车辆,查询车辆,统计今日车流量。
三、需求分析
该程序所做的工作是对停车场车辆的管理,为人们进行车辆的计费、查询提供方便。
此程序规定:
1.在车辆进入停车场时,需要输入以数字组成的车号;
2.输入错误的指令时会弹出警告窗口,按确定可以继续进行操作;
3.程序的功能主要包括:
车辆进入,车辆离开,计费,统计停车场的车辆,查询车辆,统计候车场中的车辆,统计今日车流量。
四、概要设计
系统用到的数据有:
#defineN4//停车场最多停放的停车数
#defineM3//后车场最多停放的停车数
#definePrice2//每分钟停车费用
用到的主要函数:
voidInitStack(SqStack*&s);//初始化一个停车场
boolStackEmpty(SqStack*s);//判断停车场是否有车
boolStackFull(SqStack*s);//判断停车场是否满了
boolPush(SqStack*&s,inte1,inte2);//车辆进入停车场
boolPop(SqStack*&s,int&e1,int&e2);//车辆离开停车场
voidDispStack(SqStack*s);//显示停车场中的车辆
voidInitQueue(SqQueue*&q);//初始化一个候车场
boolQueueEmpty(SqQueue*q);//判断候车场是否有车
boolQueueFull(SqQueue*q);//判断候车场是否为满
boolenQueue(SqQueue*&q,inte);//进入候车场
booldeQueue(SqQueue*&q,int&e);//离开停车场
voidDispQueue(SqQueue*q);//显示候车场中的车辆
intSumQueue(SqQueue*q);//总计今日停车数量
intCaidan(SqQueue*q);//菜单函数
五、详细设计(要有注释)
#include"decl.h"
voidInitStack(SqStack*&s)//初始化一个停车场
{
s=(SqStack*)malloc(sizeof(SqStack));
s->top=-1;
}
boolStackEmpty(SqStack*s)//判断停车场是否有车
{
return(s->top==-1);
}
boolStackFull(SqStack*s)//判断停车场是否满状态
{
return(s->top==N-1);
}
boolPush(SqStack*&s,inte1,inte2)//进入停车场
{
if(s->top==N-1)
returnfalse;
s->top++;
s->CarNo[s->top]=e1;
s->CarTime[s->top]=e2;
returntrue;
}
boolPop(SqStack*&s,int&e1,int&e2)//离开停车场
{
if(s->top==-1)
returnfalse;
e1=s->CarNo[s->top];
e2=s->CarTime[s->top];
s->top--;
returntrue;
}
voidDispStack(SqStack*s)//显示停车场中的车辆
{
inti;
for(i=s->top;i>=0;i--)
printf("%d",s->CarNo[i]);
printf("\n");
}
voidInitQueue(SqQueue*&q)//初始化一个候车场
{
q=(SqQueue*)malloc(sizeof(SqQueue));
q->front=q->rear=0;
}
boolQueueEmpty(SqQueue*q)//判断候车场是否有车
{
return(q->front==q->rear);
}
boolQueueFull(SqQueue*q)//判断候车场是否满了
{
return((q->rear+1)%(M)==q->front);
}
boolenQueue(SqQueue*&q,inte)//进入候车场
{
if((q->rear+1)%(M)==q->front)
returnfalse;
q->rear=(q->rear+1)%(M);
q->CarNo[q->rear]=e;
returntrue;
}
booldeQueue(SqQueue*&q,int&e)//离开候车场
{
if(q->front==q->rear)
returnfalse;
q->front=(q->front+1)%(M);
e=q->CarNo[q->front];
returntrue;
}
voidDispQueue(SqQueue*q)//显示候车场中的车辆
{
inti;
i=(q->front+1)%(M);
printf("%d",q->CarNo[i]);
while((q->rear-i+M)%(M)>0)
{
i=(i+1)%(M);
printf("%d",q->CarNo[i]);
}
printf("\n");
}
intSumQueue(SqQueue*q)//总计今日停车数量
{
return(q->num);
}
intCaidan(SqQueue*q)
{
system("colorf0");//DOS指令,将背景改为白色,字的颜色改为黑色
system("title停车场管理系统");//DOS指令,把标题栏改成停车场管理系统
MessageBox(NULL,"按确定开始使用","本停车场收费标准每分钟2元,欢迎使用",MB_OK);//弹出标题为欢迎使用本停车场管理系统的窗口,提示开始操作
intcomm;
intCarwei=0;
intno,e1,ti,e2;
inti,j;
SqStack*St,*St1;
SqQueue*Qu;
InitStack(St);
InitStack(St1);
InitQueue(Qu);
Qu->num=0;
printf("\t********************欢迎使用停车场管理系统********************\n\n\n");
printf("\t\t\t\t小组组长:
\n\n");
printf("\t\t\t小组成员:
\n\n\n");
printf("\t1:
车辆到达\n\t2:
车辆离开\n\t3:
显示停车场中的车辆\n\t4:
显示后车场中的候车场\n\t5:
查询车辆\n\t6:
显示今日车流量\n\t0:
退出系统:
\n");
printf("请输入指令:
");
do
{
scanf("%d",&comm);
if(comm==1)
{
Qu->num++;
}
switch(comm)
{
case1:
//汽车到达
printf("车号:
");
scanf("%d",&no);
for(i=0;i<=St->top&&St->CarNo[i]!
=no;i++);
if(St->CarNo[i]==no)
{
printf("该车牌号已存在!
请重新输入:
\n");
printf("请输入指令:
");
}
else
if(!
StackFull(St))//停车场不满
{
time_trawtime;//定义一个时间变量
structtm*timeinfo;//定义时间指针
time(&rawtime);//获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfo=localtime(&rawtime);//转为当地时间,tm时间结构
printf(">>进入本停车站时间为:
%4d-%02d-%02d%02d:
%02d:
%02d\n",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;//记入进来时间
Push(St,no,ti);//将信息压入栈中的
printf(">>停车场车位号:
%d\n",St->top+1);
Carwei=St->top;
printf("请输入指令:
");
}
else//停车场满
{
if(!
QueueFull(Qu))//候车场不满
{
time_trawtime;//定义一个时间变量
structtm*timeinfo;//定义时间指针
time(&rawtime);//获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfo=localtime(&rawtime);//转为当地时间,tm时间结构
printf(">>进入本停车站时间为:
%4d-%02d-%02d%02d:
%02d:
%02d\n",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;//记入进入时间
enQueue(Qu,no);//停车场满了之后,进入候车场
printf(">>候车场车位号:
%d\n",Qu->rear);
}
else
printf(">>候车场已满,不能停车\n");
printf("请输入指令:
");
}
break;
case2:
//汽车离开
printf("车号:
");
scanf("%d",&no);
for(i=0;i<=St->top&&St->CarNo[i]!
=no;i++);
if(i<=St->top)
{
time_trawtimes;//定义一个时间变量
structtm*timeinfoo;//定义时间指针
time(&rawtimes);//获取时间,以秒计,从1970年1月一日起算,存于rawtime
timeinfoo=localtime(&rawtimes);//转为当地时间,tm时间结构
printf(">>>>>>离开本停车场的时间为:
%4d-%02d-%02d%02d:
%02d:
%02d\n",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;i<=St->top&&St->CarNo[i]!
=no;i++);
if(i>St->top)
{
printf(">>未找到该编号的汽车\n");
printf("\t请输入指令:
");
}
else
{
for(j=i+1;j<=St->top;)
{
Pop(St,e1,e2);
Push(St1,e1,e2);//倒车到临时栈St1中
}
Pop(St,e1,e2);//该汽车离开
printf(">>车号为%d汽车停车时间:
%d\n",no,ti-e2);
printf(">>车号为%d汽车停车费用:
%d\n",no,(ti-e2)*Price);
charstr[10]={0};
inta=(ti-e2)*Price;
sprintf(str,"请付%d块钱",a);//格式化停车费用,以便放入MessageBox
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;
case3:
//显示停车场情况
if(!
StackEmpty(St))
{
printf(">>停车场中的车辆:
");//输出停车场中的车辆
DispStack(St);
}
else
printf(">>停车场中无车辆\n");
printf("请输入指令:
");
break;
case4:
//显示候车场情况
if(!
QueueEmpty(Qu))
{
printf(">>候车场中的车辆:
");//输出候车场中的车辆
DispQueue(Qu);
}
else
printf(">>候车场中无车辆\n");
printf("请输入指令:
");
break;
case5:
//按车牌号查询
printf("输入您所需要查找的车牌号:
");
scanf("%d",&no);
for(i=0;i<=St->top&&St->CarNo[i]!
=no;i++);
if(i<=St->top)
{
printf("车牌号为%d的车位号:
%d\n",no,i+1);
}
else
{
if(Qu->frontrear)
for(j=Qu->front;j>=Qu->front&&j<=Qu->rear&&Qu->CarNo[j]!
=no;j++);
if(j<=Qu->rear&&j>Qu->front)
{
printf("车牌号为%d在候车场,其位置为:
%d",no,j);
}
else
{for(j=0;(j>=Qu->front||j<=Qu->rear)&&Qu->CarNo[j]!
=no;j++);
if(j>=Qu->front||j<=Qu->rear)
{
printf("车牌号为%d在候车场,其位置为:
%d",no,j);
}
else
printf("没有该辆车!
\n");
}
}
printf("请输入指令:
");
break;
case6:
printf(">>今日车流量为:
%d\n",Qu->num);
printf("请输入指令:
");
break;
case0:
//结束
if(!
StackEmpty(St))
{
printf(">>停车场中的车辆:
");//输出停车场中的车辆
DispStack(St);
}
if(!
QueueEmpty(Qu))
{
printf(">>候车场中的车辆:
");//输出候车场中的车辆
DispQueue(Qu);
}
printf("\n\n\n");
printf("\t**************************谢谢使用!
***************************\n\n");
break;
default:
//其他情况
MessageBox(NULL,"输入指令错误!
",NULL,MB_OK);//弹出窗口,警告输入错误
printf("请输入指令:
");
break;
}
}
while(comm!
=0);
return0;
}
六、测试分析
七、使用说明
首先运行程序,包括六个选项,0.退出系统.1.车辆到达2.车辆离开.3.显示停车场中的车辆4.显示候车场中的车辆5.查询车辆6.显示今日车流量
然后可以根据不同的需要选择不同的选项进行操作
最后退出程序。
八、运行程序过程中产生的问题及采取的措施
在这次编程中,我们组遇到最大的问题就是时间这个变量,虽然在网上查找到了怎样运用系统时间的代码,但是始终都是记录的第一辆车的时间,车子离开后,也是记录的车子进来的时间,后来翻阅了很多书和在网上查了很多原因,后来突发奇想在队的内部加一个变量,用来记入车流量,还有在头文件出加一个time.h;在考虑到人性化和操作环境的美观性,是我考虑的,在网上找到了代码,可是始终行不通,后来看书才知道要加windows.h头文件;还有一个问题就是候车场车辆的查询问题,主要还是对循环队列的运用问题。
九、总结和展望
(400字以上)
一个星期多的课程设计结束了,这次我们是以小组为单位,共同完成一个程序,很多人认为我们这样的编程的安排很不好,会参杂着很多抄袭,但是我认为,这样更有利于我们互相取长补短,更好的把自己一学期所学的东西运用到上面。
这次编程分工明确,有效率的完成了程序,并花了大量时间去美化程序,大家互相讨论,指出可以通过修改能够更好的使程序运行后变得很醒目。
在修改的时候,大家虽然想法很好,但是动手操作起来都不是很娴熟,要去翻翻书,这可能就是温故而知新吧。
大家通知次课程设计也很好的掌握了以前的知识。
在答辩过程中,老师表扬我们程序有很多值得大家去学习的东西,我们感到很高兴,我们通过自己的努力能够获得老师的肯定觉得很开心。
其实在社会现实中,很多好的编程都是通过很多人在一起商讨研究出来的,只要大家心往一处想,力往一处使,没有完不成的。
其实,在这次编程中最让我体会很深的是,我们在遇到难题时,大家没有把这个问题留给一个人去想,而是大家一起去讨论,一起去查阅书籍,一起去解决,这是团结的力量,让我们的程序得以很好的展示给大家。
通过这次课程设计,我对自己以后的编程生涯有了更好的展望,我觉得编一个很大的代码不是很困难的,只要你用心去编,渴望把它编好,带着一份学习的心去编写,这样会很好的去便边学边完成,这样受益匪浅.,还有最大的就是耐心,耐心能让我们把事做的更好。
希望我的耐心能使我以后的学习更加好。
十、参考文献
[1]李建学等著.数据结构课程设计案例精编.清华大学出版社,2007
[2]唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程.清华大学出版社,2008