停车场收费系统.docx
《停车场收费系统.docx》由会员分享,可在线阅读,更多相关《停车场收费系统.docx(31页珍藏版)》请在冰豆网上搜索。
停车场收费系统
《数据库原理与应用》课程设计论文
题目:
收费停车场管理系统
1.需求分析
1.1目标
通过调查了解分析停车管理的现状,弄清用户对开发的数据库应用系统确实切要求,以及停车场管理的流程,系统的具体功能和数据库中数据信息。
1.2具体任务
〔1〕处理对象
系统处理的对象包括车辆信息、车位信息、停车信息、收费记录以及费率等五个方面:
车辆信息:
车牌号、车主、车辆颜色、车辆品牌;
车位信息:
车位编号、车位位置、车位类型、车牌号码、车主、车辆品牌、车辆颜色、、联系、车位余额;
停车信息:
车位编号、车牌号码、进入时间、离开时间、时间段;
收费记录:
车位编号、车牌号码、停车时间、停车费用、发票编号;
费率:
停车时段、时段费率;
〔2〕处理功能要求
整个系统具体包括三个子系统,分别为:
停车处理子系统、车位综合管理子系统以及收费子系统。
处理的功能包括:
车辆信息的查询以及更新;空闲车位信息的查询;固定车位信息的查询;进出车辆记录的更新和收费信息的查询与更新等。
〔3〕安全性与完整性要求
安全性可以通过视图机制来完成,对不同用户设置不同权限,不同的用户只能访问授权的视图,这样可以提高一定的程度的安全性。
还可以通过存取控制机制:
即定义用户权限,并将用户权限登记到数据字典中以及合法的权限检查来保障安全性。
完整性可以通过声明完整性,即在定义表时声明数据完整性和过程完整性,在服务器端编写触发器来实现。
(4)数据项清单:
表2-1数据项清单
名称
代码
域
数据类型
长度
停车时段
Timetype
Variablecharacters(20)
20
停车时间
Cartime
Float(20)
20
停车费用
Carpay
Float(20)
20
是否在车位
Carat
Boolean
票据号码
invoice
Variablecharacters(20)
20
离开时间
Carout
Date&Time
费率
ratetime
Float(20)
20
车主地址
Caradd
Variablecharacters(20)
20
车主
Cname
Variablecharacters(20)
20
车主
Cartel
Variablecharacters(20)
20
车位位置
Clspace
Variablecharacters(20)
20
车位余额
Clbalance
Variablecharacters(20)
20
车位号
Clno
Variablecharacters(20)
20
车位类型
Cltype
Variablecharacters(20)
20
车牌号
Cno
Variablecharacters(20)
20
车牌子
Cbrand
Variablecharacters(20)
20
车颜色
Ccolor
Variablecharacters(20)
20
进入时间
Carin
Date&Time
〔5〕数据结构:
表2-2数据结构
数据结构编号
数据结构名
数据结构定义
组成
D-1
Car
车辆信息
Carno、Carname、Carbrand、Carcolor
D-2
lot
车位信息
Clno、Clspace、Cltype、Carno、Carname、Carcolor、Carbrand、Caradd、Cartel、Clbalance
D-3
park
停车信息
Clno、Carno、Carat、Carin、Carout、Timetype
D-4
charge
收费记录
Clno、Carno、Cartime、Carypay、invoice
D-5
rate
费率
Timetype、ratetiem
2概念模型设计
设计过程
〔1〕选择中层数据流为切入点,通常选择实际系统中的子系统;
〔2〕设计分E-R图,即各子模块的E-R图;
〔3〕生成初步E-R图,通过合并方法,做到各子系统实体、属性、联系统一;
〔4〕生成全局E-R图,通过消除冲突等方面。
2.2E-R图
分E-R图:
图2-1进入车位E-R图
图2-2离开车位E-R图
总E-R图:
图2-3总体E—R图
E-R图属性如下所示:
车辆:
Car(Carno、Carname、Carbrand、Carcolor)Carno是主码;
车位:
lot(Clno、Clspace、Cltype、Carno、Carname、Carcolor、Carbrand、Caradd、Cartel、Clbalance)Clno是主码;
停车:
park(Clno、Carno、Carat、Carin、Carout、Timetype)Clno和Carno是外码;
收费:
charge(Clno、Carno、Cartime、Carypay、invoice)Clno和Carno是外码;
费率:
rate(Timetype、ratetiem)Timetype是主码;
3.逻辑模型设计
3.1E-R图向关系模型转换
E-R图向关系模型转换的结果是:
车辆:
Car(Carno、Carname、Carbrand、Carcolor)Carno是主码;
车位:
lot(Clno、Clspace、Cltype、Carno、Carname、Carcolor、Carbrand、Caradd、Cartel、Clbalance)Clno是主码;
停车:
park(Clno、Carno、Carat、Carin、Carout、Timetype)Clno和Carno是外码;被参照表lot和Car;
收费:
charge(Clno、Carno、Cartime、Carypay、invoice)Clno和Carno是外码,
被参照表是lot和Car;
费率:
rate(Timetype、ratetiem)Timetype是主码;
3.2数据库模式定义
表3-1车辆信息
列名
数据类型
是否为主码
是否为外码
取值范围
可否为空
含义说明
Carno
Char
是
否
否
车牌号码
Carbrand
Char
否
否
可
车辆品牌
Carcolor
Char
否
否
可
车辆颜色
Carname
char
否
否
可
车主
表3-2车位信息
列名
数据类型
是否为主码
是否为外码
取值范围
可否为空
含义说明
Clno
Char
是
否
否
车位编号
Clspace
Char
否
否
否
车位位置
Cltype
Char
否
否
否
车位类型
Carno
Char
否
否
可
车牌号码
Carname
Char
否
否
可
车主
Carbrand
Char
否
否
可
车牌号码
Carcolor
Char
否
否
可
车辆颜色
Caradd
Char
否
否
可
Cartel
Char
否
否
可
联系
Clbalance
Float
否
否
100-200
否
车位余额
表3-3停车信息
列名
数据类型
是否为主码
是否为外码
取值范围
可否为空
含义说明
Clno
Char
否
是
否
车位编号
Carno
Char
否
是
否
车牌号码
Carat
Bit
否
否
否
在位情况
Carin
datetime
否
否
否
进入时间
Carout
datetime
否
否
可
离开时间
Timetype
Char
是
否
高峰、一般、低谷
否
时间段
表3-4费率信息
列名
数据类型
是否为主码
是否为外码
取值范围
可否为空
含义说明
Timetype
Char(6)
是
否
高峰、一般、低谷
否
时间段
ratetime
Float
否
否
大于0
否
收费费率
表3-5收费记录
列名
数据类型
是否为主码
是否为外码
取值范围
可否为空
含义说明
Clno
Char
否
是
否
车位编号
Carno
Char
否
是
否
车牌号码
Cartime
Float
否
否
大于0
否
停车时间
Carpay
Float
否
否
大于0
可
停车费用
invoice
Char
否
否
可
发票编号
表3-4费率信息
表4-6用户子模式定义
序号
视图名称
视图定义
视图作用
V-1
Carinformation
车位号,车牌号
查询在位车辆信息
V-2
Carfixedtion
车位号,车牌号,车主,车名,车色,车照,地址,,余额
查询在固定车位停车的车辆信息
V-3
carfreetion
车位号,车牌号,车名,车色
查询在自由车位停车的车辆信息
V-4
Carinouttion
车位号、车牌号、进入时间、离开时间、时间段
查询车辆进出记录
V-5
moneytime
时间段、费率
查询及修改收费费率
V-6
Moneytion
总收费
查询停车场总收费
v-7
Carmoney
车牌号、缴费总额
查询每辆车的缴费额
功能模块图
图3-1功能模块图
4.物理模型设计
PDM图
图4-1PDM图
5.2存储过程
表4-1存储过程
编号
存储过程名称
作用
P-1
Sof1
查询固定车位总数
P-2
Sof2
查询自由车位总数
P-3
Sof3
查询空闲自由车位数目
P-4
Sof4
查询车位总数
P-5
Sof5
在charge中查询任意车辆的收费
P-6
Sof6
在Car中插入一组信息
P-7
Sof7
在lot中插入一组信息
P-8
Sof8
在park中插入一组信息
P-9
Sof9
在chargee中插入一组信息
P-10
Sof10
查询车辆Car信息
P-11
Sof11
查询车位lot信息
P-12
Sof12
查询停车park信息
P-13
Sof13
查询收费charge信息
P-14
Sof14
删除一条收费charge记录
P-15
Sof15
修改固定车位车辆余额Clbarance
5.3触发器
表4-2触发器
编号
存储过程名称
作用
T-1
insert_or_update_clbalance
限定余额值必须大于等于120的触发器
P-2
tri_charge
限制修改charge中大于50的触发器
P-3
tri_del_mo
限制删除moneynote表中大于70的数据
5.建立数据库并测试
5.1建立数据库
〔1〕建立数据库、数据表、视图、索引等
〔a〕建立数据库定义语句;
〔b〕建立数据表定义语句;
〔c〕建立视图定义语句;
〔d〕建立索引定义语句。
〔2〕数据入库
系统包括共有5张基本表,然后使用语句将数据导入SQLServer2005
数据库调试与测试
对收费停车场管理系统的具体功能进行测试,测试包括:
〔1〕测试各视图的功能,测试结果
〔2〕测试各存储过程的功能,测试结果
〔3〕测试各触发器的功能,测试结果
一.建立基本表:
createtableCar(
Carnochar(20)primarykey,//车牌号
Carnamechar(20),//车主
Carcolorchar(20),//车颜色
Carbrandchar(20),//车牌子
);
createtablelot(
Clnochar(20)primarykey,//车位编号
Clspacechar(20)notnull,车位位置
Cltypechar(20)notnull,车位类型
Carnochar(20),//车牌号
Carnamechar(20),//车主
Carcolorchar(20),//车颜色
Carbrandchar(20),//车牌子
Caraddchar(20),//车主地址
Cartelchar(20),//车主
Clbalancefloatcheck(Clbalance>=100andClbalance<=200)//车位余额
);
createtablepark(
Carnochar(20)notnull,//车牌号
Clnochar(20)notnull,//车位号
Caratbitnotnull,//是否在车位
Carindatetime,//进入时间
Caroutdatetime,//离开时间
primarykey(Carno,Clno),
foreignkey(Carno)referencesCar(Carno),
foreignkey(Clno)referenceslot(Clno)
);
createtablecharge(
Carnochar(20),//车牌号
Clnochar(20),//车位号
Cartimefloatnotnull,//停车总时间
Carpayfloatcheck(Carpay>0),//费用
invoicechar(20),//收费表序列号
primarykey(Carno,Clno),
foreignkey(Carno)referencesCar(Carno),
foreignkey(Clno)referenceslot(Clno)
);
createtablerate
(Timetypechar(6)primarykey,//时段类型
ratetimefloatnotnullcheck(Montime=1orMontime=2orMontime=1.5),
);//费率
二.建立视图
V-1用于查询在位车辆信息的视图定义如下:
createviewCarinformation(车位号,车牌号)
as
frompark,lot
wherepark.Clno=park.ClnoandCarat=1
V-2用于查询固定车位停车车辆信息的视图定义如下:
createviewCarfixedtion(车位号,车牌号,车主,车名,车色,地址,,余额)
as
selectpark.Clno,park.Carno,Carname,Carbrand,Carcolor,Caradd,Cartel,Carbalabce
frompark,lot
wherepark.Clno=lot.ClnoandCltype='固定'andCarat=1
V-3用于查询自由车位停车车辆信息的视图定义如下:
createviewcarfreetion(车位号,车牌号,车名,车色)
as
frompark,Car,lot
wherepark.Carno=Car.Carnoandpark.Clno=lot.ClnoandCltype='自由'andCarat=1
V-4用于查询车辆进出记录的视图定义如下:
createviewCarinouttion(车位号,车牌号,进入时间,离开时间,时间段)
as
selectClno,Carno,Carin,Carout,Timetype
frompark
检测:
select*
fromCarinouttion
orderby车牌号
V-5用于查询及修改收费费率的视图定义如下:
createviewmoneytime
as
select*
fromrate
V-6用于查询停车场总收费的视图定义如下:
createviewMoneytion(总收费)
as
selectsum(Carpay)
fromcharge
V-7用于查询任意车辆的缴费总额的视图定义如下:
createviewcarmoney(车牌号,缴费总额)
as
selectCarno,sum(Carpay)
fromchatge
groupbyCarno
三.建立索引:
1.createuniqueindexSsClnoonpark(Clno);
2.createuniqueindexSsCarnooncharge(Carno);
四.建立存储过程
P-1
createproceduresof1
as
selectcount(Clno)固定车位总数
fromlot
whereCltype='固定'
P-2
createproceduresof2
as
selectcount(Clno)自由车位总数
fromlot
whereCltype='自由'
P-3
createproceduresof3
as
select3-count(lot.Clno)空闲自由车位
fromlot,park
wherelot.Clno=park.ClnoandCltype='自由'andCarat=1
P-4
createproceduresof4
as
selectcount(Clno)车位总数
fromlot
P-5
createproceduresof5
@nomchar(10)
as
select*
fromcharge
whereCarno=@nom
P-6
createproceduresof6
@s_Carnochar(10),
@s_Carbrandchar(10),
@s_Carcolorchar(4)
as
insertintoCar
values(@s_Carno,@s_Carbrand,@s_Carcolor)
P-7
createproceduresof7
@s_Clnochar(20),
@s_Clspacechar(20),
@s_Cltypechar(20),
@s_Carnochar(20),
@s_Carnamechar(20),
@s_Carbrandchar(20),
@s_Carcolorchar(20),
@s_Caraddchar(20),
@s_Cartelchar(20),
@s_Clbalancefloat
as
insertintolot
values(@s_Clno,@s_Clspace,@s_Cltype,@s_Carno,@s_Carname,@s_Carbarnd,@s_Carcolor,@s_Caradd,@s_Cartel,@s_Clbalance)
P-8
createproceduresof8
@s_Clnochar(20),
@s_Carnochar(20),
@s_Caratbit,
@s_Carindatetime,
@s_Caroutdatetime,
@s_Timetypechar(20)
as
insertintopark
values(@s_Clno,@s_Carno,@s_Carat,@s_Carin,@s_Carout,@s_Timetype)
P-9
createproceduresof9
@s_Cwnochar(10),
@s_Carnochar(10),
@s_Cartimefloat,
@s_Moneypayfloat,
@s_Piecechar(10)
as
insertintocharge
values(@s_Cwno,@s_Carno,@s_Cartime,@s_Moneypay,@s_Piece)
P-10
createproceduresof10
as
select*
fromCar
P-11
createproceduresof11
as
select*
fromlot
P-12
createproceduresof12
as
select*
frompark
P-13
createproceduresof13
as
select*
fromcharge
P-14
createproceduresof14
@s_Carnochar(20)
as
delete
fromcharge
whereCarno=@s_Carno
P-15
createproceduresof15
@s_Carnochar(20)
as
updatelot
setClbalance=150
whereCarno=@s_Carno
T-1
Createtriggerinsert_or_update_clbalance
Onlotforinsert,update
As
Ifexists(select*
Fromlot
WhereClbalance>100)
Begin
Print'最低余额必须大于等于100'
Rollback
End;
T-2
Createtriggertri_Carpay
Onchargeforupdate
As
Ifexists(select*
Frominsertedjoin
Deletedoninserted.Carno=deleted.Carno
Whereinserted.Carpay<=50
Anddeleted.Carpay>50)
Rollback
Begin
Print'禁止无端修改,修改不成功'
End;
T-3
Createtriggertri_del_mo
Onchargefordelete
As
Ifexists(select*
Fromdeleted
WhereCarpay>70)
Rollback
Begin
Print'删除失败'
End;
附录4.数据库测试及功能验证
V-