您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页c语言数据结构课程设计停车场完整版

c语言数据结构课程设计停车场完整版

来源:华佗小知识



编 号:


B04931042

201340450114

询{必建鼻垄魏

HUBEIPOLTTZCEEIIC UNIVEJISITY

课程设计

教学院

计算机


课程名称

数据结构与算法

用栈实现停车场管理

软件工程

131

高敏

同组人员

严子璐李佳恒童静赵超冯辉

指导教师

程细才

2014

629

(完成时间)

.概述......................................................2



二•总体方案设计..............................................2

.详细设计..................................................3

.程序的调试与运行结果说明..................................7

.课程设计总结.............................................20

参考文献.....................................................21



1课程设计的目的

对学生数据结构知识的全面综合训练,把书上学到的知识用于解决实际问题、培养今后软件开发工作所需的动手实践能力,包括问题分析、总体结构设计,用户界面的设计、程序设计时的基本技能和技巧,以及一整套软件工作规范的训练和团体协作精神的培养。

2课程设计的要求
1了解并掌握数据结构与算法的设计方法,具备初步的分析和设计 能力;
2初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基 本方法和技能;
3 提高综合运用所学的理论知识和方法分析和解决问题的能力; 4训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作 者所应具备的科学的工作方法和作风



二总体方案设计

一、问题描述
设停车场是一个可停放n辆车的狭长通道,冃只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,曲北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开吋,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)

设计要求:
1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。

2.从终端读入汽车到达或离去的数据,每组数据包括三项: (1) 是“到达”还是“离开”;

(2) 汽车牌照号码;

(3) 到达”或“离开”的时刻。

3.与每组输入信息相应的输岀信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输岀其在停车场中停留的吋间和应交的费用。

4.遇到的难题,当进入4辆车,假如需要出车的序列为2,就必须按照栈出栈序列出车,先出4,3,2然后3,4又入桟,这里的程序相对比较麻烦,通过和组员交流终于做出来了。

二•各自分工
我负责的是编写部分代码,如车辆的进入函数,运用了栈的知识



三详细设计

算法说明

1.数据结构说明
(1) 用到两个堆栈:一个为车场栈;另一个为临时栈temp

typedefstruct NODE{
CarNode*stack|MAX+l ];
inttop;

JSeqStackCar;/*模拟车场*/
(2) 个队列结构,存储便道车辆信息:

