资源描述
大型数据库课程设计
设计报告
题 目:火车站票务管理系统后台数据库
学 号: gggg
学生姓名: ddd
指导教师: fgg
提交时间: 2013-11-23
目录
第1章 需求分析 2
1.1 需求调查 2
1.2系统功能分析 2
1.3面对用户需求分析 3
第2章 面向对象分析和设计 4
类和对象设计如下: 4
第3章 逻辑结构设计 6
3.1 类和对象向关系模式转换 9
第4章 数据库物理结构设计 9
4.1 存取方法设计 9
4.2 存储结构设计 9
4.3 物理设计 9
第5章 数据库完整性设计 9
5.1 主键及唯一性索引 12
5.2 参照完整性设计 12
5.3 Check约束 13
5.4 Default约束 13
5.5 触发器设计 13
第6章 数据库视图设计 13
第7章 数据库存储过程设计 15
第8章 权限设计 17
总结 19
参考文献: 20
教务管理系统后台数据库
第1章 需求分析
通过对火车站客运量、旅客和业务员的调查,该火车站票务管理系统有如下需求:
1) 系统管理:实现系统管理人员对系统的管理,包括添加删除用户,更改密码, 数据备份,数据还原,注销等功能。
2) 票务管理:实现对火车运行站点及时间的管理、对业务员的管理、对余票的更新及退票的管理。
3) 基本信息:实现显示火车及业务员的基本信息。
4) 售票:在有剩余座位的情况下自动更新剩余的座位数,控制不超员。
5) 查询:包括实现车次查询,业务员查询。可以查询火车的车种、编号、车厢数等;查询售票员工作的车站名,及其年龄、性别等;
6) 服务器配置:对它进行配置可以使得在其他电脑上也照常使用。这样不必每次都到数据库中去更改。
7) 帮助系统:帮助系统为用户指明方向。
1.2系统功能分析
1、车次管理:用于对火车基本信息的录入、查询、修改、维护、删除等常用功能。
2、车次及价格管理(含到各站的价格):可以按照车次或始发站、终点站两种方式进行查询,只需要输入关键信息即可查到所需的车次的有关信息,包括车的类型、所剩票的类型、数量、票价等。
3、实现业务员管理:用于对业务员基本信息的录入、查询、修改、维护、删除等常用功能,并提供工作地点变动、奖惩登记等功能。
4、实现车票销售管理:车票销售时不能超员,并自动修改剩余的座位数(用触发器实现);
5、创建存储过程统计指定车次指定发车时间的车票销售情况;
6、创建存储过程统计指定日期各业务员车票的销售收入;
7、实现退票管理:由于一些原因,可能造成客户要求退票,系统根据具体 的情况判定是否可以退票,进行退票。退票时自动修改相应车次的剩余座位数。
1.3面对用户需求分析
在火车站票务管理系统中,最主要的功能就是进行一系列的查询和各类数据的管理。因此,可以将火车站票务管理系统分为管理系统(有数据变化)和查询系统两个子系统。而在所设计的火车站票务管理系统中,主要有三类用户,即旅客用户、业务员用户、、系统管理员。各类用户在该系统中的需求不同,权限也不同。因此,为了更明确,更系统的了解用户需求,我们还可以将管理系统再细分为旅客管理系统,业务员管理系统,系统管理员管理系统。同样,将查询系统也按用户职能进行细分。这样细分后,看似把系统需求繁杂化了。其实不然,细分后使各用户需求更加明确了,并且能更好的把握系统需求。
下面从细分后的各个子系统分析子系统的需求:
火车站票务管理系统
车次管理
子系统
车次
及价格管理子系统
业务员管理
子系统
车票销售管理子系统
退票管理子系统
1) 车次管理系统,旅客可以通过该系统查询相关车次的基本信息,火车途经站点、出发时间、车的种类等。
2) 车次及价格管理系统,旅客可以按照相关车次及车站查询相对票价及时间。
3)业务员管理系统,该系统中,主要显示业务员的各项基本信息以及对业务员信息的管理。
4)车票销售管理系统,该系统主要是可以自动更新各个车次的剩余票数。
5) 退票管理系统,对由于各种原因需要退票的旅客提供退票服务,系统根据具体的情况判定是否可以退票,进行退票。退票时自动修改相应车次的剩余座位数。
第2章 面向对象分析和设计
类和对象设计如下:
第3章 逻辑结构设计
局部ER图
1、 车次管理
终点站
终点站
车次号
开车时间
到达时间
始发站
终点站
车站
经过
火车
始发站
1 n
途径车站
座位数
发车时间
相对距离
2、售票员管理业务员
始发站
工作
姓名
业务员
车站
性别
员工编号
n 1
年龄
途径车站号
终点站
3、 车票销售系统
售票日期
座位种类
票价
车票
退票
售票
业务员
性别
年龄
员工编号
姓名
车次号
n m
座位号
发车时间
n m
退票日期
车票编号
4、车票销售超员管理
车票编号号
车次号
座位剩余数
终点站
座位种类
票价
发车时间
对应
座位号号
车票
火车
1 n
车次号
发车时间
始发站时
座位数
车种
座位号
车厢号号
总体ER图
车种
车次号
到达时间
开车时间
始发站
终点站
终点站
车站
经过
火车
m
始发站
1
途径车站名
座位数
1
发车时间
相对距离
1
车厢号
对应
工作
座位剩余数
座位号
n
售票日期
n
票价
车票编号
员工编号
售票
姓名
车次号号
n
车票
业务员
m n
座位号
退票
性别
m
n
座位种类
年龄
发时
退票日期
3.1 类和对象向关系模式转换
车次信息(车次号、座位数、发时、车种)
业务员信息(员工编号、姓名、性别、年龄)
员工奖励表(员工编号、工作站点、奖励等级)
车站信息(车次号、始发站、途径车站、途径车站、终点站)
车票信息(车票编号、车次号、座位号、价格、发车时间、座位种类)
退票信息(车票编号、车次号、退票日期)
售票信息(员工编号、车次号、车票编号、售票日期)
余票信息(车次号、发车时间、剩余票数)
第4章 数据库物理结构设计
4.1 存取方法设计
数据库系统是多用户共享的系统,对同一个关系要建立多条存储路径才能满足多用户的多种应用要求。对于火车站票务管理系统来说,为了提高某些属性(如:车票编号、车次号、座位号、座位类型等)的查询速度,可以选择聚簇存取的方法,即把这些属性上具有相同值的元组集中放在连续的物理块上。这样在查询时就会大大提高查询速度。因此,该系统中选择聚簇存取方法。
4.2 存储结构设计
火车站票务管理系统是一个大型复杂的计算机网络信息系统,采用基于浏览器/服务器(B/S),客户端/服务器(C/S)混合的应用体系结构来建设教务管理系统。数据库管理系统采用Microsoft 公司推出的SQL Server 2000 或以上版本,并用SQL进行数据库的建立和数据库中数据的维护和查询。
4.3 物理设计
实现该设计的环境为Windows XP Professional + MS SQL Server 2005 或以上版本。
一:建立火车站车票管理数据库
create database 火车站车票管理数据库
--1、创建管理员表:
create table 管理员
(
管理员编号char(6) not null primary key,
姓名char(8) ,
级别char(10)
)
--2、创建乘客表:
create table 乘客表
(
身份证号char(18) not null primary key,
姓名char(8) ,
车票编号char(5),
)
--3、建立业务员表:
create table 业务员
(
员工编号char(6) not null primary key,
姓名char(8) ,
性别bit,
年龄int,
)
--4、创建员工奖励表
create table 员工奖励表
(
员工编号char(6) not null references 业务员(员工编号),
工作站点char(20),
奖励等级char(10),
primary key (员工编号)
)
--5、建立车次表:
create table 车次表
(
车次号char(5) not null primary key,
座位数int,
发车时间char(5) null ,
车种 char (4)
)
--6、建立车站表:
Create table 车站表
(
车次号char(5) not null references 车次表(车次号),
始发站char(20) not null,
途径车站char(20) not null,
途径车站char(20) not null,
途径车站char(20) null,
途径车站char(20) null,
途径车站char(20) null,
终点站char(20) not null,
primary key (车次号)
)
--7、建立车票表:
CREATE TABLE 车票表
(
车票编号char(5) not null primary key ,
车次号char(5) not null references 车次表(车次号),
发车时间datetime not null,
座位编号char(5) not null,
价格float not null,
座位种类char(4)
)
--8、建立售票表:
create table 售票表
(
员工编号char(6) not null references 业务员(员工编号),
车票编号char(5) not null references 车票表(车票编号),
车次号char(5) not null references 车次表(车次号),
售票日期datetime ,
primary key (员工编号,车票编号)
)
--9、建立退票表:
create table 退票表
(
车票编号char(5) not null primary key,
车次号char(5) not null references 车次表(车次号),
退票时间datetime null ,
foreign key (车票编号) references 车票表(车票编号)
)
--10、建立余票表:
create table 余票表
(
车次号char(5) not null primary key,
剩余票数int not null,
发车时间datetime,
foreign key (车次号) references 车次表(车次号)
)
第5章 数据库完整性设计
5.1 主键及唯一性索引
表名
主键
建立唯一性索引
车次表
(车次号)
create unique index 车次表
on 车次表(车次号 asc)
业务员
(员工编号)
create unique index 业务员
on 业务员(员工编号 asc)
车站表
(车站号)
create unique index 车站表
on 车站表(车站号 asc)
售票表
(车票号)
create unique index 售票表
on 售票表(车票号 asc)
车票表
(车票编号,车次号)
create unique index 车票表
on 车票表(车票编号 asc,车次号 asc)
退票表
(车票号)
create unique index 退票表
on 退票表 (车票号 asc)
余票表
(车次号)
create unique index 余票表
on 余票表(车次号 asc)
5.2 参照完整性设计
5.3 Check约束
1、 业务员表中将性别进行check约束:
alter table 业务员
add constraint sex check(性别in('1','0'))
2、 车票表中将座位编号进行check约束:
alter table 车票表
add constraint zum check (座位编号>=12000 and 座位编号<=15000)
3、 车次表中车种进行check约束:
alter table 车次表
add constraint ccz check (车种in('普快','快车','特快','动车','高铁'))
5.4 Default约束
1、售票表中售票日期默认值设为:2013-11-19 00:00。default('2013-11-19 00:00')
2、业务员表中将员工性别族默认值设为:女。default('女')
3、员工奖励表中将奖励等级默认值设为:null。default('null')
5.5 触发器设计
--1、车票销售时不能超员,并自动修改剩余的座位数
create trigger tri_ticket on 售票表
after insert
as
begin
declare @p_num char(5),@seat_sum int,@t_num char(5)
select @p_num=车票编号,@t_num=车次号from inserted
select @seat_sum=剩余票数from 余票表
update 余票表
set 剩余票数=剩余票数-1
where 车次号=@t_num
end
go
--触发检验:
insert into 售票表
values('111011','20136','1234','12:00')
--2、业务员售出车票后,自动更新员工售票情况表和员工奖励表
create trigger 业务员售票触发器on 售票表after insert
as
begin
declare @员工编号char(5)
select @员工编号='员工编号' from inserted
update 员工售票情况set 售出票数=售出票数+1 where 员工编号=@员工编号
update 员工奖励表set 奖励等级='一等奖励' where 员工编号=@员工编号
end
go
--触发检验:
insert into 售票表
values('111002','20106','S223','2013/11/19 12:00:00')
--3、退票时自动修改相应车次的剩余座位数
create trigger tp_ticket on 退票表
after insert
as
begin
declare @p_num char(5),@seat_sum int,@t_num char(5)
select @p_num=车票编号,@t_num=车次号from inserted
select @seat_sum=剩余票数from 余票表
update 余票表
set 剩余票数=剩余票数+1
where 车次号=@t_num
end
--触发检验:
insert into 退票表
values('20136','1234','2013-11-13 12:00')
--4、退票时,根据退票时间判断是否允许退票
create trigger t_p on 退票表
instead of insert
as
begin
declare @p_num char(5),@t_time datetime,@f_num datetime
select @p_num=车票编号,@t_time=退票时间from inserted
select @f_num=发车时间from 车票表where 车票编号=@p_num
if @f_num-@t_time>=2
print'退票成功'
else
print'不能退票'
end
--触发检验:
insert into 退票表 values('20116','S213','2013-11-19 12:00')
第6章 数据库视图设计
--1、创建业务员表视图
create view 业务员表视图with encryption
as
select 业务员.员工编号,姓名,工作站点,奖励等级
from 业务员,员工奖励表
where 业务员.员工编号=员工奖励表.员工编号
with check option
--2、创建车次管理视图
create view 车次管理视图
as
select 车次表.车次号,座位数,发车时间 ,车种,始发站,终点站
from 车次表,车站表
where 车次表.车次号=车站表.车次号
-- 、创建车票表视图
create view 车票表视图
as
select 车票编号,车次号,发车时间,座位编号,价格,座位种类
from 车票表
--4、创建车票销售视图
create view 创建车票销售视图
as
select 车次管理视图.车次号, 车次管理视图.发车时间 ,车种,始发站,终点站,价格,座位种类,剩余票数
from 车次管理视图, 车票表,余票表
where 余票表.车次号=车票表.车次号and 车次管理视图.车次号=余票表.车次号
--5、创建车票销售视图
create view 车票销售视图
as
select 员工编号,售票表.车票编号,价格,售票日期
from 车票表,售票表
where 售票表.车票编号=车票表.车票编号
-- 6、创建售票表视图
create view 售票表视图
as
select 员工编号,车票编号,车次号,售票日期
from 售票表
-- 7、创建退票表视图
create view 退票表视图
as
select 车票编号,车次号,退票时间
from 退票表
--8、创建余票表视图
create view 余票表视图
as
select 车次号,剩余票数,发车时间
from 余票表
--9、创建余票情况视图1
create view 余票情况视图1
as
select 余票表.车次号,发车时间
from 余票表,售票表
where 余票表.车次号=售票表.车次号
--10、创建余票情况视图2
create view 余票情况视图2
as
select 售票表.车次号,发车时间
from 余票表,售票表
where 余票表.车次号=售票表.车次号
第7章 数据库存储过程设计
--1、指定始发站和终点站查询车次号、车种、价格、座位种类、剩余票数等信息
create procedure btend @始发站char(20),@终点站char(20)
as
begin
set nocount on
select *
from 车票销售视图
where 始发站=@始发站and 终点站=@终点站
end
--执行存储过程
exec btend '郑州','北京'
--2、指定车次查询始发站、终点站、车种、价格、座位种类、剩余票数等信息
create procedure 按车次查询@车次号char(5)
as
begin
set nocount on
select *
from 车票销售视图
where 车次号=@车次号
End
exec 按车次查询 'T146'
--3、指定车次指定发车时间的车票销售情况
create procedure p_selld @t_num_in char(5),@d_time_in datetime,@sum_ticket char(6) output
as
select 车次号,count(*) as '@sum_ticket'
from 余票情况视图
where 余票情况视图.车次号=@t_num_in and 发车时间=@d_time_in
group by 车次号
go
--执行存储过程
exec p_selld 'G574', '2013/11/19 15:53:00','count(*)'
--4、指定日期各业务员车票的销售收入
create procedure rp_selled @y_num_in char(6) output,@d_time_in datetime,@money char(6) output
as
select 员工编号,sum(价格) as '@money'
from 车票销售视图
where 员工编号=@y_num_in and 售票日期=@d_time_in
group by 员工编号
go
--执行存储过程
exec rp_selled '111002','2013/2/10 0:00:00','sum(价格)'
--5、指定员工编号查询售出票数
create procedure 编号查询@员工编号char(6) output,@售出票数char(6) output
as
select 员工编号,count(车票编号) as '@售出票数'
from 售票表
where 员工编号=@员工编号
group by 员工编号
go
exec 编号查询'111002','count(车票编号)'
--6、改变指定员工的工作站点
create procedure 工作站点变更@员工编号char(6),@工作站点char(20)
as
update 员工奖励表
set 工作站点=@工作站点
where 员工编号=@员工编号
go
exec 工作站点变更 '111002','北京'
--7、根据身份证号码查询乘客的车票信息
create procedure s_tri1 @id char(18)
as
select 身份证号,姓名,乘客表.车票编号,车次管理视图.车次号,车种,始发站,终点站,车票表.发车时间,座位编号,价格,座位种类
from 乘客表,车次管理视图,车票表
where 车票表.车次号=车次管理视图.车次号and 车票表.车票编号=乘客表.车票编号and 身份证号=@id
go
--执行存储过程
exec s_tri1 '411082199210020018'
第8章 权限设计
--1、创建一级管理员的登录名及用户,并给一级管理员授权
create login 一级管理员
with password='123456',
default_database=火车站票务管理数据库
create role 一级管理员
authorization dbo
create user 一级管理员
for login 一级管理员
with default_schema=dbo
grant insert ,update,delete on 退票表to 一级管理员
grant insert ,update,delete on 车次表to 一级管理员
grant insert ,update,delete on 车站表to 一级管理员
--2、创建二级管理员的登录名及用户,并给二级管理员授权
create login 二级管理员
with password='123456',
default_database=火车站票务管理数据库
create role 二级管理员
authorization dbo
create user 二级管理员
for login 二级管理员
with default_schema=dbo
grant insert ,update,delete on 退票表to 二级管理员
grant insert ,update,delete on 车站表to 二级管理员
--3、创建数据库角色业务员并给业务员授权
create role 业务员
authorization dbo
grant select on 车票表to 业务员
grant select on 车次表to 业务员
grant insert ,update,delete on 售票表to 业务员
grant insert ,update,delete on 退票表to 业务员
--4、创建数据库角色乘客并给乘客授权
create role 乘客
authorization dbo
grant select on 车票表to 乘客
grant select on 车次表to 乘客
grant select on 车站表to 乘客
总结
通过这么多天的数据库课程设计的学习,我受益匪浅,从中学到了许多新知识,这些知识是在课堂中不能学到或者说很难学到的。并且对sql server这一门课程有了更深一步的理解。在做课程设计中,我们可以把课堂上所学的理论知识和实践联系起来,在所要开发的系统中渐渐学会了融会贯通。同样通过对SQL的应用,也使我们熟练和巩固了对SQL的理解。这样我们对开发系统的整个过程也有了一个系统的了解。
这次课程设计,我选择的课题是《火车站票务管理系统》,在火车站票务管理管理系统的开发中采用了完整的数据库设计的全过程,从需求分析到概念结构设计,到逻辑结构设计,再到物理结构设计,最后到数据库的实施和维护,每一步都认真的分析和实施。
在这次课程设计中我明白了理论和实践要想充分地结合,需要非常扎实的基本功。这就说明学好基础知识是理论付诸实践的前提。在设计火车站票务管理系统中我学到了很多,希望在以后能充分利用所学的理论知识去实践,在实践中又要努力去巩固理论知识。只有这样,才能把一门课程甚至一门学科学精、学透。
在数据库课程设计过程中,我觉得最重要的是,我们应该先认真设计好所需要的结构,以免中间很小的改动却造成不必要的麻烦。
参考文献:
1. 王珊,萨师煊 .数据库系统概论[M]. 高等教育出版社,2005
2. 郑阿奇等. SQLserver实用教程(第3版)[M] . 电子工业出版社,2009
3. 赵乃真等. 信息系统设计与应用. 清华大学出版社,2005
《大型数据库课程设计》报告评分标准
选题及功能设计
选题合理,功能简单 (D)
有一定的工作量和实用价值 (C)
功能设计丰富,有一定的难度系数 (B)
功能设计合理全面,能体现数据库的存储和整理数据的功能 (A)
数据表和数据量
具备基本的数据表,数据量较少,但能够实现系统基本需要 (D)
具备基本的数据表,数据量适中,实现了一定的数据完整性 (C)
有多个数据表,数据量适中,有完善的数据完整性(B)
有多个数据表,数据量充足,具有较强的数据安全性和数据完整性 (A)
数据库对象
具备基本的数据表,有主外键约束 (D)
创建了若干种的数据库对象,并加以利用 (C)
在实际应用中合理利用了各类数据库对象 (B)
具有身份验证、数据备份等较复杂的数据管理功能(A)
功能实现
利用存储过程实现了各种查询功能 (D)
除查询功能,还实现了各种数据操作功能 (C)
在上一条基础上,还实现了数据统计汇总功能 (B)
合理利用函数、存储过程、触发器实现各种数据查询、操作、管理功能 (A)
设计报告
完成设计报告,阐述了系统功能,结构较完整 (D)
开题报告反映设计思路,结构完整,格式较规范 (C)
报告内容完整,图表使用准确,格式清晰,功能描述详尽 (B)
报告内容完整,图表使用准确,描述详细,代码阐述清楚,反映系统执行流程 (A)
教师签字:
总评成绩:
展开阅读全文