logo资料库

基于Javaswing&SQL_Server的火车票实名销售系统.doc

第1页 / 共111页
第2页 / 共111页
第3页 / 共111页
第4页 / 共111页
第5页 / 共111页
第6页 / 共111页
第7页 / 共111页
第8页 / 共111页
资料共111页,剩余部分请下载后查看
关系模式:
相关信息说明:
三、逻辑结构设计
(1)模式设计:
关系模式:
(2)子模式设计:
四、数据库的物理设计
五、数据库设计实现及运行
(1)数据库的创建
(2)数据表的创建
(3)视图的创建
(4)存储过程的定义实现
(5)触发器的定义实现
(6)自行设计各模块中所涉及的操作语句
六、系统详细设计及实现
七、总结
八、附录:源程序代码
1.实体类:
2.数据库连接及Dao层:
3.界面实现:
目录 一、需求分析 ................................................................................... 错误!未定义书签。 (1)问题描述:............................................................................错误!未定义书签。 (2)系统功能描述:....................................................................错误!未定义书签。 (3) 安全性与完整性描述:......................................................错误!未定义书签。 二、概念结构设计........................................................................... 错误!未定义书签。 关系模式:............................................................................................................ 1 相关信息说明:.................................................................................................... 1 三、逻辑结构设计....................................................................................................... 1 (1)模式设计:.................................................................................................. 1 (2)子模式设计:.............................................................................................. 3 四、数据库的物理设计............................................................................................... 4 五、数据库设计实现及运行....................................................................................... 4 (1)数据库的创建.............................................................................................. 4 (2)数据表的创建.............................................................................................. 4 (3)视图的创建.................................................................................................. 6 (4)存储过程的定义实现.................................................................................. 6 (5) 触发器的定义实现.................................................................................... 7 (6)自行设计各模块中所涉及的操作语句...................................................... 9 六、系统详细设计及实现......................................................................................... 13 七、 总结 ................................................................................................................... 48 八、附录:源程序代码............................................................................................. 49 1.实体类:.......................................................................................................... 49 2. 数据库连接及 Dao 层:................................................................................ 60 3. 界面实现:.................................................................................................... 68
关系模式: 车次信息(车次,类型,起点站,终点站,发车时间,到达时间,运行时间) 站点信息(站点序号,站点名称) 途径信息(车次,站点序号,到达时间,发车时间,里程,停留时间) 座位信息(车次,车厢号,等级,座位号) 车票信息(票号,车次,座位号,车厢号,发车日期,所处状态,票价) 车票购买信息(票号,身份证号,上车站,下车站,购买点,购买日期时间) 乘客信息:(身份证号,姓名,密码) 管理员信息(身份证号,密码) 相关信息说明: 车次信息:类型分为高铁、动车,发车时间需早于到达时间。 座位信息:等级分为一等座与二等座。 车票信息:票号中含车次、日期、座位号、车厢号,所以票号可以作为主键。 购买信息:购买点默认为网络购票,购买时间默认为当前日期。 三、逻辑结构设计 (1)模式设计: 关系模式: 车次信息(车次,类型,起点站,终点站,发车时间,到达时间,运行时间) 站点信息(站点序号,站点名称) 途径信息(车次,站点序号,到达时间,发车时间,里程,停留时间) 座位信息(车次,车厢号,等级,座位号) 车票信息(票号,车次,座位号,车厢号,发车日期,所处状态,票价) 车票购买信息(票号,身份证号,上车站,下车站,购买点,购买日期时间) 乘客信息:(身份证号,姓名,密码) 管理员信息(身份证号,密码) 注:下划线表示的属性为关系的主键。 1
列名称 tra_no tra_type start_station end_station start_time end_time runtime 表 1 车次信息表(train) 类型 长度 允许空值 缺省值 约束 ‘高铁’OR‘动车’ 20 20 20 20 nvarchar nvarchar nvarchar nvarchar time(7) time(7) 否 否 否 否 否 否 是 注:runtime 计算列规范(datediff(minute,[start_time],[end_time])) 主键 是 说明 车次 类型 始发站 终到站 始发时间 终到时间 运行时间 列名称 sta_no sta_name 列名称 tra_no sta_no sta_getime sta_startime sta_mile sta_time 表 2 站点信息表(station) 类型 长度 允许空值 缺省值 约束 主键 说明 nvarchar nvarchar 20 20 否 否 是 站点序号 站点名称 表 3 途径信息表(trastop) 类型 长度 允许空值 缺省值 20 20 nvarchar nvarchar time(7) time(7) int 否 否 是 是 否 是 约束 外键 外键 主键 是 说明 车次 是 站点序号 sta_mile>=0 始发站 终到站 始发时间 运行时间 注:sta_time 计算列规范(datediff(minute,[sta_getime],[sta_startime])) 表 4 座位信息表(tra_seat) 类型 长度 允许空值 缺省值 列名称 tra_no nvarchar 20 tra_carid int seatno seatype nvarchar nvarchar 20 20 否 否 否 否 约束 外键 主键 是 是 是 说明 车次 车厢号 座位号 ‘一等座’OR‘二等座’ 座位类型 表 5 车票信息表(ticket) 类型 长度 允许空值 缺省值 约束 列名称 tick_id tra_no seatno tra_carid godate 20 20 20 nvarchar nvarchar nvarchar int date tick_condi nvarchar 20 price float 外键 ‘空余’ ‘空余’OR‘已售’ 否 否 否 否 否 否 否 2 主键 是 说明 票号 车次 座位号 车厢号 出发日期 所处状态 票价
列名称 tick_id userid onStop offStop nvarchar char nvarchar nvarchar purchaseDate date placeOfPurchase varchar 表 6 车票购买信息表(purchaseInfo) 类型 长度 允许空值 缺省值 20 18 20 20 20 否 否 否 否 是 是 getdate() ‘网络 售票’ 约束 外键 外键 主键 是 说明 票号 是 身份证号 上车站 下车站 购买日期 购买点 列名称 userid 类型 char username nvarchar userpwd varchar 表 7 乘客信息表(userInfo) 长度 允许空值 缺省值 约束 主键 说明 18 20 20 否 否 否 前17位0-9, 是 身份证号 满足18位 姓名 密码 列名称 adminid 类型 char adminPwd varchar 表 8 管理员信息表(adminInfo) 长度 允许空值 缺省值 约束 主键 说明 18 20 否 否 前17位0-9, 是 身份证号 满足18位 密码 (2)子模式设计: 表 9 buyInfo(车票信息表与车票购买信息表联合视图) 列名称 tick_id userid tra_no seatno tra_carid onStop offStop godate price 类型 nvarchar(20) char(18) nvarchar(20) nvarchar(20) int nvarchar(20) nvarchar(20) date float placeOfPurchase varchar(20) purchaseDate date 说明 票号 乘客身份证号 车次 座位号 车厢号 上车站 下车站 发车日期 票价 购买点 购买日期 buyInfo 视图:用户查找自己订单信息与管理员查看指定车次购买信息时调用。使信息显示 3
较为全面。 四、数据库的物理设计 a.聚集索引:所有表中的主键均为聚集索引。 b.非聚集索引:在 train 列车信息表中根据 tra_no 创建非聚集索引: 创建语句: CREATE UNIQUE NONCLUSTERED INDEX trano_index ON train(tra_no); 五、数据库设计实现及运行 (1)数据库的创建 T-SQL 语句: create database Tiket_train (2)数据表的创建 T-SQL 语句: --列车信息 create table train ( tra_no nvarchar(20) primary key, tra_type nvarchar(20) check(tra_type like '高铁' or tra_type like '动车') not null, start_station nvarchar(20) not null, end_station nvarchar(20) not null, start_time time(7) not null, end_time time(7) not null, runtime as datediff(minute,start_time,end_time) ); --站点信息 create table station ( sta_no nvarchar(20) primary key, sta_name nvarchar(20) not null ); --途经 create table trastop ( tra_no nvarchar(20), sta_no nvarchar(20), sta_getime time(7) , sta_startime time(7), sta_mile int not null CHECK(sta_mile>=0), sta_time as datediff(minute,sta_getime,sta_startime), 4
primary key(tra_no,sta_no), foreign key(tra_no) references train(tra_no), foreign key(sta_no) references station(sta_no), ); --座位信息 create table tra_seat ( tra_no nvarchar(20), tra_carid int not null, seatno nvarchar(20) not null, seatype nvarchar(20) check(seatype='一等座' or seatype='二等座') not null, primary key(tra_no,tra_carid,seatno), foreign key(tra_no) references train(tra_no), ); --车票信息 create table ticket ( tick_id nvarchar(20) not null primary key, tra_no nvarchar(20), seatno char(10) not null, tra_carid int not null, godate date not null, tick_condi nvarchar(20) not null default '空余', check(tick_condi like '空余' or tick_condi like '已售'), price float not null, --票价 foreign key(tra_no) references train(tra_no), ); --用户信息 create table userInfo ( userid char(18) primary key check(userId like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][ 0-9]' or userId like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_ '), username nvarchar(20) not null, userpwd varchar(20) not null ); --车票购买信息 create table purchaseInfo ( tick_id nvarchar(20) foreign key references ticket(tick_id), 5
userid char(18) foreign key references userInfo(userid), onStop nvarchar(20) not null, --上车站 offStop nvarchar(20) not null, --下车站 purchaseDate date default getdate(), --购买日期 placeOfPurchase varchar(20) not null, --购买地点 primary key(tick_id,userid) ); --管理员信息 create table adminInfo( adminId char(18) primary key check(adminId like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][ 0-9]' or adminId like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_ '), ); adminPwd varchar(20) not null (3)视图的创建 T-SQL 语句: Create View buyInfo AS select p.tick_id,userid,tra_no,seatno,tra_carid,onStop,offStop,godate,price,placeOfPurchase,pu rchaseDate from purchaseInfo as p,ticket as t where p.tick_id=t.tick_id; (4)存储过程的定义实现 T-SQL 语句: 1.统计该日期该车次销售总金额: CREATE procedure price_sum @tra_no nvarchar(20),@godate date AS select sum(price) as '销售总金额' from ticket where tra_no=@tra_no and godate=@godate and tick_condi='已售' 2.统计该日期该车次空余座位量与已售座位量: CREATE procedure rem_ticket @tra_no nvarchar(20),@godate date as select tra_no as'列车编号' ,COUNT(case tick_condi when '空余' then 1 else null end) as' 座位空余量',COUNT(case tick_condi when '已售' then 1 else null end) as'座位已售量' from 6
ticket group by tra_no,godate having tra_no=@tra_no and godate=@godate; 3.将 1、2 存储过程整合存储过程: ALTER procedure price_rem @tra_no nvarchar(20),@godate date AS SET NOCOUNT ON --调用存储过程所需 declare @t table (列车编号 nvarchar(20),座位空余量 int,座位已售量 int) --列数根据检索 出的结果自己补全 insert into @t exec rem_ticket @tra_no,@godate declare @t1 table (销售总金额 float) --列数根据检索出的结果自己补全 insert into @t1 exec price_sum @tra_no,@godate select X.列车编号,X.座位空余量,X.座位已售量,Y.销售总金额 from @t as X,@t1 as Y 在 eclipse 中调用存储过程代码段(粘贴): String sql_call="{call price_rem(?,?)}"; CallableStatement cmd=con.prepareCall(sql_call); cmd.setString(1, tra_no); cmd.setString(2, date); 相当于 String sql ="execute price_rem '"+tra_no+"',"+"'"+date+"'"; 测试结果粘贴: 整合后,调用存储过程 3,进而存储过程 1 和 2 被调用,显示到一张表中。显示指定车次指 定日期的车票销售信息。 (5)触发器的定义实现 a.订票触发器 7
分享到:
收藏