c++停车场管理系统.docx

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

c++停车场管理系统.docx

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

c++停车场管理系统.docx

c++停车场管理系统

 

数据结构课程实践报告

 

项目名称:

停车场管理系统

所在班级:

14级计算机科学与技术1班

小组成员:

尤攀陆、董金明、付增现、王耀权、曲涛

任课教师:

刘国英

起止时间:

2015.11.20-2015.12.30

项目基本信息

项目名称

停车管理系统

项目简介

设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的模拟程序。

要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。

小组成员

尤攀陆董金明付增现王耀权曲涛

任务分工

尤攀陆:

停车模块

董金明:

车辆离开模块

付增现:

堆栈与队列的定义及基本操作

王耀权:

主函数模块

曲涛:

列表显示模块

 

课程实践评定成绩记录

指导教师意见

系统完成情况:

优良中差

报告完成情况:

优良中差

答辩评定成绩

团队整体成绩:

成员成绩

尤攀陆

140901002

董金明

140901019

付增现

140901022

王耀权

140901058

曲涛

140901040

综合成绩

一、问题描述及分析

于停车场只有一个大门,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,先进停车场的后退出,后进车场的先退出,符合栈的“后进先出,先进后出”的操作特点,因此,可以用一个栈来模拟停车场。

而当停车场满后,继续来到的其它车辆只能停在便道上,根据便道停车的特点,先排队的车辆先离开便道进入停车场,符合队列的“先进先出,后进后出”的操作特点,因此,可以用一个队列来模拟便道。

排在停车场中间的车辆可以提出离开停车场,并且停车场内在要离开的车辆之后到达的车辆都必须先离开停车场为它让路,然后这些车辆依原来到达停车场的次序进入停车场,因此在前面已设的一个栈和一个队列的基础上,还需要有一个地方保存为了让路离开停车场的车辆,由于先退出停车场的后进入停车场,所以很显然保存让路车辆的场地也应该用一个栈来模拟。

因此,本题求解过程中需用到两个栈和一个队列。

栈以顺序结构实现,队列以链表结构实现。

(1)根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。

 

(2)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。

实现停车场的调度功能。

 

(3)用顺序栈来表示停车场,链队表示停车场外的便道。

 

(4)显示停车场信息和便道信息。

 

(5)程序执行的命令为:

1车辆进入停车场 2车辆离开停车场 3显示停车场的信息

二、功能模块及数据结构描述

程序分为三个模块:

车辆到达模块、车辆离开模块、车辆信息显示模块;

车辆到达模块:

