报考订阅系统_第1页
报考订阅系统_第2页
报考订阅系统_第3页
报考订阅系统_第4页
报考订阅系统_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

word文档可自由复制编辑目录摘要 2正文 31实验目的 32实验要求 33数据字典 34概念结构设计 74.1设计方法和步骤 74.2概念结构E-R图 75逻辑结构设计 85.1关系模式设计与优化 85.2系统结构图 95.3系统完整性设计 106数据库物理设计 106.1索引的选择建立 106.2确定系统配置 106.3模块设计 117数据库实施 127.1数据库创建 127.2数据库备份和恢复方案 147.3用户界面设计和应用程序编码 148.系统测试方案和测试报告 268.1测试方案 268.2测试过程 26总结与致谢 36参考文献 37摘要信息在社会和经济的发展中所起的作用越来越为人们所重视。资源的开发利用水平成为衡量一个国家综合国力的重要标志之一。计算机作为信息处理的工具,为适应数据处理需求的迅速提高,满足各类信息系统对数据管理的要求,在文件系统的基础上发展基础数据库系统,数据库方法针对事物处理中大量数据管理需求。随着微机管理系统的推广,数据库应用逐渐普及。因此大力开发管理系统。MicrosoftSQLServer2000数据库管理系统是微软公司研制开发的关系型数据库管理系统。该系统支持并扩展了SQL语言标准,可以运用标准SQL语句对数据进行操作,也可以使用功能强大的GUI工具进行灵活的数据管理。同时,系统还提供功能完善的API,可以在应用程序中调用这些API来实现与数据库系统的连接以及相关数据的操作。sp3是该系统的一个版本号,只有sp3以上的SQL2000系统才能够支持纯JDBC连接方式。关键字:MicrosoftSQLServer;JDBC连接方式正文1实验目的1、加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;2、在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;3、学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;4、为毕业设计和以后工作打下必要基础。2实验要求设计一个订户订阅报刊的应用系统。涉及订单、订户、报刊目录及投递卡信息。系统功能包括:1.订户管理:订户增加、修改、删除。2.报刊管理:报刊增加、删除、修改。3.订单管理:完成订户订阅数据的管理和查询订单详细情况。4.统计查询:按报刊目录统计各类报刊的订阅数量及金额。3数据字典3.1数据结构管理员用户=管理员帐户+管理员密码订户=订户编号+订户名+联系电话+联系地址目录=目录编号+目录名+单价+批注信息订单=订单号+订户编号+下订日期订单细节=订单号+目录编号+订阅数量+订阅期数+单价+总价(注:为保证订单确定后价格不随目录单价变动,订单细节中应该有独立的单价来记录下订时目录的单价)3.2数据项编号标识符类型长度所属表名同义名UNameVarchar20Login管理员帐户UPasswordVarchar20Login管理员密码CidVarchar10Customer,Order订户编号CnameVarchar20Customer订户名PhoneVarchar15Customer联系电话AddressVarchar50Customer联系地址DidVarchar10Diretory,OrderDetail目录编号DnameVarchar20Diretory目录名UnitPriceFloat8DiretoryOrderDetail目录单价,下订时目录单价IfoVarchar50Diretory批注信息OnoVarchar10Order,OrderDetail订单编号OdateDatetime8Order下订日期Quantity,Int4OrderDetail订阅数量QiShu,Int4OrderDetail订阅期数TotalFloat8OrderDetail订单项总价表1:数据项表3.3数据流编号名称来源去向组成1身份信息系统管理员应用系统管理员帐户+密码2授权信息应用系统系统管理员3错误身份信息应用系统系统管理员4查询请求系统管理员应用系统待查询对象识别符(如Cid,Ono)5查询结果应用系统系统管理员被查询对象具体信息6管理请求系统管理员应用系统识别符(Cid,Ono等)+管理类型7管理结果信息应用系统系统管理员被管理对象处理结果8非法请求应用系统系统管理员非法请求提示信息表2:数据流表图1:报刊订阅系统顶层图图2:系统0层图图3:加工2细化图图4:加工3细化图4概念结构设计4.1设计方法和步骤采用自底而上的设计方法。先自顶向下地进行需求分析,对报刊订阅管理系统的需求进行逐步细化;然后再自底而上地设计概念结构,最终将各个局部应用的概念结构集合成为全局概念结构。4.2概念结构E-R图通过对局部应用的选择,逐一设计出分E-R图,并对各个分E-R图进行合并,生成初步E-R图,消除不必要的系统冗余,可以得出以下报刊订阅管理系统E-R图。图5:报刊订阅管理系统E-R图5逻辑结构设计5.1关系模式设计与优化根据概念结构的设计,可以将系统E-R图转换为以下关系模式:Customer(Cid,Cname,Phone,Address)Diretory(Did,Dname,UnitPrice,Ifo)Order(Ono,Cid,Odate)Foreignkey:CidOrderDetail(Ono,Did,Quantity,QiShu,UnitPrice,Total)Foreignkey:Ono,DidLogin(UName,UPassword)对上面关系模式进行分析可知:表Customer、Diretory、Order、Login都属于BCNF范式,在数据操作性能和存储空间的利用率上都比较高。OrderDetail虽然属于第二范式:(Ono,Did)Quantity,(Ono,Did)QiShu,(Ono,Did)UnitPrice,(Quantity,QiShu,UnitPrice)Total,(Ono,Did)Total.但是,将Total作为一个属性独立出来有利于统计和查询,减少反复运算操作,这种空间上的牺牲是比较有价值的。5.2系统结构图图6:系统结构图5.3系统完整性设计Customer(Cid,Cname,Phone,Address)其中:Cid为主码,Address约束为非空Diretory(Did,Dname,UnitPrice,Ifo)其中:Did为主码,UnitPrice约束为非空Order(Ono,Cid,Odate)其中:Ono为主码,Cid为外码(参照对象为Customer(Cid))OrderDetail(Ono,Did,Quantity,QiShu,UnitPrice,Total)其中:(Ono,Did)为主码,Ono和Did分别为外码(参照分别为:Order(Ono)和Diretory(Did)).Quantity,QiShu,UnitPrice分别约束为非空Login(UName,UPassword)其中(UName,UPassword)为主码。6数据库物理设计6.1索引的选择建立由于系统可能要涉及大量数据的操作,所以索引的建立就成为一种必需。本系统采用B+树索引方法,分别在各Customer,Diretory,Order和OrderDetail各个表的主键上建立索引。6.2数据存放位置本系统数据和索引存放在磁盘中。6.3确定系统配置根据具体需要配置。6.4模块设计6.4.1登陆模块图7:登陆模块IPO图6.4.2管理功能模块图8:管理功能模块IPO图6.4.3查询功能模块图9:查询功能模块IPO图6.4.4报表导出模块图10:报表导出模块IPO图7数据库实施7.1数据库创建7.1.1各数据表说明表3数据表描述表编号数据表名称类型内容01Login辅助表记录管理员帐号,密码02Customer主表记录订户信息03Diretory主表记录目录信息04Order主表记录订单基本信息05OrderDetail主表记录详细订单项信息7.1.2数据库创建在MicrosoftSQLServer2000的企业管理器中完成数据库和数据表的创建,具体SQL脚本请参见附录Newspaper_booking_system.sqlCREATETABLE[dbo].[Customer]( [Cid][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Cname][varchar](20)COLLATEChinese_PRC_CI_ASNULL, [Phone][varchar](15)COLLATEChinese_PRC_CI_ASNULL, [Address][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL)ON[PRIMARY]GOCREATETABLE[dbo].[Login]( [UName][varchar](20)COLLATEChinese_PRC_CI_ASNOTNULL, [UPassword][varchar](20)COLLATEChinese_PRC_CI_ASNOTNULL)ON[PRIMARY]GOCREATETABLE[dbo].[Diretory]( [Did][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Dname][varchar](20)COLLATEChinese_PRC_CI_ASNULL, [UnitPrice][float]NOTNULL, [Ifo][varchar](50)COLLATEChinese_PRC_CI_ASNULL)ON[PRIMARY]GOCREATETABLE[dbo].[Order]( [Ono][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Cid][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Odate][datetime]NULL)ON[PRIMARY]GOCREATETABLE[dbo].[OrderDetail]( [Ono][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Did][varchar](10)COLLATEChinese_PRC_CI_ASNOTNULL, [Quantity][int]NOTNULL, [QiShu][int]NOTNULL, [UnitPrice][float]NOTNULL, [Total][float]NULL)ON[PRIMARY]GO7.2数据库备份和恢复方案7.2.1应用辅助工具进行备份和恢复应用数据库辅助工具(如sqlbackuptools…)进行备份,选择所需要备份的数据库和目标地址即可进行数据备份,恢复数据库只需要指定备份文件和需要恢复的数据库即可进行数据恢复。7.2.2分离数据库法在企业管理器中右击需要备份的数据库,选择“所有任务”,“分离数据库”,执行分析操作,拷贝数据库MDF文件和LDF文件。恢复方案:在企业管理器的控制台树中选择“数据库”节点,右击,“所有任务”,“附加数据库”,找到待恢复数据库的MDF文件,确定。7.3用户界面设计和应用程序编码7.3.1用户界面设计本系统的用户界面用JavaSwing编写,主要由1个主界面Newspaper.java和10个辅助对话框组成。主界面集合系统主要基本功能按键,辅助对话框负责采集用户输入信息和做基本的信息处理。图11:用户界面7.3.2类文件功能描述NO.类名类型功能01NewspaperFrame主窗口类,提供系统主要功能的调用接口02Utilities辅助类封装系统主要数据和方法,为其它类提供信息处理功能03AdminCreateDlgDialog管理员创建对话框,提供管理员创建功能04AdminModifyDlgDialog管理员信息修改对话框,修改管理员密码,删除管理员05UserCreateDlgDialog订户新建对话框,采集订户信息,创建新订户06UserModifyDlgDialog订户修改对话框,提供订户修改、删除操作07DirCreateDlgDialog目录新建对话框,采集目录信息,创建新目录08DirModifyDlgDialog目录修改对话框,提供目录修改、删除操作09BookingDlgDialog添加订单对话框,提供新订单添加功能10OrderSearchDlgDialog订单查找对话框,提供按Ono或Cid查找订单操作11OrderDetailDlgDialog订单细节对话框,显示订单细节,提供订单和订单项删除操作,并能通过调用DetailModifyDlg对话框完成订单项修改。12DetailModifyDialog订单项修改对话框,提供订单项修改操作13LoginDlgDialog管理员登陆对话框,提供登陆界面,检查登陆信息表4:类文件描述表7.3.3主要代码分析////所属类:Utilities//功能:取得应用程序与数据库系统的连接publicstaticvoidgetConnection()throwsException{ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver") .newInstance();//加载驱动程序 Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Newspaper"; Stringuser="sa"; Stringpassword=""; conn=DriverManager.getConnection(url,user,password);//取得连接 stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//创建语句 conn2=DriverManager.getConnection(url,user,password); stmt2=conn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);}////所属类:Utilities//功能:完成查询结果的表格显示publicstaticvoiddisplayResultSet(JTabletable,ResultSetrs) throwsSQLException{ rs.beforeFirst();//指针移到结果集第一条记录前面 booleanmoreRecords=rs.next(); if(!moreRecords){//如果没有记录,则提示一条消息 JOptionPane.showMessageDialog(table,"无相关记录","Checkyourinput!", JOptionPane.ERROR_MESSAGE); return; } VectorcolumnHeads=newVector();//用于存储表格字段 Vectorrows=newVector();//用于存储记录行 try{//获取字段的名称 ResultSetMetaDatarsmd=rs.getMetaData(); for(inti=1;i<=rsmd.getColumnCount();++i) columnHeads.addElement(rsmd.getColumnName(i)); do{//获取记录集 rows.addElement(getNextRow(rs,rsmd)); }while(rs.next()); //建立相应的TableModel,并将TableModel应用到table中显示出来 DefaultTableModelmodel=newDefaultTableModel(rows,columnHeads); table.setModel(model); return; }catch(SQLExceptionsqlex){ sqlex.printStackTrace(); } }////所属类:Utilities//功能:被displayResultSet(JTabletable,ResultSetrs)调用,返回一个记录行privatestaticVectorgetNextRow(ResultSetrs,ResultSetMetaDatarsmd) throwsSQLException{ Vector<String>currentRow=newVector<String>(); for(inti=1;i<=rsmd.getColumnCount();++i) currentRow.addElement(rs.getString(i)); returncurrentRow;//返回一条记录}////所属类:Utilities//功能:创建空白EXCEL文件,并将统计查询结果导出到该EXCEL文件//说明:使用到org.apache的POI包,表示感谢publicstaticbooleanoutPut(ResultSetrs,Filefile){ if(rs==null) returnfalse; try{ HSSFWorkbookwb=newHSSFWorkbook(); HSSFSheetsheet=wb.createSheet("firstsheet"); sheet.setDefaultColumnWidth((short)20); ResultSetMetaDatametadata=rs.getMetaData(); intcolumnCount=metadata.getColumnCount();//获取属性列数 HSSFRowrow=sheet.createRow((short)0); for(inti=1;i<=columnCount;i++){//填写表格列名 row.createCell((short)(i-1)).setCellValue( metadata.getColumnName(i)); } //按行填写记录 rs.beforeFirst(); shortcounter=1; while(rs.next()){ row=sheet.createRow(counter++); for(inti=1;i<=columnCount;i++){ row.createCell((short)(i-1)).setCellValue( String.valueOf(rs.getObject(i))); } } FileOutputStreamfileOut=newFileOutputStream(file); wb.write(fileOut);//结果输出到文件 fileOut.close();//关闭输出流 }catch(Exceptionexc){ exc.printStackTrace(); } returntrue; }}////所属类:Newspaper//功能:统计查询finalJMenuItemmenuItem_9=newJMenuItem(); menuItem_9.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringsql="SELECTDiretory.DidAS刊物编号,DnameAS刊物名称," +"SUM(Quantity*QiShu)AS总订阅数,SUM(Total)AS总金额" +"FROMDiretoryLEFTJOINOrderDetail +"GROUPBYDiretory.Did,Diretory.Dname" +"ORDERBYSUM(Total)DESC"; try{ Utilities.rs=Utilities.stmt.executeQuery(sql);//执行统计查询 Utilities.displayResultSet(table,Utilities.rs);//显示查询结果 }catch(SQLExceptionexc){ exc.printStackTrace(); } } });////所属类:UserCreateDlg//功能:创建新用户finalJButtonbutton=newJButton(); button.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(textField_1.getText().trim().length()!=0 &&textField_2.getText().trim().length()!=0 &&textField_3.getText().trim().length()!=0){ Stringsql="INSERTINTOCustomer(Cid,Cname,Phone,Address)" +"VALUES('" +textField.getText().trim() +"','" +textField_1.getText().trim() +"','" +textField_2.getText().trim() +"','" +textField_3.getText().trim()+"')"; try{ Utilities.stmt.executeUpdate(sql);//执行数据行插入 JOptionPane.showMessageDialog(dialog,"用户:" +textField_1.getText()+"添加成功\nID:" +textField.getText(),"Success!", JOptionPane.INFORMATION_MESSAGE); dispose(); }catch(SQLExceptionexc){ exc.printStackTrace(); } }else{ JOptionPane.showMessageDialog(dialog,"信息不全,无法添加", "Checkyourinput!",JOptionPane.ERROR_MESSAGE); } } });////所属类:UserModifyDlg//功能:用户信息更新修改button_2=newJButton(); button_2.setEnabled(false); button_2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(textField_1.getText().trim().length()!=0 &&textField_2.getText().trim().length()!=0 &&textField_3.getText().trim().length()!=0){ try{ Utilities.rs.updateString("Cname",textField_1 .getText().trim()); Utilities.rs.updateString("Phone",textField_2 .getText().trim()); Utilities.rs.updateString("Address",textField_3 .getText().trim()); Utilities.rs.updateRow();//更新数据行 JOptionPane.showMessageDialog(dialog,"更新成功!", "Success!",JOptionPane.INFORMATION_MESSAGE); dispose(); }catch(SQLExceptionexc){ } }else{ JOptionPane.showMessageDialog(dialog,"信息不全,无法修改", "Checkyourinput!",JOptionPane.ERROR_MESSAGE); } } });////所属类:BookingDlg//功能:读取订单数据,向系统添加订单button_1=newJButton(); button_1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ try{ Stringsql="SELECTUnitPriceFROMDiretoryWHEREDid='" +comboBox.getSelectedItem()+"'"; Utilities.rs=Utilities.stmt.executeQuery(sql);//查询当前选择目录刊物的单价 if(Utilities.rs.next()){ unitPrice=Utilities.rs.getFloat("UnitPrice"); quantity=Integer.parseInt(textField_1.getText()); qishu=Integer.parseInt(textField_2.getText()); total=unitPrice*quantity*qishu; sum+=total; sql="INSERTINTOOrderDetail(ONo,Did,Quantity,QiShu,UnitPrice,total)" +"VALUES('" +label_2.getText() +"','" +comboBox.getSelectedItem() +"'," +quantity +"," +qishu +"," +unitPrice +"," +total +")"; sqls.add(sql);//寄存订单细节插入语句 comboBox.removeItem(comboBox.getSelectedItem()); //将已选择目录从下拉选择框中移除(一个订单不能有两个目录相同的订单项) } }catch(SQLExceptionexc){ exc.printStackTrace(); }catch(NumberFormatExceptionexc){ JOptionPane.showMessageDialog(dialog,"错误数字输入", "Checkagain!",JOptionPane.ERROR_MESSAGE); } } }); button_1.setEnabled(false); button_1.setText("添加订单项"); panel_1.add(button_1); button_2=newJButton(); button_2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(sqls.size()>1){ //容器第一个空间放插入Order的sql语句,其它空间放插入OrderDetail的sql语句 //sqls.size()==1表示只有一张空订单,不予插入 intans=JOptionPane.showConfirmDialog(dialog,"一共需要支付订金:" +sum+"元\nContinue?","Weneedyourmoney", JOptionPane.YES_NO_CANCEL_OPTION); if(ans==JOptionPane.YES_OPTION){ try{ for(inti=0;i<sqls.size();i++){//顺序取出sql语句,完成订单添加插入 Utilities.stmt.executeUpdate(sqls.get(i));//执行插入更新语句 } dispose(); JOptionPane .showMessageDialog(dialog,"订单添加成功!", "Success!", JOptionPane.INFORMATION_MESSAGE); }catch(SQLExceptionexc){ exc.printStackTrace(); } }elseif(ans==JOptionPane.NO_OPTION){ dispose(); } }else{ JOptionPane.showMessageDialog(dialog, "订单为空,不能提交,请选择需要订阅的期刊","Checkagain!", JOptionPane.ERROR_MESSAGE); } } }); button_2.se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论