停车场管理系统课程设计报告 最终版Word格式.docx
- 文档编号:17850570
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:28
- 大小:366.19KB
停车场管理系统课程设计报告 最终版Word格式.docx
《停车场管理系统课程设计报告 最终版Word格式.docx》由会员分享,可在线阅读,更多相关《停车场管理系统课程设计报告 最终版Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
要求使用全部合法数据、整体非法数据、局部非法数据进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明。
3、2 停车场管理系统的主要功能
(1) 根据车辆到达停车场到车辆离开停车场时所停留的时间进行计时收费。
(2)该程序设计能够通过车牌号查到该车辆在停车场或便道中的位置。
(3)当有车辆从停车场离开时,等待的车辆按顺序进入停车场停放。
实现停车场的调度功能。
该程序设计可以完整的模拟停车场的管理过程。
4概要设计
4.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)
将栈S清为空栈。
tackEmpty(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已存在且非空。
从栈底到栈顶依次对S的每个数据元素调用函数visit()。
一旦visit()失败,则操作失效。
}ADT Stack
(2)队列的抽象数据类型定义
ADTQueue{
D={ai|ai∈ElemSet,i=1,2,、、、,n,n≥0}
R1={<
ai-1,ai>
|ai-1,ai∈D,i=2,、、、,n}
约定其中a1端为队列头,an为队列尾。
InitQueue(&
Q)
构造一个空队列Q。
DestroyQueue(&
Q)
队列Q已存在。
队列Q被销毁,不再存在。
ClearQueue(&
队列Q已存在。
将Q清为空队列。
QueueEmpty(Q)
若Q为空队列,则返回TRUE,否则FALSE。
QueueLength(Q)
返回Q的元素个数,即队列的长度。
GetHead(Q,&
Q为非空队列。
用e返回的队头元素。
EnQueue(&
Q,e)
插入元素e为Q的新的队尾元素。
DeQueue(&
Q,&e)
删除Q的队头元素,并用e返回其值。
QueueTraverse(Q,visit())
Q已存在且非空。
从队头到队尾,依次对Q的每个数据元素调用函数visit()。
一旦visit()失败,则操作失败。
}ADT Queue
4.2函数及功能要求
(1)此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先调用option()函数,出现欢迎用户使用的主界面,然后提示用户进入此停车场管理系统后,再出现一个供用户选择的界面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内停放车辆的信息以及退出程序这四个函数模块。
其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。
最后,从调用的这四个函数中回到主函数结束整个程序的运行。
(2)在以上各个模块中,出现的调用的函数为:
voidInitStack(SeqStackCar*s);
intInitQueue(LinkQueueCar *Q);
option();
intArrival(SeqStackCar*Enter,LinkQueueCar*W);
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W);
voidPRINT(CarNode*p);
void List(SeqStackCarS,LinkQueueCar W);
voidList1(SeqStackCar *S);
voidList2(LinkQueueCar *W);
5详细设计
5、1数据结构的设计
程序中使用了一个类,五个结构体,两个栈(模拟停车场,其中一个为临时栈),一个队列(模拟便道)。
(1)车辆信息的表示
车辆可瞧成就是一个节点,设计成一个结构体,车辆信息包括:
车牌号码,车辆的进站时间与离开停车场的时间,定义如下:
typedefstructnode{
ﻩcharnum[10];
//车牌号码 Time reach;
//到站时间
Timeleave;
//离开时间
}CarNode;
(2)时间、栈与队列的定义
时间就是由小时与分钟表示的,有两部分数据,设计两个变量分别存储小时与分钟,定义如下:
typedef struct time{
inthour;
intmin;
}Time;
停车场内用栈表示:
typedefstructNODE{
CarNode*stack[MAX+1];
//栈用顺序表示inttop;
}SeqStackCar;
ﻩSeqStackCarEnter,Temp;
InitStack(&
Temp)
在车辆离开时,应用temp临时栈把将要离开的车辆后续车辆压入,等车辆离开后压回原栈stack。
便道上的车辆表示:
typedefstructcar{
ﻩCarNode *data;
//便道上的车用链表表示ﻩ
structcar*next;
}QueueNode;
typedefstructNode{
ﻩQueueNode*head;
//设置头指针、尾指针
QueueNode*rear;
}LinkQueueCar;
5、2算法的设计思想及流程图
5.2.1 主要函数的功能说明
(1)voidInitStack(SeqStackCar*);
//车辆节点进栈。
即当栈未满时,就把到达的车辆进栈。
(2)int InitQueue(LinkQueueCar*);
//车辆节点进队列。
即当栈已满时,车辆就进入便道上的队列中
(3)int Arrival(SeqStackCar*,LinkQueueCar*);
//车辆到达登记。
即车辆到达时,先登记车辆车牌号码。
然后再判断停车场有没有停满,没停满就进栈,停满了就停在便道上,即进队列。
(4)voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar *);
//车辆离开处理。
即通过输入离开车辆的位置处理,然后调用PRINT(CarNode*p,int room);
函数进行收费。
然后再判断便道上有没有车,如果有,就把便道上的车进停车场内。
(5)voidList(SeqStackCar,LinkQueueCar);
//显示车场内与便道上的车辆情况。
利用switch();
函数选择显示车场内或就是便道上的车辆情况,包括对下面两个子函数的调用:
voidList1(SeqStackCar*S);
void List2(LinkQueueCar*W);
//分别用来显示车场与便道上的车辆情况
(6)voidPRINT(CarNode *p,introom);
//车辆离开时的收费。
即这个函数由车辆离开的函数调用,以分钟计时算费,但只能计算当天之内的费用,如果第二天的话会导致计费为负或减少。
即只能当天停,当天开走。
5.2.2停车场管理系统流程图
经过对车辆的进出分析以及对该系统的详细设计,绘制停车场管理系统流程图
图1停车场管理系统流程图
5.2.3主要模块算法描述
本程序最主要的算法就就是车辆到达登记的与车辆离开时的登记。
(1)车辆到达:
intArrival(SeqStackCar*Enter,LinkQueueCar*W)//首先定义一个栈与队列的结构体指针为:
*p,*t。
然后申请一个车辆信息的内存空间,并把它赋给栈指针。
车辆到达时就输入车牌号,并通过if(Enter->
top<
MAX)来判断该车就是进车场内还就是进便道上,如果就是进车场内就把top加1,显示 在车场内的位置,还要输入进车场的时间,然后把该节点进栈。
如果就是else 就显示该车要停在便道上,并进行进队列的操作。
(2)车辆离开:
voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//定义一个整型变量room记录要离开车辆的位置,定义两个栈指针与一个队列指针,用个if(Enter->
top>0)确保栈不空,然后用个while
(1)确保输入的车辆离开位置的合法性。
如果不合法,显示输入有误,要重新输入。
通过while(Enter->top>
room) 判断离开车辆的位置,如果就是中间位置,就要再用一个临时栈放置前面临时开出来的车,等要开出的车开出后,再把临时栈内的车开进停车场内,并调用PRINT(p,room);
这个函数计算显示费用。
然后还要用if((W->head!
=W->
rear)&&
Enter->
top<
MAX)语句判断便道上有没有车,如果有车就要显示进停车场的车的车牌号,并登记进入时间。
并要进行相应的出队列与进栈操作。
6 测试分析
6.1 测试用例
说明:
测试用例要合理并且足够,既要有正确用例,也要有错误用例,同时检验程序的正确性与强壮性。
6.1.1第一组测试用例
(1)测试输入:
停车场的车辆离开,如表1所示:
表1:
车辆离开测试
服务选择
车牌号/车位
到达/离开时间
1
京A1212
12:
12
津S1212
13
鲁D1212
14
2
14:
2
1
25:
65(错误)
(2)测试目的:
测试离开方法时间格式控制以及费用计算就是否正确。
(3)正确输出:
第一次离开的就是京A1212,应交费2、4元。
第二次时,当在输入65时,应该提示输入错误,重输。
(4)实际输出:
图2测试离开方式时间格式及费用计算图
图3测试车辆离开错误图
(5)错误原因:
第一个正确,第二个错误,原因就是没有对时间格式控制。
(6)当前状态:
已改正
6.1.2第二组测试用例
连续5辆车到达,如表2所示:
表2:
连续5辆车到达测试
到达时间
京A1212
津S1212
豫F1212
15
沪G1212
12:
16
14:
12
测试到达方法与列表显示方法能否正确完成。
先到达的三辆车先进入停车场,最后到达的两辆在便道等候。
表4车辆到达方式测试
图5车辆进入提示图
(5)错误原因:
没有错误。
(6)当前状态:
通过。
6.1.3 第三组测试用例
接上一步输入离开信息,如表3所示:
表3:
接上一步离开信息测试
离开车位
离开时间
便道车进入时间
14:
12
测试离开方法功能就是否成功以及便道进入车场就是否正确。
(3)正确输出:
输出1号车位的车辆离开信息清单,便道1号车进入停车场。
(4)实际输出:
图6测试离开方法功能就是否成功图
通过
6、2测试结果分析
经过我们小组一天的调试,我们终于把各模块整合起来了。
在这过程中,我们遇到了很多问题,像数据不匹配、括号不配对、赋值重复等。
因为C语言的语法限制不太严格,对变量的类型约束不严格,对数组下标越界不做检查等原因,所以,我们的修改工作难度加大。
但经过我们这小组共同的努力。
此停车管理系统可以基本实现一个小的停车场的管理,其“到达”与“离开”方法都相对比较完整,费用结算清单直观。
在输入数据时,要按照严格的格式输入,否则有可能出现死去或崩溃。
若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关机等,而此系统的缺点却就是没有保存功能,关闭之后数据丢失。
现受限于各种条件,又因为要求中并未提及,所以本程序暂时没有加入保存功能。
7使用说明
(1)运行程序,首先出现主界面。
主界面包括四个选项:
选项1:
车辆到达登记,选择该项可进行车辆到达停车场情况登记;
选项2:
车辆离开登记,选择该项可进行车辆离开停车场情况登记;
选项3:
车辆列表显示,选择该项可查瞧车辆列表显示的所有信息,包括停车场列表与便道列表的全部信息;
选项4:
退出系统,选择该项将退出程序。
图7程序初始界面图
(2)车辆列表显示界面包括3个选项:
停车场列表,选择该项可以查瞧停车场列表的所有车辆的全部信息;
便道列表,选择该项可以查瞧便道列表显示的全部信息;
返回主菜单,可返回主界面。
图8车辆列表显示界面图
8 总结
总体来说,这次的课程设计比去年的c语言的课程设计稍难。
我这次的课程设计题目:
停车场问题。
相比其她课题来说,这个题目还就是比较简单的,主要就是运用了数据结构中栈与队列的知识与操作。
程序能够实现基本的车辆到达、离开、收费、遍历显示等主要功能。
但我觉得这个程序还有很多小的地方就是可以完善的,比如:
在计算收费时如果离开时间就是到了第二天,这样就会导致收费就是负的或减少很多。
也就就是说,该程序限制于只能规定当天停,当天开走。
至于加算天数的功能我改了几次改不好,又鉴于程序要求中也没有提及并且时间紧张,所以也就没再去研究实现。
只要能实现主要的功能就好了。
当然,这次的课程设计、编程实践还就是收获颇丰的。
通过实习我的收获如下:
(1)我知道了怎样去简化程序,减少她的时间复杂度与空间复杂度。
还知道了怎样去完善程序,使其更具健壮性。
(2)巩固与加深了对数据结构相关知识的理解,提高综合运用本课程所学知识的能力。
(3)培养了我选用参考书,查阅手册及文献资料的能力。
培养独立思考、深入研究、分析问题、解决问题的能力。
(4)通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法。
(5)通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念与全局观念。
根据我在实习中遇到的问题,我将在以后的学习过程中注意以下几点:
(1)认真上好专业实验课,多在实践中锻炼自己。
更让我懂得实践就是检验与掌握真理的最好办法。
(2)写程序的过程中要考虑周到、严密。
需求分析需要反复思考修正。
(3)在做课程设计的时候要有信心、有耐心,切勿浮躁。
(4)认真学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
(5)在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。
总之,本次课程设计不仅加深了我们对栈与队列等数据结构的理解与掌握,同时一定程度上提高了我们程序设计与阅读程序的能力。
本次课程设计提高了我们的专业知识,使自己所学的内容运用到实际中来,也增强了实际操作能力,为以后的工作学习提供了一个良好的铺垫。
参考文献
[1]严蔚敏,吴伟民、数据结构[M].北京:
清华大学出版社,2004、
[2]李春葆.数据结构解析[M]、北京:
清华大学出版社,2001、
[3]谭浩强、C语言程序设计[M].北京:
清华大学出版社,2005、
[4]朱战立,张选平、数据结构学习指导与典型题解[M]、西安:
西安交通大学出版社,2002.
[5]张玲,席德春,刘晓杰、C语言上机实践指导教程[M]、北京:
机械工业出版社,2004、
[6]罗文劼,王苗,石强、数据结构习题解答与实验指导[M]、北京:
中国铁道出版社, 2004、
[7]殷人昆,陶永雷,谢若阳等、数据结构[M]、北京:
清华大学出版社,2005、
附录
//系统说明:
本系统适应于小型停车场,且停车时间在一天之内的短期停放停车场。
//在此系统中,车库容量设置为3,便于测试。
在实际使用中可以对容量大小按实际情况设置。
#include<
stdio、h>
#include<stdlib、h>
#include<
string、h>
#defineMAX3 //停车场最大容量为3辆,便于观察
#defineprice0.02
//定义时间结构体
typedefstructtime
{
ﻩinthour;
ﻩintmin;
}Time;
//定义车辆信息结构体
typedef structnode
{
ﻩcharnum[10];
Timereach;
Time leave;
}CarNode;
typedefstructNODE
{
CarNode *stack[MAX+1];
inttop;
}SeqStackCar;
//模拟停车场
typedefstructcar
{
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
QueueNode *head;
QueueNode*rear;
}LinkQueueCar;
//模拟便道
//方法声明
voidInitStack(SeqStackCar *);
//初始化栈
intInitQueue(LinkQueueCar*);
//初始化便道
intArrival(SeqStackCar*,LinkQueueCar *);
//车辆到达
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);
//车辆离开
voidPRINT(CarNode*p,introom);
//车辆收费
voidList1(SeqStackCar*S);
//显示车场里的车辆情况
voidList2(LinkQueueCar*W);
//显示便道上的车辆情况
voidList(SeqStackCar,LinkQueueCar);
//显示信息
//voidsavecar(CarNode*);
//保存车辆信息
//自定义函数
/*voidsavecar(CarNode*p1)//保存车辆信息
ﻩFILE*fp1;
if((fp1=fopen("
car1、txt"
"
w"))==NULL)
ﻩ{
ﻩprintf("
\n\t◆不能保存车辆信息◆\n");
ﻩreturn;
}
ﻩwhile(p1)
{
ﻩfwrite(p1,sizeof(structnode),1,fp1);
p1=p1->
next;
ﻩ}ﻩ
}*/
//栈的初始化
voidInitStack(SeqStackCar*s)
int i;
s->
top=0;
for(i=0;
i<
=MAX;
i++)
s->
stack[s->
top]=NULL;
}
//队列的初始化
intInitQueue(LinkQueueCar*Q)
{ﻩ
ﻩQ->
head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->
head!
=NULL)
Q->head->
next=NULL;
Q->
rear=Q->
head;
return
(1);
}
else
ﻩreturn(-1);
}
//车辆收费
voidPRINT(CarNode*p,introom)
{ﻩ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场管理系统课程设计报告 最终版 停车场 管理 系统 课程设计 报告