《数据库课程设计-飞机订票系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计-飞机订票系统.docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库课程设计报告题 目 飞机订票管理系统 目录第一章 概述21.1项目背景21.2 编写目的21.3 开发工具31.3.1软件定义31.3.2 开发环境3第二章 需求分析32.1 问题陈述32.2 ER模型图3第三章 数据库逻辑设计43.1 定义数据库表4数据库表4第四章 软件功能设计64.1 软件功能结构图64.2软件划分模块74.2.1 整体流程:74.2.2 航班信息查询模块84.2.3 顾客查询模块104.2.4 订票、退票功能124.2.5 财务查询17第五章 界面设计17第六章 结束语18第一章 概述 1.1项目背景航空业作为运输行业的基础,要提高我国运输行业的整体水平,必须从基
2、础抓起。订票系统是航空业从事生产和管理的基层单位,加强订票系统是航空业基础地位的关键,也是保障航空业业可持续发展的重要基石。随着现在航空运输业的发展,机票预订系统也成为了航空运输业的软件副产品,目前的管理系统都是与数据库关联,故数据库的管理也成为很热门的研究对象。此项目是以数据库为支撑,java(eclipse)为平台而开发的。1.2 编写目的编写此项目的目的是为了进一步了解数据库的储存管理机制以及数据库与其他的语言语言工具之间关联和协作。也可以熟悉项目开发的流程,步骤,为以后编写其他的程序打下基础。1,了解并掌握数据结构的设计方法,具备初步的独立分析能力;2,初步掌握软件开发过程的问题分析、
3、系统设计、程序编码、测试等基本方法和技能3,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4,训练用系统的观点和软件开发的一般规范进行软件开发,培养软件工作者所具备的的科学的工作方法和作风。1.3 开发工具 1.3.1软件定义Oracle 11g,PowerDesigner,eclipse 1.3.2 开发环境Windows7,Java,database第二章 需求分析2.1 问题陈述设计一个飞机订票系统要求具备如下基本功能:1、 班机基本信息的管理;2、 航班信息的管理;3、 旅客预定机票、取消预约、付款取票、退票的管理;4、 查询航班信息、航班预定情况、旅客信息,计算航班满座率
4、。5、 统计每周、每月,每年营业收入情况。2.2 ER模型图Er模型图hasTicket psfligtnumbertickeidnameOrder/unsubscribecustomerairfirmstatisticsflightincome.outcomerstartplaceflightnum 第三章 数据库逻辑设计3.1 定义数据库表数据库表1,flight表字段名数据类型含义说明控制情况startplaceVarchar2起点不为空endplaceVarchar2终点不为空starttimeVarchar2起飞时间不为空endtimeVarchar2到达时间不为空flightnum
5、Varchar2航班号主关键字ReturnnumVarchar2返航号可为空AirfirmVarchar2航空公司不为空typeVarchar2飞机类型不为空ticketint余票不为空pricefloat票价不为空 2. Customer表字段名 数据类型 含义说明 控制情况nameVarchar2顾客姓名不为空 idVarchar2身份证主键 flightnumVarchar2航班号外键C_typeint 订票/候补不为空telephoneVarchar2电话号码不为空tickint订票数不为空3.airfirm表字段名数据类型含义说明控制情况incomefloat收入可为空outcome
6、float支出可为空 Powerdesign下的物理模型构建 第四章 软件功能设计4.1 软件功能结构图飞机订票系统航班信息查询顾客信息查询订票退票财务查询增删改查航班信息查询信息增加信息删除信息查询 4.2软件划分模块4.2.1 整体流程:对主界面进行功能选择操作,通过反馈Action进入分功能操作,然后在Action模块中分别由search(),add(),delete(),update()关联到Dao包(Dao包主要管理连接数据库的业务),然后根据不同的功能进入到了关联数据库的部分,通过如下部分连接数据库:1,加载JDBC驱动程序,成功加载后,会将Driver类的实例注册到DriverM
7、anager;2,提供JDBC连接的URL,连接URL定义了连接数据库时的协议,子协议,数据源标识;3,创建数据库的连接,向java.sql.DiverManager请求并获得Connection对象,该对象就代表一个数据库连接;Connection conn=DriverManager.getConnection(url,username,password) 4,创建一个Statement,要执行SQL语句,必须获得java.sql.Statement实例,然后将要执行的语句作为参数传进去PreparedStatement pstmt=con.prepareStatement(sql);5,
8、执行sql语句,Statement接口提供了三种执行SQL语句的方法:executeQuery,executeUpdate,和executeResultSet rs=stmt.execute(String sql);6处理结果:执行更新返回的本次操作影响到的记录数,执行查询返回的结果是个ResultSet对象,使用结果集对象的访问方法获取数据:While(rs.next()String name=rs.getString(“name”);String pass=rs.getString(1);7,关闭JDBC对象:操作完成以后要把所有使用的JDBC对象全部关闭,以释放JDBC资源,关闭顺序和声
9、明顺序相反:首先关闭记录集,然后关闭声明,最后关闭连接对象If(rs!=null)TryRs.close();catch(SQLException e)e.printStackTrace();然后是stmt最后是conn这样就是整个流程的进行4.2.2 航班信息查询模块该模块属于基本功能,其主要实现对航班的基本信息的查询,修改和删除,是通过对后台的各种操作来方便前台。其主要用的SQL语句有:select,insert,delete,update 等.如select * from flight;(从flight表中检索所有的信息)Insert into flight values(?,?,?,?
10、,?);然后数据库通过JDBC连接到java,再在java中通过对界面的操作,与各功能块的实现结合起来。Java中的部分功能实现代码:1,查询模块private void queryData(int page) /查询模块采用分页显示 flightbasicDao=new FlightBasicMessDao(); /Dao包为与数据库连接pageBean = new PageBean(flightbasicDao.queryCount(),10); /分页操作if(page = pageBean.getMaxPage()pageBean.setCurPage(pageBean.getMaxP
11、age();elsepageBean.setCurPage(page);Vectorflightbasicinfo=flightbasicDao.queryFlightdata(pageBean.getCurPage(), pageBean.getRowsPrePage(); /将查询结果放入向量flightbasicinfo中 /将查询结果用表格显示出来Vector columns = new Vector();Log.log(this, queryData vipinfo size+flightbasicinfo.size();columns.add(起点);columns.add(终点)
12、;columns.add(起飞时间);columns.add(到达时间);columns.add(航班号);columns.add(返航号);columns.add(航空公司);columns.add(票务类型);columns.add(剩余票数);columns.add(票价);tModel.setDataVector(flightbasicinfo, columns);/刷新表格table.revalidate();/设置分页信息curPage.setText(pageBean.getCurPage()+);rowsPrePage.setText(pageBean.getRowsPrePa
13、ge()+);maxPage.setText(pageBean.getMaxPage()+);maxCount.setText(pageBean.getMaxCount()+);连接数据库的部分:public Vector queryFlightdata(int curPage,int rowsPrePage)Vector flightinfo = new Vector();Vector v = null; /初始化connection,preparedstatement,resultsetConnection conn = null;PreparedStatement stmt = null
14、;ResultSet rs = null;try conn = Dbcp.getConnection(); stmt=conn.prepareStatement(Constants.QUERY_FLIGHTBASICINFO);stmt.setInt(1, curPage*rowsPrePage);stmt.setInt(2,(curPage-1)*rowsPrePage+1);rs = stmt.executeQuery();while(rs.next()v = new Vector();v.add(rs.getString(startplace);v.add(rs.getString(en
15、dplace);v.add(rs.getString(starttime);v.add(rs.getString(returntime);v.add(rs.getString(flightnumber);v.add(rs.getString(returnflight);v.add(rs.getString(airfirm);v.add(rs.getString(style);v.add(rs.getString(tick);v.add(rs.getInt(price);flightinfo.add(v); catch (SQLException e) / TODO Auto-generated
16、 catch blockLog.log(this, queryflightdata+e.getMessage();e.printStackTrace();finallyLog.log(this, queryflightdata+Constants.QUERY_FLIGHTBASICINFO);Dbcp.close(rs, stmt, conn);return flightinfo;增删改操作类似,此处不做赘述。4.2.3 顾客查询模块该模块功能和航班信息查询模块功能类似,只是操作的表和信息不同而已。下面展示部分源码:/顾客查询分为两张表显示(数据库中只有一张表),一张储存已定票的顾客,一张储存
17、正在候补队伍的顾客,其差别在于顾客状态public void queryData()Vector userinfo1=flightdao.queryUserinfo(); Log.log(this, -queryData+userinfo1.size(); Vector columns1=new Vector();columns1.add(乘客姓名);columns1.add(乘客证件号码);columns1.add(乘客机舱等级);columns1.add(乘客所在航班号);columns1.add(乘客联系方式);columns1.add(乘客所定票数);columns1.add(乘客状态
18、);tModel.setDataVector(userinfo1, columns1); table.revalidate();Log.log( this, queryData stuinfo.size:+userinfo1.size()+columns size+columns1.size();public void queryData1()Vector userinfo1=flightdao.queryUserinfo1(); Log.log(this, -queryData+userinfo1.size(); Vector columns1=new Vector();columns1.a
19、dd(乘客姓名);columns1.add(乘客证件号码);columns1.add(乘客机舱等级);columns1.add(乘客所在航班号);columns1.add(乘客联系方式);columns1.add(乘客所定票数);columns1.add(乘客状态);tModel1.setDataVector(userinfo1, columns1); table1.revalidate();Log.log( this, queryData stuinfo.size:+userinfo1.size()+columns size+columns1.size();public String que
20、ryFlightdata3(int count )/String flightinfo = new String10;String f = null;Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try conn = Dbcp.getConnection();stmt = conn.prepareStatement(Constants.QUERY_CANCEL);stmt.setInt(1, count);rs = stmt.executeQuery();while(rs.next()f = n
21、ew String10;f0=rs.getString(name);f1=rs.getString(id);f2=rs.getString(ps);f3=rs.getString(flightnumber);f4=rs.getString(telphone);f5=rs.getString(ticket);f6=rs.getString(customtype);System.out.println(queryVipdata+f0+f1);/vipinfo.add(v); catch (SQLException e) / TODO Auto-generated catch blockLog.lo
22、g(this, queryVipdata+e.getMessage()+f0+f1);e.printStackTrace();finallyLog.log(this, queryVipdata+Constants.QUERY_CANCEL);Dbcp.close(rs, stmt, conn);return f;4.2.4 订票、退票功能订票的功能也是基本功能之一,实际上也是对数据库中数据的增加和删除(或减少),不过其中会增加很多判断的部分,比如在订票之前需要先查询库里是不是还有余票,如果订票的数目小于或等于余票数目,则订票可以成功,如果订票数大于余票数,则会有一部分加入到候补队列中。退票亦是
23、如此,如果退票的时候,发现候补队列里有人,且其票数刚好小于或等于退票的数目,则可以直接将候补队列的顾客加入到订票队列中。部分源码:private void handin()int len1=o.getJbtname().getText().trim().length();int len2=o.getJbtadultticketnumber().getText().trim().length();int len3=o.getJbtid().getText().trim().length();int len4=o.getJbttelephone().getText().trim().length(
24、);String len5=o.getJbtps().getSelectedItem().toString();if(getstring(len1,len2,len3,len4)JOptionPane.showMessageDialog(dialog, 带*请务必全部输入);elseflightVo vo = new flightVo();vo.setName(o.getJbtname().getText().trim();vo.setId(o.getJbtid().getText().trim();vo.setPs(o.getJbtps().getSelectedItem().toStrin
25、g();/vo.setFlightnumber(Integer.parseInt( o.getJbtflight().getText() );vo.setFlightnumber( o.getJbtflight().getText() );vo.setPhonenumber(o.getJbttelephone().getText().trim();vo.setTick(Integer.parseInt(o.getJbtadultticketnumber().getText();vo.setTicket(o.getJbtadultticketnumber().getText();vo.setCu
26、stomtype(已定票);System.out.println(vo);String msg = ;System.out.println(提交);int flag,count,count1,count2;count=flightdao.queryflightinfo3(o.getJbtflight().getText();count1=Integer.parseInt(o.getJbtadultticketnumber().getText();count=count-count1;if(count0)if(flightdao.addFlightinfo(vo) 0) if(flightdao
27、.addFlightinfo1(vo)0)msg = 订票成功!;else msg=定票失败;else msg=定票失败;else/msg=余票不足;count=flightdao.queryflightinfo3(o.getJbtflight().getText();count1=Integer.parseInt(o.getJbtadultticketnumber().getText();count2=count1-count; if(JOptionPane.showConfirmDialog(dialog, 余票不足,您可以订+count+张票,剩下的+count2+加入候补?,确定,JO
28、ptionPane.YES_NO_OPTION) = 1)return; vo.setName(o.getJbtname().getText().trim();vo.setId(o.getJbtid().getText().trim();vo.setPs(o.getJbtps().getSelectedItem().toString();/vo.setFlightnumber(Integer.parseInt( o.getJbtflight().getText() );vo.setFlightnumber( o.getJbtflight().getText() );vo.setPhonenum
29、ber(o.getJbttelephone().getText().trim();vo.setTick(count);vo.setTicket(count+);vo.setCustomtype(已定票);if(count0)flightdao.addFlightinfo(vo);flightdao.addFlightinfo1(vo);msg=;vo.setName(o.getJbtname().getText().trim();vo.setId(o.getJbtid().getText().trim();vo.setFlightnumber( o.getJbtflight().getText
30、() );vo.setPhonenumber(o.getJbttelephone().getText().trim();vo.setPs(o.getJbtps().getSelectedItem().toString(); vo.setTicket(count2+); vo.setCustomtype(已候补); flightdao.addFlightinfo2(vo); msg=操作成功; JOptionPane.showMessageDialog(dialog, msg);hangkong.getClientFrame().setVisible(false);hangkong.getCli
31、entFrame().dispose();hangkong.getFrame().setVisible(true);/ queryData(Integer.parseInt(curPage.getText();private void jbOK()if(JOptionPane.showConfirmDialog(dialog, 确定需要退票?,退票,JOptionPane.YES_NO_OPTION) = 1)return;vo=new flightVo();String msg = ;int ticket=Integer.parseInt(c.getJtfChildTuiPiaoShu().
32、getText().trim();String id1 = c.getJtfID().getText().trim();System.out.println(-+id1);System.out.println(-+ticket);System.out.println(-+flightdao.flightquery1(1234); if(Integer.parseInt(c.getJtfChildTuiPiaoShu().getText().trim()0) int haveticket=Integer.parseInt(flightdao.flightquery1(id1);if(ticket
33、=haveticket) vo.setTick(ticket); vo.setId(c.getJtfID().getText().trim(); vo.setFlightnumber(c.getJtfDingDan().getText().trim(); String Id =c.getJtfID().getText().trim(); if(flightdao.deleteFlightinfo(Id) 0) flightdao.deleteFlightinfo(vo); msg = 退票成功; JOptionPane.showMessageDialog( dialog, msg ); jbb
34、upiao(); jbRewrite(); else msg = 退票失败; JOptionPane.showMessageDialog( dialog, msg ); else if(tickethaveticket) vo.setId(c.getJtfID().getText().trim(); vo.setTicket(ticket+); vo.setTick(ticket); vo.setFlightnumber(c.getJtfDingDan().getText().trim(); flightdao.deleteFlightinfo1(vo); flightdao.deleteFl
35、ightinfo(vo); msg=退票成功; JOptionPane.showMessageDialog( dialog, msg ); jbbupiao(); jbRewrite();elseJOptionPane.showMessageDialog( dialog, 退票数目不能大于已定票数目 ); elsemsg = 退票数目不能为0; JOptionPane.showMessageDialog( dialog, msg );部分界面:4.2.5 财务查询这属于附加功能,实际上也就是通过记录每次的订票和退票的记录,然后通过profit=income-outcome就可以得到每周每月的收
36、入和支出以及收支比了。第五章 界面设计程序的见面设计做到了简洁,合理,交互性强主界面:其他的分界面在各功能模块均有展示,此处不赘述第六章 结束语 这次的数据库实验历时数周,但收获也是颇大的。数据库实验我做的是飞机订票系统,之前的实验有做过一些比较小的系统,如学生管理系统,都是直接从程序中调用数据,用链表等将其存储,连接数据库的系统还是第一次,不过其基本功能相似,只是增加的在数据库中的存储部分,数据库从数据结构的角度来说,也可以近似看成一个顺序表。系统的基本功能就是对这些表的增删改查来实现的。实验设计的工具比较多,包括对数据库进行操作的开发语言工具,数据库管理系统,还有一些辅助的工具,如powe
37、rdesigner等。也体会到了各种工具的方便性,但是无论什么工具都是为了实现功能服务的。本系统实现的功能有,航班的基本信息查询,顾客的基本信息查询,订票功能,退票功能以及账务的查询功能,基本上实现了所需要的基础功能,只是还有很多不完善的地方,比如航班的基本信息查询中的添加功能,只能一条一条记录的添加,并不能批量的添加,这样可能在使用时会造成很多的时间的浪费,是需要改善的地方,我觉得可以从接受添加信息的数据类型和写入数据库的数据类型的方面来改进,由一条数据变成一组数据。这是其中一个方面,还有的方面就是细节的处理问题,不过这一点该系统还是处理的比较好,比如说订票的时候,会提前判断余票数,并将余票
38、数和订票数进行数目的对比,小于或等于的时候才可以顺利的加入到订票行列,大于的时候,则会继续查询,大于的时候,有多少张是可以加入订票行列,而又有多少张只能加入到候补行列。退票的时候也是一样,也会有细节处理的部分,退票时如果候补行列中有人,会自动询问是否将该人加入到订票行列,这也是比较智能的地方。这门课的课设虽然是数据库课程设计,但其实对于数据结构的考察也是有的,数据库在数据结构的范围中可以看成是一种加强版的线性表的结构,也就是针对这张表来进行增删改查,实际上还帮助我们简化了自己通过编程去管理表结构的步骤,所以说,这次的课程设计的覆盖面也是很广的,做一个课程设计能够学到多方知识。总而言之,这次的课程通过这么多天一个一个的敲进去,提高了我的动手能力,也让我对开发系统有了初步的认识。以后还是要多写程序来提高自己的编程和设计能力。