数据结构课程设计报告_停车场管理系统Word格式文档下载.docx
- 文档编号:948762
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:29
- 大小:93.37KB
数据结构课程设计报告_停车场管理系统Word格式文档下载.docx
《数据结构课程设计报告_停车场管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告_停车场管理系统Word格式文档下载.docx(29页珍藏版)》请在冰点文库上搜索。
进度要求
2012.6.25 完成任务的讲解、并接受课程设计任务,选定课程设计的题目
2012.6.26 了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法
2012.6.27-2012.6.29程序设计及编码,上机调试
2012.7.02 对程序进行调试,设计测试用例进行测试
2012.7.03 整理课程设计的过程、并进行总结,完善程序功能
2012.7.04 编写课程设计报告初稿
2012.7.05 完善课程设计报告、并准备答辨
2012.7.06 提交课程设计报告和程序,进行答辨
参考资料
1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3
2.程杰,大话数据结构,清华大学出版社,2011.6
3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2
其它
说
明
1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
II
系主任:
雷亮 指导教师:
黄永文/王双明/熊茜/彭军/王成敏
2012年6月20日
摘要
在这个科技发达的时代,汽车对于我们来说越来越普遍,而人们对停车场的管理也更加信息化。
本系统主要是对仅有一个门的停车场的简单管理的设计。
对汽车进入停车场,若停车场满,进入便道等候,车场中有车离开后,便道上的车依次进入停车场有一定的管理。
而且停车场也有合理的收费标准。
该系统主要运用的是C语言和数据结构的相关知识,用栈(后进先出)来模拟停车场,队列(先进先出)来模拟便道实现对汽车进入和离开的管理,用简单的数据计算对汽车进行收费标准。
使车主更清楚了解停车场的信息,车主可以根据系统的提示进行每一项的操作。
关键词:
停车场管理 C语言 数据结构 栈 队列
IV
目录
1设计内容和要求 1
1.1设计内容 1
1.2设计要求 1
2概要设计 2
2.1栈的抽象数据类型定义 2
2.2模块的划分 4
3详细设计 5
3.1数据类型的定义 5
3.2主要模块的算法流程图 5
3.3主要模块的算法描述 7
4软件的测试 13
5总结 16
参考文献 17
致谢 18
附录 19
1设计内容和要求
1.1设计内容
当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开时必须按它停留的时间长短交纳费用(在便道上停车不收费)。
1.2设计要求
汽车“到达”或“离去”信息、汽车牌照号码、到达或离去的时刻。
对每一组输入数据进行操作后的输出信息为:
若是车辆离去,则输出汽车在停车场内停留的时间和应
交纳的费用。
22
2概要设计
2.1栈的抽象数据类型定义
(1)栈的抽象数据类型定义
ASTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,i=2,...,n}约定an端为栈顶,a1端为栈底。
基本操作:
InitStack(&
S)
操作结果:
构造一个空栈S。
DestroyStack(&
初始条件:
栈S已存在。
栈S被销毁。
ClearStack(&
将栈S清为空栈。
StackEmpty(S)
若栈S为空栈,则返回TRUE,否则FALSE。
StackLength(s)
初始条件:
返回S的元素个数,既栈的长度。
GetTop(S,&
e)
栈S已存在且非空。
用e返回S的栈顶元素。
Push(&
S,e)
插入元素e为新的栈顶元素。
Pop(&
S,&
删除S的栈顶元素,并用e返回其值。
StackTraverse(S,visit())
从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦
visit()失败,则操作失效。
}ADTStack
(2)队列的抽象数据类型定义
ADTQueue{
D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:
|ai-1,ai∈D,i=2,...,n}约定其中a1端为队列头,an为队列尾。
InitQueue(&
Q)
构造一个空队列Q。
DestroyQueue(&
队列Q已存在。
队列Q被销毁,不再存在。
ClearQueue(&
将Q清为空队列。
QueueEmpty(Q)
若Q为空队列,则返回TRUE,否则FALSE。
QueueLength(Q)
返回Q的元素个数,即队列的长度。
GetHead(Q,&
Q为非空队列。
用e返回的队头元素。
EnQueue(&
Q,e)
插入元素e为Q的新的队尾元素。
DeQueue(&
Q,&
删除Q的队头元素,并用e返回其值。
QueueTraverse(Q,visit())
Q已存在且非空。
从队头到队尾,依次对Q的每个数据元素调用函数visit()。
visit()失败,则操作失败。
}ADTQueue
2.2模块的划分
该系统主要有7个模块,即:
主函数模块、栈模块(模拟停车场)、队列模块
(模拟便道)、汽车进入模块、汽车离开模块、系统信息保存模块、系统输出显示模块。
3详细设计
3.1数据类型的定义
typedefstructtime
{
inthour;
intmin;
}Time;
//时间结点typedefstructcarnode
charnum[10];
Timereach;
Timeleave;
}Car;
//车辆信息结点typedefstructnode
Car*stack[100];
inttop;
}SqStack;
//定义栈表示车位typedefstructcar
intnum;
Car*data;
structcar*next;
}QNode;
typedefstructNode
QNode*front;
QNode*rear;
}LinkQueue;
//用队列表示便道道
3.2主要模块的算法流程图
输入停车场的最大容量
菜单
有
显
退
车
示
出
进
离
程
入
开
场
序
信
息
图4.1界面显示
有汽车进入停车场
判断停车场是否有空
车位
汽车车进入系统结束
进入便道
进入停车场
输入进入车辆的信息
是
否
图4.2汽车进入
有汽车离开
判断它后面是否有车
汽车离开并缴费
后面的车进入临时停车场
输入离开汽车的信息
临时停车场的车回到停车场
判断便道是否有车
车场离开系统结束
便道的车进入停车场
图4.3汽车离开
3.3主要模块的算法描述
(1)汽车进入停车场:
intarrive(SqStack*In,LinkQueue*W,intn)//车辆到达(把元素要入栈中)
{ Car*p;
QNode*t;
p=(Car*)malloc(sizeof(Car));
flushall();
printf("
\n停车场还有%d个停车位(若停车位为0,车可先进入便道等待)"
n-In->
top);
\n请输入车牌号码:
"
);
gets(p->
num);
if(In->
top<
n)//停车场未满,车进车场
{ In->
top++;
\n停车的位置:
%d号停车位。
In->
\n请输入车到达的时间格式为“**:
**”:
scanf("
%d:
%d"
&
(p->
reach.hour),&
reach.min));
fprintf(fpout,"
车牌号为%s的汽车在%d:
%d时进入停车场的%d号车位
\n"
p->
num,p->
reach.hour,p->
reach.min,In->
In->
stack[In->
top]=p;
请按任意键返回"
getch();
return
(1);
}
else//停车场已满,车进便道
{ printf("
\n停车位已满,该车须在便道等待!
\n停车位已满,车牌号为%s车须在便道等待!
p-
>
t=(QNode*)malloc(sizeof(QNode));
t->
data=p;
t->
next=NULL;
W->
rear->
next=t;
rear=t;
getch();
开始定义汽车节点指针P和t,先判断停车场内是否有空位,若In->
n则
汽车进入停车场,然后停车场的栈顶In->
top 加1表示增加了新的车辆,接着输入进入车辆的信息。
如果停车场没有空位,则车进入便道,就是把元素压入队列中。
(2)汽车离开停车场:
voidleave(SqStack*In,SqStack*Out,LinkQueue*W)//车辆离开
{ introom;
Car*p,*t;
QNode*q;
//判断车场内是否有车if(In->
top>
0)//有车
{ while
(1)//输入离开车辆的信息
\n请输入车在停车场的位置(1-%d):
room);
if(room>
=1&
&
room<
=In->
top)break;
while(In->
room)//车辆离开
{ Out->
Out->
stack[Out->
top]=In->
top];
top]=NULL;
In->
top--;
p=In->
In->
while(Out->
=1)
top]=Out->
Out->
Out->
feiyong(p,room);
//判断通道上是否有车及车站是否已满
if(W->
front!
=W->
rear)//便道的车辆进入停车场
{ q=W->
front->
next;
t=q->
data;
\n现在停车场有空位了,便道的%s号车将进入停车场第%d号停车位。
t->
num,In->
\n请输入现在的时间格式为“**:
(t->
现在停车场有空位了,便道的%s号车在%d:
%d时进入停车场第%d号停车位。
\n\n"
top,t->
reach.hour,t->
reach.min);
W->
next=q->
if(q==W->
rear);
rear=W->
front;
In-
top]=t;
free(q);
else{printf("
\n停车场里没有车\n"
}//没车
首先定义一个整型变量room,用来记录要离开的车辆在停车场的位置,定义
车辆结点指针p和t和队列结点指针q,然后判断停车场内是否有车,如果有车,就输入要离开的车辆在停车场的位置。
若栈顶位置In->
top大于要离开的车位置
room,在要离开的车辆后面的车就要先离开,开到临时停车场,,因此Out所表示的临时栈的栈顶top加1,用来表示临时停车场增加1辆车;
接着把该车的信息拷贝到栈Out中,然后删除栈In的栈顶。
直到要离开的车辆后面的车都开到临时停车场之后,该车才离开,离开之后,该车的信息结点In->
top]置空,然后栈顶In->
top减1。
之后就把临时停车场的车开回停车场里,因此停车场的栈顶In-
top加1,然后就把临时停车场的车结点的信息拷贝到停车场的车结点上,接着删除临时停车场车的结点。
最后判断(W->
rear)即便道上是否有车满,如果便道有车且停车场未满,通道的车便可进入停车场,此时指针q指向便道的头,即队头,然后停车场的栈顶In->
top加1以便增加新的车辆,接着输入要进停车场的车的信息,然后便道队列的头结点指向原队列中第二辆车的结点,接着判断刚离开的车是否是最后一辆车,如果是,就把队列置空,即队头等于队尾;
之后就把结点t(即要进入停车场的车)的信息拷贝到停车场栈顶的车中,最后释放p的空间。
(3)显示停车场的出入信息
voidxianshi1(SqStack*S)//列表输出车场信息
{ inti;
if(S->
0)//判断停车场内是否有车
\n车场:
printf("
\n位置到达时间车牌号\n"
\n\车场:
fprintf(fpout,"
for(i=1;
i<
=S->
top;
i++)
%d\t"
i);
%d "
S->
stack[i]->
reach.hour,S->
puts(S->
fprintf(fpout,"
%s"
else{printf("
\n停车场里没有车"
}
voidxianshi2(LinkQueue*W)//显示便道信息
{ QNode*p;
p=W->
rear)//判断通道上是否有车
\n便道中车辆的号码为:
while(p!
=NULL)
puts(p->
data->
p=p->
\n便道里没有车\n"
\n便道里没有车\n\n"
先显示停车场的信息,首先判断停车场里是否有车,如果有就输出车辆信息即
车位,车牌号和到达时间。
如果停车场里没有车,就输出停车场没有车。
再判断便道上是否有车,如果有车就输出便道上车辆的车牌号,若没有就输出便道上没有车。
最后按任意键返回。
(4)计算汽车离开时的收费情况
voidfeiyong(Car*p,introom)//输出停车站车的信息
{ intA1,A2,B1,B2;
ints,sum;
\n请输入车离开的时间格式为“**:
leave.hour),&
leave.min));
\n车牌号码:
puts(p->
\n车到达的时间是:
%d:
车离开的时间是:
leave.hour,p->
leave.min);
%d时离开,"
num,p-
A1=p->
reach.hour;
A2=p->
reach.min;
B1=p->
leave.hour;
B2=p->
leave.min;
s=(B1*60+B2)-(A1*60+A2);
if(s%60>
=30)sum=(s/60+1)*3;
elsesum=s/60*3;
您所需缴纳的费用为:
%d元\n"
sum);
车主需缴纳的费用为:
%d元\n\n"
free(p);
首先让户主输入离开时的时间,然后根据该车到达的时间算出该车总停留的
时
间,再根据每小时3元,不足一小时四舍五入即s=(B1*60+B2)-(A1*60+A2);
if(s%60>
elsesum=s/60*3;
算出总的费用。
。
4软件的测试
1.进入界面输入停车场的最大容量为6:
图5.1系统初始化界面图
2.输入8辆车进入停车场,并显示停车场的信息:
图4.2汽车进入停车场的示意图
图4.3汽车进入便道示意图
图4.4显示停车场的信息图
3.使3号位的车离开车场,离开后便道上的车进入停车场,并显示汽车离开后停车场的信息:
图4.5汽车离开车场,便道上的车进入车场的示意图
图4.6显示停车场的信息
4.退出系统:
图4.7退出系统示意图
5.停车场的所有出入信息保存在estdout.pc2文件中:
图4.8车场信息存入磁盘的部分示意图
5总结
通过这次数据结构的程序设计,我更加理解了栈和队列这两种重要的线性结构。
知道了栈和队列的抽象数据类型的定义,知道了栈的顺序存储结构和队列的链式存储结构的定义和算法描述,也充分的理解了用栈和队列实现模拟停车场的基本原理。
学会了编一些简单的停车场的程序。
这次的程序设计总的来说我觉得编写的还可以,但是仍然有一些地方需要完善,如把停车场的信息保存在磁盘上,就有一些困难。
后面还是通过和同学一起讨论才有了大概的思路,知道了从哪里下手。
刚开始看到这个程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 停车场 管理 系统