《《面向对象程序设计》java课程设计--航空订票管理系统设计.doc》由会员分享,可在线阅读,更多相关《《面向对象程序设计》java课程设计--航空订票管理系统设计.doc(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机学院 面向对象程序设计课程设计报告学号xxxx面向对象程序设计课程设计报告题目:xx专业:xx班级:x姓名:xx指导教师:x成绩: xxxx年 x月x日目录1 设计内容及要求11.1 设计任务与要求11.2硬件可靠性11.3系统运行的稳定性11.4系统功能齐全、开放性好12 需求分析22.1 数据的输入22.2 数据的修改22.3 数据的删除22.4 数据的查询23 概要设计33.1系统用例图33.2用例描述33.3 基本描述43.4 功能43.5 算法 53.5 流程逻辑64系统数据结构设计114.1 逻辑结构设计要点114.2 物理结构设计要点114.3 数据结构与程序的关系124.
2、4 数据库分析124.5 程序系统的组织结构146 系统运行效果与操作16参考文献:381 设计内容及要求1.1 设计任务与要求 对航空公司来说,航空订票管理系统既能扩大服务范围,扩大公司影响,减少营业费用,又对稳固航空公司的客源有着重要的辅助作用;站在旅客的角度,航空公司提供的这种服务提供了更多的方便,节省了很多时间。建设航空订票管理系统是体现和提高航空公司领导业绩的一条捷径,此外还具有重要意义:1、改善航空公司服务质量;2、创造和提升航空公司的品牌优势;3、优化航空公司的服务流程; 4、提升信息化的水平;1.2硬件可靠性数据库服务器:数据库服务器用于存放用户及航班信息等资料,配一台专用服务
3、器,安装数据库SQL server2000。1.3系统运行的稳定性系统支持操作系统如下:Windows vista、Windows XP(服务器版本)(推荐) 或Windows 2000,系统运行稳定可靠,可以保证365天*24小时的不间断运行,并安装杀毒软件,防止病毒的干扰,保证系统的运行稳定。SQL Server数据库服务器版, 可以存储管理大量数据信息1.4系统功能齐全、开放性好订票,退票,查询,管理等业务,全部使用软件来控制,因此今后功能变动、业务改动很灵活。2 需求分析2.1 数据的输入管理员根据需要来输入航班、订票人、乘客等信息的具体数据,但必须保证其正确性和准确性。2.2 数据的
4、修改管理员根据需要对指定的数据进行修改,由于记录繁多,因此用户首先要输入一定的查询条件,缩小记录范围,然后再从该范围中找到指定的记录进行修改,保证修改的内容的正确性和准确性后可更新数据库的数据。2.3 数据的删除管理员根据需要对指定的数据进行删除,由于记录繁多,因此用户首先要输入一定的查询条件,缩小记录范围,然后再从该范围中找到制定的记录进行删除,保证将要删除的内容的正确性和准确性后可删除掉数据库中的数据。2.4 数据的查询管理员根据需要查询数据库中的所有数据,输入一定的查询条件,然后可按照输入的查询依据查询新数据库的数据。3 概要设计3.1系统用例图图 1 系统用例图3.2用例描述(1)航班
5、查询查看航班信息 基本查询,从下拉列表中选择航班或起点或终点信息 综合查询,手动输入航班的基本信息(2)订票 输入航班信息 显示航班信息,以及打折后的票价信息,询问信息是否 (3)退票输入将退票的序号 显示票的具体信息,并询问是否退票 退票成功,更新顾客数据库(4)管理登陆 进入管理界面 选择添加、更新、删除航班,或查看航班具体信息等业务添加 输入添加航班的具体信息 更新航班数据库更新 输入所要更改航班的具体信息 更新航班数据库删除 选择所要删除的航班 更新航班数据库查看航班具体信息 显示数据库中所有航班的具体信息3.3 基本描述(1)服务器端程序: 本套航空订票系统软件的服务器端应用程序,使
6、用java编写前台控制软件,管理员通过使用该软件来进行对数据库中的数据进行管理。(2)后台数据库: 本套航空订票系统软件的后台数据库使用Microsoft SQL Server 2000来搭建后台数据库服务器,用来存放所有的数据。3.4 功能(1) 服务器端的主要功能订票信息的查询功能:1)查询航班信息包括航班号、地点等信息。2)查询及票价格包括起始地、抵达地、机票价格等信息。3)查询订票人的详细信息: 精确查询:输入订票人身份证号码查询订票人详细信息。 模糊查询:输入订票人的姓名(或订票人的姓或是年龄或是性别)查询出一系 列相关的信息,然后可从小范围内找到订票人的详细信息。4)查询乘客的详细
7、信息: 输入乘客的身份证号码查询乘客的详细信息。 1)填写订票人的详细信息其中包括:姓名、身份证号码、联系电话、地址等信息。 2)填写订票的详细信息,其中包括: 航班编号、订票时间、订票数量等信息。 录入信息功能 1)取票功能:根据输入的订票人身份证号验证订票人身份后,输入详细的乘客信息并进行保存。 2)直接购票:直接输入乘客详细信息并保存(不通过订票人)。 3)录入航班信息:录入航班的相关信息。 4)订票人取消订票:保存订票人取消订票信息。修改功能1)修改乘客信息:将查找到的乘客信息,进行修改,然后进行保存。2)修改订票人信息:将查找到的订票人的信息进行修改然后进行保存。3)修改航班信息:将
8、查找到的航班信息进行修改后保存。 删除功能1)删除乘客信息:将查找到的乘客信息,进行删除。2)删除订票人信息:将查找到的订票人的信息进行删除。3)删除航班信息:将查找到的航班信息进行删除。3.5 算法 1)将管理员输入的数据,按字段保存到数据库中。2)将数据库中的数据,按字段提取到用户界面中。3)必要的去除重复项的算法。4)按条件修改、删除数据中的数据。5)保持表间数据的一致性。3.5 流程逻辑(1) 服务器端各模块的流程图 查询模块流程图图 2 服务器查询模块 添加模块流程图图 3 服务器添加模块 修改模块流程图图 4 服务器修改模块 删除模块流程图图 5 服务器删除模块(2) 客户端各模块
9、的流程图查询模块的流程图图 6 客户端查询模块 订票模块的流程图图 7 客户端添加模块4系统数据结构设计4.1 逻辑结构设计要点按照需求分析设计数据库中的字段,建立一个逻辑上的数据库的结构。4.2 物理结构设计要点在数据库软件(SQL Server2000)中建立数据库,并要保证数据库最低要符合第二范式。4.3 数据结构与程序的关系(1)静态数值需求 支持并行操作的用户。 处理多条记录数据。 表或文件的最小为2048字节,最大无限制。(2)精度需求在进行提取数据库数据时,要求数据记录定位准确,在向数据库中添加数据时,要求输入数据准确。主要的精度适应系统要求,不接受违规操作。(3)时间特性需求
10、响应时间应在人的感觉和视觉事件范围内; 更新处理时间,随着应用软件的版本升级,以及网络的定期维护更新。 (4) 灵活性 当需求发生某些变化时,管理应用软件操作方式、数据结构、运行环境基本不会发生变化,变化只是将对应的数据库文件内的记录改变,或将过滤条件改变即可。 (5) 数据管理能力需求 本应用软件可管理多条记录,本应用软件基本约用1,300千字节空间,所有 文件均放置在数据库中调用,查询数据、文件、记录时,通过库文件名直接进行操作或通过存储过程来完成操作。4.4 数据库分析(1)数据表建立 需将数据库设计成关系模式最低符合第二范式的标准。按照需求分析,确 定系统的实体。根据实体分析的结果,在
11、数据库中应建立如下数据表:adtor(管理员表)Flight(航班信息表)destine(客户信息表)user(用户信息表)(2)数据库设计说明 destine(订票人信息表)在该信息表中包含以下字段:destine_id(订票人身份证号码)、flight_no(航班号)、destine_count(订票数量)、destine_date(定票日期)、destine_status(订票状态)、destine _id (订票人身份证号码)、destine_phone(订票人联系电话)、destine_address(订票人地址)、destine_sex(订票人性别)、destine_age(订票人
12、年龄)等字段。 flight(航班信息表)在该信息表中包含以下字段:flight_no(航班号)、begin_from(起飞地点)、end_address(降落地点)、begin_time(起飞时间)、end_time(降落时间) ticket_price(机票价格)等字段。(3)数据库ER图图 8 数据库ER图4.5 程序系统的组织结构 (1)系统组织结构图服务器端的组织结构图航空订票管理系统管理员身份验证超级管理员一般管理员查询所有信息数据输入查寻内容输出数据 航班信息管理订票人信息管理添加数据查询数据删除数据修改数据添加数据删除数据修改数据查询数据输入新航班数据保存航班数据删除航班数据刷
13、新数据刷新输出数据修改航班数据更新航班数据刷新航班数据输入查询数据输出数据输入订票人数据保存订票人数据删除订票人数据刷新数据刷新输出数据修改订票人数据更新订票人数据刷新航班数据输入查询数据输出数据系统层次结构图(服务器)端)图 9 系统层次结构图6 系统运行效果与操作图 10 主操作界面代码如下:package flight;import java.awt.GridLayout;import javax.swing.*;import java.awt.event.*;public class Register extends JFrame implements ActionListener J
14、TextField user; JPasswordField psw1,psw2; JLabel a,b,c; JButton ok,no; public Register() a=new JLabel(订票); a.setBounds(70,70,60,25); b=new JLabel(管理); b.setBounds(77,130,60,25); c=new JLabel(退出); c.setBounds(60,190,60,25); user=new JTextField(20); user.setBounds(130,70,180,25); psw1=new JPasswordFie
15、ld(20); psw1.setBounds(130,130,180,25); psw2=new JPasswordField(20); psw2.setBounds(130,190,180,25); add(a); add(user); add(b); add(psw1); add(c); add(psw2); setLayout(null); setBounds(100,200,500,350); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setVisible(true); public voi
16、d actionPerformed(ActionEvent e) String a,b,c; if (e.getSource() = ok) a=user.getText(); b=psw1.getText(); c=psw2.getText(); dispose(); /关闭窗口 System.exit(0); /退出程序 图 11 用户登录界面代码如下:public class AdminLogin extends JFrame implements ActionListener database datalink; JTextField input1; JPasswordField in
17、put2; JLabel prompt1; JLabel prompt2; JButton ok; public AdminLogin() super(管理员登陆);setSize(400, 100);Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(size.width - getWidth() / 2,(size.height - getHeight() / 2);setLayout(new FlowLayout();prompt1 = new JLabel( 账号:);prompt2 = n
18、ew JLabel(密码:);input1 = new JTextField(8);input2 = new JPasswordField(8);ok = new JButton(确定);ok.setSize(50, 100); ok.addActionListener(this);add(prompt1);add(input1);add(prompt2);add(input2);add(ok);datalink=new database();setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource(
19、)=ok) if(input1.getText().length()=0|input2.getText().length()=0) JOptionPane.showMessageDialog(this,请输入用户名或密码!,提示错误,JOptionPane.ERROR_MESSAGE); else try boolean b=true; Connection con=datalink.getCon(); Statement stm=datalink.getStm(); ResultSet rs=stm.executeQuery(SELECT * FROM admin_info); if(roo
20、tPaneCheckingEnabled) while(rs.next() String us=input1.getText(); String ps=input2.getText(); if(us.equals(rs.getString(admtor)&ps.equals(rs.getString(admpsw) new Manager(); this.dispose(); b=false; InetAddress address =InetAddress.getLocalHost(); String IP_name = address.getHostAddress(); Calendar
21、E=Calendar.getInstance(); int year = E.get(Calendar.YEAR); int month =E.get(Calendar.MONTH)+1; int day = E.get(Calendar.DAY_OF_MONTH); int hour = E.get(Calendar.HOUR_OF_DAY); FileWriter out; out = new FileWriter(D:Adminfile.txt); out = new FileWriter(D:Adminfile.txt); out.write(登陆用户:+input1.getText(
22、)+ 密码:+ps+ 登陆时间+year+-+month+-+day+ +hour+ IP:+IP_name); out.close(); if(b) JOptionPane.showMessageDialog(this,请输入正确的用户名或密码!,提示错误,JOptionPane.ERROR_MESSAGE); /con.close(); catch (IOException ex) Logger.getLogger(Login.class.getName().log(Level.SEVERE, null, ex); catch (SQLException ex) Logger.getLog
23、ger(AdminLogin.class.getName().log(Level.SEVERE, null, ex); public static void main(String args) new AdminLogin(); 图 12 按班次查询航班图 13 按终始站查询图12和图13代码如下:public class FTable extends AbstractTableModel private Object data; private String head = 航班号,航班公司, 始发站, 终点站 ,最大乘客数,现有乘客数,起飞时间,普通舱,商务舱; public FTable(
24、List list) data = new Objectlist.size(); for(int i = 0;i list.size();i+) ticktInfo f = list.get(i); datai=new Objectf.getFlightID(),f.getCompany(),f.getSstation(),f.getEstation(),getStartTime(),f.getMax(),f.getCurrent(),f.getPutongcang(),f.getShangwucang(); public int getColumnCount() return head.le
25、ngth; public int getRowCount() return data.length; public String getColumnName(int col) return headcol; public Object getValueAt(int row,int col) return datarowcol; public Class getColumnClass(int c) return getValueAt(0,c).getClass(); 图 14 添加航班代码如下:public class AddF extends JFrame implements ActionL
26、istener String title = 航班号,航班公司,起飞地点,到达地点,起飞时间,最大乘客数,现有乘客数,普通舱 ,商务舱; JTextField txt1 = new JTextField(20); JTextField txt2 = new JTextField(20); JTextField txt3 = new JTextField(20); JTextField txt4 = new JTextField(20); JTextField txt5 = new JTextField(20); JTextField txt6 = new JTextField(10); JTe
27、xtField txt7 = new JTextField(10); JTextField txt8 = new JTextField(10); JTextField txt9 = new JTextField(10); JButton OK = new JButton(保存); JButton Cancel = new JButton(取消); ticktInfo flight; ArrayList plst=null; boolean success; public AddF() Dimension size = Toolkit.getDefaultToolkit().getScreenS
28、ize(); setLocation(size.width - getWidth() / 3,(size.height - getHeight() / 3); Container con = getContentPane(); con.setLayout(new GridLayout(9,1); JPanel p = new JPanel9; for (int i=0;i9;i+) pi = new JPanel(new FlowLayout(FlowLayout.LEFT); pi.add(new JLabel(titlei+:); p0.add(txt1); p1.add(txt2); p
29、2.add(txt3); p3.add(txt4); p4.add(txt5); p5.add(txt6); p6.add(txt7); p7.add(txt8); p8.add(txt9); for (int i=0;i9;i+) con.add(pi); JPanel bottom = new JPanel(); bottom.add(OK); bottom.add(Cancel); con.add(bottom); OK.addActionListener(this); Cancel.addActionListener(this); setTitle(航班信息添加窗口); setSize
30、(800,500); setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=OK) String a=txt1.getText(); String b=txt2.getText(); String c=txt3.getText(); String d=txt4.getText(); String e1=txt5.getText(); String f=txt6.getText(); String g=txt7.getText(); String h=txt8.getText(); String
31、 j=txt9.getText(); Solution.AddFlight(a, b, c, d, e1, f, g, h, j); dispose(); else if(e.getSource()=Cancel) dispose(); public static void main(String args) new AddF(); 图 15 删除航班代码如下:public class DeletF extends JFrame implements ActionListener String title = 航班号,航班公司,起飞地点,到达地点,起飞 时间,最大乘客数,现有乘客数,普通舱 ,
32、商务舱; JTextField txt1 = new JTextField(20); JTextField txt2 = new JTextField(20); JTextField txt3 = new JTextField(20); JTextField txt4 = new JTextField(20); JTextField txt5 = new JTextField(20); JTextField txt6 = new JTextField(10); JTextField txt7 = new JTextField(10); JTextField txt8 = new JTextFi
33、eld(10); JTextField txt9 = new JTextField(10); JButton OK = new JButton(保存); JButton Cancel = new JButton(取消); ticktInfo flight; ArrayList plst=null; boolean success; public AddF() Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); setLocation(size.width - getWidth() ; Container con = get
34、ContentPane(); con.setLayout(new GridLayout(9,1); JPanel p = new JPanel9; for (int i=0;i9;i+) pi = new JPanel(new FlowLayout(FlowLayout.LEFT); pi.delete(new JLabel(titlei+:); p0.delete(txt1); p1.delete(txt2); p2.delete(txt3); p3.delete(txt4); p4.delelte(txt5); p5.delete(txt6); for (int i=0;i6;i+) co
35、n.add(pi); JPanel bottom = new JPanel(); bottom.delete(OK); bottom.delete(Cancel); con.delete(bottom); OK.deleteActionListener(this); Cancel.deleteActionListener(this); setTitle(航班信息删除窗口:”); setVisible(true); setSize(800,500); public void actionPerformed(ActionEvent e) if(e.getSource()=OK) String a=
36、txt1.getText(); String b=txt2.getText(); String c=txt3.getText(); String d=txt4.getText(); String e1=txt5.getText(); String f=txt6.getText(); String g=txt7.getText(); String h=txt8.getText(); String j=txt9.getText(); Solution.AddFlight(a, b, c, d, e1, f, g, h, j); dispose(); else if(e.getSource()=Cancel) dispose(); public static void main(String args) new deleteF(); 图 16