火车站票务管理数据库设计说明书.docx
《火车站票务管理数据库设计说明书.docx》由会员分享,可在线阅读,更多相关《火车站票务管理数据库设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。
![火车站票务管理数据库设计说明书.docx](https://file1.bdocx.com/fileroot1/2023-1/29/8b3e2491-f87d-4693-b029-8ae27667ba23/8b3e2491-f87d-4693-b029-8ae27667ba231.gif)
火车站票务管理数据库设计说明书
火车站票务管理系统
数据库设计说明书
拟制人李毅丁黎
审核人___________
批准人___________
一、问题描述
车票销售时不能超员,并自动修改剩余的座位数;
创建存储过程统计指定车次指定发车时间的车票销售情况;
创建存储过程统计指定日期各业务员车票的销售收入;
退票时自动修改相应车次的剩余座位数;
创建表间关系。
●车次管理:
记录各车次及发车时间,实现车次的调度。
●价格管理:
根据里程记费到各站的价格。
●业务员管理:
记录各业务员的信息。
●售票管理:
销售火车票,记录售票信息。
●退票管理:
实现退票,记录退票信息
二、需求分析
现今世界的发展速度极快,数据量不断增大,人工的管理已经不能精确的管理,或者没有那么多的时间整理,时常可能出现大量的错误,导致数据不一致,数据丢失和混乱现象。
计算机在科技的不断创新和发展中产生并不断更新,存储量和计算次数极大,在火车票销售和火车站的一些管理中,计算机便在这里能起到极大的作用,可以帮助人们实现大量的各种数据的管理,有效的减轻人们的工作量,提高管理效率和精确度,防止数据丢失和错误等,便利了我们的生活节约了大量时间和精力。
在此,利用计算机建立火车票务管理系统显得由为重要。
三、概念模型设计
1火车站票务管理系统我设计了九张表来存储所有有用信息:
●管理员表(包含属性:
工号,姓名,密码,联系电话)
●车次表(包含属性:
车次号,发车时间,座位数)
●业务员表(包含属性:
工号,姓名,密码,联系电话)
●火车票表(包含属性:
票号,车次号,发车时间,座位号,车站号,价格)
●乘客表(包含属性:
身份证号,姓名,密码,联系电话)
●车站表(包含属性:
车站号,站名)
●售票表(包含属性:
工号,票号,售票时间)
●退票表(包含属性:
身份证号,票号,退票时间)
●售票情况(包含属性:
车次,发车时间,剩余票数)
2表间对应的局部和整体E——R图如下:
局部E—R图
局部E—R图
3、数据流图
四、逻辑结构设计
1、关系模式注(关系的码用下横线标出)
实体:
管理员(工号,姓名,密码,联系电话)
车次(车次号,发车时间,座位数)
业务员(工号,姓名,密码,联系电话)
火车票(票号,车次号,发车时间,座位号,价格)
乘客(身份证号,姓名,密码,联系方式)
车站(车站号,站名)
联系:
售票(工号,票号,售票时间)
退票(身份证号,票号,退票时间)
售票情况(车次,发车时间,剩余票数)
2、所有表之间的关系图如下:
五物理结构设计
各表名称及所包含的属性,数据类型和长度,主外键关系如下几张表所示:
管理员表(admin)
列名
说明
类型
长度
允许空
主/外键
job_num
工号
char
5
主
Job_name
姓名
char
8
password
密码
char
6
tele_num
联系电话
char
11
车次表(train_num)
列名
说明
类型
长度
允许空
主/外键
tr_num
车次号
char
5
主
d_time
发车时间
char
12
主
seat_sum
座位数
int
业务员表(seller)
列名
说明
类型
长度
允许空
主/外键
job_num
工号
char
10
主
Job_name
姓名
char
8
password
密码
char
6
tele_num
联系电话
char
11
火车票表(ticket)
列名
说明
类型
长度
允许空
主/外键
ticket_num
票号
char
12
主
tr_num
车次号
char
5
外
d_time
发车时间
char
12
外
seat_num
座位号
char
5
sta_num
车站号
char
5
price
价格
int
乘客表(passenger)
列名
说名
类型
长度
允许空
主/外键
id_num
身份证号
char
18
主
p_name
姓名
char
8
password
密码
char
6
tele_num
联系电话
char
11
车站表(station)
列名
说名
类型
长度
允许空
主/外键
sta_num
车站号
char
5
主
sta_name
站名
char
10
售票表(sell_ticket)
列名
说名
类型
长度
允许空
主/外键
job_num
工号
char
10
主、外
ticket_num
票号
char
12
主、外
sell_time
售票时间
char
12
退票表(return_ticket)
列名
说名
类型
长度
允许空
主/外键
id_num
身份证号
char
18
主
ticket_num
票号
char
12
外
r_time
退票时间
char
12
售票情况表I(remain)
列名
说名
类型
长度
允许空
主/外键
tr_num
车次
char
5
主、外
d_time
发车时间
char
12
主、外
re_ticket
剩余票数
int
12
六、数据库实施
/*数据库表*/
createtabletrain_num(
tr_numchar(5)notnull,
d_timechar(12)notnull,
seat_sumintnotnull,
primarykey(tr_num,d_time)
)
createtableseller(
job_numchar(10)notnull,
job_namechar(8)notnull,
passwordchar(6)notnull,
tele_numchar(11)notnull,
primarykey(job_num)
)
createtableticket(
ticket_numchar(12)notnull,
tr_numchar(5)notnull,
d_timechar(12)notnull,
seat_numchar(5)notnull,
sta_numchar(5)notnull,
priceintnotnull,
primarykey(ticket_num),
foreignkey(tr_num)referencestrain_num(tr_num),
foreignkey(d_time)referencestrain_num(d_time)
)
createtablepassenger(
id_numchar(18)notnull,
p_namechar(8)notnull,
passwordchar(6)notnull,
tele_numchar(11)notnull,
primarykey(id_num)
)
createtablestation(
sta_numchar(5)notnull,
sta_namechar(12)notnull,
primarykey(sta_num)
)
createtableadmin(
job_numchar(10)notnull,
job_namechar(8)notnull,
passwordchar(6)notnull,
tele_numchar(11)notnull,
primarykey(job_num)
)
createtablesell_ticket(
job_numchar(10)notnull,
ticket_numchar(12)notnull,
sell_timechar(12)notnull,
primarykey(job_num,ticket_num),
foreignkey(job_num)referencesseller(job_num),
foreignkey(ticket_num)referencesticket(ticket_num)
)
createtablereturn_ticket(
id_numchar(18)notnull,
ticket_numchar(12)notnull,
r_timechar(12)notnull,
primarykey(id_num,ticket_num),
foreignkey(id_num)referencespassenger(id_num),
foreignkey(ticket_num)referencesticket(ticket_num)
)
createtableremain(
tr_numchar(5)notnull,
d_timechar(12)notnull,
re_ticketintnotnull,
primarykey(tr_num,d_time,re_ticket),
foreignkey(tr_num)referencestrain_num(tr_num),
foreignkey(d_time)referencestrain_num(d_time)
)
七、功能代码
1触发器
usetrain
go
--车票销售时不能超员,并自动修改剩余的座位数
createtriggertri_ticket
onticketforinsert
asbegin
declare@tr_numchar(5),--记录插入的车次
@d_timechar(12),--该车次的发车时间
@seat_sumint,--记录该车次的总座位数
@sell_sumint--记录该车次总的售票数
select@tr_num=tr_numfrominserted
select@d_time=d_timefrominserted
select@seat_sum=seat_sumfromtrain_num
select@sell_sum=count(*)fromticketwheretr_num=@tr_numandd_time=@d_time
if@sell_sum>@seat_sum
rollbacktransaction
updateremainsetre_ticket=re_ticket-1
wheretr_num=@tr_numandd_time=@d_time
end
go
、
]--退票时自动修改相应车次的剩余座位数
createtriggertri_return_ticket
onreturn_ticketforinsert
asbegin
declare@ticket_numchar(12),
@tr_numchar(5),
@d_timechar(12)
select@ticket_num=ticket_numfrominserted
select@tr_num=tr_num,@d_time=d_time
fromticket
whereticket_num=@ticket_num
updateremainsetre_ticket=re_ticket+1
wheretr_num=@tr_numandd_time=@d_time
end
2、存储过程
--指定车次指定发车时间的车票销售情况
usetrain
ifobject_id('pro_selled','p')isnotnull
dropprocedurepro_selled
go
createprocedurepro_selled
@tr_num_inchar(5),
@d_time_inchar(12),
@sum_ticketintoutput
asbegin
selectcount(ticket_num)
fromticket
wheretr_num=@tr_num_inandd_time=@d_time_in
end
go
--指定日期各业务员车票的销售收入
usetrain
ifobject_id('pro_income','p')isnotnull
dropprocedurepro_income
go
createprocedurepro_income
@sell_timechar(12),
@job_namechar(8)output,
@moneyintoutput
asbegin
selectjob_name,sum(price)
fromseller,sell_ticket,ticket
whereseller.job_num=sell_ticket.job_numand
sell_ticket.ticket_num=ticket.ticket_numand
sell_time=@sell_time
groupbyjob_name
end
go
八、数据库备份与恢复
usetrain
go
backupdatabasetrain
todisk='G:
\数据库备份\fullbackup_train'
withinit
go
usemaster
go
restoredatabasetrain
fromdisk='G:
\数据库备份\fullbackup_train'
withreplace
go