1、报刊订阅管理系统 课程设计1.开发环境和相关技术介绍1.1开发环境数据库系统:SQL Server 2000编程语言:JAVA数据库连接方式:JDBC开发工具:Eclipse 3.21.2相关技术介绍Microsoft SQL Server 2000数据库管理系统支持并扩展了SQL语言标准,可以运用标准SQL语句对数据进行操作,也可以使用功能强大的GUI工具进行灵活的数据管理。Eclipse:功能强大的应用程序开发工具,主要支持基于Java语言的各种开发项目。JDBC连接方式:Java与数据库系统的一种连接方式,Java程序使用JDBC API与数据库进行通信,并用它操作数据库中的数据。JDB
2、C API使Java程序与具体数据库系统独立开来,保证了Java程序高度的可移植性。2.需求分析2.1系统需求和功能设计一个报刊订阅应用系统,使系统满足以下功能和需求:1)a一个订户可订多种报刊;一种报刊可被多个用户订阅;订单只能订阅现有报刊目录内容;b投递时,必须根据订单的情况进行投递,不得超出订单的订阅品种、数量;2)、系统功能包括:a订户管理:订户添加、修改、删除、查询;b目录管理:目录添加、修改、删除、查询;c订单管理:完成订户订阅数据的管理(包括添加、修改、删除、查询);d统计查询:按报刊目录统计各类报刊的订阅数量及金额;e帐号管理:增加管理帐号、删除帐号。2.2数据字典2.2.1数
3、据结构管理员用户=管理员帐户+管理员密码订户=订户编号+订户名+联系电话+联系地址目录=目录编号+目录名+单价+批注信息订单=订单号+订户编号+下订日期订单细节=订单号+目录编号+订户编号+订阅数量+订阅期数+单价+总价+下订日期2.2.2数据项表2.1 数据项表编号标识符类型长度所属表名同义名1UNameVarchar20Login管理员帐户2UPasswordVarchar20Login管理员密码3CidVarchar10Customer,OrderDetail订户编号4CnameVarchar20Customer订户名5PhoneVarchar15Customer联系电话6Address
4、Varchar50Customer联系地址7DidVarchar10Diretory,OrderDetail目录编号8DnameVarchar20Diretory目录名9UnitPriceFloat8Diretory、OrderDetail目录单价10IfoVarchar50Diretory批注信息11OnoVarchar10Order,OrderDetail订单编号12Quantity, Int4OrderDetail订阅数量13QiShu,Int4OrderDetail订阅期数14TotalFloat8OrderDetail订单项总价15OdateDatetime8OrderDetail下
5、订日期2.2.3数据流表2.2 数据流表编号名称来源去向组成1身份信息系统管理员应用系统管理员帐户+密码2授权信息应用系统系统管理员3错误身份信息应用系统系统管理员4查询请求系统管理员应用系统待查询对象识别符(如Cid,Ono)5查询结果应用系统系统管理员被查询对象具体信息6管理请求系统管理员应用系统识别符(Cid,Ono等)+管理类型7管理结果信息应用系统系统管理员被管理对象处理结果8非法请求应用系统系统管理员非法请求提示信息2.3安全性要求访问数据库时需要输入登陆帐号和密码。在数据库内设有管理员表,登陆系统时会要求输入管理员帐号和密码。登陆模块根据输入帐号和密码查管理员表,查到匹配记录则允
6、许其登陆系统。管理员帐号和密码可以在系统中添加和修改。2.4一致性要求在管理系统相关的表之间,有较强的关联性。为了实现一致性的需求,各个表之间均建立起了相应的一致性约束。2.5完整性要求数据库各个表设置了实体完整性、参照完整性。防止了数据表中存在不正确的数据。3.数据库设计3.1 设计方法和步骤 采用自底而上的设计方法。先自顶向下地进行需求分析,对报刊订阅管理系统的需求进行逐步细化;然后再自底而上地设计概念结构,最终将各个局部应用的概念结构集合成为全局概念结构。3.2 概念结构E-R图通过对局部应用的选择,逐一设计出分E-R图,并对各个分E-R图进行合并,生成初步E-R图,消除不必要的系统冗余
7、,可以得出以下报刊订阅管理系统E-R图。 报刊订阅管理系统E-R图 4.逻辑结构设计4.1关系模式设计与优化4.1.1关系模式设计根据概念结构的设计,可以将系统E-R图转换为以下关系模式:Login (UName,UPassword)Customer(Cid, Cname, Phone, Address)Diretory(Did, Dname, UnitPrice,Ifo)OrderDetail(Ono, Did,Cid, Quantity, QiShu, UnitPrice, Total,Odate)Foreign key:Ono,Did4.1.2优化分析对上面关系模式进行分析可知:表Cus
8、tomer、Diretory、Login都属于BCNF范式,在数据操作性能和存储空间的利用率上都比较高。表OrderDetail:(Ono,Did) Quantity,(Ono,Did) QiShu,(Ono,Did) UnitPrice,(Quantity,QiShu,UnitPrice) Total,(Ono,Did) Total.将Total作为一个属性独立出来有利于统计和查询,减少反复运算操作。4.2 系统结构图4.3 系统完整性设计Login (UName,UPassword)其中(UName,UPassword)为主码。Customer (Cid, Cname, Phone, Ad
9、dress)其中:Cid为主码,Cid,Cname, Phone, Address约束为非空Diretory (Did, Dname, UnitPrice,Ifo)其中:Did为主码,Dname, UnitPrice,Ifo约束为非空OrderDetail (Ono,Did,Cid,Quantity,QiShu,UnitPrice,Tota,Odate)其中:(Ono,Did)为主码,Cid和Did分别为外码(参照分别为:Customer(Cid)和Diretory(Did)).Quantity,QiShu,UnitPrice,Tota,Odate分别约束为非空5.数据库物理设计5.1 索引的
10、建立 由于系统可能要涉及大量数据的操作,所以索引的建立就成为一种必需。本系统采用B+树索引方法,分别在各Customer,Diretory和OrderDetail各个表的主键上建立索引。5.2 数据存放位置 本系统所有数据和索引均存放在磁盘中。5.3 模块设计5.3.1 登录模块 5.3.2 管理功能模块 5.3.3 管理帐号模块 5.3.4 查询模块6.数据库实施6.1 各数据表说明编号数据表名称类型内容01Login辅助表记录管理员帐号,密码02Customer主表记录订户信息03Diretory主表记录目录信息05OrderDetail主表记录详细订单项信息6.2 数据库创建6.2.1
11、Powerdesigner建模 用powerdesigner根据E-R图建立概念模型。转换成物理模型: 6.2.2 SQL server2000建立数据库 在SQL SERVER 2000上新建一个数据库,再建立一个数据源,把数据源指向新建的数据库。6.2.3 powerdesigner连接数据库,建立数据表。如图:6.3数据库备份和恢复方案6.3.1应用辅助工具进行备份和恢复应用数据库进行备份,选择所需要备份的数据库和目标地址即可进行数据备份,恢复数据库只需要指定备份文件和需要恢复的数据库即可进行数据恢复。6.3.2分离数据库法在企业管理器中右击需要备份的数据库,选择“所有任务”,“分离数据
12、库”,执行分析操作,拷贝数据库MDF文件和LDF文件。恢复方案:在企业管理器的控制台树中选择“数据库”节点,右击,“所有任务”,“附加数据库”,找到待恢复数据库的MDF文件,确定。 7.用户界面设计和应用程序代码7.1 用户界面设计 这个系统的用户界面运用了Java Swing编写,由一个主界面跟五个辅助界面构成。7.2 类文件功能描述 NO类名类型功能01myframeFrame主界面类,提供各个功能的接口02Connectdatabase辅助类调用该类连接数据库03SimpleTableFrame实现对目录的管理,包括增、删、改、查04DHTableFrame实现对订户的管理,包括增、删、
13、改、查05DDxinxiFrame实现对订单的管理,包括增、删、改、查06LGFrame管理员登陆对话框,提供登陆界面,检查登陆信息07addadminFrame添加一个管理帐号08deleteadminFrame删除一个管理帐号09orderdetailFrame显示所有订户的订单,订单的详细信息7.3 主要代码分析(选取了三个类的主要代码)/-/所属类:Connectdatabase/功能:取得应用程序与数据库系统的连接public class Connectdatabase private Connection conn; public Statement stmt; public St
14、atement Connect() try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);conn=DriverManager.getConnection(jdbc:odbc:BKDY,sa,); stmtconn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); catch(Exception e) System.out.println(异常:+e.getMessage(); return stmt; /-/所属类:orderdetail/功能:显
15、示所有订户的订单详细信息,public class orderdetail extends JFrame static DefaultTableModel data; JTable table; public orderdetail() super(订单统计列表); setSize(800,500); setVisible(true); setResizable(false); Container c=getContentPane(); c.setLayout(new FlowLayout(); String s = 订单编号,目录名字,订户名字,订阅数量,订单总价,下定日期,订户电话,联系地
16、址; data = new DefaultTableModel(s,0); table = new JTable(data); table.setEnabled(false); table.setPreferredScrollableViewportSize(new Dimension(700,400); table.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); JScrollPane sp=new JScrollPane(table); c.add(sp); try Database DB = new Database(); DB.Op
17、enConn(); String sql1=select * from OrderDetail; ResultSet rs1=DB.executeQuery(sql1); while( rs1.next() String sql0=select * from Diretory where Did =+ rs1.getString(Did)+; ResultSet rs0=DB.executeQuery(sql0); rs0.next(); String sql2=select * from Customer where Cid =+ rs1.getString(Cid)+; ResultSet
18、 rs2=DB.executeQuery(sql2); rs2.next(); String Ono= rs1.getString(Ono); String Dname = rs0.getString(Dname); String Cname = rs2.getString(Cname); String Quantity = rs1.getString(Quantity); String Odate = rs1.getString(Odate); String Phone = rs2.getString(Phone); String Address = rs2.getString(Addres
19、s); String Total = rs1.getString(Total); String str = Ono,Dname,Cname,Quantity,Total,Odate,Phone,Address; data.addRow(str); catch(Exception e) System.out.println(e); setVisible(true); setLocation(150,150); /-/所属类:myframe/功能:用户系统界面,提供各种功能的接口public class myframe extends JFrame implements ActionListene
20、r MenuBar mb; Menu m1,m2,m3,m4,m5; Label lb1=new Label(报刊订阅管理系统,Label.CENTER); Label lb4=new Label(计算机06-2班 组员:周锦佩、邱沛志、朱荣辉,Label.CENTER); Label lb3=new Label(数据库课程设计,Label.CENTER); MenuItem mi1,mi3,mi4,mi7,mi8,mi10,mi11; myframe() this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle(报刊订阅管理系
21、统); mb=new MenuBar(); m1=new Menu(目录管理); m2=new Menu(订单管理); m3=new Menu(订户管理); m4=new Menu(帐号管理); m5=new Menu(系统); mb.add(m1);mb.add(m3);mb.add(m2);mb.add(m4);mb.add(m5); mi1=new MenuItem(目录管理);mi3=new MenuItem(关于系统); mi4=new MenuItem(订单管理);mi11=new MenuItem(订单统计); mi7=new MenuItem(增加管理员);mi8=new Me
22、nuItem(删除管理员); mi10=new MenuItem(订户管理); m1.add(mi1);m3.add(mi10);m2.add(mi4);m2.add(mi11); m4.add(mi7);m4.add(mi8);m5.add(mi3); final Container con=this.getContentPane(); con.add(lb1); con.add(lb3);con.add(lb4); con.setLayout(new GridLayout(4,1,1,1); lb1.setFont(new Font(黑体,Font.BOLD,40); lb1.setFor
23、eground(Color.blue); lb1.setBounds(new Rectangle(16, 13, 93, 28); lb3.setFont(new Font(黑体,Font.BOLD,25); lb3.setForeground(Color.black); lb4.setFont(new Font(黑体,Font.BOLD,20); lb4.setForeground(Color.black); mi1.addActionListener(this); mi3.addActionListener(this); mi4.addActionListener(this); mi7.a
24、ddActionListener(this); mi8.addActionListener(this); mi10.addActionListener(this); mi11.addActionListener(this); this.setMenuBar(mb); setBounds(300,300,460,300); setVisible(true); setResizable(false); setSize(700,500); setLocationRelativeTo(null); /鼠标事件 public void actionPerformed(final ActionEvent
25、e) if(e.getSource()=mi1) /目录查询 new SimpleTable(); else if(e.getSource()=mi3) /关于系统 JOptionPane.showMessageDialog(null, 系统名称:报刊订阅管理系统,关于系统,JOptionPane.INFORMATION_MESSAGE); else if(e.getSource()=mi4) /订单查询 new DDxinxi(); else if(e.getSource()=mi7) /增加管理员 new addadmin(); else if(e.getSource()=mi8) new
26、 deleteadmin(); /删除管理员 else if(e.getSource()=mi10) /订户管理 new DHTable(); else if(e.getSource()=mi11) /订单统计 new orderdetail(); 8.系统测试报告8.1 登录测试双击可执行文件BKDY.jar打开应用系统,可见登陆界面;当输入错误帐号密码时弹出错误对话框,只有输入了正确的帐号密码才能登录到主界面。当输入空帐号空密码时则提示输入错误。如下面两幅图:8.2 目录管理功能测试8.2.1 添加目录在相应输入框内输入所要添加的目录的信息,点击“插入”,相关目录信息则插入到数据库中,并通
27、过表格显示出来。同时输入框清空,等待下次目录信息的添加。如图:8.2.2 修改目录在修改目录框中,输入要修改目录的编号,按“查询”即可把该目录所有信息查出来(如左图),点击“修改”即可对目录信息进行修改(如右图)。最后确定,即可把修改后信息放进数据库中,并从表格显示出来,同时输入框清空,等待下次的修改:8.2.3 删除目录如上图,输入目录编号查询可以查询所要删除目录的名字。点击“删除”可以把该目录删除掉。输入框清空等待下一次的删除操作:8.2.4 按目录编号查询8.2.5 按目录名字查询 输入要查询目录的名字,点击“查询”便可以显示出所查询目录的所有信息:8.3 订户管理功能测试 8.3.1 添加订户(参考“目录管理”,操作基本类似,略) 8.3.2 删除订户(参考“目录管理”,操作基本类似,略) 8.3.3 修改订户(参考“目录管理”,操作基本类似,略) 8.3.4 按编号查询订户(参考“目录管理”,操作基本类似,略) 8.3.5 按名字查询订户(参考“目录管理”,操作基本类似,略)订户管理界面如图:订单管理界面:8.4 订单管
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1