1、火车站票务管理数据库设计说明书火车站票务管理系统数据库设计说明书拟制人 李毅 丁黎 审核人_ 批准人_一、问题描述车票销售时不能超员, 并自动修改剩余的座位数;创建存储过程统计指定车次指定发车时间的车票销售情况; 创建存储过程统计指定日期各业务员车票的销售收入; 退票时自动修改相应车次的剩余座位数 ;创建表间关系。 车次管理:记录各车次及发车时间,实现车次的调度。 价格管理:根据里程记费到各站的价格。 业务员管理:记录各业务员的信息。 售票管理:销售火车票,记录售票信息。 退票管理:实现退票,记录退票信息二、需求分析现今世界的发展速度极快,数据量不断增大,人工的管理已经不能精确的管理,或者没有
2、那么多的时间整理,时常可能出现大量的错误,导致数据不一致,数据丢失和混乱现象。计算机在科技的不断创新和发展中产生并不断更新,存储量和计算次数极大,在火车票销售和火车站的一些管理中,计算机便在这里能起到极大的作用,可以帮助人们实现大量的各种数据的管理,有效的减轻人们的工作量,提高管理效率和精确度,防止数据丢失和错误等,便利了我们的生活节约了大量时间和精力。在此,利用计算机建立火车票务管理系统显得由为重要。三、概念模型设计1火车站票务管理系统我设计了九张表来存储所有有用信息: 管理员表(包含属性:工号,姓名,密码,联系电话) 车次表(包含属性:车次号,发车时间,座位数) 业务员表(包含属性:工号,
3、姓名,密码,联系电话) 火车票表(包含属性:票号,车次号,发车时间,座位号,车站号,价格) 乘客表(包含属性:身份证号,姓名,密码,联系电话) 车站表(包含属性:车站号,站名) 售票表(包含属性:工号,票号,售票时间) 退票表(包含属性:身份证号,票号,退票时间) 售票情况(包含属性:车次,发车时间,剩余票数)2表间对应的局部和整体ER图如下: 局部ER 图局部ER 图3、数据流图四、逻辑结构设计1、关系模式 注(关系的码用下横线标出)实体: 管理员(工号, 姓名, 密码, 联系电话)车次(车次号, 发车时间, 座位数)业务员(工号, 姓名, 密码, 联系电话)火车票(票号, 车次号, 发车时
4、间, 座位号,价格)乘客(身份证号, 姓名, 密码, 联系方式)车站(车站号,站名)联系:售票(工号, 票号, 售票时间)退票(身份证号, 票号, 退票时间)售票情况(车次, 发车时间, 剩余票数)2、所有表之间的关系图如下:五 物理结构设计各表名称及所包含的属性,数据类型和长度,主外键关系如下几张表所示:管理员表(admin)列名说明类型长度允许空主/外键job_num工号char5主Job_name姓名char8password密码char6tele_num联系电话char11车次表(train_num)列名说明类型长度允许空主/外键tr_num车次号char5主d_time发车时间cha
5、r12主seat_sum座位数int业务员表(seller)列名说明类型长度允许空主/外键job_num工号char10主Job_name姓名char8password密码char6tele_num联系电话char11火车票表(ticket)列名说明类型长度允许空主/外键ticket_num票号char12主tr_num车次号char5外d_time发车时间char12外seat_num座位号char5sta_num车站号char5price价格int乘客表(passenger)列名说名类型长度允许空主/外键id_num身份证号char18主p_name 姓名char8password密码ch
6、ar6tele_num联系电话char11车站表(station)列名说名类型长度允许空主/外键sta_num车站号char5主sta_name站名char10售票表(sell_ticket)列名说名类型长度允许空主/外键job_num工号char10主、外ticket_num票号char12主、外sell_time售票时间char12退票表(return_ticket)列名说名类型长度允许空主/外键id_num身份证号char18主ticket_num票号char12外r_time退票时间char12售票情况表I(remain)列名说名类型长度允许空主/外键tr_num车次char5主、外d
7、_time发车时间char12主、外re_ticket剩余票数int12六、数据库实施/*数据库表*/create table train_num( tr_num char(5) not null, d_time char(12) not null, seat_sum int not null, primary key(tr_num,d_time)create table seller( job_num char(10) not null, job_name char(8) not null, password char(6) not null, tele_num char(11) not n
8、ull, primary key(job_num)create table ticket( ticket_num char(12) not null, tr_num char(5) not null, d_time char(12) not null, seat_num char(5) not null, sta_num char(5) not null, price int not null, primary key(ticket_num), foreign key(tr_num) references train_num(tr_num ), foreign key(d_time) refe
9、rences train_num(d_time )create table passenger( id_num char(18) not null, p_name char(8) not null, password char(6) not null, tele_num char(11) not null, primary key(id_num)create table station( sta_num char(5) not null, sta_name char(12) not null, primary key(sta_num)create table admin( job_num ch
10、ar(10) not null, job_name char(8) not null, password char(6) not null, tele_num char(11) not null, primary key(job_num)create table sell_ticket( job_num char(10) not null, ticket_num char(12) not null, sell_time char(12) not null, primary key(job_num, ticket_num), foreign key(job_num) references sel
11、ler(job_num ), foreign key(ticket_num) references ticket(ticket_num)create table return_ticket( id_num char(18) not null, ticket_num char(12) not null, r_time char(12) not null, primary key(id_num,ticket_num), foreign key(id_num) references passenger(id_num ), foreign key(ticket_num) references tick
12、et(ticket_num )create table remain( tr_num char(5) not null, d_time char(12) not null, re_ticket int not null, primary key(tr_num,d_time,re_ticket), foreign key(tr_num) references train_num(tr_num ), foreign key(d_time) references train_num(d_time )七、功能代码1触发器use traingo-车票销售时不能超员,并自动修改剩余的座位数create t
13、rigger tri_ticketon ticket for insertas begin declare tr_num char(5), -记录插入的车次 d_time char(12), -该车次的发车时间 seat_sum int, -记录该车次的总座位数 sell_sum int -记录该车次总的售票数 select tr_num=tr_num from inserted select d_time=d_time from inserted select seat_sum=seat_sum from train_num select sell_sum=count(*)from tick
14、et where tr_num=tr_num and d_time=d_time if sell_sumseat_sum rollback transaction update remain set re_ticket=re_ticket-1 where tr_num=tr_num and d_time=d_timeendgo、-退票时自动修改相应车次的剩余座位数create trigger tri_return_ticket on return_ticket for insertas begin declare ticket_num char(12), tr_num char(5), d_t
15、ime char(12) select ticket_num=ticket_num from inserted select tr_num=tr_num ,d_time=d_time from ticket where ticket_num=ticket_num update remain set re_ticket=re_ticket+1 where tr_num=tr_num and d_time=d_timeend2、存储过程-指定车次指定发车时间的车票销售情况use trainif object_id(pro_selled,p) is not nulldrop procedure pr
16、o_selledgocreate procedure pro_selled tr_num_in char(5), d_time_in char(12), sum_ticket int output as begin select count(ticket_num) from ticket where tr_num=tr_num_in and d_time=d_time_inendgo-指定日期各业务员车票的销售收入use trainif object_id(pro_income,p) is not nulldrop procedure pro_incomegocreate procedure
17、pro_income sell_time char(12), job_name char(8) output, money int outputas begin select job_name,sum(price) from seller,sell_ticket,ticket where seller.job_num=sell_ticket.job_num and sell_ticket.ticket_num=ticket.ticket_num and sell_time=sell_time group by job_nameendgo八、数据库备份与恢复use traingobackup database train to disk=G:数据库备份fullbackup_train with initgouse mastergorestore database train from disk=G:数据库备份fullbackup_trainwith replacego
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1