数据库大作业-火车票查询系统报告和代码

1、用VS打开代码中的工程文件,选择工具,连接到数据库。

2、打开执行文件即可。

一、需求分析:

1.1功能需求

1.1.1 查询:

选择出发地和目的地以及出发日期,可查询全部车次,也可分车次类型查询,车次类型包括:高铁、动车、直达等。车次信息包括:车次ID,车号,出发地,目的地,出发时间,到到时间,历时,列车类型,座位类型,票价,票数等,车次信息只允许用户查询,不能修改。还可根据车次类型分类查询。

1.1.2 预定:

要想预定必须登陆,用户登陆后,通过订票系统,根据自己你的需求找到自己的车次进行预定。要求订票记录应包括:座位信息、旅客信息、车次信息、金额,车票状态包括已支付和未支付。

1.1.3 退票:

用户登录后,通过退票系统,找到自己的订票信息,选择要退的车票。

1.1.4 注册:

想要订票的用户必须先注册然后登陆订票。注册信息包括:用户名、登录密码、姓名、证件号、邮箱、手机号等。

1.1.5 修改密码:用户登陆后可以修改个人信息。

二、数据流图和数据字典

2.1数据流图

2.2数据字典:

主要的数据流定义

――――――――――――――――――――――――――――――

订票需求数据流

数据流名:订票需求

说明:客户浏览票务信息后,向系统发出自己的订票需求,

包括始发地点、目的地点以及乘车时间。

来源去向:数据来自客户需求,流向订票系统

数据结构:客户订票需求表

――――――――――――――――――――――――――――――

票务信息数据流

数据流名:票务信息

说明:当订票系统获得订票需求后,给出与客户需求相应的票务信息,

包括始发地点、目的地点、乘车时间、到达时间、票价

来源去向:数据来自订单需求表,流向客户信息管理系统

数据结构:票务信息表

――――――――――――――――――――――――――――――

主要的数据存储定义

――――――――――――――――――――――――――――――――

数据存储名:订票信息

说明:记录了客户的订票信息

输入:订票信息

输出:票务信息

数据描述:始发地点、目的地点、乘车时间、到达时间、票价、乘车

区间、座位号

存取方式:联机处理;检索和更新;主要是随机检索。

――――――――――――――――――――――――――――――――

数据存储名:支付记录

说明:记录了客户的支付信息

输入:订票信息

输出:支付信息

数据描述:将支付信息加入订房信息或者订票信息

存取方式:联机处理;检索和更新;主要是随机检索。

――――――――――――――――――――――――――――――――

数据存储名:退订记录

说明:记录了客户的退订信息

输入:订房信息或订票信息

输出:退订信息

数据描述:将退订信息加入订房信息或者订票信息

存取方式:联机处理;检索和更新;主要是随机检索。

三、结构设计

3.1概念结构设计E-R图


3.2逻辑结构设计

主要是客户与系统之间的使用关系。抽象成关系模式:

客户(用户名,密码,身份证号,联系方式)

车票系统(出发地,目的地)

用户信息系统(订票信息,用户信息)

规范化

客户(用户名,密码,身份证号,联系方式,出发地,目的地,所在地)

该关系满足三范式

需要用到的表

表名属性约束
UserInfouserName唯一
PSW非空
userId主键
userPhone唯一
表名属性约束
TrainInfotrainNo主键
startStation
arriveStation
startTime
arriveTime
timeTake
表名属性约束
SeatInfotrainNo主键
seatType
seatPriceseatPrice>=0
seatLeftseatLeft >=0
表名属性约束
BookTicketInfotrainNo主键、外键约束
startStation
arriveStation
startTime
arriveTime
timeTake
seatType
seatPrice
seatNo
userId主键、外键约束
表名属性约束
LoginInfouserName
PSW
remPSW

针对于每张表

UserInfo 包含主键、唯一键约束

TrainInfo 主键trainNo

SeatInfo 包括主键(trainNo,seatType),check约束

BookTicketInfo 主键(trainNo,userId)外键约束

LoginInfo

四、主要SQL语句

4.1创建数据库

create database TravelManagement;

4.2创建表

-- 用户注册表

use TravelManagement;

create table tbRegister

(

username varchar(30) primary key,--用户名

psw varchar(20),--密码

name varchar(30),--姓名

idtype varchar(20),--证件类型

id char(20) unique,--证件号码

mail varchar(20),--邮箱

phone char(15),--手机号码

class char(30),--旅客类型

balance money default 2000

);

--

-- 登录表

--

GO

use TravelManagement;

create table tbLogged

(

username varchar(30)

);

--

--票务信息表

--

GO

use TravelManagement;

create table tbTicket

