佛山网站优化有哪些,北京市工程建设信息交易网站,济南行知网网站建设,室内设计公司取名小型机票订票系统
一、 实验目的#xff1a;
1、能够正确运用数据库基本理论和知识#xff0c;复习、巩固、提高数据库方案设计、论证和分析方法。
2、熟悉关系数据库规范化设计理论#xff0c;根据实验要求设计并建立科学合理的数据库#xff0c;正确建立数据库中表与表…小型机票订票系统
一、 实验目的
1、能够正确运用数据库基本理论和知识复习、巩固、提高数据库方案设计、论证和分析方法。
2、熟悉关系数据库规范化设计理论根据实验要求设计并建立科学合理的数据库正确建立数据库中表与表之间的关系。
3、进一步正确理解数据库设计思路培养分析问题、解决问题的能力提高查询资料和撰写书面文件的能力。
二、 实验内容
[系统描述]
小型机票订票系统应具备航班信息管理、旅客信息管理、机票信息查询及订购基本管理功能具体要求如下
1能对航班信息进行维护输入、修改、删除航班信息。
2能对旅客信息进行维护。
3能进行航班信息、余票情况及旅客信息的各种查询。
4能进行机票的订购及退订必须动态刷新库存。
5能对每个航班进行按月、季度、年份进行售票统计。
6能对每个旅客进行按月、季度、年份进行出行统计。
1根据上述系统功能需求使用 ER 图描述该管理信息系统的概念模型。
2完成该管理信息系统的数据库总体设计方案明确数据库中表的结构各表中关键字的设置表与表之间的关系。
3根据系统功能需求以 SQL 语句的形式分类列出系统应涉及的数据操作。
4选用熟悉的数据库工具根据设计方案正确建立数据库并成功实现上述数据操作。
5完成上述内容并提交书面实验报告。
三、 实验步骤
实验平台windows10,IDEA2016,SQLServer2016
1、 建立关系模型
用 ER 图表示如下 图3-1-1实体ER图 图3-1-2ER图
2、 定义数据库表
a. 航班表 b. 旅客表 c. 机票表 d. 订单表 e. 机票订票系统的数据关系图 在上述关系中机票表中 tiket_flight 为航班表中 flight_id 的外键删除航班表中特定航班时机票表中特定航班的所有机票被删除级联删除。订单表中 order_traveller 为旅客表中 traveller_id 的外键当删除旅客信息时订单表中所有该旅客的订单被删除。订单表中 order_flight 为航班表中 flight_id 的外键当删除旅客信息时订单表中所有该旅航班的订单被删除。
当旅客定票时机票表中的剩余票数会减少当旅客退票时机票表中的剩余票数增加从而实现动态刷新库存。订单表中的 order_time 和 order_takeofftime 是为了便于按月、按季度、按年份统计航班售票情况和旅客出行情况而设定的。
3、 软件功能实现 4、 相关实现代码说明
a.主函数里面使用 switch 结构实现相关功能切换不同命令执行不同的功能函数当用户键入“quit”时退出系统
public static void main(String[] args) {connect_database();//连接数据库System.out.println(请输入对机票订票系统的操作\n 1、flight(航班修改)\n 2、traveller(旅客修改) \n 3、query(查询航班旅客等信息)\n 4、count(统计售票出行)\n 5、order(预定机票)\n 6、refund(退机票)\n 7、quit(退出系统)\n);Scanner scnew Scanner(System.in);//System.in代表标准输入就是键盘输入sc.useDelimiter(\n);//Scanner默认以空格作为分隔符这里以回车作为分隔符while(sc.hasNext()){int flag0;switch (sc.next()){case flight:flight();break;case traveller:traveller();break;case query:query();break;case order:order();break;case refund:refund();break;case count:count();break;case quit:System.out.println(成功退出系统);flag1;break;default:System.out.println(提示请重新输入正确的主菜单命令);}if (flag1)//flag1,则退出机票订票系统break;}
}
b.连接数据库的操作
Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);//加载JDBC驱动
con DriverManager.getConnection(url);//解析url,连接数据库
if (con!null)
{System.out.println(连接成功.);
}
else
{System.out.println(连接失败);
}
c.预定机票的操作将旅客、航班、出发日期等信息输入到订单中
String order_idgetRandomString(10);
String SQL_orderINSERT INTO 订单(order_id,order_traveller,order_flight,order_takeofftime,order_time) VALUES(order_id,arr[0],arr[1],arr[2],arr[2]);
sql_exe_manipulate(SQL_order);String SQL_ticket_minusUPDATE 机票 SET ticket_sumticket_sum-1 WHERE ticket_flightarr[1] AND ticket_timearr[2];
sql_exe_manipulate(SQL_ticket_minus);
System.out.println(预订机票order_id\n);
d.sql_exe_manipulate()和 getRandomString()分别执行数据库 SQL 的更新查询操作
public static void sql_exe_manipulate(String SQL) {try {Statement statement con.createStatement();statement.executeUpdate(SQL);}catch (Exception e){e.printStackTrace();}}
//生成指定长度的随机数
public static String getRandomString(int length) {String base abcdefghijklmnopqrstuvwxyz0123456789;Random random new Random();//构造函数StringBuffer sb new StringBuffer();//StringBuffer对象改变的是自身在进行字符串处理时不生成新的对象所以在内存使用上要优先Stringfor (int i 0; i length; i) {int number random.nextInt(base.length());//生成[0,base.length)区间的整数sb.append(base.charAt(number));}return sb.toString();
}
e. 查询航班信息
public static void iflight() {try{String SQLSELECT flight_id AS 航班编号,flight_src AS 起飞城市,flight_dst AS 目标城市 FROM 航班;ResultSet resultSetsql_exe_query(SQL);System.out.println( 航班编号 起飞城市 目的城市);while (resultSet.next()) {System.out.println(resultSet.getString(1) resultSet.getString(2) resultSet.getString(3));}}catch (Exception e){e.printStackTrace();}}
f. 按季度统计旅客出行情况
public static void count_traveller_season(String traveller_id) {System.out.println(请输入你要查询的季度例2016年春/夏/秋/冬“2016 spring/summer/autumn/winter”\n);Scanner scanner new Scanner(System.in);scanner.useDelimiter(\n);String season_s scanner.next();String[] arr season_s.split( );String time_start arr[0] -01-01;String time_stop arr[0] -03-31;switch (arr[1]){case spring:time_start arr[0] -01-01;time_stop arr[0] -03-31;break;case summer:time_start arr[0] -04-01;time_stop arr[0] -06-30;break;case autumn:time_start arr[0] -07-01;time_stop arr[0] -09-30;break;case winter:time_start arr[0] -10-01;time_stop arr[0] -12-31;break;}try {String SQL_season SELECT COUNT(*) FROM 订单 WHERE order_traveller traveller_id AND order_takeofftime time_start AND order_takeofftime time_stop ;ResultSet season_resultSet sql_exe_query(SQL_season);while (season_resultSet.next()) {System.out.println(traveller_id 旅客 arr[0] 年 arr[1] 季度共计出行 season_resultSet.getString(1) 次);}} catch (Exception e) {e.printStackTrace();}
}
四、 实验系统演示
1、 增加、删除航班 图4-1-1插入航班的命令 图4-1-2删除航班的命令 4-1-3:未插入航班前 4-1-4新增航班后
2、 旅客注册 图4-2-1增加旅客信息 图4-2-2删除旅客信息 图4-2-3增加旅客后的旅客表
3、 查询信息 图4-3-1查询航班信息 图 4-3-2查询旅客信息 图 4-3-3查询机票信息 图 4-3-4:查询订单信息
4、 订票 图4-4-1机票预订成功 图4-4-2预订机票生成的订单 图 4-4-3:机票库存动态刷新
5、 退票 图4-5-1退票 图4-5-2相应订单被删除 图4-5-3:机票库存被刷新
6、 统计航班售票情况 图 4-6-1航班 XMAIR00008 在 2016 年 11 月售票 1 张 图 4-6-2航班 XMAIR00008 在 2016 年冬季售票 2 张 图 4-6-3航班 XMAIR00008 在 2016 年售票 8 张
7、 旅客出行情况统计 图 4-7-1旅客 622826199505241535 在 2016 年 12 月出行 1 次 图 4-7-2旅客 622826199505241535 在 2016 年秋季出行 2 次 图4-7-3旅客622826199505241535在2016年出行8次
8、 退出系统 图4-8-1quit命令退出机票订票系统
五、 实验总结
1、 以前的许多程序实验都是直接从程序中调用数据用链表数组等将其存储。像这样连接数据库系统将数据和程序如此分离的程序实验我还是第一次做不过其基本功能类似。
2、 本系统实现的功能有航班信息的修改旅客信息的修改订票、退票功能信息查询功能售票出行情况统计功能。
3、 该系统也存在很大的不足之处由于我对于 GUI 编程并不是非常熟悉所以采用了命令行的方式来实现交互使得系统不好用。另一方面该系统的容错能力也非常有限很多情况下并没有对用户输入做检查有时候可能导致秩序崩溃。
4、 总之这次数据库实验历时一周数据库结构的设计、数据的填充提高了我系统设计的能力软件功能的实现也让我的编程能力得到了锻炼。对于开发一个系统也有了初步的认识以后还要多写程序多实践来提高自己的编程和设计能力。