停车场管理系统.docx

上传人:b****5 文档编号:11816845 上传时间:2023-04-03 格式:DOCX 页数:15 大小:120.58KB
下载 相关 举报
停车场管理系统.docx_第1页
第1页 / 共15页
停车场管理系统.docx_第2页
第2页 / 共15页
停车场管理系统.docx_第3页
第3页 / 共15页
停车场管理系统.docx_第4页
第4页 / 共15页
停车场管理系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

停车场管理系统.docx

《停车场管理系统.docx》由会员分享,可在线阅读,更多相关《停车场管理系统.docx(15页珍藏版)》请在冰豆网上搜索。

停车场管理系统.docx

停车场管理系统

课程设计报告

 

课程设计名称:

数据结构课程设计

系别:

学生姓名:

班级:

学号:

成绩:

指导教师:

开课时间:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1