资源描述
(完整word版)数据库大作业(火车订票系统)
中国地质大学(北京)
数据库系统概论
火车票网上订票系统
实
验
报
告
小组成员:董威、韦飞阳、李建同、刘厚今
学号:
联系方式:
使用数据库管理系统:SQL server 2012
指导老师:宋莉
2013年12月28日
目录
1.小组成员及分工 1
2.需求分析 1
2.1 功能需求 1
2.1.1 查询 1
2.1.2 订票 1
2.1.3 退票 1
2.1.4 注册 1
2.1.5 用户登陆 1
2.1.6 修改密码 1
2.1.7 添加车次 1
2.2 数据需求 1
2.3 性能需求 2
2
2
2
2.4 数据流图 2
2.4.1 顶层数据流图 2
2.4.2 1层数据流图 2
3.概念结构设计 3
3.1 系统结构简述 3
3.2 数据处理 3
3.3生成E-R图 3
4逻辑结构设计 5
4.1 关系模式 5
5 物理结构设计 5
6数据库实施 7
6.1 建立数据库 7
6.2 建立基本表 7
6.3 建立索引 10
6.4 创建视图 11
6.5 创建存储过程 11
6.6 创建触发器 12
6.7插入数据 12
6.8 关系图 13
6.9 订购车票 13
6.10 退票 14
7 实验小结 14
1.小组成员及分工
董威:数据库的实施,即在查询分析器下编写代码建立数据库,创建基本表,建立 基本表之间的关系、索引,创建存储过程等工 作。
韦飞阳:主要负责逻辑结构的设计,即确定关系模式。
李建同:只要负责物理结构的设计,即确定各个基本表之间的 关系,确定主外键。
刘厚今:需求分析模块,主要负责寻找需求,绘制数据流图。
2.需求分析
2.1 功能需求
2.1.1 查询:用户、管理员都可以对车次进行查询:可以按照发车车次进行查 询;可以按照出发地、目的地进行查询;可以按照类车类型、座 位类型查询。
车次信息包括:车次ID,车号,出发地,目的地,列车类型,座 位类型,票价,票数,车次信息只允许用户查询,不能修改。
2.1.2 订票:用户登陆后,通过订票系统,根据自己你的需求找到自己的车次, 输入要预订的票数进行订票。要求订票记录应包括:订票记录ID, 车次ID,用户ID,订票数量。
2.1.3 退票:用户登录后,通过退票系统,找到自己的订票信息,输入要退的票 数进行退票。
2.1.4 注册:想要订票的用户必须先注册然后登陆订票。用户信息包括:用户 ID,用户名,密码,邮箱。
2.1.5 用户登陆:主要完成用户和管理员的登陆。用户想订票必须登陆后才能进 行订票,如果没有注册的用户应该与注册页面相连接。
2.1.6 修改密码:用户和管理员登陆后可以修改个人信息。
2.1.7 添加车次:管理员登陆后可以添加新的车次。
2.2 数据需求
信息输入
信息处理
信息输出
用户输入所需车次
检索系统数据库
符合用户需求的车次及相关信息
用户管理员输入用户名、密码进行登录
检索系统数据库
成功登陆后的首页
用户输入个人信息进行注册
将输入信息存入系统数据库
操作反馈
用户输入订票数量
检索系统数据库已得到订票记录,添加用户请求的订票记录,更新系统数据库
操作反馈
用户输入退票数量
检索系统数据库已得到订票记录,删除用户请求的订票记录,更新系统数据库
操作反馈
用户管理员输入新密码
更新系统数据库
操作反馈
管理员输入添加车次信息
将新信息存入数据库
操作反馈
2.3 性能需求
系统应能及时准确的根据用户权限及所输入的信息作出响应。由于查询功 能对于用户来讲很重要,因为这直接影响了用户的订票决策,所以系统的 准确性和及时性很重要。
本系统是针对用户直接开放的,所以应该提供良好的接口。
网上订票的数据是很重要的信息,系统应该保证用户的权限,对于车次的 信息不能更改。同时还应该保证管理人员进行正常的维护、更新等工作, 保证数据的一致性。
2.4 数据流图
2.4.1 顶层数据流图
2.4.2 1层数据流图
3.概念结构设计
3.1 系统结构简述
本系统包括六个实体:订票人,订票单信息,车票信息,车次信息,操作员,余票信息。
订票人与订票单、订票单与车票信息这两个关系是一对一的联系;车票信息与车次信息、 订票单信息与操作员这两个关系是1对多的联系。
3.2 数据处理
输入:身份证号
输出:订票单号,订票人身份证号,订单时间,付款取票与否,车次号,车票号 , 票价,员工号。
输入:身份证号
输出:车票号,始发站,车次号,发车时间,终点站,车票种类。
输入:车次号
输出:姓名,身份证号,联系电话,目的城市,始发城市。
3.2.4 查询余票数量
输入:乘车区间和车次号
输出:余票数量。
3.3生成E-R图
始发站
目的站
订票人
联系电话
姓名
1
1
n
1
n
1
1
1
1
1
出发日期
余票张数
出发站
目的站
车次号
余票信息
查询
终点站
车次号
始发站
途径车站
票价
员工号
车次信息
属于
车票种类
发车时间
订单号
车票号
始发站
终点站
车厢号
座位号
取票与否
车票信息
属于
订票点号
姓名
电话
性别
票价
操作员
操作
订单时间
车票号
员工号
身份证号
车次号
订单号
订单号
订票信息
属于
身份证号
车票种类
车次号订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号)
操作员表(员工号,订票点号,姓名,性别,电话)
车次信息表(车次号,始发站,终点站,途径站)
订票单表(订单号,身份证号,订单时间,付款取票与否,车次号,车票号,票价,员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号,车厢号,座位号)
说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧”
车次号订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号)
操作员表(员工号,订票点号,姓名,性别,电话)
车次信息表(车次号,始发站,终点站,途径站)
订票单表(订单号,身份证号,订单时间,付款取票与否,车次号,车票号,票价,员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号,车厢号,座位号)
说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧”
车次号订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号)
操作员表(员工号,订票点号,姓名,性别,电话)
车次信息表(车次号,始发站,终点站,途径站)
订票单表(订单号,身份证号,订单时间,付款取票与否,车次号,车票号,票价,员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号,车厢号,座位号)
说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧”
车次号订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号)
操作员表(员工号,订票点号,姓名,性别,电话)
车次信息表(车次号,始发站,终点站,途径站)
订票单表(订单号,身份证号,订单时间,付款取票与否,车次号,车票号,票价,员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号,车厢号,座位号)
说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧”
4逻辑结构设计
4.1 关系模式
订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号)
操作员表(员工号,订票点号,姓名,性别,电话)
车次信息表(车次号,始发站,终点站,途径站)
订票单表(订单号,身份证号,订单时间,付款取票与否,车次号,车票号,票价, 员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号,
车厢号,座位号)
说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧”
余票信息表(车次号,车票种类,出发站,目的站,出发时间)
5 物理结构设计
订票人表
字段
类型
特殊属性
身份证
char(18)
主键,非空
姓名
char(10)
NOT NULL
联系电话
varchar(12)
NOT NULL
始发城市
varchar(10)
NOT NULL
目的城市
varchar(10)
NOT NULL
订单号
char(20)
外键
订票单表
字段
类型
特殊属性
订单号
char(20)
主键
身份证号
char(18)
外键
订票时间
datetime
NOT NULL
付款取票与否
char(2)
NOT NULL,默认‘是’或“否”
车次号
varchar(10)
LIKE‘[A-Z]%’
车票号
char(20)
外键
票价
int
NOT NULL
员工号
char(20)
外键
车票表
字段
字段
特殊属性
车票号
char(20)
主键
车次号
varchar(10)
外键
始发站
varchar(10)
NOT NULL
发车时间
datetime
NOT NULL
车厢号
int
NOT NULL
座位号
int
NOT NULL
终点站
varchar(10)
NOT NULL
车票种类
char(20)
IN(‘软卧’,‘硬卧’,‘软座’,‘硬座’,‘站票’)
订单号
char(20)
NOT NULL
车次表
字段
类型
特殊属性
车次号
char(20)
主键
始发站
varchar(10)
NOT NULL
终点站
varchar(10)
NOT NULL
途径站
varchar(10)
NOT NULL
操作员表
字段
类型
特殊属性
员工号
char(20)
主键
订票点号
char(20)
NOT NULL
姓名
varchar(10)
NOT NULL
性别
char(2)
NOT NULL,默认‘男’或‘女’
电话
varchar(12)
NOT NULL
余票信息表
字段
类型
特殊属性
车次号
varchar(10)
主键
车票种类
char(10)
主键
出发站
varchar(10)
NOT NULL
目的站
varchar(10)
NOT NULL
出发时间
datatime
NOT NULL
余票张数
int
NOT NULL
6数据库实施
6.1 建立数据库
create database 网上订票数据库
on primary
(
name=网上订票数据库,
filename='E:\数据库\网上订票数据库.mdf',
size=5MB,
FILEGROWTH=10%
)
log on
(
name=网上订票数据库_log,
filename='E:\数据库\网上订票数据库_log.ldf',
size=5MB,
FILEGROWTH=2MB)
6.2 建立基本表
创建订票人表:
create table 订票人表
(身份证号 char(18) not null primary key,
姓名 varchar(10) not null,
联系电话 varchar(12) not null,
始发城市 varchar(10) not null,
目的城市 varchar(10) not null,
订单号 char(20))
创建操作员表:
create table 操作员表
(员工号 char(10) primary key,
订票点 varchar(10) not null,
姓名 varchar(10) not null,
性别 char(2) check(性别 in('男','女')),
电话 varchar(12) not null)
创建车次信息表:
create table 车次信息表
(
车次号 varchar(10) check (车次号 LIKE '[A-Z]%') primary key ,
始发站 varchar(10) not null,
终点站 varchar(10) not null,
途经站 varchar(100) )
创建订票单表:
create table 订票单表
(订单号 char(20) primary key,
身份证号 char(18) references 订票人表(身份证号),
订票时间 datetime not null,
付款取票与否 char(2) check(付款取票与否 in('是','否')),
车次号 varchar(10) check (车次号 LIKE '[A-Z]%'),
车票号 char(20) not null,
票价 int not null,
员工号 char(10) references 操作员表(员工号))
创建车票信息表:
create table 车票信息表
(车票号 char(20) primary key,
车次号 varchar(10) check (车次号 LIKE '[A-Z]%'),
始发站 varchar(10) not null,
发车时间 datetime not null,
终点站 varchar(10) not null,
车票种类 char(4) check(车票种类 in('无座','硬座','硬卧','软卧')),
订单号 char(20) references 订票单表(订单号),
车厢号 int not null,
座位号 int not null)
创建余票信息表:
create table 余票信息表
(车次号 varchar(10) check (车次号 LIKE '[A-Z]%') primary key,
出发站 varchar(10) not null,
目的站 varchar(10) not null,
余票张数 int not null,
车票种类 char(20) primary key,
出发日期 datatime)
6.3 建立索引
订票人表:
IF exists (select * from sysindexes where name='pID_index')
drop index 订票人表.pID_index
create unique index pID_index
on 订票人表(身份证号)
with fillfactor=30
订票单表:
IF exists (select * from sysindexes where name='piaoDanNO_index')
drop index 订票单表.piaoDanNO_index
create index piaoDanNO_index
on 订票单表(订单号)
车票信息表:
IF exists (select * from sysindexes where name='piaoNO_index')
drop index 车票信息表表.piaoNO_index
create index piaoNO_index
on 车票信息表(车票号)
车次信息表:
IF exists (select * from sysindexes where name='cheCiNO_index')
drop index 车次信息表.cheCiNO_index
create index cheCiNO_index
on 车次信息表(车次号)
操作员表:
IF exists (select * from sysindexes where name='yuanGongNO_index')
drop index 操作员表.yuanGongNO_index
create index yuanGongNO_index
on 操作员表(员工号)
6.4 创建视图
create view allInfo_view
as
select 订票人表.姓名, 订票人表.身份证号,订票单表.车次号,
车票信息表.车票号,车票信息表.发车时间,车票信息表.始发站,
车票信息表.终点站,订票单表.票价
from 订票人表 inner join 订票单表
on 订票人表.身份证号= 订票单表.身份证号 inner join 车票信息表
on 订票单表.车票号= 车票信息表.车票号 inner join 车次信息表
on 车票信息表.车次号= 车次信息表.车次号
6.5 创建存储过程
创建存储过程,通过身份证号查询订票人信息:
create procedure pInfo_proc
@pID char(18)
as
select 身份证号,姓名,联系电话,始发城市,目的城市,订单号
from 订票人表 where 身份证号=@pID
创建存储过程,通过身份证号查询订票人订票信息:
create procedure ticket_proc
@pID char(18)
as
select 姓名,订票单表.订单号,订票人表.身份证号,订票时间,付款取票与 否,车次号,车票号,票价,员工号
from 订票单表inner join 订票人表
on 订票人表.身份证号= 订票单表.身份证号
where 订票单表.身份证号=@pID
6.6 创建触发器
create trigger 余票更新
on 车票信息表
for insert
as
declare @车次号 varchar(10)
select @车次号=车次号 from inserted
update 余票信息表
set 余票张数=余票张数-1
where 车次号=@车次号
create trigger 余票更新2
on 车票信息表
for delete
as
declare @车次号 varchar(10)
select @车次号=车次号 from deleted
update 余票信息表
set 余票张数=余票张数+1
where 车次号=@车次号
6.7插入数据
向操作员表中插入数据:
insert into 操作员表
values
(,'洛阳','鲁金龙','男',)
向车次信息表中插入数据:
insert into 车次信息表
values
('K31','福州','洛阳','商丘、开封、郑州')
向订票人表中插入数据:
insert into 订票人表
values
(,'鲁金龙',,'民权',
'洛阳',)
向订票单表中插入数据:
insert into 订票单表
values
(,,'2011-06-24 14:31:36',
'是','K31',,12.5,)
向车票信息表中插入数据:
insert into 车票信息表
values
(,'K31','民权','2011-06-24 14:31:36','洛阳',
'硬座',,12,021)
想余票信息表中插入数据:
insert into 车票信息表
values
('K31','民权','洛阳',135,2011-06-24 13:24:00,硬座)
6.8 关系图
6.9 订购车票
insert into 车票信息表
values
(,'T90','南京','2013-07-09 13:23:13','河南','硬座',,'06','23')
6.10 退票
delete 车票信息表
where 车次号='T90'
7 实验小结
通过这次大作业的设计,我们团队经过了几次的激烈讨论,由组长带领组员,通过对火车订票系统的需求分析,概念结构设计,逻辑结果设计,物理结构设计,建立数据库、基本表,创建存储过程、创建触发器以保证订票时对余票数量的修改,我们对数据库有了进一步的理解,同时也为期末考试进行了一个粗略的复习,对基本概念的理解更加深刻,对本书中的重点,如模式的分解等内容理解加深。
在时间的过程中,发现对SQL语言的掌握还远远不够,这也是在大作业的设计过程中遇到的一个大难题,尤其是在做存储过程和触发器的时候,没有掌握代码的格式和方法,所以花了很长时间来熟悉创建存储过程和触发器的代码上。
在周四上机掩饰的时候由于没有做出触发器所以没有演示订票的过程,课下我们有进行了修改,能够进行订票的操作。
最后感谢老师这一学期的悉心教导,我们收获很多。谢谢老师~~
展开阅读全文