《数据库火车票销售系统(共29页).doc》由会员分享,可在线阅读,更多相关《数据库火车票销售系统(共29页).doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上长 沙 学 院课程设计说明书题目火车票预定管理系统系(部)数学与计算机科学系专业(班级) 姓名 学号 指导教师 起止日期2016.05.1605.27专心-专注-专业课程设计任务书课程名称:数据库系统原理课程设计题目:火车票预订管理系统1、某铁路局火车票预订管理系统需要如下信息:车次信息:车次编号、出发地、目的地、出发时间、到站时间、火车类型、里程数,座位数等。车票信息:座位号、价格、当前预售状态、座位类型等。客户:姓名、联系电话、身份证号码等。业务员:姓名、工号。其业务规则描述如下:一个客户可以预订(退订)多张火车票,但一张火车票只能被一个客户预订(退订);一个业务
2、员能销售多张车票,但一张车票只被一个业务员销售。一辆列车包含多张车票,但一张车票只属于一辆列车。2、系统功能的基本要求:按照一定条件查询、统计符合条件的火车、车票、客户信息等。例如火车车次查询、时刻表查询、剩余座位数、同一路线可选火车信息、客户购买历史等,能够在车票售出时更新可用火车票数,模拟完成火车票订票、退订业务。各阶段具体要求:1、需求分析阶段l 定义数据项的含义和取值l 定义目标系统的数据流2、概念结构设计阶段l 画出实体模型E-R图3、逻辑结构设计阶段l 将实体模型转化为关系模型l 给出每个关系的主关键字和函数依赖集l 分析你所设计的关系数据库模式是否属于3NF4、物理设计阶段l 确
3、定所有字段的名称、类型、宽度、小数位数及完整性约束 l 确定数据库及表的名称及其组成 l 确定索引文件和索引关键字5、数据库安全及维护设计阶段l 设计一个适合的数据库安全策略(用户身份认证、访问权限、视图)l 为了实现复杂的数据完整性约束,设计适当的触发器l 设计一个适合的数据库备份策略6、实施阶段l 要求所有操作必须在查询分析器中用SQL语句或系统存储过程完成。l 对于学有余力的同学,可以使用嵌入式SQL语句结合高级语言开发完成。设计工作量:(1)软件设计:完成问题陈述中所提到的所有需求功能。(2)论文:要求撰写不少于3000个文字的电子文档,详细说明各阶段具体要求。工作计划:安排两周时间进
4、行课程设计,软件开发步骤如下,第一周完成14,第二周完成58,论文同步进行;1)选定题目2)需求分析3)概念结构设计4)逻辑结构设计5)物理设计6)数据库安全及维护设计7)数据库上机实现8)答辩计划时间指导老师班级1314周潘怡、卓琳13软件1班1314周潘怡、卓琳13软件2班1314周刘欣、黄彩霞13软件3班1314周刘欣、黄彩霞13软件4班1314周杨刚、刘钢钦13软件5班1314周杨刚、刘钢钦 13软件6班注意事项n 提交电子文档 长沙学院课程设计任务书(每学生1份) 长沙学院课程设计论文(每学生1份) 长沙学院课程设计鉴定表(每学生1份)指导教师签名: 日期: 教研室主任签名: 日期:
5、系主任签名: 日期:长沙学院课程设计鉴定表姓名 学号 专业软件工程班级设计题目火车票预订管理系统指导教师指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;目 录一、引言1.1 编写目的随着时代的发展,计算机软件和系统的成熟,火车票的正当管理成为一个影响铁路部门正常运营的因素之一,而建立火车票订票管理系统是一个很好的解决办法。作为计算机应用的一部分,使用计算机对火车票信息进行管理,具有手工管理所无法比拟的优点,例如检索迅速
6、、查找方便、可靠性高、存储量大、保密性好等,这些优点能够极大的提高火车票信息管理的效率,也正体现了火车票的科学化正规化管理现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库技术科学的保存大量的数据,以便能更好的利用这些数据资源。本论文就是通过SQL的整体设计把数据库与应用程序相连接,做成一个火车票的订票管理系统,使得火车票管理员能够有效的管理车次信息、旅客信息、退票信息等。同时用户可以通过查询到相关的火车票信息,选择是否适合自己,也可以在网上直接订票、退票,省时省力 。1.2 参考资料资料名称作者文件编号、版本数据库系统概论王珊、萨师煊2006年5月第4版现代软件工程孙涌2003
7、年8月第1-246版 精通SQL server 2000数据库管理与开发于松涛2003年10月 二、 需求规约2.1 业务描述该阶段通过对系统目标的初步调研和分析,提出可行性方案并进行论证。我们在这里主要从技术可行性、经济可行性和操作可行性三方面进行分析。2.1.1经济可行性本系统其他应用软件、硬件系统也易于获得.因此,开发成本较低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。2.1.2技术可行性开发工具:VS2005 数据库环境:SQL Server 2008系统环境:Microsoft Window
8、s 2000或以上版本。系统实现依靠相对熟悉的c语言和SQL Server2008数据库系统,其基本操作实质还是对数据库进行添加、删除、查找等操作。2.1.3操作可行性系统采用菜单式,实现用户与数据库的交互,界面简洁友好,操作方便。2.1.4 业务流程图经过可行性分析和初步需求调查,抽象出该系统业务流程图,结合该实例具体情况,给出旅客信息、订票信息和取票通知的具体需求。去火车站购票售票处核查相关信息去售票处购票打印火车票确认列车车次检查个人身份图2.1 旅客购票流程图 调查用户需求 售票处需求l 功能:旅客持个人证件去火车站购买火车票。希望能通过旅客姓名查到该旅客的列车车次并记录旅客基本信息。
9、l 统计功能:u 按火车票统计买票人数u 按姓名统计火车票数旅客购票需求l 交费功能:u 交费u 退费 取票需求l 通知功能:u 通知旅客取票l 统计功能:u 统计通过验证的人数u 统计可以取票的人u 统计未通过验证的人数l 查询功能:u 购票旅客查询 购票旅客姓名 购票旅客身份证号 购票旅客订单号 列车车次信息需求l 查询功能:u 车次u 始发站u 终点站u 始发时间2.1.5系统框架在调查完了用户需求之后,就要开始分析用户需求。在此,我们们采用自顶向下的结构化分析方法(SA方法)。首先,定义全局概念结构的框架,如图2.2所示。火车票订票系统旅客信息系统退票信息系统取票通知系统列车车次信息系
10、统图2.2火车票预定系统总框架图各子系统需要进一步细化。旅客信息系统为例进一步细化,如图2.3所示。旅客信息系统查询旅客信息统计人数图2.3旅客信息系统细化以其中的查询旅客信息功能为例进一步细化,如图2.4所示。查询旅客信息旅客订单号身份证号旅客电话号旅客姓名图2.4查询旅客信息功能列车车次信息系统列车车次号始发时间终点站始发站图2.5列车车次信息系统细化 取票通知系统火车票信息系统旅客信息系统图2.6取票通知系统细化 旅客信息系统取票时间旅客姓名图2.7旅客信息系统能查询到的内容 火车票信息系统火车票类型座位号列车车次图2.8火车票信息系统能查询到的内容退票信息系统订单号身份证号旅客电话号码
11、旅客姓名图2.9退票信息系统细化将所有子系统全部细化。将所有用户需求分析完毕之后,就要开始构造数据字典了。经分析之后,本系统要用到五个基本表:退票信息表,旅客信息表,列车车次信息表,取票通知信息系统,列车座位信息表。数据结构定义如表2.1所示。表2.1 数据结构定义数据结构名含义说明组成退票信息定义了退票旅客的有关信息旅客姓名,身份证号,订单号,电话号旅客定义了旅客有关信息旅客姓名,身份证号,性别,工作单位,电话号列车车次信息表定义了车次的有关信息车次号,始发地,目的地,始发时间取票通知单定义了取票通知相关有关信息旅客姓名,取票时间,列车车次,座位号,火车票类型列车座位信息表定义了列车座位有关
12、信息列车号,座位号,座位信息,火车票类型2.2 需求分析需求分析是软件设计的一个重要的环节。本阶段对订票系统的应用情况作全面调查,以确定系统目标,并对系统所需要的基础数据以及数据处理要求进行分析,从而确定用户的需求。用户对系统的需求我们从以下几方面进行分析。2.2.1功能需求本网上订票系统应该具备如下功能:1.查询分为对车次信息的查询和客户对已订车票信息的查询。要求:1)对车次的查询,可以按照发车车次进行查询; 2)车次信息包括:车号、出发地、目的地、发车日期、开出时刻、票价。3)座位类型设定。2.订票通过查询系统,客户根据自己的需求找到满意的车次,再输入个人信息后直接通过网上订票确定已预订选
13、中的车票。要求:订票记录应包括:会员名、车号、发车日期、订购日期、订购票数、总价。3.退票可退票,通过查询系统,客户可以自己的名字找到自己的订票信息,通过退票模块退去已购车票。2.2.2数据需求信息需求,即在系统中需要处理哪些数据。根据对火车站网上订票系统的分析,本系统的信息需求如表2-1所示。表2-1信息输入输出 信息输入信息处理信息输出用户输入所需车次检索系统数据库符合用户需求的车次及相关信息用户输入个人信息及所需订购的车票信息更新系统中的订票信息,将新信息存入系统数据库操作反馈(如订票成功)用户输入自己的名字、身份证号;或交易的订单号检索系统数据库符合用户需求的订票信息用户输入自己的名字
14、检索系统数据库以得到订票记录,删除用户请求的订票记录,更新系统数据库操作反馈(如退票成功等)2.2.3性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,本系统应该满足以下的性能需求。1.准确性和及时性系统处理的准确性和及时性是系统的必要性能。系统应能及时而且准确的根据用户权限及所输入的信息做出响应。由于本系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,而车票的数量和时间又影响用户的决策活动,其准确性和及时性很大程度上决定了系统的成败。在系统开发过程中,必须采用一定的方法保证系统的准确性和及时性。2.易用性本系统是直接面对用户的,而用户往往对计算机并不是非常
15、熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面,从而保证系统的易用性。3.安全性网上订票系统中涉及到的数据是客运公司相当重要的信息,系统要保证用户的权限,对于车次等信息用户只享有查询服务,不得更改;系统还要提供方便的手段供系统维护人员进行数据备份、日常安全管理、以及系统意外崩溃时数据的恢复等工作。同时系统还要保证对数据库进行及时更新,保证数据一致性。三、 数据库环境说明数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明火车票订票管理SQL Server2008Window 7SQL Server存
16、放位置,绝对路径/相对路径D:/Program完整的车票管理流程四、数据库的命名规则4.1 数据库对象命名规则数据库对象命名规则备注表Tbl_功能描述字符串例如:Checi车次信息表视图View_功能描述字符串例如:Checi车次信息视图存储过程Procedure_功能描述字符串例如:dbo.kh存储过程 触发器Insert_功能描述字符串例如:Insert_Or_Update_Sal_1更改库数据库4.2 数据项编码规则 数据项命名规则数据类型长度范围备注C_ci(G/K/T/D)+号码varchar10位车次号T_seat1-800int10位座位号C_goTime年月日+时:分:秒var
17、char10位出发时间C_fanhuiadd地名varchar10位目的地K_name名字varchar10位客户姓名Y_name名字varchar10位业务员姓名K_id数字varchar16位身份证号码Y_tel数字varchar11位电话号码T_price数字float10位车票价格T_type一等座/二等座varchar10位座位类型五、逻辑设计(1) 关系模式: 车次信息(车次编号、出发地、目的地、出发时间、到站时间、火车类型、里程数,座位数) 车票信息(座位号、价格、当前预售状态、座位类型) 客户(姓名、联系电话、身份证号码) 业务员(姓名、工号)(2) 关系图: 售票当前销售状态
18、包含姓名业务员工号价格客户车票信息座位类型座位号里程数火车类型座位数到站时间出发时间出发地车次编号车次信息电话身份证()姓名 主键 主键1订票/退票主键n1 nn1 主键 图5.1系统总体结构E-R图图5.2逻辑关系图六、物理设计6.1 表汇总表名功能说明车次表存储车次的相关信息及其数据类型以及相关的约束车票信息表存储车票的相关信息及其数据类型以及相关的约束客户表存储客户的相关信息及其数据类型以及相关的约束业务员表存储业务员的相关信息及其数据类型以及相关的约束6.2 表的基本信息车次信息表表名车次信息表数据库用户主键车次号其他排序字段无索引字段车次号序号字段名称数据类型(精度范围)允许为空Y/
19、N唯一Y/N区别度默认值约束条件/说明1t_noVARCHAR(10)NY高车次号/主键2t_departureVARCHAR(10)NN中出发地3t_destinationVARCHAR(10)NN中目的地4t_goTimeDATETIMENN中出发时间5t_returnTimeDATETIMENN中到站时间6t_trainTypeVARCHAR(10)YN低火车类型7mileageNumberINTNN低里程数8seatNumberINTNN低座位数sql脚本CREATE TABLE train_number(t_no VARCHAR(10) PRIMARY KEY, -车次编号(主键)t
20、_departure VARCHAR(10) NOT NULL, -出发地t_destination VARCHAR(10) NOT NULL, -目的地t_goTime DATETIME NOT NULL, -出发时间t_returnTime DATETIME NOT NULL, -到站时间t_trainType VARCHAR(10) CHECK(t_trainType IN(高铁,普快,特快,动车), -火车类型t_mileageNumber INT NOT NULL, -里程数t_seatNumber INT NOT NULL -座位数)备注车票信息表表名车票信息表数据库用户主键车次编
21、号其他排序字段无索引字段车次编号序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1t_noVARCHAR(10)NY高车次编号/主键2ti_seatNoVARCHAR(10)NN中座位号3ti_seatPriceFLOAT(2)NN中车票价格4ti_saleStatusVARCHAR(10)NN中销售状态5ti_seatTypeVARCHAR(10)NN中座位类型sql脚本CREATE TABLE train_ticket(t_no VARCHAR(10), -车次编号ti_seatNo VARCHAR(10), -座位号ti_seatPrice FLOAT(
22、2) NOT NULL, -车票价格ti_saleStatus VARCHAR(10) CHECK(ti_saleStatus IN(待售,已售), -销售状态ti_seatType VARCHAR(10) CHECK(ti_seatType IN(一等座,二等座,三等座), -座位类型PRIMARY KEY(ti_seatNo,t_no), -主键约束FOREIGN KEY(t_no) REFERENCES train_number(t_no) -外键约束备注客户信息表表名客户信息表数据库用户主键身份证号码其他排序字段无索引字段身份证号码序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/
23、N区别度默认值约束条件/说明1u_IDVARCHAR(20)NY高身份证号码/主键2u_nameVARCHAR(10)NN中姓名3u_telephoneVARCHAR(10)NN中电话号码sql脚本CREATE TABLE Users(u_ID VARCHAR(20) PRIMARY KEY, -身份证号码u_name VARCHAR(10) NOT NULL, -姓名u_telphone VARCHAR(10) NOT NULL, -电话号码t_no VARCHAR(10) NOT NULL, -车次号ti_seatNo VARCHAR(10) NOT NULL, -座位号FOREIGN K
24、EY(ti_seatNo,t_no) REFERENCES train_ticket(ti_seatNo,t_no) -外键约束-FOREIGN KEY() REFERENCES train_ticket() -外键约束备注业务员信息表表名业务员信息表数据库用户主键编号其他排序字段无索引字段编号序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1s_noVARCHAR(20)NY高编号/主键2s_nameVARCHAR(20)NN中业务员姓名sql脚本CREATE TABLE saleMan(s_no VARCHAR(20) PRIMARY KEY, -主键约束
25、s_name VARCHAR(20) NOT NULL, -业务员姓名ti_seatNo VARCHAR(10) NOT NULL, -座位号t_no VARCHAR(10) NOT NULL, -座位号FOREIGN KEY(ti_seatNo,t_no) REFERENCES train_ticket(ti_seatNo,t_no) -外键约束)备注6.3 视图的设计图6.3.1 车票信息视图图6.3.1 售票信息视图6.4存储过程、函数及触发器的设计触发器1:修正票价和票价对应的座位类型insert_or_upadte_sal_2USE 火车票GO/* Object: Trigger d
26、bo.insert_or_upadte_sal_2 Script Date: 05/28/2016 06:22:30 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER trigger dbo.insert_or_upadte_sal_2on dbo.Che_ticketfor insertasbegin DECLARE ti_seatNo VARCHAR(10),ti_seatPrice FLOAT(2),ti_seatType VARCHAR(10),t_no varchar(10)SELECT ti_seatNo=T_seat,ti_
27、seatPrice=T_price,ti_seatType=T_type,t_no=C_ci FROM inserted IF(ti_seatNo LIKE A%) UPDATE Che_ticket SET T_price=200 IF(ti_seatNo LIKE A%) UPDATE Che_ticket SET T_price=一等座 IF(ti_seatNo LIKE B%) UPDATE Che_ticket SET T_price=100 IF(ti_seatNo LIKE B%) UPDATE Che_ticket SET T_price=二等座 IF(ti_seatNo LI
28、KE A% AND t_no LIKE G-%) UPDATE Che_ticket SET T_price=900 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE B% AND t_no LIKE G-%) UPDATE Che_ticket SET T_price=600 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE C% AND t_no LIKE G-%) UPDATE Che_ticket SET T_price=300 WHERE ti_seatNo=T_s
29、eat AND t_no=C_ci IF(ti_seatNo LIKE A% AND t_no LIKE K-%) -K是普快 UPDATE Che_ticket SET T_price=400 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE B% AND t_no LIKE K-%) UPDATE Che_ticket SET T_price=200 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE C% AND t_no LIKE K-%) UPDATE Che_tic
30、ket SET T_price=100 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE A% AND t_no LIKE T-%) UPDATE Che_ticket SET T_price=600 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE B% AND t_no LIKE T-%) UPDATE Che_ticket SET T_price=400 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE C%
31、AND t_no LIKE T-%) UPDATE Che_ticket SET T_price=200 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE A% AND t_no LIKE D-%) UPDATE Che_ticket SET T_price=900 WHERE ti_seatNo=T_seat AND t_no=C_ci IF(ti_seatNo LIKE B% AND t_no LIKE D-%) UPDATE Che_ticket SET T_price=600 WHERE ti_seatNo=T_seat AN
32、D t_no=C_ci IF(ti_seatNo LIKE C% AND t_no LIKE D-%) UPDATE Che_ticket SET T_price=300 WHERE ti_seatNo=T_seat AND t_no=C_ci end 图触发器2:火车类型和对应的座位数剩余Insert_Or_Update_Sal_1USE 火车票GO/* Object: Trigger dbo.Insert_Or_Update_Sal_1 Script Date: 05/28/2016 07:11:02 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER O
33、NGOALTER TRIGGER dbo.Insert_Or_Update_Sal_1 ON dbo.Checi FOR INSERTASDECLARE t_no VARCHAR(10),t_seatNumber INT,t_trainType VARCHAR(10)SELECT t_no=C_ci,t_seatNumber=C_seatNumber,t_trainType=C_type FROM inserted-第一部分 IF(t_no LIKE G-%) UPDATE Checi SET C_type=高铁 ,C_seatNumber=200WHERE t_no=C_ci IF(t_no
34、 LIKE T-%) UPDATE Checi SET C_type=特快 ,C_seatNumber=200 WHERE t_no=C_ci IF(t_no LIKE D-%) UPDATE Checi SET C_type=动车 ,C_seatNumber=300 WHERE t_no=C_ci IF(t_no LIKE K-%) UPDATE Checi SET C_type=普快 ,C_seatNumber=400 WHERE t_no=C_ci存储过程1:客户买票USE 火车票GO/* Object: StoredProcedure dbo.kh Script Date: 05/28
35、/2016 07:12:03 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROC dbo.kh K_id VARCHAR(20), K_name VARCHAR(10), K_tel VARCHAR(10), C_ci VARCHAR(10), T_seat VARCHAR(10) AS IF C_ci IS NULL BEGIN ROLLBACK; RETURN; END IF T_seat IS NULL BEGIN ROLLBACK; RETURN; END IF K_id IS NULL BEGIN ROLLBACK; R
36、ETURN; END IF K_name IS NULL BEGIN ROLLBACK; RETURN; END IF K_tel IS NULL BEGIN ROLLBACK; RETURN; END ELSE BEGIN UPDATE Che_ticket SET T_sale=已售 WHERE C_ci=C_ci AND T_seat=T_seat UPDATE Checi SET C_seatNumber=C_seatNumber-1 WHERE C_ci=C_ci INSERT INTO Kehu(K_id,K_name,K_tel,T_seat,C_ci) VALUES(K_id,
37、K_name,K_tel,T_seat,C_ci) DELETE FROM Yewuyuan WHERE C_ci=C_ci AND T_seat=T_seat PRINT 买票成功! END 图6.4.1存储过程买票的实现存储过程2:业务员退票USE 火车票GO/* Object: StoredProcedure dbo.ywy Script Date: 05/28/2016 07:33:15 */SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROC dbo.ywy y_id varchar(10), y_name varchar(10), C_ci varchar(10), T_seat varchar(10), Y_tel varchar(10)as if y_name is null begin rollback; return; end if c_ci is null begin rollback; return; end if y_id is null begin
限制150内