void Arrival(SqStack &Enter, LinkQueue &W){ //车辆到达

ElemType p;

printf("请输入车牌号(如陕A1234):

");

fflush(stdin);

gets(p.num);

if(Enter.top

      printf("请输入到达时间(* * :

 * * ):

 ");

  scanf("%d :

 %d", &p.reach.hour, &p.reach.min);

  Push(Enter, p);                      // 进入停车场

}

else{

printf("该车需在便道等待!

 \n");

EnQueue(W, p);                    //进入便道

}

}

车辆离开模块:

void Print(ElemType p){

  int A1, A2, B1, B2;

  printf("请输入离开的时间(* * :

 * * ):

 ");

  scanf("%d:

 %d", &p.leave.hour, &p.leave.min);

  printf("离开车辆的车牌号为:

 ");

  puts(p.num);

  printf("其到达时间为:

 %d :

 %d\n", p.reach.hour, p.reach.min);

  printf("其离开时间为:

 %d :

 %d\n", p.leave.hour, p.leave.min);

  A1=p.reach.hour;

  A2=p.reach.min;

  B1=p.leave.hour;

  B2=p.leave.min;

printf("应交费用为:

 %2.1f 元. \n", ((B1 - A1) * 60 + (B2 - A2)) * price);

  }  

车辆显示模块:

void List1(SqStack S)

{//列表显示停车场信息

int i;

if(S.top>0){//判断停车场是否有车

printf("停车场\n");

printf("位置到达 时间 车牌号\n");

for(i=1;i<=S.top;i++){

printf("%-8d",i);

printf("%-2d:

%-9d",S.data[i].reach.hour,S.data[i].reach.min);

puts(S.data[i].num);

}}

else

printf("停车场内没车!

\n");}

停车场的管理流程如下:

①当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。

②当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。

之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。

③列表1显示停车场信息,判断停车场是否有车,如果有车,就显示车辆到达的位置,到达时间及其车牌号。

如果停车场内没有车,就会显示停车场没有车。

列表2显示便道的信息,判断便道是否有车,如果有车,就显示车辆的号牌,否则显示便道没车。

三、主要算法流程描述及部分核心算法

算法流程图描述

流程图按块来分析,共分成整体系统,汽车到达系统,汽车离去系统,汽车显示系统。

如图1。

(1)、汽车整体系统

图1

(2)以模块为单位分析算法 

  1、“到达”模块:

到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到便道等待。

如图2。

图2

2.“离开”模块:

离开时,当车库为空时,提示没有车,结束;否则车辆离开。

如图3。

图3

3.“显示”模块:

显示模块有两个显示选项,即:

车场与便道。

如图4。

图4

核心算法:

时间节点

typedefstructtime{

inthour;

intmin;

}Time;

车辆信息节点

typedefstructnode{

charnum[10];

Timereach;

Timeleave;

}ElemType;////顺序栈的定义与基本操作

 

typedefstruct{

ElemTypedata[MAXSIZE];

inttop;

}SqStack;

便道队列节点:

typedefstructQNode{

ElemTypedata;

structQNode*next;

}Qnode,*QueuePtr;

便道队列:

typedefstruct{

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

顺序栈的初始化

voidInitStack(SqStack&s){

s.top=0;

}

入堆栈出堆栈

voidPush(SqStack&s,ElemTypee){

s.top++;

s.data[s.top]=e;

}

voidPop(SqStack&s,ElemType&e){

e=s.data[s.top];

s.top--;

}

队列初始化:

voidInitQueue(LinkQueue&Q){

Q.front=Q.rear=newQnode;

Q.front->next=NULL;

}

入队操作:

voidEnQueue(LinkQueue&Q,ElemTypee){

Qnode*p;

p=newQnode;

p->data=e;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

}

出队操作:

voidDeQueue(LinkQueue&Q,ElemType&e){

Qnode*p;

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)Q.rear=Q.front;

deletep;}

四、系统使用说明

进入主界面:

车辆到达:

停车场满时车在便道上排队:

列表显示:

 

车辆离开:

当输入不合法时:

五、问题及解决办法

1、在开始输入车牌号的字符串时总是出错,便不能再执行。

解决途径:

通过上网查资料知道,输入字符时习惯性的会加Enter键然后再输下一个,这样相当于Enter也作为一个字符读入,在输入前加上fflush(stdin)函数,用于清除输入的所有缓冲区即可。

2、在输入停车信息时,若输入不合法,程序便会中断结束,无法继续运行下去。

后来利用whihe

(1)永真循环结构,但输入不合法时,重复输入循环。

只有当输入合法时,才会跳出循环,执行下一步操作。

3、刚开始时,程序比较混乱,函数顺序都不是很正确,不能一眼看出来某一个定义是干嘛用

六、课程实践总结

虽然说这次数据结构课程设计是以小组形式进行,但还是有压力的。

在课堂上和课余时间我们互相帮助,互相学习。

 这次课程设计通过参考c语言程序设计,c++课程设计与程序设计,数据结构及网上资料完成。

看到自己把所出现的错误一个个地改出来,心里真的是很欣慰。

我们体会到了自己完成一次作业的成就感,更重要的是我体会到了认真对待一件事并好好完成的愉悦,这将对我以后产生很大帮助,理论离不开实践,只有多动手,多动脑,勤动手才能取得成功,活的充实。

 

通过这一次课程设计,我们学到的东西比以前上课学到的还要多,这让我们明白,理论永远是理论,要是没有实践,理论永远是一纸空文。

我们要从实践中才能学到更多的东西。

而实践又要以理论为基础,要是数据结构知识不扎实,做出的程序也是漏洞百出。

所以,我们要将理论和实践结合起来,把我们在课堂上学到的东西运用在实际中,这样才能提高我们自身的能力。

 

在接到任务时,其实心里有点恐惧,感觉自己没有能力做出来,就想着反正可以上网去搜,也就不怎么着急。

后来想到如果总是依赖互联网,而不去努力,自己永远不可能有提高,于是开始自己试着写。

当序终于可以运行时,那一刻感觉好自豪,感觉自己所有的努力都没有白费。

更让我重新理解了那就名言“当你

只有一个目标时,整个世界都会给你让路”。

 

在学习c语言程序设计与c++课程设计与程序设计的时候,老师就一直强调,学习需要细心和耐心,特别是设计较长的程序时,而在真正设计的时候还是会粗心。

程序设计的过程中,还有很多是由于粗心而导致的错误,也有很多是对以前的知识遗忘了,这就告诫自己以后做什么事都要认真仔细,不要大大咧咧。

即使再有能力,不认真,不付出努力,所谓的能力也终究只能是空有一身本领。

在实践中发现自我,挑战自我,最终完善自我。

 在此我非常要感谢的是我们的指导老师刘国英老师,感谢老师的细心认真的辅导,让我对数据结构这门课程掌握得更好,懂得更多,他教我怎么分析问题,应该要注意些什么,最后还指出我存在的问题。

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

当前位置:首页 > 求职职场 > 简历

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

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