133302班
20133531蒋国奇
20124733马美玲
20133543 施晨
2014年12月31日
课
名称
课题名称:
任务分工:
20133531蒋国奇:
负责部分代码编写,程序代码修改,课程
书编写工作 20133543施晨:
负责部分代码编写,程序调试以及测试,课程设计报告书编写工作 20124733马美玲:
负责部分代码编写,程序代码修改以及课程设计报告书编写工作
目 录
第1章 引言 ...................................................................................................1
1.1摘要.....................................................................................................1
1.2问题的提出.........................................................................................1
1.3目的及意义.........................................................................................1 第2章 需求
.............................................................................................2
2.1 概述....................................................................................................2
2.2 系统目标............................................................................................2
2.3 功能需求............................................................................................2
2.4非功能性需求.....................................................................................3
2.5数据需求.............................................................................................3
2.6 将来可能提出的需求........................................................................3 第3章 系统分析与设计.................................................................................3
3.1概述.....................................................................................................3
3.1.1功能............................................................................................3
3.1.2数据............................................................................................3
3.1.3操作............................................................................................3
3.2系统框架图.........................................................................................3
3.3函数设计.............................................................................................4
3.3.1主函数........................................................................................4
3.3.2初始化函数................................................................................5
3.3.3车的入场登记函数....................................................................6
3.3.4车的出场登记函数....................................................................6
3.3.5车辆显示函数............................................................................7
3.4模块设计.............................................................................................9
3.4.1主函数模块................................................................................9
3.4.2车辆入场登记模块....................................................................9
3.4.3车辆出场登记模块..................................................................10
3.4.4车辆停靠查询选择..................................................................11
3.4.5查看场内车模块......................................................................13
3.4.6查看便道车模块......................................................................14 第4章 编码与测试.......................................................................................15
4.1典型界面实现代码...........................................................................15
4.1.1车辆入场模块..........................................................................15
4.1.2车辆离开车场模块...................................................................17
4.2源程序 ..............................................................................................18 第5章 结束语................................................................................................27 参考文献..........................................................................................................27 附录一..............................................................................................................30 附录二..............................................................................................................32
第一章 引言
1.1摘要
本课程设计所选课题的主要目标是采用B/S模式,基于J2EE架构,实现网站构建管理系统的基本功能。
本次设计的主要工作及报告的主要内容可以归结如下:
(1)分析网站构建管理系统的功能需求和非功能需求。
(2)设计网站构建管理系统的技术体系结构,应用设计模式,设计数据库实体联系模型。
(3)实现网站构建管理系统的组件管理、模块管理、界面模板管理等诸多系统管理功能,提供留言板、滚动新闻、计数器等常用组件和模块。
(4)完成网站构建管理系统的单元测试、功能测试及性能测试,并给出测试分析。
1.2问题的提出
我们选择停车场管理系统是因为随着经济的发展,生活水平的不断提高,家庭车辆、社会车辆的拥有量在迅速地增长, 停车场管理的重要性也会越来越受到重视,而其技术的核心是对车辆的自动监控、识别和自动管理。现在车越来越多,导致停车拥挤,散乱,无秩序,所以我们想通过设计出一种管理停车的系统来解决现在私家车辆增多带来的违停乱停问题,于是在施晨的建议下,提出了“停车场管理系统”的开发。
1.3目的及意义
有效保证车辆停放平安,提高管理效率,封堵收费漏洞使停车场秩序有条不紊,提高停车场车位利用率。自动化、智能化水平高,智能停车场系统采用了多种先进技术。如采用车牌识别可以做到无人化值守,或者一个管理中心可以管理多个进出口,大大提高了管理效率,同时也降低了人手,节省管理本钱。另外智能停车场系统科学严谨的收费方式,防止管理人员私吞停车费
第1章 引言
用,保证了停车场的利益。能通过停车场系统中的车位引导系统可以让客户快速的找到剩余车位,会起到有效的引导作用。自动化、智能化水平高,智能停车场系统采用了多种先进技术。如采用车牌识别可以做到无人化值守,或者一个管理中心可以管理多个进出口,大大提高了管理效率,同时也降低了人手,节省管理本钱。另外智能停车场系统科学严谨的收费方式,防止管理人员私吞停车费用,保证了停车场的利益。一般的停车场,蹭车位也是停车场管理的一个难题。
1
第2章 需求分析
2.1 概述
根据停车场管理系统的问题分析及设计要求,可以把系统分为三个查询模块:车辆入场登记模块、车辆出场登记模块、车辆停靠查询查询模块。通过需求与问题提出相结合,将需求关系分为以下几种:系统目标、功能需求、非功能性需求、数据需求。 2.2 系统目标
(1)总体目标:解决车辆进入停车场秩序问题。 (2)具体目标:解决车辆入场问题,解决车辆等候问题。 2.3 功能需求
结合程序与实际,将提炼出其程序所执行的功能,并按功能挖掘其所有需求或部分需求。
(1)管理车辆信息数据
(2)管理车辆到达停车场时间数据
(3)管理车辆离开停车场时间数据
(4)管理车辆位置信息数据
2.4非功能性需求 :
根据程序的执行情况以及C++语言的特点,在非功能性如安全性、程序健壮性、可扩展性方面十分突出。
2.5数据需求:
该系统要处理的数据有车辆信息数据,车辆到达停车场时间数据,车辆离开停车场时间数据,车辆位置信息数据等,并根据具体的实际问题指定数据的流向。
2.6将来可能提出的需求:
根据本系统可能提出的需求如:
维护需求、管理需求、资源分配需求等。
第3章 系统分析与设计
第3章 系统分析与设计 3.1概述
3.1.1功能
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
3.1.2数据
设n=2,输入数据为:(„A‟,1,5),(„A‟,2,10),(„D‟,1,15),(„A‟,3, 20), („A‟,4,25),(„A‟,5,30),(„D‟,2,35),(„D‟,4,40),(„E‟,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,„A‟表示到达;„D‟表示离去,„E‟表示输入结束。
3.1.3操作
1) 可以输入车辆的进入时间和车辆的车牌号;
2) 能查询停车场的信息;
1.系统实际遵循的系统设计的原则及方法
用C++编程以及采用系统功能模块化,用结构体数组的存储结构进行存储,将所需要的停车场和便道抽象为栈和队列。
1.此系统采用栈和队列的存储结构存储,定义了五个结构体数组: 1.定义时间结点
typedef struct time
3
2.定义每辆车的牌号,进入时刻,开出时刻
typedef struct node
3.用栈定义,构造停车场
typedef struct NODE
4.用队列结点定义,构造停车场外的单个等候车辆
typedef struct car
5.用队列定义,构造停车场外的等候便道
typedef struct Node
3.2系统构架图
主菜单
车辆到达登记车辆离开登记车辆停靠查询退出系统
车场列表便道列表返回主菜单
3.3函数设计
3.3.1主函数void main()
1.{
初始栈,中转栈 SeqStackCar Enter,Temp;
定义便道队列 LinkQueueCar Wait
对已定义的栈初始化 InitStack(&Enter); InitStack(&Temp);
对已定义的队初始化InitQueue(&Wait);/
第3章 系统分析与设计
进入提示while(1)
当输入不再范围1至4时提示错误重新输入
使用switch函数进入其他模块
}
2.主函数中用到了2个while语句,一个进入主菜单,一个提示错误输入:
while(1)
主菜单
2车辆离开登记1车辆到达登记3车辆停靠查询4退出系统
While(1)
输入有误
提示输入1~4
2.用到了switch(a)语句:
5
函数switch(a)
1停车场函数2出停车场函数3查看函数
Arrival(&EnteLeave(&Enter,List(Enter,Wa4exit(0)
r,&wait)&Temp,&Wait)it) 3.3.2初始化函数
栈堆初始化void InitStack(SeqStackCar *s),将栈顶设置为NULL,s->stack[s->top]=NULL;
队列初始化int InitQueue(LinkQueueCar *Q),设置头结点,将头结点设置为NULL,令队的头等于尾
3.3.3车的入场登记函数int Arrival(SeqStackCar
*Enter,LinkQueueCar *W)
1.提示车辆登记开始,输入该车的车牌号。
进入if条件判断停车位是否已经满,若未满则需输入该车的到达时间,输出车辆所在位置。
cout<<"时:";
cin>>p->reach.hour;
cout<<"分:";
cin>>p->reach.min;
若车位已满,则提示车位已满,须在便道等待,利用已定义的队,将其排列在队中即便道。
第3章 系统分析与设计
车辆到达登记函数
Arrival(SeqStackCar *Enter,LinkQueueCar *w)
YNIf语句判断车位剩余情况
停在便车道输入车辆信息
3.3.4车的出场登记函数Leave(Seqstackcar *Enter,Seqstackcar *Temp,LinkQueueCar *w)
1.提示车辆离开登记开始,输入车位位置。
2.if语句判断是否输入满足要求,满足则进入while,从停车场堆栈向中转
堆栈移动车辆直到要离开车辆的位置停止
Temp->stack[Temp->top]=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL;
3.用whlie(1)语句提示输入车辆位置信息,
4.用whlie(1)语句判断位置信息输入正确与否,
5.用while(Temp->top>=1)语句判断中转栈车辆,if语句判断便道车辆。
7
车辆离开登记函数
Leave(SeqStackCar
*Enter,SeqStackCar
*Temp,LinkQueueCar *w)
N
YIf语句判断车场内有没有车
提示车场内没while(1)输入车N
有车的位置信息If语句判断输入是
否正确
while(Enter-
>top>room栈顶
大于输入位置N
将停车场向中将栈顶车辆移转栈转移车辆出
Y
while(Temp-
>top>=1为真
将中转栈车辆
移入停车
Y
N
离开的车进行
结算
If语句判断便道
有无车
便道内的车进3.3.5车辆显示函数List(SeqStackCar S,LinkQueueCar w) 入车场便道无车YN1.用While(1)语句输出查询列表。
2.用While(1)语句提示输入1~3。
第3章 系统分析与设计 3.if语句判断输入是否正确。
4.用switch(tag)进入相应查询列表。
车辆显示函数
List(SeqStackCar S,LinkQueueCar w)
while(1)输出查询列表
While(1)提示输入1-3N
If判断输入是否正确
Y
Switch(tag)
List1List2返回主菜单
List1函数:
9
List1(SeqStackCar *s)
查看场内情况
If判断场内是否有车
YNfor循环输出车车场无车辆信息
List2函数:
List2查看便道内情况
Link(LinkQueueCar
*w)
YIf语句判断队列是
否为空
N
while(p!=Null)
输出车牌号便道没有车
第3章 系统分析与设计 3.4模块设计
3.4.1主函数模块
开始
主菜单
N提示输入1~4
输入是否正
确
Y
车辆到达登记车辆离开登记车辆停靠查询退出系统模块模块模块
结束
3.4.2车辆入场登记模块
11
开始
输入车牌号
NY
有无车位
输入到达停在便车时间道
3.4.3车辆出场登记模块
开始
YN结束
车场是否
有车
输入位置
YN
是否在额定
位置
车场里没有车车辆结算返回主菜单
便车道入场车道无车结束
第3章 系统分析与设计
3.4.4车辆停靠查询选择模块
开始
输出列表
输入数字
N判断是否为
1~3
Y
车场列表便道列表回主菜单
结束
3.4.5查看场内车模块
13
开始
输出位置
输出到达时
间
输出车牌号
3.4.6查看便道车模块
开始
结束
YN是否有开车输出车牌便道里没
号有车
结束
第4章 编码与测试
第4章 编码与测试 4.1典型界面即实现代码。
4.1.1车辆入场模块
int Arrival(SeqStackCar *Enter,LinkQueueCar *W)
{
CarNode *p;
QueueNode *t;
p=new CarNode;
cout<<"="<
>p->num;
if(Enter->toptop++;
cout<top<<"位置.";
cout<>p->reach.hour;
cout<<"分:";
cin>>p->reach.min;
cout<stack[Enter->top]=p;
return 1;
}
else //如果车位已满,则停靠在便道上
{
cout<<"="<data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return 1;
}
}
4.1.2车辆离开车场模块
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{
int room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top>0)
{
while(1)
{
cout<<"+"<top<<"/:";
第4章 编码与测试
cin>>room;
if(room>=1&&room<=Enter->top) break;
17
}
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>=1)//将中转堆栈中的车辆移回停车场堆栈
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;
}
cout<<"+"<head!=W->rear)&&Enter->tophead->next;
t=q->data;
Enter->top++;
cout<num<<"号车进入车场第";
cout<top<<"位置."<num<<"号车进入车场的时间:"<>t->reach.hour;
cout<<"分:";
第4章 编码与测试
cin>>t->reach.min;
W->head->next=q->next;
if(q==W->rear) W->rear=W->head;
Enter->stack[Enter->top]=t;
delete q;
}
else cout<
#include
19
using namespace std; #define MAX 2 //停车场车位数
#define price 0.05 //每分钟收取的费用
typedef struct time
{
int hour;
int min;
}Time;//定义时间结点
typedef struct node
{
string num;
Time reach;
Time leave;
}CarNode;//定义每辆车的牌号,进入时刻,开出时刻 typedef struct NODE
{
CarNode *stack[MAX+1];
int top;
}SeqStackCar;//用栈定义,构造停车场
typedef struct car
{
CarNode *data;
struct car *next;
}QueueNode;//用队列结点定义,构造停车场外的单个等候车辆 typedef struct Node
{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar;//用队列定义,构造停车场外的等候便道 void InitStack(SeqStackCar *); //初始化堆栈函数声明 int InitQueue(LinkQueueCar *); //初始化队列头结点函数声明 int Arrival(SeqStackCar *,LinkQueueCar *); //车辆进入时登记函数声明 void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);//车辆离开时函
数声明
void List(SeqStackCar,LinkQueueCar); /*查看停车场内车辆情况及 便道上车辆情况的函数声明*/
第4章 编码与测试
void main( )
{
SeqStackCar Enter,Temp;//初始栈,中转栈
LinkQueueCar Wait;//便道队列
int a;
InitStack(&Enter);
InitStack(&Temp);
InitQueue(&Wait);//初始化
while(1)
{
cout<<"****************************************************
****************"<请按 1"<请按 2"<请按 3"<请按 4"<>a;
if(a>=1&&a<=4) break;
else cout<top=0;
s->stack[s->top]=NULL; }
int InitQueue(LinkQueueCar *Q)//队列初始化
{
Q->head=new QueueNode ;
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return 1;
}
else return -1;
}
void PRINT(CarNode *p,int room) //输出离开停车场的车辆情况 {
int A,B,C,D;
cout<<"\n车辆离开的时间:"<>p->leave.hour;
cout<<"分:";
cin>>p->leave.min;
cout<<"离开车辆的车牌号为:";
cout<num;
cout<reach.hour<<"时
"<reach.min<<"分"<leave.hour<<"时"<leave.min<<"分";
A=p->reach.hour;
B=p->reach.min;
C=p->leave.hour;
D=p->leave.min;
cout<>p->num;
if(Enter->toptop++;
cout<top<<"位置.";
cout<>p->reach.hour;
cout<<"分:";
cin>>p->reach.min;
cout<stack[Enter->top]=p;
return 1;
}
else //如果车位已满,则停靠在便道上
{
cout<<"="<data=p;
t->next=NULL;
W->rear->next=t;
23
W->rear=t;
return 1;
}
}
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{
int room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top>0)
{
while(1)
{
cout<<"+"<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>=1)//将中转堆栈中的车辆移回停车场堆栈
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
第4章 编码与测试
Temp->top--;
}
cout<<"+"<head!=W->rear)&&Enter->tophead->next;
t=q->data;
Enter->top++;
cout<num<<"号车进入车场第";
cout<top<<"位置."<num<<"号车进入车场的时间:"<>t->reach.hour;
cout<<"分:";
cin>>t->reach.min;
W->head->next=q->next;
if(q==W->rear) W->rear=W->head;
Enter->stack[Enter->top]=t;
delete q;
}
else cout<top>0)
{
cout<<"#"<top;i++)
25
{
cout<<" 第"<stack[i]->reach.hour<<"时"<stack[i]->reach.min<<"分"<stack[i]->num<head->next;
if(W->head!=W->rear)
{
cout<<"!"<data->num<next;
}
}
else
cout<<"!"<>tag;
if(tag>=1||tag<=3) break;
else cout< #include using namespace std; #define MAX 2 //停车场车位数
#define price 0.05 //每分钟收取的费用 typedef struct time {
int hour;
int min;
}Time;//定义时间结点
typedef struct node {
string num;
Time reach;
Time leave;
}CarNode;//定义每辆车的牌号,进入时刻,开出时刻 typedef struct NODE {
CarNode *stack[MAX+1];
int top;
}SeqStackCar;//用栈定义,构造停车场
typedef struct car {
CarNode *data;
struct car *next; }QueueNode;//用队列结点定义,构造停车场外的单个等候车辆
typedef struct Node {
QueueNode *head;
QueueNode *rear; }LinkQueueCar;//用队列定义,构造停车场外的等候便道
31
void InitStack(SeqStackCar *); //初始化堆栈函数声明
int InitQueue(LinkQueueCar *); //初始化队列头结点函数声明 int Arrival(SeqStackCar *,LinkQueueCar *); //车辆进入时登记函数声明 void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);//车辆离开时函数声明
void List(SeqStackCar,LinkQueueCar); /*查看停车场内车辆情况及 便道上车辆情况的函数声明*/
void main( )
{
SeqStackCar Enter,Temp;//初始栈,中转栈
LinkQueueCar Wait;//便道队列
int a;
InitStack(&Enter);
InitStack(&Temp);
InitQueue(&Wait);//初始化
while(1)
{
cout<<"****************************************************
****************"<请按 1"<请按 2"<请按 3"<请按 4"<>a;
if(a>=1&&a<=4) break;
else cout<