typedefstruct Node{
QueueNode*head;
QueueNode*rear;

JLinkQueueCar;/*模拟便道*/

2算法说明
(1) 功能模块说明:停车场管理系统含冇三个模块,W车辆到达、离开、

列表显示


1 :

1 J

2

j

1

V



车辆到迖

车辆离开

贱显示


1

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

1、“到达”模块:到达时冇两种情况,即车场是否满,未满则直接进入停

车场;满时,到便道等待。



如图2



2. 离开”模块:离开时,当车库为空时,提示没冇车,结束;否则车辆离开。

3
显示”模块:显示模块有两个显示选项,B|J车场与便道。如图4





四•程序的调试与运行结果说明
()测试用例(说明:测试用例要合理并口足够,既要有正确用例,也要有错误用例,同时检验程序的正确性和强壮性)
1.第一组测试用例
(1)测试输入:停车场的车辆离开,如下表:

服务选择

车牌号/车位

到达/离开时间

1

QH058

15 25

1

AB123

18 45

1

EA2

23 15

2

2

0 30

2

1

0 65 (错误)

(2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。 (3)正确输岀:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时,应该提示输入错误,重输。

(4)实际输出:


八课程学习集\程序设计实习'停车场问・・・




|离开车辆的车牌号为:



QH058



直到达时间为:15:25 厲开财闾为:065_ I应交畳用


5.4元? 便鏈没有车?



(5) 错误原因:第一个错误是在计算时,一个

数字错了;第二个是没有对



时间格式控制。

(6)当前状态:已改正
2.第二组测试用例
(1)测试输入:连续6辆车到达,如下表:

服务选

车牌号

到达吋间






1

A8828

7 56

1

S2296

8 25

1

WW666

8 45

1

HK456

15 50

1

GH999

12 30

1

DD555

13 40

2测试目的:测试到达方法与列表显示方法能否止确完成。

3正确输岀:先到达的五辆车先进入停车场,最后到达的一辆在便道等

候。

4实际输出:

5错误原II没有作出时间先后的判断,而是先输入先进入。

6当而状态:待修改
3.第三组测试用例
1测试输入:接上一步输入离开信息,下表:

服务选择

离开车位

离开时 间

便道车进入时 间

2

3

13 30

13 40

2测试冃的:测试离开方法功能是否成功以及便道进入车场是否正确。3止确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车



场。

4实际输出:

CA初八课程学习集'程序设计实习\停车场问题、代码夹\单代码夹\Debug\...


I离开车辆的车牌号为:


WW666


|負列込时间为:8:45
查开封日亠—=士: 13詔色


.用为:285元?


「―勺DD555号车进入丰场第5位置?


幘输入现在的时间如〈小时:分钟>:


13 40
|

探※※※?欢迎使用本停车管理系统@※※※










退










?说明:请辻意正确输入时


, I请选棒所需要的服务?


请选择您舉显示信息? 1-3恢一1 车坊-- 隊一 2 輕一※ 恢--3 逍回--※


1







在输入“时”后, ENTER 或者“仝格






位置到达时间

1

?56

A8828

2

8:25

S2296

3

HK456

15:50

GH999

4

12:30

DD555

13^40 _

您—显示信息? <1-3>

5错误原II没有错误。

6当而状态:通过
(二)测试结果分析
此停车管理系统基本可能实现一个小的停车场的管理,其“到达”与“离 开”方法都相对比较完整,以及结算清单明了。尽管在时间先后上有出现混乱, 但当其用到实际应用时,那个时间先后就可以避免了。但在输入数据时,耍按 照严格的格式输入,否则有可能出现死去或崩溃。若本系统能加上保存功能就 更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却是没有保 存功能,关闭Z后就要重新建立了。会慢慢完善。

附录:源代码

///系统说明:本系统适应于小型停车场,11停车时间在一天之内的短期停放停 车



场。

〃在此系统中,车库容量设置为5,便于测试。在实际使用中可以对容量大小按实

际情况设置。

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#defineMAX 5 /*车库容量,可以根据实际情况改变*/#defineprice 0.01 /*一辆车每分钟费用,口J*/

typedefstruct time

{
inthour;
intmin;
}Time;/*吋间结点*/

typedefstruct node

{
charnum| 10];
Timereach;
Timeleave;
JCarNode;/*车辆信息结点*/

typedefstruct NODE

{
CarNode*stack[MAX+l ];
inttop;
JSeqStackCar;/*模拟停车场*/

typedefstruct car

{
CarNode*data;
structcar *next;
JQueueNode;
typedefstruct Node



QueueNode*head;
QueueNode*rear;
JLinkQueueCar;/*模拟便道*/

/*方法声明*/
voidInitStack(SeqStackCar *); /*初始化栈*/
intInitQueue(LinkQueueCar *); /*初始化便道*/
intArrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/
voidLeave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*午辆离开*/voidList(SeqStackCar,LinkQueueCar); /*显示信息*/
voidPRlNT(CarNode *p,int room); /*输出离开车辆的信息清单*/
voidmain()

{
system(HcolorF2H);/*设置系统颜色,本系统为口底绿字f2*/ SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&Enter);/*初始化车站*/
InitStack(&Temp);/*初始化让路的临时栈*/
InitQueue(&Wait);/*初始化通道*/
while(l)

{

cout«n

探※※※

@欢迎使用本停车管理系统@※※※

"«endl;

cout«'■********************************************************"

<endl;

cout«"

一※ 1.车辆到达探 -

u«endl;

cout«"

2.车辆离开探 —

u«endl;

cout«"

3.列表显示※ ―

"«endl;

cout«"

探一※ 4.退出系统※

-




n«endl;

cout«<T> <T> <T> <T> <T> <T> <T> <T> <T> ^f> ^f> <f% ^T%

f I

<T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^ <T^

.(> .(> .(> .(> .(> .(> .(> .(> .(> .(> .(> .(> 11
^T% ^T% ^T% ^T% ^T% ^T% ^T% ^T% ^T% ^T% ^T% ^f>

«en

dl

cout«n!说明:请注意正确输入时间,在输入时后,按ENTER或者空格,

再输入分。不耍为非数字!n«endl;

cout«"请选择所需要的服务!(l-4)."«endl;

while(l)

{
cin»ch;
if(ch>=1 &&ch<=4)break;
elsecout«H输入错误!请选择:(l-4)."«endl;

}
switch(ch)

{
casel:Arrival(&Enter,&Wait);break; /*车辆到达*/

case2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/

case3:List(Enter,Wait);break; /*列表显示信息*/case4:exit(0); /*退出主程

*/

default:break;

voidInitStack(SeqStackCar *s) /*初始化栈*/{
inti;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->topJ=NULL;

intInitQueue(LinkQueueCar *Q) /*初始化便道*/

Q->head=(QueueNode*)malloc(sizeof(QueueNode)); if(Q->head!=NULL)

{



Q->head->next=NULL;
Q->rear=Q->head;
return(l);

}
elsereturn(-l);

}

intArrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/

{
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
cout«"请输入车牌号(:A1234):"«endl;

gets(p
if(Enter->top<MAX)/*车场未满,车进车场*/

{
Enter->top++;
cout«"车辆在车场第"«Enter->topvv”位置!"«endl;cout«"请输入到达时间

:(小时:分钟)"«endl;

cin»p>reach.hour;

while(p->reach.hour<0llp->reach.hour>23)//®制时间格式正确{

cout«"输入错误!"«endl;

cout«H请重输入到达时间的时(0-23)!H«endl;

cin»p>reach.hour;

}
cin»p->reach.min;
while(p->reach.min<0llp->reach.min>59)// 控制分钟输入正确

cout«"输入错误!"vvendl;

cout«H请重输入到达时间的分(0-59)!H«endl;cin»p->reach.min;

Enter->stack[Enter->top]=p;



return(l);

}
else/*车场已满,车进便道*/

{
cout«"车场己满,请在便道等待!H«endl;

t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL;
W->rear->next=t;
W->rear=t;
return(l);

}
}
voidLeave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /汽午辆离

*/

{

introom;
CarNode*p;
QueueNode*q;

/*判断车场内是否有车*/

if(Enter->top>0)/* 有车*/

{
while(l)/*输入离开车辆的信息*/

{cout«"请输入车在车场的位置1—"«Enter->top«":";

cin»room;
if(room>=1 &&room<=Enter->top) break;

}
while(Enter->top>room)/*车辆离开*/

Temp->top卄;/*临时通道栈顶指针*/
Temp->stack[Temp->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL;
Enter->top~;

}
p=Enter->stack[Enter->top];



Enter->stack[Enter->top]=NULL;
Enter->top~;
while(Temp->top>=l)/*判断临时通道上是否有车*/

{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top~;}
PRINT(p,room);
if((W->head!=W->rear)&&Enter->top<MAX)/* 车站是未满*/

{ /*便道的车辆进入车场*/

q=W->head->next;
p=q->data;/*p指向链队头*/

Enter->top++;
cout«"便道的"«p->num«"号车进入车场第u«Enter->top«"位置

!"«endl;
cout«"请输入现在的时间如(小时:分钟):"«endl;

cin»p->reach.hour;
if(p->reach.hour<0llp->reach.hour>23)

{
cout«"输入错误!"vvendl;

cout«M请重输入到达时间的时(0-23)!H«endl;

cin»p>reach.hour;

}
cin»p>reach.min;

if(p->reach.min<0llp->reach.min>59)

{
cout«H输入错误!"«endl;

cout«H请重输入到达时间的分(059)!H«endl;
cin»p>reach.min;

Enter->stack[Enter->top]=p;
W->head->next=q->next;if(q==W->rear) W->rear=W->head;



free(q);/*释放q地址*/
}

}

elsecout«H便道里没有车!n«endl; /*便道没车*/

else cout«H车场里没有车!n«endl; /*车场没车*/

}

void PRINT(CarNode *p,int room) /*输出离开车辆的信息清单*/

{
int A1,A2,B1,B2;
cout«"请输入离开的时间:(小时:分钟)"«endl;

cin»p >leave.hour;

while(p->leave.hour<Ollp > leave.hour>23)

{
cout«"输入错误! "«endl;
cout«"请重输入离开的时间的时(0-23)"«endl;

cin»p > leave.hour;
Bl=p->leave.hour;
}
cin»p->leave.min;
if(p->leave.min<0llp->leave.min>59)
{
cout«"输入错误!"«endl;

cout«"请重输入到达时间的分(059)! "«endl;

cin»p > leave.min;

cout«endl«"离开车辆的车牌号为:'*«endl;

puts(p >n um);
cout«"其到达时间为:H«p->reach.hour«":n«p->reach.min«endl; cout«"离开时间为:"«p->leave.hour«',:"«p->leave.min<<endl; A1 =p> reach.hour;



A2=p>reach.min;

Bl=p->leave.hour;
B2=p->leave.min;

cout«n应交费用为:H«(((B1 - A 1 )*60+(B2-A2))+1440)% 1440*price«" !u«endl;

free(p);

}

voidList 1 (SeqStackCar *S) /*列表显示车场信息*/

{
cout«n您选择的是午场停车情况!"«endl;

inti;

if(S->top>0)/*判断车站内是否有车*/

{
cout«n位置到达时间 车牌号H«endl;

for(i=l;i<=S->top;i++)

{
cout«M ,«i«n

u«S->stack[i]->reach.hour«":n«S>stack[ij->reach.min«n

"«S->stack[i]->num«endl;

}
}
elsecout«H车场里没有车!n«endl;

}
voidList2(LinkQueueCar *W) /*列表显示便道信息*/

{
cout«H您选择的是便道停车情况!"«endl;

intj=l;
QueueNode*p;
p=W->head->next;

if(W->head!=W->rear)/*判断通道上是否有车*/

{
cout«M等待车辆的车牌号码为:"«endl;



while(p!=NULL)

{
//cout«j;

//puts(p->data->num);

cout«j«nH«p->data->num«endl;p=p->next;

j;

}〃开始时显示不止确,没有按照止常输出

}
elsecout«H便道里没有车!”;

}
voidList(SeqStackCar S,LinkQueueCar W) /*列表界徂|*/

{
intflag,tag;

flag=l

while(flag)/*列表显示循环控制*/

{
cout«"请选择您要显示信息!(1-3):H«endl;

cout«"1.车场一※"«endl;

cout«"-2.便道-※"«endl;

cout«"3.返冋一※"«endl;

while(l)

{
cin»tag;

if(tag>=llltag<=3)break;

elsecout«"输入错误!请选择(l-3):"«endl;

}
switch(tag)

{

case l:Listl(&S);break;
case 2:List2(&W);break;

default: break;

/*列表显示车场信息*/
/*列表显示便道信息*/case3:flag=0;break;



五课程设计总结

刚开始因为对栈的知识理解不深透,做起实验非常困难,不知从何下手,通过两周杳阅资料搜集相关知识,终于完成了用栈实现停车场系统,这次的实验,我真的受益匪浅,希望以后还会有更多的课程设计、
通过实习我的收获如下
1我知道了怎样去简化程序,减少他的时间复朵度和空间复朵度。还知道了怎样去完善程序,使其更具健壮性。

2巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。

3培养了我选用参考书,查阅手册及文献资料的能力。培养思考,深入研究,分析问题、解决问题的能力。

4通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法。

5通过课程设计,培养了我严肃认真的工作作风,逐步建立止确的生产观念、经济观念和全局观念



参考文献

教材:
[1]严蔚敏,吴伟民.数据结构C语言版)[M].(第一版)北京:清华人学岀版社.1997参考书:
[2]Sartaj Sahni. Data Structure, Algorithms, and Application in C++. TheMcGraw-Hill Company Inc. 1998[M](第一版)(数据结构、算法与应用C++语言描述.北京:机械工业出版社.1999
徐孝凯•数据结构实用教程C/C++描述)[Ml(第一版)北京:清华大学出版社.1999 [4]陈慧南.数据结构(使用C卄语言描述)[M].(第一版)南京:东南大学出版社.2001



数据结构—课程设计成绩评定表


高嫩

别男


专业班级

软件工程(1)

课程设计题目:

课程设计答辩或质疑记录:
(1) 该程序运用了数据结构的哪些知识?

答:主要运用了有关栈的知识,如先进后出,栈元素的插入与删除。

(2) 对程序记忆最深刻的地方是?

答:在编写车的离开函数吋,车辆出来的吋候,必须要按照栈的出栈顺序出车辆,过程也 比较复杂,通过查找资料,组员们交流后得以解决。

(3) 木次课程设计的体会是?

答:做一个程序需要细心和耐心恒心,特别需要团队合作梢神,做完程序后,我对和关的 数据结构知识了解也有所加强,总Z希望以后会有更多的课程设计。

成绩评定依据:

最终评定成绩(以优、良、屮、及格、不及格评定)




指导教师签字:________________

年刀 日

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务