软件工程与计算课程设计停车管理系统软件124何航160365doc文档格式.docx
- 文档编号:19060813
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:22
- 大小:59.48KB
软件工程与计算课程设计停车管理系统软件124何航160365doc文档格式.docx
《软件工程与计算课程设计停车管理系统软件124何航160365doc文档格式.docx》由会员分享,可在线阅读,更多相关《软件工程与计算课程设计停车管理系统软件124何航160365doc文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
1.2基本要求
要求程序输出每辆车到达后的停车位置(停车场),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。
1.3系统用户分析
“停车场管理系统”主要是针对车辆存取工作而开发的应用软件。
通常有系统管理员、停车场车辆管理员和顾客三种用户,他们的使用权限如下:
系统管理员:
计算机人员,对系统进行维护。
图书管理员:
对停车信息进行数据操作。
顾客:
仅限于查阅。
1.4用数据流程图描述
图1-1是根据操作流程建立的流程图。
表1-1是车能否进停车场的判定表。
图1-1停车场流程图
车场内车数
<
20
>
车牌号位数
2或>
5
2且<
进站
√
进通道
表1-1进站停车判定表
2概要设计
2.1设计思想
此停车场管理系统是在一个狭长的通道上的,而且只有一个大门可以供车辆进出,并且要实现停车场内某辆车要离开时,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场的功能,就可以设计两个堆栈,其中一个堆栈用来模拟停车场,另一个堆栈用来模拟临时停车场,该临时停车场用来存放当有车辆离开时,原来停车场内为其让路的车辆。
至于当停车场已满时,需要停放车辆的通道可以用一个链队列来实现。
当停车场内开走一辆车时,通道上便有一辆车进入停车场,此时只需要改变通道上车辆结点的连接方式就可以了,使通道上第一辆车进入停车场这个堆栈,并且使通道上原来的第二辆车成为通道上的第一辆车,此时只需将模拟通道的链队列的头结点连到原来的第二辆车上就可以了。
2.2实现方法
对于此停车场管理系统的实现,就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点而已。
对于要对停车场内的车辆根据其停放时间收取相应的停车费用,可以记录下车辆进入以及离开停车场的时间,再用时间差乘以相应的单价并且打印出最后的费用就可以实现了。
2.3主要模块
①此停车场管理系统,主要分为以下若干模块:
首先定义用来模拟停车场的堆栈以及用来模拟通道的链队列为全局变量,然后编写主函数,在此主函数中实现对其它各个模块的调用。
在主函数中首先打印出此停车场管理系统选择页面,在用户的选择过程中,程序又分别调用车辆的到达、车辆的离开、停车场内与通道停放车辆的信息以及获取时间这四个函数模块。
其中,在车辆的离开那个模块函数中又调用了打印离开车辆信息的函数,在停车场内停放车辆信息的那个模块函数中,又分别调用了显示停车场上车辆信息的函数以及显示便道上车辆信息的函数。
最后,从调用的这四个函数中回到主函数结束整个程序的运行。
2.4各模块的主要功能及实现
2.2.1车辆到达模块
此模块主要实现车辆进入停车场功能,通过判断合法性决定车辆能否进入停车场。
实现伪码:
If车场内车数<
20辆and车牌号码合法then
车辆进入停车场并编号及记录时间
Endif
If车场已满then
进入通道
车牌号码合法性判断伪码:
If车牌号位数>
2and<
5and无重复车牌then
车牌号码合法
2.2.2车辆离开模块
此模块主要实现车辆离开停车场功能,并能打印出车辆停留时间及费用。
If车场不为空and序号存在then
车辆出停车场并打印出进出时间及费用
2.2.3停车场内与通道停放车辆的信息模块
此模块主要实现车场车辆的停放及通道的利用,是本设计的核心。
就是用两个堆栈来分别模拟停车场以及停车场内车辆为其它车辆让路时退出停车的临时停放地点。
至于通道上车辆的停放则用一个链队列来实现,此时,通道上车辆的离开或者进入停车场只需改变此链队列上的结点。
模块中出现的函数:
voidinit(SeqStack*s);
intisemptystack(SeqStack*s);
intisfullstack(SeqStack*s);
voidpush(SeqStack*s);
structcarpop(SeqStack*s,structcarx);
cargettop(SeqStack*s);
voidinitq(linkq*q);
voidaddq(linkq*q,structcarx);
structcardelq(linkq*q);
intisemptyq(linkq*q);
voidprintout(structcar*x);
voidprintq(linkq*q);
voidreview(SeqStack*s,linkq*q);
2.2.4获取时间
该模块主要获取车辆时间信息,用以计算车辆停车费用。
2.5函数间调用关系
如下图2-1所示
主函数
review
incar
用户界面
outcar
clear
printstack
printq
gettime
printout
结束
图2-1函数调用关系图
图中函数解释:
review查看车站内及通道内停车情况函数。
incar车进站函数。
outcar车出站函数。
clear定义数组函数。
printstack车进站时输入信息显示,及提示站内情况函数。
printq进过道信息函数。
gettime获取时间函数。
printout出站时的信息函数。
3详细设计
3.1界面及各模块详细设计
进入界面后如下图所示。
图3-1首界面
测试要点:
各选项与相应的功能能否成功连接。
1.车进站
(1).功能:
添加车牌号排序后进站。
(2).输入项:
车牌号。
(3).输出项:
车在车站内的“位置”“车牌”“进站时间”“站内状况”。
(4).测试要点:
注意不合法的车牌号能否在系统通过。
2.车出站
实现收费后出车站。
车序号。
车的“车牌”“进站时间”“进/出站”状态“出站时间”“原来位置”“停留时间”“费用”。
要出站的车序号是否存在。
3.查看车站及过道中的情况
查看车站及过道中车辆情况。
查看提示。
车场内状态即停车数量,以及通道内停车数量。
能否正确显示车的数量。
4.获取帮助
放回到开始界面。
(2).测试要点:
能否正确返回。
5.结束
结束程序。
4系统测试
4.1功能测试
4.1.1车进站时车牌号的测试
1.划分等价类及测试用例如下表所示。
假设此时站内有一辆编号为ABC的车。
表4-1车牌号等价类划分表
输入条件
合理等价类
不合理等价类
长度
(1)小于5个字符,大于2个字符
(3)小于2个字符
(4)大于5个字符
字符
(2)与站内车牌不重复
(5)与站内车牌相同
表4-2车牌号测试用例
测试结果
期望结果
覆盖范围
ddd
有效
(1)
(2)
A
无效
(3)
123456
(4)
ABC
(5)
2.车出站时的序号测试
假设此时站内有一辆编号为ABC的车,车的序号为1。
表4-3车序号的合理等价类
存在性
(1)存在
(2)不存在
表4-4车序号的测试用例
1
(1)
3
(2)
5总结
5.1用户手册
这个程序用来实现对停车场内车辆的管理,整个操作界面为中英文结合,更加符合人性化的标准,使得用户使用方便,而且每一个操作都有提示,使得初次接触该程序的用户也能很快适应程序的操作。
这个程序操作简单,对于进出停车场的时间,也简化了操作,系统会自动获取提交时的时间,即进站和出站的时间。
而且该程序也给用户提供了选择的机会,当点击运行该程序后,如果想退出程序,可以输入END退出该运行程序。
至于使用过程中的更具体的问题,可以参照该报告书中详细设计,整个程序的运行界面大致就如详细设计中屏幕截图的内容。
5.2设计体会
通过这一周的课程设计,加深了我对《数据结构》这门课程所学内容的进一步的理解与掌握;
同时,通过对停车场管理系统的开发,使得我将计算机课程所学知识与实际问题很好地相联接在了一起。
在这次课程设计中,不仅培养了我开发一个中小型程序的能力,而且也培养了我的团队合作能力。
在这次对停车场管理系统的开发过程中,我们小组成员互相合作,互相帮助,其中有程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫。
在这次课程设计中,使得我很好地了解了在开发程序过程中合作的重要性。
在这周课程设计中,我们小组所开发的停车场管理系统,基本上可以完成每一项功能。
汽车进入停车场的信息、离开停车场的信息以及通道上的信息都可以在程序上一一实现。
但是,该程序也有不足的地方。
主要表现在车辆的车牌号上,现实中的车牌号是一串字符,可是,在这个程序中并无限制,任何字符均可,这个与现实是有些不符的。
在改进的程序中,还应该增加时间的判断功能,即停车场内有可能有车辆停放的时间超过一天。
还有一个很重要的问题,对于停车场外的通道在现实中是不可能无限长的,而我们的设计中为了便于考虑就忽略了这一点。
总之,在这周的课程设计中,我以及我们这组的收获还是挺大的,不仅对于专业课有了更好的认识,而且在合作的过程中更加了解了团队精神的重要性。
参考文献
[1]秦峰.数据结构(C语言版)[M].合肥:
中国科学技术大学出版社,2008
[2]R.C.T.LeeS.S.TsengR.C.Chang.王卫东译.算法设计与分析导论[M].北京:
机械工业出版社,2008
[3]IraPohl.陈朔鹰马瑞薛静锋吕坤译.C++教程[M].北京:
人民邮电出版社,2007
附
源代码:
#include"
stdio.h"
string.h"
stdlib.h"
time.h"
#definenull0
#defineMaxsize20//定义最大停车辆数
FILE*fp;
voidclear(chara[])
{
inti,counta;
counta=strlen(a);
for(i=0;
i<
counta;
i++)
a[i]='
\0'
;
}
structcar//定义车的结构体
{
charnum[5];
//车牌号
charintime[10];
//进站时间
charouttime[10];
//出站时间
intexpense;
//费用
intdelay;
//停留时间
intposition;
//停车位置
};
typedefstruct
{
structcard[Maxsize];
inttop;
}SeqStack;
voidinit(SeqStack*s)//初始化栈
s->
top=-1;
}
intisemptystack(SeqStack*s)//判断栈是否为空
if(s->
top==-1)
return1;
else
return0;
intisfullstack(SeqStack*s)//判断栈是否为满
top==Maxsize-1)
else
voidpush(SeqStack*s,structcarx)//进栈
if(!
isfullstack(s))
{
s->
top++;
d[s->
top]=x;
}
structcarpop(SeqStack*s)//取栈顶元素,出栈
carx;
top!
=-1)
x=s->
top];
top--;
returnx;
cargettop(SeqStack*s)//取栈顶元素
typedefstructslnode//定义链队列的结点性质
structcardata;
structslnode*next;
}slnodetype;
typedefstruct//定义链的性质
slnodetype*head;
slnodetype*rear;
}linkq;
voidinitq(linkq*q)//初始化链队列
q->
head=(slnodetype*)malloc(sizeof(slnodetype));
rear=q->
head;
head->
next=null;
rear->
voidaddq(linkq*q,structcarx)//进队列
slnodetype*p;
p=(slnodetype*)malloc(sizeof(slnodetype));
p->
data=x;
next=p;
rear=p;
structcardelq(linkq*q)//出链队列
structcarx;
if(q->
head!
=q->
rear)
p=q->
next;
if(p->
next==null)
{
x=p->
data;
q->
free(p);
}
else
next=p->
intisemptyq(linkq*q)//判断链队列是否为空
rear==q->
head)
voidprintstack(SeqStack*s)//车进站时输入信息显示,及提示站内情况
inti;
if(isemptystack(s))
printf("
车站内没有车。
"
);
\t\t车站内\n位置\t车牌\t进站时间\t站内状况\n"
for(i=0;
=s->
top;
printf("
\n"
%d\t"
s->
d[i].position);
%s\t"
d[i].num);
d[i].intime);
共%d辆"
top+1);
if(s->
(已满)\n"
(还能放%d辆)\n"
Maxsize-1-s->
top);
voidprintout(structcar*x)//出站时的信息
printf("
车牌进站时间进/出站出站时间原来位置停留时间(秒)费用(角)\n"
%s"
x->
num);
intime);
出"
outtime);
position);
delay);
\t%d\n"
expense);
voidprintq(linkq*q)//进过道信息
isemptyq(q))
slnodetype*p;
\t过道:
\n车牌:
\t进道时间:
%s\t%s\n"
p->
data.num,p->
data.intime);
while(p->
next!
=null)
p=p->
\n过道上有没有车在等待\n"
voidreview(SeqStack*s,linkq*q)//查看车站和过道上的情况
*******************************************************\n"
printstack(s);
printq(q);
voidgettime(chara[])//获取时间
staticcharnowtime[30];
time_tt;
time(&
t);
strcpy(nowtime,ctime(&
t));
for(i=0;
9;
nowtime[i]=nowtime[i+11];
nowtime[i]='
strcpy(a,nowtime);
voidincar(SeqStack*s,linkq*q)//车进站(即输入IN后)
intflg;
structcark;
staticcharnowtime1[10];
请你输入车牌(2-5位):
gets(k.num);
if(strlen(k.num)<
2||strlen(k.num)>
5)
车牌号位数不对!
}
s->
if(!
(strcmp(k.num,s->
d[i].num)))
flg=1;
while
(1)
{
if(flg==1)
{
printf("
车牌号已存在!
gets(k.num);
}
else
break;
}
gettime(nowtime1);
strcpy(k.intime,nowtime1);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
fprintf(fp,"
车牌号%s时间:
%s\n"
k.num,k.intime);
if(!
isfullstack(s)&
&
isemptyq(q))//若车站不满,而且过道上没有车,则直接进入车站
k.position=(s->
top)+2;
push(s,k);
printstack(s);
if(isfu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 计算 课程设计 停车 管理 系统软件 124 160365 doc