停车场管理系统程序设计书.docx
- 文档编号:23890009
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:41
- 大小:1.10MB
停车场管理系统程序设计书.docx
《停车场管理系统程序设计书.docx》由会员分享,可在线阅读,更多相关《停车场管理系统程序设计书.docx(41页珍藏版)》请在冰豆网上搜索。
停车场管理系统程序设计书
停车场管理系统程序设计书
一、程序设计目标
1、通过本次课设进一步的了解栈和队列等有关概念。
掌握栈和队列的建立,掌握栈和队列的基本操作,深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。
2、复习巩固C语言知识。
通过C语言课程设计,使我们了
解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,更加了解C语言的好处和其可用性。
进一步加深对C语言、数据
结构、离散数学等基础技能的理解和掌握。
3、掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
4、掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
让我们有一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力。
同时增加了同学之间的团队合作精神!
更加体会到工作中团队合作的重要性和必要性!
二、问题描述
※按照题目要求,我们把程序分为三个模块
a.车辆到达模块:
设有一个可以停放n辆汽车的狭长停车
场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的
早晚依次从停车场最里面向大门口处停放(最先到达的第一辆
车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待。
b.车辆离开模块:
一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
每辆车在离开停车
场时,都应依据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,
并且仍然保持在便道上等待的车辆的次序。
c.显示模块:
当需要列表显示时,系统判断输入值(1-3),如果输入1,则调用显示车场列表,如果输入2,则调用显示便道信息,如果输入3,则返回主菜单。
二、需求分析
这个程序的关键是车辆的进站和出站操作,以及车辆的通道之
间的相互关系。
由于停车场是一个很窄的、一边开口的车道,先进后出,类似数据结构中的栈结构,故车场用顺序栈这种数据结构来描述。
外面的狭长的通道,先进后出,通道的车辆可以随时退出,故可用链式队列结构来描述。
考虑到车场和通道在整个程序中都要用到,故把这两个变量定义为全局变量。
本程序中的数据对象是汽车,可以认为车牌号是每个元素的关键项,不能重复,和现实中的一样,车的入场时间以及出场时间都将作收费项目来考虑。
在通道上的车
由于没有入场,故不用收取费用。
※功能实现方式:
(1).以栈S作为停车场,栈S1作为让路的临时停车点,队列Q作为车等待时用的便道,stack[Max+1]作为车场能够容纳的车辆数,num[10]作为车所在位置的编号,并且限定车场最多能够容纳10辆车.
(2).用户根据系统所规定并提示的要求输入有关内容,车场所能容纳的车辆数由收费人员来确定,车辆离开时,车主还可以得到收据,便于收费的管理使用,并且系统程序所提供的一些信息可通过特殊硬件显示出来,供车主了解信息,准确有效的停车。
(3).程序能够显示当前存车信息以及等待车的信息,便于管理人员对车辆进行管理,并且能够给等待中的车提供当前车场占用情况信息,便于他们能够及时的停车。
(4).程序执行的命令为:
输入进站信息->输入出站信息->打印收据
(5).每组输入信息相应的输出信息为:
如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。
四、概要设计
1.数据结构说明
用到两个顺序栈:
一个为车场栈;另一个为临时栈temp
typedefstructNode
{
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;
一个链式队列结构,存储便道车辆信息:
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;
2•算法说明
终端汽车读入数据包含三项:
a.是“到达”还是“离开”;
b.汽车牌照号码;
c.“到达”或“离开”的时刻。
3•功能模块说明
停车场管理系统含有三个模块,即:
车辆到达、离开、列表显示
以模块为单位分析算法
a.车辆到达模块:
至U达时有两种情况,即车场是否满,未满则直接进入停车场;
b.
车辆离开模块:
离开时,当车库为空时,提示没有车,结束;否则车辆离开。
如图3。
(图3)
c.显示模块:
显示模块有两个显示选项,即:
车场与便道。
如图4。
(图4)
4、主要要点说明
a.主程序
Voidmain()
{声明定义
调用栈与队列的函数
主信息(输入初始操作信息)
}
b.栈---实现栈抽象数据类型
c.队列---实现队列抽象数据类型
d.结构体---用于对对象及变量的管理
它们之间的调用关系如下:
主程序
结构体栈队列
五、详细设计(实现程序模块的具体算法)
1.菜单选项
应用switch分支循环对应的数字类别,执行相应的系统功能。
2.动画
欢迎动画从屏幕下方上升,结束动画是从屏幕上方下落。
动画是由输出的图案叠加而成,输出一个图案便立刻清屏,接着输出下一时刻的图案,一次输出一次清屏便在人眼中形成动画效果。
Oo
w
b*★☆欢迎使用本停车管理系统♦
1
r/'☆/\、、
••
O''O
厂/\—--☆/\=\/
••
1
oO丁一丿
1一^OO"-丿
说按枉意镇继续…
开头动画
*i*essanykeytocontinue
结束动画
3•停车场系统
a结构体声明与定义
typedefstructtime{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode{charnum[10];
Timereach;
Timeleave;
}CarNode;/*车辆信息结点*/
typedefstructNODE{
CarNode*stack[Max+1];
inttop;
}SeqStackCar;/*模拟车站*/typedefstructcar{
CarNode*data;
structcar*next;
}QueueNode;/*队列信息结点*/
typedefstructNode{
QueueNode*head;
}LinkQueueCar;/*模拟通道*/
b、函数声明与定义
(1)主函数
voidmain()
{//主程序
//初始化等
while
(1){
seanf();//根据提示信息输入想要的操作
switch(k){〃根据输入的数调用不同的函数
case1:
case2:
}
}
typedefstruct**{
//用于创建不同结构体类型的指针与变量
}
voidPRINT(CarNode*p){
//调用输出函数
Leave(*p,n)
根据求解时间值来求得费用,并通过收据打印出来
}
(2)功能函数的声明
1voidInitStack(SeqStackCar*,intn);
初始化栈
2intInitQueue(LinkQueueCar*);
初始化队列
3intArrival(SeqStackCar*,LinkQueueCar*,intn);
车辆到达,登车牌号,没停满进栈。
否则,进队列
4voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);
车辆离开,通过输入离开车辆的位置处理,然后调用PRINT
(CarNode*p);函数进行收费,然后,判断便道上有没有车,如果有,就进停车场。
5voidExitCar(SeqStackCar*,SeqStackCar*,LinkQueueCar*,intn);
车辆离开,通过输入车牌号而处理离开,然后调用PRINTCarNode*p);函数进行收费,然后,判断便道上有没有车,如果有,就进停车场。
6voidList(SeqStackCar,LinkQueueCar);
显示信息,用switch();函数选择显示车场与便道上的车辆情
况,包括对voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);分别为车场和便道上的车辆情况
7voidPRINT(CarNode*p)打印出站车的信息。
(3)库函数
Stdio.h/*标准输入/输出头文件*/
String.h/*包含字符串处理函数头文件*/
Stdlib.h/*包含动态存储与释放函数头文件*/
Malloc.h/*包含内存分配头文件*/
4.主要函数思想
本程序是个简单的栈与队列的应用程序,其所用的函数也是栈
与队列的基本函数,但在编写函数时应特别注意它的面向对象性与窗口化设计,切身为使用者着想.所以在运用一些函数时调用的基本语句有太多的重复,其目的在于实现它本来的基本目的.
六、软件说明书
本系统为存车信息管理软件,能实现车场存车及便道存车信息
的输入,输出,查找等功能,并建立和更新的存车费用信息保存于文件输出或打印。
每辆车的相关信息包括:
车牌号,进站时间,出站时间,存车位置,(非)会员停车费用等。
该程序是简单的用于运用栈与队列基本知识的工具,不能用于现实中,特别是栈“先进后出”的规则大大限定了该程序的推广,现实世界的车站管理系统比这个远远复杂的多。
※进入演示系统后首先会出现欢迎动画,是一个用户及管理员使用注意事项界面。
该停车场管理系统是个比较简单系统,在应用的时候请注意要求如果您有任何问题,请及时联系我们,谢谢合作!
厂'
•
I—丿、「••―•厂—「★••_
ill••—•••!
I••—
!
■■■■■■Ill••—••I©I..—
〔、■■■■匚Ill..※※※^。
O丿※※
I、■匚l八
l、匚l
V/
※进入注意事项界面后系统会提示你停车场所容纳的车辆数,输入可容纳车辆后(1-10),进入管理系统界面
♦*★☆欢迎使用本停车管理系统承*^**♦
***************************************************************
***************************************************************
本停车场管理实行24小时制*\n");
*本停车场有会员服务,会员0.05/每分钟,非会员0.1/每分钟*
请选择所需要的服务:
1|2|3|4|5.
※这时可按照提示进行你想要的操作,对于1-5的具体操作与内
容请详见前面的调试分析,您便可以轻松操作了!
!
注意事项:
1、注意按提示内容输入,以免出错。
2、本系统功能还需完善,操作简单,只是供学习之用,并不能作为实际生活使用。
七、源程序清单#include
#defineMax10
charNUM[10];
intgetn()
{
intn;
printf("请输入停车场可容纳的车(最多10辆):
");scanf("%d",&n);
fflush(stdin);/*用来清空输入缓存,以便不影响后面输入的东西*/do{
if(n<1||n>10)
{
printf("输入的车辆数不在要求范围内,请重新输入!
");scanf("%d",&n);
fflush(stdin);
}elsebreak;
}while(n<1||n>10);
returnn;
}
typedefstructtime{
inthour;
intmin;
}Time;/*时间结点*/
typedefstructnode{
charnum[10];
Timereach;
Timeleave;
}CarNode;/*车辆信息结点*/typedefstructNODE{
CarNode*stack[Max+1];
inttop;
intn;
}SeqStackCar;/*模拟车站*/
typedefstructcar{
CarNode*data;
structcar*next;
}QueueNode;/*队列结点*/
typedefstructNode{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;/*模拟通道*/
voidInitStack(SeqStackCar*,intn);/*声明栈*/
intInitQueue(LinkQueueCar*);/*声明便道*/
车辆出站
intArrival(SeqStackCar*,LinkQueueCar*,intn);/*车辆进站*/voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*,intn);/**/
voidList(SeqStackCar,LinkQueueCar);/*显示存车信息*/
/*开头动画*/
voiddh1()
{printf("♦*★☆欢迎使用本停车管理系统承*^**♦\n"
printf("
厂/、☆---
-/\、
厂/\--
一☆/、
、\n");
printf("
1
1
1\
/
|\n");
printf("
•
•1
1•
•
|\n");
printf("
o「一-
o1
1〃J
1||7^
|\n");
printf("
1
1
1
<丿
|\n");
printf("||||\n");
printf("*OOn丿^—On丿\n");
}voidset1(){
for(inti=15;i>1;i--)
{
system("cls");
for(intj=0;j
{
printf("\n");
}
dh1();
}
system("pause");
fflush(stdin);
}
/*结束动画*/
voiddh2()
printf("\丄厂厂厂厂厂—/|\n");
printf("
1
|\n");
printf("
1
|\n");
printf("
1
|\n");
printf("
••
|\n");
printf("
—|^lll7
—|\n");
printf("
|
|\n");
printf("
1
|\n");
printf("
1
|\n");
printf("
J—lO—On-
丄\n");
printf("
|欢迎下次|
\n");
printf("
|光临|
\n");
printf("
—
\n");
voidout2()
{
for(inti=1;i<10;i++)system("cls");
for(intj=0;j
{
printf("\n");
}
dh2();
}
exit(0);
}
voidInitStack(SeqStackCar*s,intn)/*初始化栈*/
{
inti;
s->top=0;
for(i=0;i<=n;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);
}
elsereturn(-1);/*结束*/
}
voidPRINT(CarNode*p)/*打印出站车的信息*/
{
intA1,A2,B1,B2;
inta,b,c;
inti;//会员
charch;
printf("\n请输入离开的时间(小时:
分钟):
");scanf("%d:
%d",&(p->leave.hour),&(p->leave.min));
fflush(stdin);
do{/*直到程序输出正确的时间*/if(p->leave.hour
{
printf("输入离开时间比进站时间早,请重新输入!
\n");scanf("%d:
%d",&(p->leave.hour),&(p->leave.min));fflush(stdin);
}
if(p->leave.hour<0||p->leave.hour>=24||p->leave.min<0||p->leave.min>=60)
{
printf("输入的时间格式有错!
请重新输入:
");scanf("%d:
%d",&(p->leave.hour),&(p->leave.min));fflush(stdin);
}
elsebreak;
}
while(p->leave.hour
printf("车场现在有一辆车离开,请便道里的第一辆车进入车场!
\n");printf("出站的车的车牌号为:
");
puts(p->num);/*把车牌号输出*/
printf("\n");
/*计算出正确的所需的钱数*/
A1=p->reach.hour;
A2=p->reach.min;
B1=p->leave.hour;
B2=p->leave.min;a=(B1-A1)*60+B2-A2;
if(a>=60)
{
b=a/60;/*停留时间中的小时*/c=a-60*b;/*停留时间的分钟*/
}
else
{
b=0;
c=a;
}
printf("请问你是否是会员(是1/否0):
");
while
(1){
scanf("%d",&i);
if(i==1)
{
printf("祝您一路顺风,欢迎您下次光临.");
printf("\n★☆收据"\n");
printf("\n★☆会员*^\n");
printf("车牌号:
");
puts(p->num);
printf("\n");
printf("===================================================\n");printf("|进车场时刻|出车场时刻|停留时间|应付(元)|\n");printf("====================================================\n");printf("|%d:
%d",p->reach.hour,p->reach.min);
printf("|%d:
%d",p->leave.hour,p->leave.min);
printf("|%d:
%d",b,c);
printf("|%2.1f",0.05*a);
printf("|\n");
printf("\n");
free(p);break;
}
if(i==0)
{
printf("祝您一路顺风,欢迎您下次光临.");
printf("\n★☆收据"\n");
printf("\n★☆非会员\n");
printf("车牌号:
");
puts(p->num);
printf("\n");
printf("===================================================\n");printf("|进车场时刻|出车场时刻|停留时间|应付(元)|\n");printf("====================================================\n");
%d:
%d",p->reach.hour,p->reach.min);
|
|
\n");
free(p);break;
}
else
printf("输入有错,请重新输入:
");fflush(stdin);
//ch=getchar();
}
}
intArrival(SeqStackCar*Enter,LinkQueueCar*D,intn)/*车辆到达,Enter为车
场的指针,D为便道队列的指针*/
{
CarNode*p;/*车辆结点p*/
QueueNode*t;/*队列结点t*/p=(CarNode*)malloc(sizeof(CarNode));
flushall();/*清空缓存区*/
inti;
printf("\n请输入车牌号(例:
A1234):
\n");
gets(p->num);
if(Enter->top { Enter->top++; printf("车辆在车场第%d位置.",Enter->top);fflush(stdin); printf("\n请输入到达时间(小时: 分钟): ");scanf("%d: %d",&(p->reach.hour),&(p->reach.min));fflush(stdin); do{ if(p->reach.hour<0||p->reach.hour>=24||p->reach.min<0||p->reach.min>=60) { printf("输入的时间格式有错,请重新输入: ");scanf("%d: %d",&(p->rea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 管理 系统 程序设计