数据库系统
火车票网上订票系统
实 验 报 告
姓名:邱宁 学号:13071041 同组者:佟思淼 张啸宇
目录
1.需求分析 ............................................................................................................................................ 1
1.1 功能需求 ................................................................................................................................ 1
1.1.2 订票 ....... 1 1.1.3 退票 ....... 1 1.1.4 注册 ....... 1 1.1.5 用户登陆 ....... 1 1.1.6 修改密码 .................................................................................................................... 1 1.1.7 添加车次 .................................................................................................................... 1 1.2 数据需求 ................................................................................................................................ 1 1.3 性能需求 ................................................................................................................................ 1
1.3.1准确性和及时性 .......................................................................................................... 1 1.3.2易用性 ......................................................................................................................... 1 1.3.3安全性 ......................................................................................................................... 1 1.4 数据流图 ................................................................................................................................ 2
1.4.1 顶层数据流图............................................................................................................. 2 1.4.2 1层数据流图.............................................................................................................. 2
2.概念结构设计 .................................................................................................................................... 2
2.1 系统结构简述 ........................................................................................................................ 2 2.2 数据处理 ................................................................................................................................ 3 2.3生成E-R图 ............................................................................................................................. 3 3逻辑结构设计 ..................................................................................................................................... 4
3.1 关系模式 ................................................................................................................................ 4 4 物理结构设计 .................................................................................................................................... 4 5数据库实施 ......................................................................................................................................... 5
5.1 建立数据库 ............................................................................................................................ 5 5.2 建立基本表 ............................................................................................................................ 6 5.3 建立索引 ................................................................................................................................ 7 5.4 创建视图 ................................................................................................................................ 8 5.5 创建存储过程 ........................................................................................................................ 8 5.6 创建触发器 ............................................................................................................................ 9 5.7插入数据 ................................................................................................................................. 9 5.8 关系图 .................................................................................................................................. 10 5.9 订购车票 .............................................................................................................................. 10 5.10 退票 ..................................................................................................................................... 11 6 实验小结 ........................................................................................................................................... 11
1.需求分析
1.1 功能需求
1.1.1 查询:用户、管理员都可以对车次进行查询:可以按照发车车次进行查 询;可以按照出发地、目的地进行查询;可以按照类车类型、座 位类型查询。
车次信息包括:车次ID,车号,出发地,目的地,列车类型,座 位类型,票价,票数,车次信息只允许用户查询,不能修改。
1.1.2 订票:用户登陆后,通过订票系统,根据自己你的需求找到自己的次, 输入要预订的票数进行订票。要求订票记录应包括:订票记ID, 车次ID,用户ID,订票数量。
1.1.3 退票:用户登录后,通过退票系统,找到自己的订票信息,输入要退票 数进行退票。
1.1.4 注册:想要订票的用户必须先注册然后登陆订票。用户信息包括:用户 ID,用户名,密码,邮箱。
1.1.5 用户登陆:主要完成用户和管理员的登陆。用户想订票必须登陆后才进 行订票,如果没有注册的用户应该与注册页面相连接。 1.1.6 修改密码:用户和管理员登陆后可以修改个人信息。 1.1.7 添加车次:管理员登陆后可以添加新的车次。
1.2 数据需求
1.3 性能需求
1.3.1准确性和及时性
系统应能及时准确的根据用户权限及所输入的信息作出响应。由于查询功 能对于用户来讲很重要,因为这直接影响了用户的订票决策,所以系统的 准确性和及时性很重要。 1.3.2易用性
本系统是针对用户直接开放的,所以应该提供良好的接口。
1.3.3安全性
网上订票的数据是很重要的信息,系统应该保证用户的权限,对于车次的 信息不能更改。同时还应该保证管理人员进行正常的维护、更新等工作, 保证数据的一致性。
1.4 数据流图
1.4.1 顶层数据流图
1.4.2 1层数据流图
2.概念结构设计 2.1 系统结构简述
本系统包括六个实体:订票人,订票单信息,车票信息,车次信息,操作员,余票信息。
订票人与订票单、订票单与车票信息这两个关系是一对一的联系;车票信息与车次信息、订票单信息与操作员这两个关系是1对多的联系。
2.2 数据处理
3.2.1. 查询所有订票人信息:
输入:身份证号
输出:订票单号,订票人身份证号,订单时间,付款取票与否,车次号,车票号, 票价,员工号。
3.2.2. 查询订票人的已定车票的信息:
输入:身份证号
输出:车票号,始发站,车次号,发车时间,终点站,车票种类。 3.2.3. 查询某一车上乘坐的乘客的信息:
输入:车次号
输出:姓名,身份证号,联系电话,目的城市,始发城市。 3.2.4 查询余票数量
输入:乘车区间和车次号 输出:余票数量。
2.3生成E-R图
3逻辑结构设计
3.1 关系模式
订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号) 操作员表(员工号,订票点号,姓名,性别,电话) 车次信息表(车次号,始发站,终点站,途径站)
员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号, 车厢号,座位号) 说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧” 余票信息表(车次号,车票种类,出发站,目的站,出发时间)
4 物理结构设计
5数据库实施
5.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)
5.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)
5.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 操作员表(员工号)
5.4 创建视图
create view allInfo_view as
select 订票人表.姓名, 订票人表.身份证号,订票单表.车次号,
车票信息表.车票号,车票信息表.发车时间,车票信息表.始发站, 车票信息表.终点站,订票单表.票价 from 订票人表 inner join 订票单表
on 订票人表.身份证号= 订票单表.身份证号 inner join 车票信息表 on 订票单表.车票号= 车票信息表.车票号 inner join 车次信息表 on 车票信息表.车次号= 车次信息表.车次号
5.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
5.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 车次号=@车次号
5.7插入数据
向操作员表中插入数据:
insert into 操作员表
values
('2011060001','洛阳','鲁金龙','男','[1**********]')
向车次信息表中插入数据:
insert into 车次信息表
values
('K31','福州','洛阳','商丘、开封、郑州')
向订票人表中插入数据:
insert into 订票人表
values
('[***********]','二胎泽','[1**********]','民权',
'洛阳','[***********]01')
向订票单表中插入数据:
insert into 订票单表
values
('[***********]01','[***********]','2011-06-24 14:31:36',
'是','K31','[***********]01',12.5,'2011060001')
向车票信息表中插入数据:
insert into 车票信息表
values
('[***********]01','K31','民权','2011-06-24 14:31:36','洛阳', '硬座','[***********]01',12,021)
想余票信息表中插入数据:
insert into 车票信息表
values
('K31','民权','洛阳',135,2011-06-24 13:24:00,硬座)
5.8 关系图
5.9 订购车票
insert into 车票信息表
('20130013','T90','南京','2013-07-09 13:23:13','河南','硬座','20130013','06','23')
5.10 退票
delete 车票信息表
where 车次号='T90'
6 实验小结
通过这次大作业的设计,我们团队经过了几次的激烈讨论,由组长带领组员,通过对火车订票系统的需求分析,概念结构设计,逻辑结果设计,物理结构设计,建立数据库、基本表,创建存储过程、创建触发器以保证订票时对余票数量的修改,我们对数据库有了进一步的理解,同时也为期末考试进行了一个粗略的复习,对基本概念的理解更加深刻,对本书中的重点,如模式的分解等内容理解加深。
在时间的过程中,发现对SQL语言的掌握还远远不够,这也是在大作业的设计过程中遇到的一个大难题,尤其是在做存储过程和触发器的时候,没有掌握代码的格式和方法,所以花了很长时间来熟悉创建存储过程和触发器的代码上。
数据库系统
火车票网上订票系统
实 验 报 告
姓名:邱宁 学号:13071041 同组者:佟思淼 张啸宇
目录
1.需求分析 ............................................................................................................................................ 1
1.1 功能需求 ................................................................................................................................ 1
1.1.2 订票 ....... 1 1.1.3 退票 ....... 1 1.1.4 注册 ....... 1 1.1.5 用户登陆 ....... 1 1.1.6 修改密码 .................................................................................................................... 1 1.1.7 添加车次 .................................................................................................................... 1 1.2 数据需求 ................................................................................................................................ 1 1.3 性能需求 ................................................................................................................................ 1
1.3.1准确性和及时性 .......................................................................................................... 1 1.3.2易用性 ......................................................................................................................... 1 1.3.3安全性 ......................................................................................................................... 1 1.4 数据流图 ................................................................................................................................ 2
1.4.1 顶层数据流图............................................................................................................. 2 1.4.2 1层数据流图.............................................................................................................. 2
2.概念结构设计 .................................................................................................................................... 2
2.1 系统结构简述 ........................................................................................................................ 2 2.2 数据处理 ................................................................................................................................ 3 2.3生成E-R图 ............................................................................................................................. 3 3逻辑结构设计 ..................................................................................................................................... 4
3.1 关系模式 ................................................................................................................................ 4 4 物理结构设计 .................................................................................................................................... 4 5数据库实施 ......................................................................................................................................... 5
5.1 建立数据库 ............................................................................................................................ 5 5.2 建立基本表 ............................................................................................................................ 6 5.3 建立索引 ................................................................................................................................ 7 5.4 创建视图 ................................................................................................................................ 8 5.5 创建存储过程 ........................................................................................................................ 8 5.6 创建触发器 ............................................................................................................................ 9 5.7插入数据 ................................................................................................................................. 9 5.8 关系图 .................................................................................................................................. 10 5.9 订购车票 .............................................................................................................................. 10 5.10 退票 ..................................................................................................................................... 11 6 实验小结 ........................................................................................................................................... 11
1.需求分析
1.1 功能需求
1.1.1 查询:用户、管理员都可以对车次进行查询:可以按照发车车次进行查 询;可以按照出发地、目的地进行查询;可以按照类车类型、座 位类型查询。
车次信息包括:车次ID,车号,出发地,目的地,列车类型,座 位类型,票价,票数,车次信息只允许用户查询,不能修改。
1.1.2 订票:用户登陆后,通过订票系统,根据自己你的需求找到自己的次, 输入要预订的票数进行订票。要求订票记录应包括:订票记ID, 车次ID,用户ID,订票数量。
1.1.3 退票:用户登录后,通过退票系统,找到自己的订票信息,输入要退票 数进行退票。
1.1.4 注册:想要订票的用户必须先注册然后登陆订票。用户信息包括:用户 ID,用户名,密码,邮箱。
1.1.5 用户登陆:主要完成用户和管理员的登陆。用户想订票必须登陆后才进 行订票,如果没有注册的用户应该与注册页面相连接。 1.1.6 修改密码:用户和管理员登陆后可以修改个人信息。 1.1.7 添加车次:管理员登陆后可以添加新的车次。
1.2 数据需求
1.3 性能需求
1.3.1准确性和及时性
系统应能及时准确的根据用户权限及所输入的信息作出响应。由于查询功 能对于用户来讲很重要,因为这直接影响了用户的订票决策,所以系统的 准确性和及时性很重要。 1.3.2易用性
本系统是针对用户直接开放的,所以应该提供良好的接口。
1.3.3安全性
网上订票的数据是很重要的信息,系统应该保证用户的权限,对于车次的 信息不能更改。同时还应该保证管理人员进行正常的维护、更新等工作, 保证数据的一致性。
1.4 数据流图
1.4.1 顶层数据流图
1.4.2 1层数据流图
2.概念结构设计 2.1 系统结构简述
本系统包括六个实体:订票人,订票单信息,车票信息,车次信息,操作员,余票信息。
订票人与订票单、订票单与车票信息这两个关系是一对一的联系;车票信息与车次信息、订票单信息与操作员这两个关系是1对多的联系。
2.2 数据处理
3.2.1. 查询所有订票人信息:
输入:身份证号
输出:订票单号,订票人身份证号,订单时间,付款取票与否,车次号,车票号, 票价,员工号。
3.2.2. 查询订票人的已定车票的信息:
输入:身份证号
输出:车票号,始发站,车次号,发车时间,终点站,车票种类。 3.2.3. 查询某一车上乘坐的乘客的信息:
输入:车次号
输出:姓名,身份证号,联系电话,目的城市,始发城市。 3.2.4 查询余票数量
输入:乘车区间和车次号 输出:余票数量。
2.3生成E-R图
3逻辑结构设计
3.1 关系模式
订票人表(身份证号,姓名,联系电话,始发城市,目的城市,订单号) 操作员表(员工号,订票点号,姓名,性别,电话) 车次信息表(车次号,始发站,终点站,途径站)
员工号)
车票信息表(车票号,车次号,始发站,发车时间,终点站,车票种类,订单号, 车厢号,座位号) 说明:车票种类为:“无座”或“硬座”或“硬卧”或“软卧” 余票信息表(车次号,车票种类,出发站,目的站,出发时间)
4 物理结构设计
5数据库实施
5.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)
5.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)
5.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 操作员表(员工号)
5.4 创建视图
create view allInfo_view as
select 订票人表.姓名, 订票人表.身份证号,订票单表.车次号,
车票信息表.车票号,车票信息表.发车时间,车票信息表.始发站, 车票信息表.终点站,订票单表.票价 from 订票人表 inner join 订票单表
on 订票人表.身份证号= 订票单表.身份证号 inner join 车票信息表 on 订票单表.车票号= 车票信息表.车票号 inner join 车次信息表 on 车票信息表.车次号= 车次信息表.车次号
5.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
5.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 车次号=@车次号
5.7插入数据
向操作员表中插入数据:
insert into 操作员表
values
('2011060001','洛阳','鲁金龙','男','[1**********]')
向车次信息表中插入数据:
insert into 车次信息表
values
('K31','福州','洛阳','商丘、开封、郑州')
向订票人表中插入数据:
insert into 订票人表
values
('[***********]','二胎泽','[1**********]','民权',
'洛阳','[***********]01')
向订票单表中插入数据:
insert into 订票单表
values
('[***********]01','[***********]','2011-06-24 14:31:36',
'是','K31','[***********]01',12.5,'2011060001')
向车票信息表中插入数据:
insert into 车票信息表
values
('[***********]01','K31','民权','2011-06-24 14:31:36','洛阳', '硬座','[***********]01',12,021)
想余票信息表中插入数据:
insert into 车票信息表
values
('K31','民权','洛阳',135,2011-06-24 13:24:00,硬座)
5.8 关系图
5.9 订购车票
insert into 车票信息表
('20130013','T90','南京','2013-07-09 13:23:13','河南','硬座','20130013','06','23')
5.10 退票
delete 车票信息表
where 车次号='T90'
6 实验小结
通过这次大作业的设计,我们团队经过了几次的激烈讨论,由组长带领组员,通过对火车订票系统的需求分析,概念结构设计,逻辑结果设计,物理结构设计,建立数据库、基本表,创建存储过程、创建触发器以保证订票时对余票数量的修改,我们对数据库有了进一步的理解,同时也为期末考试进行了一个粗略的复习,对基本概念的理解更加深刻,对本书中的重点,如模式的分解等内容理解加深。
在时间的过程中,发现对SQL语言的掌握还远远不够,这也是在大作业的设计过程中遇到的一个大难题,尤其是在做存储过程和触发器的时候,没有掌握代码的格式和方法,所以花了很长时间来熟悉创建存储过程和触发器的代码上。