大连科技学院毕业实习报告题目开拓飞机票管理系统学生姓名康志华专业班级软件工程08-2 指导教师王立娟刘瑞杰职称讲师讲师所在单位信息科学系软件工程教研室教学部主任王立娟完成日期 2012年3月23日毕业实习报告单综合评定:(优、良、中、及格、不及格)指导教师签字:2012年3月23日《毕业实习设计》任务书任务及要求:一、设计(研究)内容和要求内容:编写一个飞机票系统管理软件,使用GUI界面,实现“飞机票订阅”和“飞机票查询”两部分功能。
用户可以对飞机票信息和销售预定信息进行,查询,添加,删除等操作。
采用数据库存储数据。
要求:1、软件要求(1)实现界面,可以依次录入飞机票管理系统登录的界面,主界面,飞机票预订管理的界面,飞机票销售信息查询管理的界面。
(2)实现数据库的连接和应用功能。
(3)实现对飞机票预订信息和销售信息的查询,添加,删除等功能。
2、文档要求(1) 设计程序结构、画出模块图。
(2)按照指导教师给出的项目文档的模板进行书写。
(3) 参考文献数量不得低于4个。
二、工作量3周(15个工作日)时间三、计划安排第1个工作日-第3个工作日:查找相关资料、书籍,阅读示例文档;设计程序结构、模块图、完成类的设计。
第4个工作日-第12个工作日:完成程序的编码,并且自己调试、测试。
穿插进行项目文档的撰写。
第13个工作日-第14个工作日:撰写和整理项目文档。
第15个工作日:由教师检查软件测试效果、项目文档,给出学生本课程成绩。
指导教师签字:2012年3月5日目录1 需求分析 (1)1.1 功能要求 (1)1.2 操作要求 (1)1.3 系统性能要求 (1)2 总体设计 (3)2.1 本系统的主要功能 (3)2.2 系统包含的类及类之间的关系 (3)2.3 java源文件及其功能 (3)3 详细设计与实现 (4)3.1 主类main类 (4)3.2 模式设计 (4)3.3 数据库表 (5)3.3 运行效果 (7)3.3.1 系统主界面 (7)3.3.2 系统具体功能实现录入界面 (7)参考文献 (9)毕业实习设计总结 (10)附录 (11)1 需求分析1.1 功能要求开拓航空订票管理系统主要是为机场、航空公司和客户三方进行服务的。
航空公司提供航线、飞机的资料,机场则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该有查询航班路线和剩余票数,以及网上订票,退票,以及改签等功能。
客户可以分为两类:一类是普通客户,对于普通客户只有普通的查询功能和订票功能没有相应的票价优惠;另一类是经常旅客,需要办理注册手续,但增加了里程积分功能和积分优惠政策。
机场还要有紧急应对措施,在航班出现延误时,要发送相应的信息。
1.2 操作要求并分析所需要存储的数据信息。
(1)查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况和折扣情况,若尚有余票,则根据折扣为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;(3)承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要求,则为客户办理订票手续,否则依次询问其他排队候补的客户。
(4)承办改签业务:若客户晚点到达机场或因故不能乘坐预定的航班,为客户办理改签手续,根据与客户沟通的乘坐时间,查询该航班的载客情况,改签到下一班次。
1.3 系统性能要求(1)客户订票过程设计一个存储过程,实现客人订票处理。
提示:需先查看客户是否为特殊客户,若不是,则票价不打折扣;否则如果客户累计航程超过10万公里,票价打九折;超过20万公里,打八折。
获得确切票价后加入客户订票信息表中,并将客户新订票里程的信息累计到用户信息表中。
注:须查看客户订票后,是否超过可容纳的座位数目,如果超过,取消所有操作。
(2)飞机更新处理设计一个触发器,实现在飞机信息表中若删除了一架飞机,同时需删除该航班的信息。
(3)航班延误处理设计一个触发器,实现若航班产生延误,则发出信息通知客户。
(4)余票更新处理设计一个触发器,实现若订票后,自动更新的功能。
2 总体设计2.1 本系统的主要功能1.查询航线功能;2.办理订票业务功能;3.办理退票业务功能;4.办理改签业务功能;2.2 系统包含的类及类之间的关系本系统共包括7个java源文件。
如图2-1所示。
图2-1 类之间的关系2.3 java源文件及其功能1.book.java该文件实现了订票功能;2.query.java该文件实现了查询功能;3.order.java该文件实现了预约功能;4.change.java该文件实现了改签功能;5.refound.java该文件实现了退票功能;6.mydb.java该文件实现了与SQL之间的连接;7.main.java该文件为运行类,其中包含了主方法。
3 详细设计与实现3.1 主类main类(1)成员变量见表2-1表2-1 主要成员变量(属性)(2)方法见表2-2表2-2 主要方法(3)源代码见文件Main.java3.2 模式设计按系统整体E-R模型,写出关系模式;并利用数据字典加以描述。
(如每个关系模式有何属性、属性的类型、属性值的长度、是否可取空值、是否为主码、有何约束条件等信息)航空客运的业务包括查询,订票,退票,预约,改签等。
用户通过查询航线、航班来确定自己的需求。
需要建立一个关系模式,如下:∙航线(航线号,航班号,出发地,终点,出发时间,到底时间)∙航班(航班号,飞机号,出发地,终点)∙飞机(飞机号,一等舱数量,二等舱数量,三等舱数量)∙机票(机票号,座位号,单价,航班号,客户号)∙客户(客户号,身份证号,姓名,联系方式,类型)∙订票(订票号,客户号,舱位等级,订票量,订票价格)∙退票(退票量,订票号)∙预约(预约号,预约量,客户号)改签(客户号,改签航班)3.3 数据库表表2-5 飞机表2-11 改签3.3 运行效果3.3.1 系统主界面图3-1 系统主窗口3.3.2 系统具体功能实现录入界面图3-2 查询操作界面图3-3 订票操作界面图3-4 退票操作界面图3-5 改签操作界面参考文献[1] 孙卫琴.Java面向对象编程.电子工业出版社.2006年[2] 王海亮,张立民.精通Oracle 10g SQL和PLSQL.中国水利水电出版社.2006[3] 耿祥义,张跃平.JAVA2实用教程(实用教程)[M].北京:清华大学出版社,2006.[4] (美)Karl E.Wiegers.软件需求(第二版)[M].北京:高等教育出版社,2004.[5] (美)Karl E.Wiegers.软件需求(第二版)[M].北京:高等教育出版社,2004.[6] 曹建主编.Dreamweaver与JSP实战演练[M].北京:电子工业出版社.2001.[7] Time创作室编著.Office2000系列丛书SQLserver2000[M].北京:人民邮电出版社.1999.[8] 武晓军,陈海滨编著.Javascript/VBScript网页编程实例解析[M].北京:清华大学出版社.2001.[9] [美]Greg Buczek著.王小娟.陈代川译.SQLserver2000数据库开发即时应用[M].北京:人民邮电出版社.2002.[10] 林金霖.JSP实务经典[M].北京:中国铁道出版社.2000.[11] BruceEckel.JAVA编程思想[M].北京:机械工业出版社.2003.10.[12] 赛奎春.JAVA工程应用与项目实践[M].北京:机械工业出版社.2002.8.毕业实习总结通过这次实验,我深刻的认识到实习实验的必要性,从实验的过程中,我学会了很多自己原本不会的知识,我深刻的理解了动手的主要性。
从开始的不知所措到最后实验的初步成型,我收获了很多,让我获益匪浅。
在实验的过程中,把课堂里所学的知识与理论相结合起来,更加清楚的明白了各个过程的功能。
航空管理系统是一个比较复杂的系统,从起初画ER开始,就可以清楚的知道,在确定试题,关系的时候,我考虑了很多不同的情况,也走了很多弯路。
但是在实际见表的过程中,我意识到问题所在。
在编程界面的时候,由于各种原因,使得界面与数据库的联系失败,都给我深刻的印象,也使我更加注重这个方面,我也一直向编程好的同学请教,在不断磨合的过程中,我终于做好这个设计,但是我还是觉得我的设计有很多问题,但不管怎样,在这个学习的过程中,我学到了很多知识,我相信自己在今后的学习中会更加努力,争取做好。
附录package com.db;import java.sql.*;public class mydb {String url="jdbc:odbc:mydb";String driver="sun.jdbc.odbc.JdbcOdbcDriver";Connection con=null;public mydb() {try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}}public ResultSet executeQuery(String sql) {ResultSet rs = null;try {con = DriverManager.getConnection(url);Statement cmd = con.createStatement();rs = cmd.executeQuery(sql);} catch (Exception ex) {ex.printStackTrace();}return rs;}public void executeUpdate(String sql) {try {con = DriverManager.getConnection(url);Statement cmd = con.createStatement();cmd.executeUpdate(sql);con.close();} catch (Exception ex) {ex.printStackTrace();}}public void closeConnection() {try {if (con!=null&&!con.isClosed())con.close();} catch (SQLException e) {e.printStackTrace();}}}package com.view;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import javax.swing.*;import javax.swing.table.DefaultTableModel;import com.db.mydb;public class query extends JFrame implements ActionListener{ private JLabel jb1=new JLabel("出发站名");private JTextField jt1=new JTextField();private JLabel jb2=new JLabel("终点站名");private JTextField jt2=new JTextField();private JButton jb_ok=new JButton("确定");private JButton jb_reset=new JButton("重置");String ss[]={"航线号","航班号","起飞时间"};String rows[][]=new String[3][3];JTable table=new JTable(rows,ss);mydb db=new mydb();public query(){super("查询");JPanel jp=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp.add(jp1,BorderLayout.NORTH);jp1.setLayout(new GridLayout(5,2));jp1.add(jb1);jp1.add(jt1);jp1.add(jb2);jp1.add(jt2);jp1.add(jb_ok);jp1.add(jb_reset);jb_ok.addActionListener(this);jb_reset.addActionListener(this);JScrollPane jsp=new JScrollPane(table);jp.add(jsp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }public void actionPerformed(ActionEvent e) {if(e.getSource()==jb_ok){String start=jt1.getText().trim();String destination=jt2.getText().trim();String sql="select count(*) from airline_1740";ResultSet rs=db.executeQuery(sql);try{rs.next();int c=rs.getInt(1);rows=new String[c][3];c=0;sql="select a.air_no,plane_no,start_time " +"from airline_1740 a,fly_1740 b " +"where a.start='"+start+"'"+"and a.destination='"+destination+"'";rs=db.executeQuery(sql);System.out.print(sql);if (rs.next()){rows[c][0]=rs.getString(1);rows[c][1]=rs.getString(2);rows[c][2]=rs.getString(3);//rows[c][3]=rs.getString(4);//c++;}table.setModel(new DefaultTableModel(rows,ss));db.closeConnection();}catch(Exception ex){}}}// public static void main(String[] args) {// searchFrm frm=new searchFrm();// frm.setSize(250,200);// frm.setVisible(true);// }}package com.view;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import javax.swing.*;import javax.swing.table.DefaultTableModel;import com.db.mydb;public class book extends JFrame implements ActionListener{ JLabel lbl1=new JLabel("订票号:");JTextField txt1=new JTextField();JLabel lbl3=new JLabel("订票量:");JTextField txt3=new JTextField();JButton btn1=new JButton("1");JButton btn2=new JButton("取消");String ss[]={"订票号","客户号","订票量"};String rows[][]=new String[3][3];JTable table=new JTable(rows,ss);mydb db=new mydb();public book(){super("订票查询");JPanel jp=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp.add(jp1,BorderLayout.NORTH);jp1.setLayout(new GridLayout(5,2));jp1.add(lbl1);jp1.add(txt1);jp1.add(lbl3);jp1.add(txt3);jp1.add(btn1);jp1.add(btn2);btn1.addActionListener(this);btn2.addActionListener(this);JScrollPane jsp=new JScrollPane(table);jp.add(jsp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// public static void main(String[] args) {// orderFrm frm=new orderFrm();// frm.setSize(250,200);// frm.setVisible(true);// }public void actionPerformed(ActionEvent e) { if(e.getSource()==btn1){String book_no=btn1.getText().trim();String sql="select count(*) from bookticket_1740";ResultSet rs=db.executeQuery(sql);try{rs.next();int c=rs.getInt(1);rows=new String[c][3];c=0;sql="select book_no,client_no,booknum " +"from bookticket_1740 " +"where book_no='"+book_no+"'";rs=db.executeQuery(sql);System.out.print(sql);if (rs.next()){rows[c][0]=rs.getString(1);rows[c][1]=rs.getString(2);rows[c][2]=rs.getString(3);//rows[c][3]=rs.getString(4);//c++;}table.setModel(new DefaultTableModel(rows,ss));db.closeConnection();}catch(Exception ex){}}}//public static void main(String[] args) {//searchFrm frm=new searchFrm();//frm.setSize(250,200);//frm.setVisible(true);//}}package com.view;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import javax.swing.*;import javax.swing.table.DefaultTableModel;import com.db.mydb;public class change extends JFrame implements ActionListener{ JLabel lbl1=new JLabel("航班号:");JTextField txt1=new JTextField();JLabel lbl2=new JLabel("客户号:");JTextField txt2=new JTextField();JLabel lbl3=new JLabel("改签航班号:");JTextField txt3=new JTextField();JButton btn1=new JButton("1");JButton btn2=new JButton("取消");String ss[]={"订票号","改签航班号:"};String rows[][]=new String[2][2];JTable table=new JTable(rows,ss);mydb db=new mydb();public change(){super("改签");JPanel jp=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp.add(jp1,BorderLayout.NORTH);jp1.setLayout(new GridLayout(5,2));jp1.add(lbl1);jp1.add(txt1);jp1.add(lbl3);jp1.add(txt3);jp1.add(btn1);jp1.add(btn2);btn1.addActionListener(this);btn2.addActionListener(this);JScrollPane jsp=new JScrollPane(table);jp.add(jsp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// public static void main(String[] args) {// changeFrm frm=new changeFrm();// frm.setSize(250,200);// frm.setVisible(true);// }public void actionPerformed(ActionEvent e) {if(e.getSource()==btn1){String book_no=btn1.getText().trim();String sql="select count(*) from refundticket_1740";ResultSet rs=db.executeQuery(sql);try{rs.next();int c=rs.getInt(1);rows=new String[c][2];c=0;sql="select book_no,change_no " +"from changeticket_1740 " +"where book_no='"+book_no+"'";rs=db.executeQuery(sql);System.out.print(sql);if (rs.next()){rows[c][0]=rs.getString(1);rows[c][1]=rs.getString(2);//rows[c][2]=rs.getString(3);//rows[c][3]=rs.getString(4);//c++;}table.setModel(new DefaultTableModel(rows,ss));db.closeConnection();}catch(Exception ex){}}}//public static void main(String[] args) {//searchFrm frm=new searchFrm();//frm.setSize(250,200);//frm.setVisible(true);//}}package com.view;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import javax.swing.*;import com.db.mydb;public class order extends JFrame{JLabel lbl1=new JLabel("航班号:");JTextField txt1=new JTextField(8);JLabel lbl2=new JLabel("客户号:");JTextField txt2=new JTextField(8);JLabel lbl3=new JLabel("订票量:");JTextField txt3=new JTextField(8);JButton btn1=new JButton("订票");JButton btn2=new JButton("取消");mydb db=new mydb();public order(){JPanel jp=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp1.setLayout(new GridLayout(3,2,10,10));jp1.add(lbl1);jp1.add(txt1);jp1.add(lbl2);jp1.add(txt2);jp1.add(lbl3);jp1.add(txt3);JPanel jp2=new JPanel();jp2.add(btn1);jp2.add(btn2);jp.add(jp1);jp.add(jp2,BorderLayout.SOUTH);this.setTitle("订票");}// public static void main(String[] args) {// orderFrm frm=new orderFrm();// frm.setSize(250,200);// frm.setVisible(true);// }}package com.view;import java.awt.*;import java.awt.event.*;import java.sql.ResultSet;import javax.swing.*;import javax.swing.table.DefaultTableModel;import com.db.mydb;public class refund extends JFrame implements ActionListener{ JLabel lbl1=new JLabel("订票号:");JTextField txt1=new JTextField();JLabel lbl2=new JLabel("客户号:");JTextField txt2=new JTextField();JLabel lbl3=new JLabel("退票量:");JTextField txt3=new JTextField();JButton btn1=new JButton("1");JButton btn2=new JButton("取消");String ss[]={"订票号","客户号"};String rows[][]=new String[2][2];JTable table=new JTable(rows,ss);mydb db=new mydb();public refund(){super("退票");JPanel jp=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp.add(jp1,BorderLayout.NORTH);jp1.setLayout(new GridLayout(5,2));jp1.add(lbl1);jp1.add(txt1);jp1.add(lbl3);jp1.add(txt3);jp1.add(btn1);jp1.add(btn2);btn1.addActionListener(this);btn2.addActionListener(this);JScrollPane jsp=new JScrollPane(table);jp.add(jsp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}// public static void main(String[] args) {// refundFrm frm=new refundFrm();// frm.setSize(250,200);// frm.setVisible(true);// }public void actionPerformed(ActionEvent e) {if(e.getSource()==btn1){String book_no=btn1.getText().trim();String sql="select count(*) from refundticket_1740";ResultSet rs=db.executeQuery(sql);try{rs.next();int c=rs.getInt(1);rows=new String[c][2];c=0;sql="select book_no,refund_no " +"from refundticket_1740 " +"where book_no='"+book_no+"'";rs=db.executeQuery(sql);System.out.print(sql);if (rs.next()){rows[c][0]=rs.getString(1);rows[c][1]=rs.getString(2);//rows[c][2]=rs.getString(3);//rows[c][3]=rs.getString(4);//c++;}table.setModel(new DefaultTableModel(rows,ss));db.closeConnection();}catch(Exception ex){}}}//public static void main(String[] args) {//searchFrm frm=new searchFrm();//frm.setSize(250,200);//frm.setVisible(true);//}}package com.view;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class main extends JFrame implements ActionListener{ JButton btn_query=new JButton("查询");JButton btn_order=new JButton("预约");JButton btn_refund=new JButton("退票");JButton btn_change=new JButton("改签");JButton btn_book=new JButton("订票");public main(){JPanel jp=(JPanel)this.getContentPane();btn_query.addActionListener(this);btn_book.addActionListener(this);// btn_order.addActionListener(this);btn_refund.addActionListener(this);btn_change.addActionListener(this);JPanel jb=(JPanel)this.getContentPane();jp.setLayout(new BorderLayout());JPanel jp1=new JPanel();jp.add(jp1,BorderLayout.CENTER);jp1.setLayout(new GridLayout(5,0));jp1.add(btn_query);jp1.add(btn_order);jp1.add(btn_refund);jp1.add(btn_change);jp1.add(btn_book);JPanel jp2=new JPanel();jp.add(jp2,BorderLayout.SOUTH);jp2.setLayout(new FlowLayout());this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("机票查询系统");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void actionPerformed(ActionEvent e) {if(e.getSource()==btn_query){query frm=new query();frm.setSize(500,200);frm.setVisible(true);}if(e.getSource()==btn_book){book frm=new book();frm.setSize(250,200);frm.setVisible(true);}if(e.getSource()==btn_refund){refund frm=new refund();frm.setSize(250,200);frm.setVisible(true);}if(e.getSource()==btn_change){change frm=new change();frm.setSize(250,200);frm.setVisible(true);}}public static void main(String[] args) { main frm=new main();frm.setSize(200,200);frm.setVisible(true);}}。