(

车次 char(6),

出发站 char(10),

到达站 char(10),

日期 nchar(12),

出发时间 char(6),

到达时间 char(6),

历时 nchar(10),

商务座 smallint,

商务座价格 smallmoney,

特等座 smallint,

特等座价格 smallmoney,

一等座 smallint,

一等座价格 smallmoney,

二等座 smallint,

二等座价格 smallmoney,

高级软卧 smallint,

高级软卧价格 smallmoney,

软卧 smallint,

软卧价格 smallmoney,

硬卧 smallint,

硬卧价格 smallmoney,

软座 smallint,

软座价格 smallmoney,

硬座 smallint,

硬座价格 smallmoney,

无座 smallint,

无座价格 smallmoney,

备注 nchar(3),

primary key(车次,出发站,到达站,日期)

);

--

-- 购票信息表

--

GO

use TravelManagement;

create table tbTheBoughtTicket

(

username varchar(30),

车次信息 nchar(50),

席位信息 nchar(30),

旅客信息 nchar(20),

票款金额 nchar(20),

车票状态 nchar(5),

操作 nchar(2) default '退票',

primary key(车次信息,席位信息)

);

--

-- 车站城市表

--

GO

use TravelManagement;

create table tbCity

(

city varchar(30) primary key

);

4.3存储过程

-- 当买票或者退票时,进行账户余额的增减

create proc AddOrMinusBalance

@username varchar(30), @minus money, @tag smallint

as

begin

if @tag = 0

update tbRegister

set balance = balance + @minus

where username=@username

if @tag = 1

update tbRegister

set balance = balance - @minus

where username=@username

end

--

-- 当买票或者退票时,进行相关车票的增减

--

GO

create proc AddOrMinusTicket

@trainno char(6), @startstation char(10), @endstation char(10),

@startdate nchar(12), @seattype char(10), @tag smallint

as

begin

if @seattype = '商务座'

update tbTicket

set 商务座=商务座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '特等座'

update tbTicket

set 特等座=特等座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '一等座'

update tbTicket

set 一等座=一等座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '二等座'

update tbTicket

set 二等座=二等座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '高级软卧'

update tbTicket

set 高级软卧=高级软卧 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '软卧'

update tbTicket

set 软卧=软卧 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '硬卧'

update tbTicket

set 硬卧=硬卧 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '软座'

update tbTicket

set 软座=软座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '硬座'

update tbTicket

set 硬座=硬座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

if @seattype = '无座'

update tbTicket

set 无座=无座 + 1 - 2 * @tag

where 车次 = @trainno and 出发站 = @startstation and 到达站 = @endstation and 日期 = @startdate

end

--

-- 信息的修改

--

GO

create proc InfoChange

@username varchar(30), @mail varchar(20), @phone char(15)

as

begin

update tbRegister

set mail = @mail, phone = @phone

where username = @username

end

4.4触发器

* 创建触发器

-- 当用户注册后,默认账户余额为元,当用户余额小于时,自动恢复为

Go

create trigger tUpdate_tbRegister on tbRegister

after update

as

begin

declare @money money =0

select @money = balance from inserted

if @money < 0

update tbRegister

set balance = 2000

where username =

(select username from inserted)

End

4.5数据关系图

五、运行结果

5.1点击exe文件后进入系统

点击查询后显示结果

上面是所有的结果,还可以根据车次分别查询每一类车次信息:这是K-快速列车的信息:

5.2点击预定,如果没登陆,则提示请先登陆:

我们先注册一个账号

5.3注册完后登陆到系统开始预订车票,选择自己要定的车票,点击预定:

订完后还可以查看自己的订票信息:

六、实验总结

每次放假回家大多数的人都会选择坐火车回去,但是买票是一件令人头疼的事情。所以这次选择做这个火车票购票系统。但是这个系统功能有点简单,本质上来讲只有查询余票,插入用户信息,修改用户信息等功能。

实验刚开始不知道如何下手,在网上找了很久,不仅要找如何写代码的问题,还要查VS的有些使用细节,过程中借鉴了很多网上的代码,多次询问同学配置环境的问题。第一次写这么多的SQL语句,通过这次大作业实验,更加熟练的掌握了常用的SQL语句的使用,也体验到了开发一个数据库系统的整个过程,对这个过程也有了新的认识。但是过程中也有很多问题,主要有一下几点:

1、对于C#、SQL等语言不够熟悉,不能熟练运用。很多库函数不知道,还得百度,也借鉴了很多网上的代码。对于接口的运用也很陌生,不能整体把握整个系统,界面设计也很粗糙。

2、需求不明确。不能把对于用户的需求对应到数据库的具体操作上,虽然自己想的某个功能很好,但是不知道在数据库中怎么去实现,功能也改了好多,还有之前想的功能由于太复杂直接放弃了。

3、对数据库用的不够深,不够多。之前的实验都是写几个SQL语句就可以解决的,但是这次的大作业要一下用这么多功能,实现起来还是很费劲的,好要用别的语言,还要连接数据库。

通过这次大作业也知道了自己的很多不足,认识到自己还是知道的太少,要想做出更好的东西,要走的路还很长。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值