数据库课程设计-飞机订票系统

上传人:ta****u 文档编号:223775535 上传时间:2023-07-21 格式:DOCX 页数:19 大小:286.53KB
返回 下载 相关 举报
数据库课程设计-飞机订票系统_第1页
第1页 / 共19页
数据库课程设计-飞机订票系统_第2页
第2页 / 共19页
数据库课程设计-飞机订票系统_第3页
第3页 / 共19页
点击查看更多>>
资源描述
数据库课程设计报告目录第一章 概述31.1 项目背景31.2 编写目的31.3 开发工具31。3。1 软件定义31。3.2 开发环境3第二章 需求分析42.1 问题陈述 42.2 ER 模型图4第三章 数据库逻辑设计53.1 定义数据库表5数据库表5第四章 软件功能设计74。1 软件功能结构图74。2 软件划分模块74。2。1 整体流程:74.2.2 航班信息查询模块84.2。3 顾客查询模块104。2。4 订票、退票功能124.2.5 财务查询17第五章 界面设计18第六章 结束语19第一章 概述1。1 项目背景航空业作为运输行业的基础,要提高我国运输行业的整体水平,必须从基 础抓起。订票系统是航空业从事生产和管理的基层单位,加强订票系统是 航空业基础地位的关键,也是保障航空业业可持续发展的重要基石。随着现在航空运输业的发展,机票预订系统也成为了航空运输业的软件副 产品,目前的管理系统都是与数据库关联,故数据库的管理也成为很热门的 研究对象。此项目是以数据库为支撑,java (eclipse)为平台而开发的。1。2 编写目的编写此项目的目的是为了进一步了解数据库的储存管理机制以及数据库与其他的语言语言工具之间关联和协作 .也可以熟悉项目开发的流程 ,步 骤,为以后编写其他的程序打下基础.1,了解并掌握数据结构的设计方法,具备初步的独立分析能力; 2,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基 本方法和技能3,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4,训练用系统的观点和软件开发的一般规范进行软件开发,培养软件工 作者所具备的的科学的工作方法和作风。1.3 开发工具1.3.1 软件定义Oracle 11g, PowerDesigner,eclipse1.3。2 开发环境Windows7, Java, database第二章 需求分析2.1 问题陈述设计一个飞机订票系统要求具备如下基本功能:1、班机基本信息的管理;2、航班信息的管理;3、旅客预定机票、取消预约、付款取票、退票的管理;4、查询航班信息、航班预定情况、旅客信息,计算航班满座率5、 统计每周、每月,每年营业收入情况。2.2 ER 模型图第三章 数据库逻辑设计3。1 定义数据库表数据库表l,flight 表字段名数据类型含义说明控制情况startplaceVarchar2起点不为空endplaceVarchar2终占k、八、不为空starttimeVarchar2起飞时间不为空endtimeVarchar2到达时间不为空flightnumVarchar2航班号主关键字ReturnnumVarchar2返航号可为空AirfirmVarchar2航空公司不为空typeVarchar2飞机类型不为空ticketint余票不为空pricefloat票价不为空2。 Customer 表字段名数据类型含义说明控制情况nameVarchar2顾客姓名不为空idVarchar2身份证主键flightnumVarchar2航班号外键C typeint订票/候补不为空telephoneVarchar2电话号码不为空tickint订票数不为空3。airfirm 表字段名数据类型含义说明控制情况incomefloat收入可为空outcomefloat支出可为空Powerdesign下的物理模型构建GustornE-rvarch-ar 即ajch ar 疋曲 vaich sr arch ar vsrcb-ar i/archr imF3LCTSKMnLKEnSKTE_m(ar时时号 H点飞迖灘 起空一=.Mvrcharv arch ar /arch ar varcfiaf arch ar 燧可弓vsrchar逍疔公Vc0rchar 飞机盖型v arch st 余亘irntsffrfi trlirght第四章 软件功能设计4.1 软件功能结构图飞机订票系统1 11 1航班信息查顾客信息查订票退票财务查询询询增删改查航查询信息增加信息删除信息查询班信息4。2软件划分模块4。2.1 整体流程: 对主界面进行功能选择操作,通过反馈 Action 进入分功能操作,然后在Action 模块中分别由 search。, add() ,delete () ,update ()关联到 Dao 包 (Dao包主要管理连接数据库的业务),然后根据不同的功能进入到了关联 数据库的部分,通过如下部分连接数据库:1, 加载 JDBC 驱动程序,成功加载后 ,会将 Driver 类的实例 注册到 DriverManager;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,执行sql语句,Statement接口提供了三种执行SQL语句的方法: executeQuery, executeUpdate,和 execute ResultSet rs=stmt.execute( String sql);6 处理结果:执行更新返回的本次操作影响到的记录数,执行查询返回的结果是个 ResultSet 对象,使用结果集对象的访问方法获取数据: While(rs.next() String name=rs。 getString(“name) ;String pass=rs。 getString(1) ;7,关闭JDBC对象:操作完成以后要把所有使用的JDBC对象全部关闭,以释 放 JDBC 资源 , 关闭顺序和声明顺序相反:首先关闭记录集 , 然后关闭声明, 最后关闭连接对象If (rs! =null) Try Rs。close。; catch(SQLException e) e.printStackTrace( );然后是 stmt 最后是 conn 这样就是整个流程的进行4。2.2 航班信息查询模块 该模块属于基本功能,其主要实现对航班的基本信息的查询,修改和删除, 是通过对后台的各种操作来方便前台。其主要用的 SQL 语句有:select, insert,delete, update 等。 如select * from flight;(从flight表中检索所有的信息) Insert into flight values(?,?,?, ?,?); 然后数据库通过JDBC连接到java,再在java中通过对界面的操作,与各功 能块的实现结合起来。Java 中的部分功能实现代码:1,查询模块private void queryData( int page)/查询模块采用分页显示flightbasicDao=new FlightBasicMessDao( ); /Dao 包为与数据库连接 pageBean = new PageBean(flightbasicDao.queryCount(), 10) ; /分页操作if (page = 1) pageBean。 setCurPage(1); else if (page= pageBean.getMaxPage() ) pageBean。 setCurPage( pageBean。 getMaxPage() ;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(终点);columns.add (起飞时间”);columns.add (到达时间);columns.add(航班号);columns.add (返航号”);columns。add(”航空公司”; columns。add(票务类型); columns o add (剩余票数); columnso add(票价“);tModel。 setDataVector( flightbasicinfo, columns);/刷新表格table。 revalidate( ); /设置分页信息 curPage。 setText(pageBean。 getCurPage()+); rowsPrePage.setText( pageBean.getRowsPrePage( )+”); 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;ResultSet rs = null;try conn = Dbcp。 getConnection();stmt=conn.prepareStatement( Constants.QUERY_FLIGHTBASICINFO);stmt。 setInt(1, curPage*rowsPrePage); stmt。 setInt(2,(curPage1)*rowsPrePage+1); rs = stmt.executeQuery ();while (rs.next () v = new Vector();v。 add(rs。 getString(startplace”) ;v。 add( rs.getString(”endplace”); 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 Autogenerated 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。增删改操作类似,此处不做赘述。-nm呵12: DO Ml1W1驱11Rm 一I-P1(- DOPU31 oomIDOQ 1DOQ32=i iITID:IWiTEriiliofirw佃1 Itl1C0Bitt3顾客查询模块该模块功能和航班信息查询模块功能类似,只是操作的表和信息不同而已。 下面展示部分源码:顾客查询分为两张表显示(数据库中只有一张表),一张储存已定票的顾 客,一张储存正在候补队伍的顾客,其差别在于顾客状态public void queryData ()11r wr: wirmVectorVectoruserinfol=flightdao。queryUserinfo ();Log。log(this, ” 一-一 一-一-一-queryData +userinfo1.size();Vector columns1=new Vector);columnsl.add (乘客姓名”);columnsl.add (乘客证件号码”); columns1.add(乘客机舱等级”);columnsl.add(”乘客所在航班号); columnsl。add(”乘客联系方式”); columnsl.add (乘客所定票数”); columns1.add(乘客状态); tModel.setDataVector(userinfol, columnsl); table.revalidate() ;Log.log( this, queryData stuinfo.size:” +userinfol.size()+columns size” +columnsl 。 size() ;public void queryData1() Vector userinfol=flightdao。 queryUserinfol();Log 。 log ( this, ”- - - - - -queryData+userinfo1.size() ;Vector columns1=new Vector( );columnsl。add (乘客姓名”); columnsl。add(”乘客证件号码); columnsl。add(乘客机舱等级); columnsl。add(”乘客所在航班号); columnsl。add(”乘客联系方式”); columnsl.add(”乘客所定票数”); columnsl。add (乘客状态); tModell。 setDataVector(userinfol, columnsl); tablel 。 revalidate();Log.log( this, queryData stuinfo。 size:+userinfol.size()+” columns size+columnsl。 size( ) ;public String queryFlightdata3( int count )/ String flightinfo = new Stringl0; String f = null;Connection conn = null;PreparedStatement stmt = null; ResultSet rs = null; try conn = Dbcp。 getConnection ();stmt = conn。 prepareStatement( Constants。 QUERY_CANCEL); stmt。 setInt(l, count); rs = stmt。 executeQuery( ); while (rs。next() ) f = new Stringl0; f0=rs.getString(” name); fl=rs.getString(” id” ); f2=rs.getString(” ps”) ;f3 =rs.getString (flightnumber); f4=rs.getString (teiphone); f 5=rs.getString(” ticket); f 6=rs。getString (” customtype); System。 out.println(” queryVipdata +f0 +f 1);/vipinfo。add(v); catch (SQLException e) / TODO Autogenerated catch blockLog.log (this, queryVipdata”+e。getMessage () +f0+f 1);e。printStackTrace(); finallyLog。log (this,” queryVipdata+Constants.QUERY_CANCEL);Dbcp。close (rs, stmt, conn);return f;壷同主界向垂容娃容垂容所在航说号垂春联凭方武垂香所定霁数F, 丁车Tevnman斗1D012313122G丰= BESS433541D014S3243伯匚吝12:6781001123646571巳启EWED50451D0154545B53-已三聖12312321002435413434234351D024321231李凹71D01121212n.i31DD131236冷,51DD2122241匸三聚11D013Z1322翱证件号码禾石况氏等夫禾吉4务上成壬石1;兰西H56451D0154M56517已审卜现在县韭京时问 s S at Apr 10:12:0-2 CST20154.2。4订票、退票功能订票的功能也是基本功能之一,实际上也是对数据库中数据的增加和删除(或减少), 不过其中会增加很多判断的部分,比如在订票之前需要先查询库里是不是 还有余票,如果订票的数目小于或等于余票数目,则订票可以成功,如果订 票数大于余票数,则会有一部分加入到候补队列中。退票亦是如此,如果 退票的时候,发现候补队列里有人,且其票数刚好小于或等于退票的数目,则可以直接将候补队列的顾客加入到订票队列中。部分源码:private void handin()int lenl=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(); String len5=o。 getJbtps()。 getSelectedItem()。 toString(); if( getstring( lenl,len2,len3,len4) )JOptionPane.showMessageDialog( dialog, 带*请务必全部输入); else flightVo vo = new flightVo() ;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.setPhonenumber(o.getJbttelephone().getText()。 trim(); vo。 setTick(Integer。 parseInt(o。 getJbtadultticketnumber()。 getText() ; vo.setTicket( o。 getJbtadultticketnumber() .getText() ); vo.setCustomtype(已定票”); System。 out.println(vo); String msg = ”;System.out。printin(”提交);int flag,count,countl ,count2;count=flightdao。 queryflightinfo3(o。 getJbtflight()。 getText(); countl=Integer.parseInt(o。 getJbtadultticketnumber()。 getText(); count=count-countl;if(count0)if(flightdao.addFlightinfo( vo) 0) if(flightdao.addFlightinfol(vo)0) msg =订票成功!” ;elsemsg=定票失败”;elsemsg=定票失败; else/msg=余票不足;count=flightdao。 queryflightinfo3( o。 getJbtflight() .getText() ); countl=lnteger.parselnt (o.getJbtadultticketnumber ()。getText(); count2=count1 count;if(JOptionPane 。 showConfirmDialog ( dialog, 余票不足,您 可 以 订 ” +count+ 张 票 , 剩 下 的 +count2+ 加 入 候 补 ? ”, 确 定” JOptionPane。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。 setPhonenumber( 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 ();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。 getClientFrame().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 ()。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=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 ) ; jbbupiao();jbRewrite();elsemsg = 退票失败”;JOptionPane。 showMessageDialog( dialog, msg ); else 讦(tickethaveticket) vo.setId(c.getJtfID().getText()。 trim();vo.setTicket( ticket+”);vo。 setTick(ticket) ;vo。 setFlightnumber(c.getJtfDingDan().getText()。 trim(); flightdao。 deleteFlightinfo1(vo) ;flightdao.deleteFlightinfo(vo);msg=退票成功;JOptionPane。 showMessageDialog( dialog, msg ); jbbupiao();jbRewrite();else JOptionPane。 showMessageDialog( dialog, ”退票数目不能大于已定票数目”);else msg );msg =退票数目不能为0;JOptionPane.showMessageDialog( dialog, 部分界面:4。2。5财务查询这属于附加功能,实际上也就是通过记录每次的订票和退票的记录,然后 通过profit=income-outcome就可以得到每周每月的收入和支出以及收支比 了。第五章界面设计程序的见面设计做到了简洁,合理,交互性强 主界面:其他的分界面在各功能模块均有展示,此处不赘述第六章 结束语这次的数据库实验历时数周,但收获也是颇大的。数据库实验我做的 是飞机订票系统,之前的实验有做过一些比较小的系统,如学生管理系统, 都是直接从程序中调用数据,用链表等将其存储,连接数据库的系统还是 第一次,不过其基本功能相似,只是增加的在数据库中的存储部分 ,数据库 从数据结构的角度来说,也可以近似看成一个顺序表。系统的基本功能就 是对这些表的增删改查来实现的。实验设计的工具比较多,包括对数据库进行操作的开发语言工具,数据 库管理系统,还有一些辅助的工具,如 powerdesigner 等。也体会到了各种 工具的方便性,但是无论什么工具都是为了实现功能服务的。本系统实现的功能有,航班的基本信息查询,顾客的基本信息查询, 订票功能,退票功能以及账务的查询功能,基本上实现了所需要的基础功 能,只是还有很多不完善的地方,比如航班的基本信息查询中的添加功能, 只能一条一条记录的添加,并不能批量的添加,这样可能在使用时会造成 很多的时间的浪费,是需要改善的地方,我觉得可以从接受添加信息的数 据类型和写入数据库的数据类型的方面来改进,由一条数据变成一组数 据。这是其中一个方面,还有的方面就是细节的处理问题,不过这一点该 系统还是处理的比较好,比如说订票的时候,会提前判断余票数,并将余 票数和订票数进行数目的对比 ,小于或等于的时候才可以顺利的加入到订 票行列,大于的时候,则会继续查询 ,大于的时候,有多少张是可以加入订 票行列,而又有多少张只能加入到候补行列。退票的时候也是一样,也会有 细节处理的部分,退票时如果候补行列中有人,会自动询问是否将该人加 入到订票行列,这也是比较智能的地方。这门课的课设虽然是数据库课程设计 ,但其实对于数据结构的考察也 是有的,数据库在数据结构的范围中可以看成是一种加强版的线性表的结 构,也就是针对这张表来进行增删改查,实际上还帮助我们简化了自己通过 编程去管理表结构的步骤,所以说,这次的课程设计的覆盖面也是很广的, 做一个课程设计能够学到多方知识。总而言之,这次的课程通过这么多天一个一个的敲进去,提高了我的 动手能力,也让我对开发系统有了初步的认识.以后还是要多写程序来提高 自己的编程和设计能力。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!