1、数据库原理课程设计机票预订管理系统学 院: 计算机和信息科学学院专 业: 计算机科学和技术 班 级:计科1303姓名学号: XXX 13203403XX 指导老师: 高金华 职称 讲师完成时间:12月数据库原理课程设计11 系统概述32 数据库设计42.1 需求分析42.2 概念结构设计72.3 逻辑结构设计102.4 物理结构设计112.5 设计小结153 应用程序设计163.1 需求分析163.2 概要设计193.3 具体设计203.4 系统测试323.5 设计小结381 系统概述伴随全球进入信息化时代,航空企业为了适应该前越来越猛烈竞争,增强企业信息化程度,提升企业售票管理效率,就建立起
2、了对应航空预订票系统,成功实现提升了航空系统售票效率和管理水平。在计算机网络,数据库和优异开发平台上,利用现有软件,配置一定硬件,开发一个含有开放体系结构、易扩充、易维护、含有良好人机交互界面机票预定系统,实现航空企业机票销售自动化计算机系统,为企业决议层提供正确、精细、快速机票销售信息。依据可行性研究结果和用户要求,分析现有情况及问题。伴随社会发展不停地进步,人民消费水平不停地提升,致使民航事业不停壮大,乘坐民航消费者越来越多,所以机票预定也越显关键,航空企业为方便用户出行,需开发一个机票预定系统。依据预定机票用户信息,包含姓名、性别、身份证号码、出行时间、出行目标地等,系统经过查询航空企业
3、内航班数据服务器后,为旅客安排航班2 数据库设计2.1 需求分析2.1.1 数据流图数据库用 户用户信息录入机 票订票、改签、退票机票信息录入管理员更新航班信息航 班2.1.2 数据词典表2-1 plane飞机信息表表中列名数据类型可否为空说明flightNumvarchar2primary key飞机编号seatsnumbernot null座位数表2-2 flight航班信息表表中列名数据类型可否为空说明 flightNumvarchar2primary key航班编号planeNumvarchar2not null飞机编号startPointvarchar2not null 出发地det
4、inationvarchar2not null目标地startTimevarchar2not null起飞时间endTimevarchar2not null抵达时间表2-3 ticket 机票表表中列名数据类型可否为空说明 flightNumvarchar2primary key航班号gradevarchar2not null机舱等级seatNumvarchar2not null 座位号ticketPricenumbernot null机票价格presellvarchar2not null预售状态表2-4 passenger 旅客表表中列名数据类型可否为空说明 namevarchar2prim
5、ary key旅客名sexvarchar2not null旅客性别idNumvarchar2not null 身份证phoneNumvarchar2not null手机号passwordvarchar2not null密码表2-5 buy购置表表中列名数据类型可否为空说明 namevarchar2foreign key旅客名flightNumvarchar2foreign key航班号greadvarchar2not null 机舱等级seatNumvarchar2not null座位号paymoneynumbernot null机票价格buyNumvarchar2not null购置数量表2
6、-6 manager 管理员表表中列名数据类型可否为空说明 mnamevarchar2not null unique管理员编号mpwdvarchar2not null管理员姓名2.1.3 加工说明我们系统需要六个实体:(1)飞机实体实体名:plane角色:相关飞机信息属性:飞机编号,座位数主键:飞机编号(2)航班实体实体名:flight角色:航班信息属性:航班编号,出发地,目标地,起飞时间,抵达时间主键:航班编号(3)机票实体实体名:ticket角色:机票信息属性:航班号,机舱等级,座位号,机票价格,余票数主键:座位号(4)旅客实体实体名:passenger角色:旅客信息属性:旅客名,旅客性别
7、,身份证,手机号,密码主键:旅客名(5)机票购置实体实体名:buy角色:旅客购置机票后信息属性:旅客名,航班号,机舱等级,座位号,机票价格,购置数量(6)管理员实体实体名:manager角色:管理员信息属性:管理员名,密码2.2 概念结构设计2.2.1 E-R图依据需求分析抽象出信息结构,可得该系统E-R图。(1) 航班实体属性图,航班信息由航班号、飞机编号、出发地、目标地、起飞时间、抵达时间等属性组成图所表示。起飞时间目标地航班号抵达时间出发地飞机编号航班信息图(1)航班信息实体属性图(2) 飞机是实体属性图,飞机信息由飞机编号和座位数属性组成图所表示。座位数飞机编号飞机信息图(2)飞机信息
8、实体属性图(3) 管理员实体属性图,管理员信息由姓名和登录密码属性组成图所表示登陆密码姓名管理员信息图(3)管理员信息实体属性图(4) 机票实体属性图,机票信息有:航班号、机舱等级、座位号、票价、预售状态等属性图所表示。座位号机舱等级票价航班号预售状态机票信息图(4)机票信息实体属性图(5) 旅客属性图,旅客信息有:身份证号、姓名、性别、联络方法、密码等属性图所表示。性别联络方法姓名密码身份证号旅客信息图(5)旅客信息实体属性图(6) 订单属性图,订单信息有:姓名、航班号、座位号、机舱等级、金额、订单数等属性图所表示。座位号航班号机舱等级金额姓名订单数订单信息图(6)订单信息实体属性图依据属性
9、图和需求分析,可得到总E-R图,图所表示。图(7)总E-R图2.3 逻辑结构设计2.3.1 关系模式将总体概念结构E-R图转化成关系模型。(主键用下划线标出)飞机(飞机编号,座位数)航班(航班编号,飞机编号,出发地,目标地,起飞时间,抵达时间)管理员(管理员姓名,密码)机票(航班编号,机舱等级,座位号,票价,目前预售状态)旅客(身份证号 ,姓名,性别,密码,联络电话)购置(姓名,航班号,座位号,机舱等级,实付款,数量)2.4 物理结构设计依据总体结构图设计机票预定系统基础表结构,其对应标定义以下:表1 飞机信息汉字名称类型长度是否非空主关键字备注飞机编号varchar210Y座位数number
10、N总座位表2 航班信息汉字名称类型长度是否非空主关键字备注航班号varchar210Y飞机编号varchar210N机舱等级varchar210N起飞地varchar210N目标地varchar210N起飞时间varchar2年月日/时分抵达时间varchar2年月日/时分表3管理员信息汉字名称类型长度是否非空主关键字备注管理员姓名char10Y登陆密码char10N表4机票信息汉字名称类型长度是否非空主关键字备注航班号char10N机舱等级char10N座位号char10Y票价float(2)N 元目前预售状态char10NY/N 表5旅客信息汉字名称类型长度是否非空主关键字备注旅客姓名ch
11、ar10Y身份证号char10N性别char10N联络方法char10N密码char15N表4-6 购置信息汉字名称类型长度是否非空主关键字备注旅客姓名char10Y座位号char10N航班号float(1)机舱等级float(2)NN 实付款intNN购置数量char10N数据库实现:-飞机信息表 planecreate table plane(flightNum varchar2(10), -航班号seats number(8) not null -座位数);insert into plane values(航班1,5);insert into plane values(航班2,5);in
12、sert into plane values(航班3,5);insert into plane values(航班4,5);select *from plane;-航班表 flightcreate table flight(flightNum varchar2(10) primary key, -航班编号planeNum varchar2(10), -飞机编号startPoint varchar2(20) not null, -出发地 detination varchar2(10) not null, -目标地startTime varchar2(20) not null, -起飞时间endt
13、ime varchar2(20) not null -抵达时间);-插入数据到航班表(flight)中insert into flight values(航班1,长沙,武汉,-12-29 08:00,-12-29 10:00);insert into flight values(航班2,北京,台湾,-12-30 08:30,-12-29 11:00);insert into flight values(航班3,北京,上海,-01-01 11:30,-01-1 15:00);insert into flight values(航班4,广州,杭州,-01-10 09:00,-01-02 10:00
14、);select *from flight;-航班表flightNum作为飞机信息表flightNum外键alter table plane add constraint fk_fn foreign key(flightNum) references flight(flightNum);-创建机票表 ticketcreate table ticket(flightNum varchar2(10) not null , -航班号grade varchar2(10) not null, -机舱等级seatNum varchar2(10) primary key, -座位号ticketPrice f
15、loat(2) not null, -机票价格presell varchar2(10) not null -余票数);-插入数据到机票表(ticket)中insert into ticket values(航班1,头等舱,1-01,500,1);insert into ticket values(航班1,公务舱,1-02,400,1);insert into ticket values(航班1,公务舱,1-03,400,1);insert into ticket values(航班1,经济舱,1-04,300,1);insert into ticket values(航班1,经济舱,1-05,
16、300,1);insert into ticket values(航班2,头等舱,2-01,500,1);insert into ticket values(航班2,公务舱,2-02,400,1);insert into ticket values(航班2,公务舱,2-03,400,1);insert into ticket values(航班2,经济舱,2-04,300,1);insert into ticket values(航班2,经济舱,2-05,300,1);insert into ticket values(航班3,头等舱,3-01,500,1);insert into ticke
17、t values(航班3,公务舱,3-02,400,1);insert into ticket values(航班3,公务舱,3-03,400,1);insert into ticket values(航班3,经济舱,3-04,300,1);insert into ticket values(航班3,经济舱,3-05,300,1);insert into ticket values(航班4,头等舱,4-01,500,1);insert into ticket values(航班4,公务舱,4-02,400,1);insert into ticket values(航班4,公务舱,4-03,40
18、0,1);insert into ticket values(航班4,经济舱,4-04,300,1);insert into ticket values(航班4,经济舱,4-05,300,1);select *from ticket;-航班表flightNum作为机票表flightNum外键alter table ticket add constraint fk_tfn foreign key(flightNum) references flight(flightNum);-创建旅客表create table passenger(name varchar2(10) primary key, -
19、旅客名sex varchar2(10) not null, -旅客性别idNum varchar2(20) not null, -身份证phoneNum varchar2(15) not null, -手机号password varchar2(10) not null -密码);-插入数据到旅客表(passenger)中insert into passenger values(张三,男,121,zs);insert into passenger values(李四,男,122,ls);insert into passenger values(王五,女,123,ww);insert into p
20、assenger values(赵六,男,124,zl);select *from passenger;-创建购置表create table buy(name varchar2(20), -旅客名flightNum varchar2(10), -航班号gread varchar2(10) not null, -机舱等级seatNum varchar2(10) not null, -座位号paymoney float(2) not null, -机票价格buyNum number(8) not null -购置数量);-插入数据到购置表(buy)中insert into buy values(张
21、三,航班1,公务舱,1-02,400,1);insert into buy values(李四,航班2,经济舱,3-01,400,1);insert into buy values(王五,航班3,公务舱,3-05,270,1);insert into buy values(赵六,航班4,经济舱,4-04,270,1);select *from buy;-旅客表name作为购置表name外键alter table buy add constraint fk_bn foreign key(name) references passenger(name);-管理员表create table mana
22、ger(mname varchar2(20) not null, -管理员名mpwd varchar2(10) not null, -管理员登录密码yuliu varchar2(20);select * from manager;insert into manager values(李华,aaaaaa,null);select * from manager where mname = 李华 and mpwd= aaaaaa;2.5 设计小结经过这多个星期努力,此次课程设计最终完成了。经过这次课程设计,我对数据库这门课程有了更深入了解,数据库是一门实践性较强课程,同时我明白了理论和实际应用相结合
23、关键性,掌握并熟练利用SQL语句,提升了我综合利用所学知识能力。在此次课程设计和过程中,因为时间不是很长,再加上要求独立完成,系统需求分析上可能不是很全方面,程序中还存在很多缺,期望老师能给批评和指导。经过这次课程设计,我知识得到了很大,经验也愈加丰富。期望能在以后不停学习中和努力中,把程序做得愈加好。我们学习并应用了SQL语言,对数据库创建、修改、删除方法有了一定了解,经过导入表和删除表、更改表学会了对于表部分操作,为了建立一个关系数据库信息管理系统,必需得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护和系统评价通常过程,为毕业设计打下基础。这次课程设计,我愈加深入了解
24、到软件工程复杂性,和前期计划分析关键性。其实在Java这种面向对象程序设计中,我开发模型能力很是通常。所以一人之力也难以完成。还得多多感谢同学帮助,在以后学习中应该学习部分优异思想,并多加实践,从写程序和软件架构两个方面全部增强自己能力。最终,感谢指导老师给帮助。3 应用程序设计3.1 需求分析3.1.1 数据流图数据库用 户用户信息录入机 票订票、改签、退票机票信息录入管理员更新航班信息航 班3.1.2 数据词典表3-1 plane飞机信息表表中列名数据类型可否为空说明flightNumvarchar2primary key飞机编号seatsnumbernot null座位数表3-2 fli
25、ght航班信息表表中列名数据类型可否为空说明 flightNumvarchar2primary key航班编号planeNumvarchar2not null飞机编号startPointvarchar2not null 出发地detinationvarchar2not null目标地startTimevarchar2not null起飞时间endTimevarchar2not null抵达时间表3-3 ticket 机票表表中列名数据类型可否为空说明 flightNumvarchar2primary key航班号gradevarchar2not null机舱等级seatNumvarchar2n
26、ot null 座位号ticketPricenumbernot null机票价格presellvarchar2not null预售状态表3-4 passenger 旅客表表中列名数据类型可否为空说明 namevarchar2primary key旅客名sexvarchar2not null旅客性别idNumvarchar2not null 身份证phoneNumvarchar2not null手机号passwordvarchar2not null密码表3-5 buy购置表表中列名数据类型可否为空说明 namevarchar2foreign key旅客名flightNumvarchar2fore
27、ign key航班号greadvarchar2not null 机舱等级seatNumvarchar2not null座位号paymoneynumbernot null机票价格buyNumvarchar2not null购置数量表3-6 manager 管理员表表中列名数据类型可否为空说明 mnamevarchar2not null unique管理员编号mpwdvarchar2not null管理员姓名3.1.3 加工说明我们系统需要六个实体:(1)飞机实体实体名:plane角色:相关飞机信息属性:飞机编号,座位数主键:飞机编号(2)航班实体实体名:flight角色:航班信息属性:航班编号,
28、出发地,目标地,起飞时间,抵达时间主键:航班编号(3)机票实体实体名:ticket角色:机票信息属性:航班号,机舱等级,座位号,机票价格,余票数主键:座位号(4)旅客实体实体名:passenger角色:旅客信息属性:旅客名,旅客性别,身份证,手机号,密码主键:旅客名(5)机票购置实体实体名:buy角色:旅客购置机票后信息属性:旅客名,航班号,机舱等级,座位号,机票价格,购置数量(6)管理员实体实体名:manager角色:管理员信息属性:管理员名,密码3.2 概要设计3.2.1 功效模块图航班信息管理模块机票信息管理模块机票预订系统旅客信息管理模块订单信息管理模块3.3 具体设计3.3.1 关键
29、代码package util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/* * 建立数据库连接 * */public class DBUtil private static DBConfig dbConfig;static /实例化配制文件对象dbConfig = new DBConfig();try /加载数据库驱动Class.forName(dbConfig
30、.getValue(className); catch (ClassNotFoundException e) throw new RuntimeException(数据库加载驱动失败., e);/建立连接public static Connection getCon()Connection con = null;try /建立数据库连接con = DriverManager.getConnection(dbConfig.getValue(url), dbConfig.getValue(user), dbConfig.getValue(password); catch (SQLException
31、 e) throw new RuntimeException(数据库连接失败., e);return con;/关闭连接public static void close(Connection con, Statement st, ResultSet rs)if (rs != null)try rs.close(); catch (SQLException e) throw new RuntimeException(关闭查询结果集失败., e);if (st != null)try st.close(); catch (SQLException e) throw new RuntimeExcep
32、tion(关闭SQL实施工具失败失败., e);if (con != null)try con.close(); catch (SQLException e) throw new RuntimeException(关闭数据库连接失败., e);public static void main(String args) if (getCon() != null)System.out.println(数据库连接成功.);elseSystem.out.println(数据库连接失败.);package util;import java.sql.Connection;import java.sql.Pr
33、eparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class DBHelper private static Connection con;private static boolean isTransSuccess = true; /做事务控制public static Connection getCon()if (con =
34、 null)con = DBUtil.getCon();return con;/实施有参insert, update, delete语句public static void executeSql(String sql, List params)executeSql(sql, params, true);/实施带事务有参insert, update, delete语句/isAutoCommit为true表示结束事务, false表示事务过程中public static void executeSql(String sql, List params, boolean isAutoCommit)Co
35、nnection con = null;PreparedStatement ps = null;try if (isTransSuccess = false) /事务操作中, 只有有一个失败整个事务过程就失败throw new RuntimeException(事务失败);/con = getCon(); /取得连接con=DBUtil.getCon();/System.out.println(con);con.setAutoCommit(isAutoCommit); /不会自动提交.ps = con.prepareStatement(sql); /预处理SQL语句setParamValue(
36、ps, params);ps.executeUpdate(); catch (Exception e) isTransSuccess = false;if (isAutoCommit) /判定是不是,整个事务结束, 然后回滚事务isTransSuccess = true;try con.rollback();/操作回滚数据 catch (SQLException e1) throw new RuntimeException(数据回滚失败., e); throw new RuntimeException(sql + 数据操作失败., e);finally/当不开启事务时,关闭数据库连接if (i
37、sAutoCommit)DBUtil.close(con, ps, null);/实施无参insert, update, delete语句public void executeSql(String sql)executeSql(sql, null);/实施有参查询语句, 假如查询一个字段还回一个List, 假如查询多个字段返回Listpublic static List executeQuerySql(String sql, List params)Connection con = null;PreparedStatement ps = null;ResultSet rs = null;Lis
38、t objs = null;try con = DBUtil.getCon();ps = con.prepareStatement(sql);setParamValue(ps, params);rs = ps.executeQuery();ResultSetMetaData rsmd = rs.getMetaData();int cols = rsmd.getColumnCount();objs = new ArrayList();if(cols = 1)while(rs.next()objs.add(rs.getObject(1);elsewhile(rs.next()Object os = new Objectcols;for (int i = 0; i cols; i+) osi = rs.getObject(i + 1);objs.add(os); catch (Except