资源描述
.计算机科学系课程设计报告 黔南民族师范学院图书馆管理系统课题组成员姓名学号崔建虎1108045102冯灵兵1108045138课程名称:信息系统开发指导教师:郭勇班 级: B11计信班专 业:信息管理与信息系统学 期: 2013-2014二 O一 四 年 六 月 九 日1概述1.1 课题背景(课题背景及现行系统存在的问题)1.2 目的与意义1.3 课题目标1.4 可行性分析1.5 进度计划1.6 分工介绍(2人以上课题)2 系统分析2.1 系统调查(调查途径、方法、手段)2.2 组织结构与职责(大系统)2.3 专业术语(行业专业术语)2.4 业务与数据类分析(列举出业务与数据类,主要对象的ER图,大课题需有UC矩阵图)2.5 系统总体结构(画出系统总体结构图)3 系统设计3.1 技术方案介绍3.1.1 开发技术平台及要求(技术特点、实际运行客户端及服务器端软硬件及网络要求等)3.1.2 开发软件(主要与辅助软件、第三方组件、插件、控件等)3.1.3 数据库系统简介3.2 系统开发规范(系统文件目录结构、源程序、数据库的命名统一规范)3.3 业务流程设计(画出重要的业务流程图,至少一个)3.4 功能设计(按子系统或模块划分的功能图表)3.5 数据库设计(应有相应的设计表结构与关系图表)3.6 安全设计(针对系统安全性方面的措施及技术)3.7 代码设计(系统中主要的对象代码规范)3.8 I/O设计(特殊的I/O设计说明)3.8.1 输入设计:输入校验说明、特殊的输入手段与方法说明3.8.2 输出设计:输出方式、格式、报表及图表说明3.9 界面设计(总体要求与特色)3.10 特殊模块设计(如果有,比如一些公共类的设计说明)4 系统实现分小标题罗列出主要模块功能界面及关键源程序、原型截图5 系统测试(包括测试环境、测试用例、测试结果)5.1 单元测试(对个别特殊功能进行的测试)5.2 集成测试(含分离客户端与服务器机器的应用环境模拟测试)5.3 并发测试(客户/服务器模式的需进行)5.4 平台测试(实际应用中的不同版本操作系统与浏览器兼容性测试)6 系统评价6.1 总体评价6.2 存在的问题7 总结7.1 收获7.2 改进的方法或思路黔南民族师范学院图书馆管理系统设计报告1概述1.1课题背景(课题背景及现行系统存在的问题)图书馆管理系统的主要工作是对图书馆的借书、还书和更新图书以信息化的方式进行管理,最大限度的减少各个环节中可能出现的错误,有效减少因漏记、错记导致的信息错误,降低人员的工作量,及时掌握图书信息,提高对图书管理的灵活性,使图书馆能够合理控制借书,新书入库的每个关键步骤,提高图书馆的管理运行。1.2目的与意义提高工作效率,降低图书管理员的工作量。使图书管理员实时掌握图书的去向,图书馆图书保有量。1.3课题目标尽可能的开发出一个图书管理系统,对图书馆的图书进行实时去向确定,图书剩余量确定。系统要求如下:(1) 界面设计美观大方,操作方便、快捷、灵活。(2) 实现强大的借阅、库存管理,包括图书信息、入库时间,借阅次数,本次借阅人。(3) 能够在不同的操作系统下运行,不局限于特定的平台。(4) 提供数据库备份和恢复功能。提供技术支持的联系方式,可以使用邮件进行沟通,或者直接联系到技术网站。1.4可行性分析黔南民族师范学院图书馆是一个中型的综合性图书馆,为了更好的管理图书借阅,使图书能为更多的人所使用,特此开发一图书管理系统。可行性研究的前提:附加引进新书、图书受损等功能以增加管理的灵活性。系统的功能要符合本图书馆的实际情况。管理内容比较多,涉及窗口容易混乱,应提供窗口集合操作和菜单管理。支持数据库备份和恢复功能,提高系统安全性。总结:如若交给软件公司进行开发,则属于一个小的系统,很容易完成。但成本相对有点高。1.5进度计划支出:根据预算,此系统大概需要6个人,为此需要支付9万元的工资及各种福利待遇,项目的安装、调试以及用户培训、员工出差费用支出需要2.5万元;在项目后期维护阶段预计需要投入2万元的资金,累计项目投入需要13.5万元。需要3个月才能开发使用,除去系统分析,测试,确认等,程序开发需要80天的时间进行系统设计、程序编码、系统测试、程序调试和系统打包部署工作。1.6分工介绍(2人以上课题)崔建虎进行系统的分析、系统设计、界面的分析部署等。冯灵兵进行程序编码、系统测试调试等。2系统分析2.1系统调查(调查途径、方法、手段)直接参加图书馆管理业务的实践,阅读和分析现有系统的资料,发现现存系统存在的不足。2.2组织结构与职责(大系统)由于图书馆管理系统规模比较小,专业性较强,偏向于技术性,而且小组成员不多,所以最终选择职能型组织结构。2.3专业术语(行业专业术语)OAs:办公自动化系统TPS:事物处理系统MIS:管理信息系统2.4业务与数据类分析(列举出业务与数据类,主要对象的ER图,大课题需有UC矩阵图)通过对学校的图书馆借书、还书的调查 ,弄清了借书还书的业务流程图,如下图所示:通过对业务流程图的细化,可得到系统的分层数据流图。系统U/C矩阵分析过程/数据矩阵(U/C矩阵)U/C矩阵是用来表达过程与数据两者之间的关系。矩阵中的行表示数据类,列表示过程,并以字母U(Use)和C(Create)来表示过程对数据类的使用和产生。U/C矩阵是MIS开发中用于系统分析阶段的一个重要工具。提出了一种用关系数据库实现U/C矩阵的方法,并对其存储、正确性检验、表上作业等做了分析。2.5系统总体结构(画出系统总体结构图)3系统设计3.1技术方案介绍3.1.1开发技术平台及要求(技术特点、实际运行客户端及服务器端软硬件及网络要求等)利用Java技术进行开发,能够在Windows系统运行就行。3.1.2开发软件(主要与辅助软件、第三方组件、插件、控件等)基础类的:JDK、JRE中间件:WEBSPHERE、WEBLOGIC、JBOSS、TOMCAT、RESIN等开发工具:ECLIPSE、JBUILDER、NETBEANS、RATIONAL等此外还有很多其它工具:如IBM WID(SOA开发)、Business Moduler数据库:SQL server 20053.2数据库系统简介SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL Server 2005 数据引擎是本企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。3.3业务流程设计(画出重要的业务流程图,至少一个)3.4功能设计(按子系统或模块划分的功能图表)用例分析图3.5数据库设计(应有相应的设计表结构与关系图表)依据数据库的原理,并结合以上E-R图,经过转化,即可进行数据库的物理设计。基于以上数据库的逻辑设计,考虑程序设计的简易性,本系统决定采用一个数据库,在其下创建7个数据表,其结构分别如下:1.图书信息表2.图书丢失登记表,其字段列表如表所示。3. 图书归还登记表,其字段列表如表所示4.学生信息表(tVip),其字段列表如表所示5.管理员信息表6. 图书超期时间登记表7.图书预约表3.6安全设计(针对系统安全性方面的措施)校园图书管理系统本身没有什么重要信息,存在安全风险较小。这时候我们只需装个安全软件,定期进行安全扫描即可。图书管理系统的主机应不进行互联网联网。3.7代码设计(系统中主要的对象代码规范)主要有六个类:登录类,图书信息表类,学生信息表类,管理员信息表类,图书归还类,图书借阅类,数据库类。部分代码分别如下登录类:package xuyaodelei;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.table.*;import javax.swing.event.*;import java.sql.*;import java.util.*;import java.util.Date;public class Login extends JFrame implements ActionListener private JPanel jp=new JPanel();/创建JPanel对象private JLabel jlArray=/创建标签组new JLabel(用户IP),new JLabel(端口号),new JLabel(用户名), new JLabel(密 码),new JLabel() ; private JButton jbArray=/创建按钮数组 new JButton(学生登录),new JButton(清空),new JButton(管理员登录) ; private JTextField jtxtArray= /创建文本框 new JTextField(127.0.0.1),new JTextField(3306),new JTextField(1001) ; private JPasswordField jpassword=new JPasswordField(number1); /创建密码框 String sql; public Login() jp.setLayout(null); /设置JPanel的布局管理器 for(int i=0;i4;i+) /对标签与按钮控件循环处理 jlArrayi.setBounds(30,20+i*50,80,25);/设置标签与按钮的大小和位置 jp.add(jlArrayi);/将标签和按钮添加进JPanel容器中 for(int i=0;i3;i+)/设置按钮的大小位置并为其添加事件监听器 jbArrayi.setBounds(10+i*120,230,100,25); jp.add(jbArrayi); jbArrayi.addActionListener(this); for(int i=0;i3;i+)/设置文本框的大小位置并为其添加事件监听器 jtxtArrayi.setBounds(80,20+50*i,180,25); jp.add(jtxtArrayi); jtxtArrayi.addActionListener(this); jpassword.setBounds(80,170,180,25);/设置密码框的大小位置 jp.add(jpassword);/将密码框添加进JPanel容器 jpassword.setEchoChar(*);/设置密码框的回显字符 jpassword.addActionListener(this);/为密码框注册监听器 jlArray4.setBounds(10,280,300,25);/设置用于显示登录状态的标签的大小位置 jp.add(jlArray4); /将标签添加进JPanel容器 this.add(jp); Image image=new ImageIcon(ico.gif).getImage();/对logo图片进行初始化 this.setIconImage(image); /设置窗体的大小位置及可见性 this.setTitle(登录); this.setResizable(false); this.setBounds(100,100,400,350); this.setVisible(true); /实现ActionListener接口中的方法 public void actionPerformed(ActionEvent e) /事件源为文本框 String mgno=jtxtArray2.getText().trim(); String mgIP=jtxtArray0.getText().trim(); String port=jtxtArray1.getText().trim(); String message=mgIP+:+port; if(e.getSource()=jtxtArray0) jtxtArray1.requestFocus();/切换输入焦点到下一个框 if(e.getSource()=jtxtArray1) jtxtArray2.requestFocus();/切换输入焦点到下一个框 if(e.getSource()=jtxtArray2) jpassword.requestFocus();/切换输入焦点到密码框 else if(e.getSource()=jbArray1)/事件源为清空按钮 /清空所有信息 jlArray4.setText(); jtxtArray2.setText(); jpassword.setText(); /将输入焦点设置到文本框 jtxtArray2.requestFocus(); else if(e.getSource()=jbArray2)/事件源为管理员登录按钮 /判断用户名和密码是否匹配 if(!mgno.matches(d+) /如果用户名格式输入有误 JOptionPane.showMessageDialog(this,用户名格式错误!,信息, JOptionPane.INFORMATION_MESSAGE); return; if(jtxtArray0.getText().trim().equals() /如果用户IP文本框为空,提示 JOptionPane.showMessageDialog(this,用户IP不能为空!,信息, JOptionPane.INFORMATION_MESSAGE); return; if(jtxtArray1.getText().trim().equals() /如果端口号文本框为空,提示 JOptionPane.showMessageDialog(this,用户端口号不能为空!,信息, JOptionPane.INFORMATION_MESSAGE); return; sql=select mgNo,password from manager where mgNo=+Integer.parseInt(mgno); tryString mgNo=;String password=;jlArray4.setText(恭喜您,登录成功!); new Root(mgNo); this.dispose(); catch(Exception e1)e1.printStackTrace(); else if(e.getSource()=jbArray0)/事件源为学生登录按钮 if(!jtxtArray2.getText().trim().matches(d+)/若学号格式错误,输出提示对话框JOptionPane.showMessageDialog(this,输入有误,学号只能为数字!,消息, JOptionPane.INFORMATION_MESSAGE); return; if(jtxtArray0.getText().trim().equals()/若用户IP文本框输入为空,提示 JOptionPane.showMessageDialog(this,用户IP不能为空!,信息, JOptionPane.INFORMATION_MESSAGE); return; if(jtxtArray1.getText().trim().equals()/若端口号文本框输入为空,提示 JOptionPane.showMessageDialog(this,用户端口号不能为空!, 信息,JOptionPane.INFORMATION_MESSAGE); return; /查询学号文本中所输学号是否存在于STUDENT表中 sql=select StuNO,Password from STUDENT where StuNO= +Integer.parseInt(jtxtArray2.getText().trim(); tryString mgNo=;String password=;jlArray4.setText(恭喜您,登录成功!); new StudentSystem(); this.dispose(); catch(Exception e1)e1.printStackTrace(); public static void main(Stringargs) new Login(); 图书信息类:package xuyaodelei;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.table.*;import java.sql.*;import java.util.*;import java.util.Date;public class BookManage extends JPanel implements ActionListenerprivate JSplitPane jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);private JPanel jpt=new JPanel();String str1=new String 7;String sql; DataBase db;private JLabel jlArray=new JLabelnew JLabel( 书 号),new JLabel( 书 名),new JLabel( 作 者),new JLabel( 出 版 社),new JLabel( 购买日期),new JLabel( 已 预 约),new JLabel( 已 借 阅);private JTextField jtxtArray=new JTextFieldnew JTextField(),new JTextField(),new JTextField(),new JTextField(),new JTextField();/设置JButton按钮的文本private JButton jbArray= new JButton(图书入库), new JButton(删除图书), new JButton(修改图书记录), new JButton(查找图书);/创建标题Vector head = new Vector();head.add(书号);head.add(书名);head.add(作者);head.add(出版社);head.add(购买日期);head.add(是否借阅);head.add(是否预约);/在下部子窗口中设置表格Vector data=new Vector(); /创建表格模型 DefaultTableModel dtm=new DefaultTableModel(data,head); /创建Jtable对象JTable jt=new JTable(dtm);/将JTable封装到滚动窗格JScrollPane jspn=new JScrollPane(jt);/创建表示下拉列表框数据模型的字符串数组private String str=否,是;/创建下拉列表框private JComboBox jcp1=new JComboBox(str);private JComboBox jcp2=new JComboBox(str);public BookManage()this.setLayout(new GridLayout(1,1);/设置面板的上部分为空布局管理器jpt.setLayout(null);/设置jspt中分割条的初始位置jsp.setDividerLocation(140);/设置分隔条的宽度jsp.setDividerSize(4);jsp.setTopComponent(jpt);jsp.setBottomComponent(jspn);for(int i=0;i5;i+)jpt.add(jtxtArrayi);for(int i=0;i7;i+)jpt.add(jlArrayi);if(i2&i5)jlArrayi.setBounds(265,10+30*(i-3),100,20);jtxtArrayi.setBounds(375,10+30*(i-3),120,20);elsejlArrayi.setBounds(495,10+30*(i-5),100,20);for(int i=0;i5;i+)jtxtArrayi.addActionListener(this);this.add(jsp);jpt.add(jcp1);jpt.add(jcp2);/设置下部子窗格 jsp.setBottomComponent(jspn);jcp1.setBounds(595,10,100,20);jcp2.setBounds(595,40,100,20);/将JButton添加进jptfor(int i=0;i4;i+)jpt.add(jbArrayi);jbArrayi.setBounds(150+112*i,100,112,25);/设置监听器for(int i=0;i4;i+)jbArrayi.addActionListener(this);/设置窗体的大小位置及可见性this.setBounds(5,5,600,500);this.setVisible(true); public void actionPerformed(ActionEvent e) /设置鼠标焦点if(e.getSource()=jtxtArray0)jtxtArray1.requestFocus(); if(e.getSource()=jtxtArray1) jtxtArray2.requestFocus(); if(e.getSource()=jtxtArray2) jtxtArray3.requestFocus(); if(e.getSource()=jtxtArray3) jtxtArray4.requestFocus(); if(e.getSource()=jbArray0)/添加图书this.insertBook(); if(e.getSource()=jbArray1)/将书号为书号框的书从书库删除 this.deleteBook(); if(e.getSource()=jbArray2)/将书号为书号框的书信息进行修改 this.updateBook(); if(e.getSource()=jbArray3)/查询图书信息 this.searchBook(); public void insertBook()for(int i=0;i5;i+)/声明输入变量 str1i=jtxtArrayi.getText().trim();if(str10.equals()&str11.equals()&str12.equals() &str13.equals()&str14.equals()/当输入为空进行提示JOptionPane.showMessageDialog(this,图书信息不能为空!, 消息,JOptionPane.INFORMATION_MESSAGE); return; if(!str10.equals()&!str11.equals()&!str12.equals() &!str13.equals()&!str14.equals()/将图书信息插入Book表str15=jcp1.getSelectedItem().toString();str16=jcp2.getSelectedItem().toString();sql=insert into BOOK values(+str10+,+str11+, + str12 + , +str13+,+ str14+,+str15+,+str16+);PreparedStatement ps=null; Connection ct=null; ResultSet rs=null; try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); ct=DriverManager.getConnection(jdbc:odbc:tushu,sa,700700); ps=ct.prepareStatement(insert into book values(+str10+,+str11+, + str12 + , +str13+,+ str14+,+str15+,+str16+); ps.setString(1,str10); ps.setString(2,str11); ps.setString(3,str12); ps.setString(4,str13); ps.setString(5,str14); ps.setString(6,str15); ps.setString(6,str16); ps.executeUpdate(); catch (Exception e) finally try if(rs!=null)rs.close(); if(ps!=null)ps.close();if(ct!=null)ct.close(); catch (Exception e) Vector v = new Vector(); for(int i=1;i=7;i+)/将每列添加到临时数组vv.add(str1i-1); data.add(v);dtm.setDataVector(data,head);/更新tablejt.updateUI();jt.repaint();return; public void deleteBook()String bookno = jtxtArray0.getText().trim();if(bookno.equals()/当书号输入为空,提示JOptionPane.showMessageDialog(this,书号不能为空!, 消息,JOptionPane.INFORMATION_MESSAGE);return;sql=select * from RECORD where BookNO=+Integer.parseInt(bookno);db=new DataBase();sql=delete from book where BookNO=+Integer.parseInt(bookno);public void updateBook()String bookno = jtxtArray0.getText().trim();if(bookno.equals()/当书号输入为空时,进行提示JOptionPane.showMessageDialog(this,请输入需要更改信息图书的书号!, 消息,JOptionPane.INFORMATION_MESSAGE);return;else/当输入书号后的情况 for(int i=0;i0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 2: sql=update BOOK set Author=+str12+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 3: sql=update BOOK set BookName=+str11+,+Author= +str12+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 4: sql=update BOOK set Publishment=+str13+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 5: sql=update BOOK set BookName=+str11+,+Publishment= +str13+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 6: sql=update BOOK set Author=+str12+,+Publishment= +str13+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 7: sql=update BOOK set BookName=+str11+,+Author=+str12 +,+Publishment=+str13+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 8: sql=update BOOK set BuyTime=+str14+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 9: sql=update BOOK set BookName=+str11+,+BuyTime= +str14+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 10: sql=update BOOK set Author=+str12+,+BuyTime= +str14+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 11: sql=update BOOK set BookName=+str11+,+Author=+str12 +,+BuyTime=+str14+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 12: sql=update BOOK set Publishment=+str13+,+BuyTime= +str14+ where BookNO=+b; if(flag0)JOptionPane.showMessageDialog(this,恭喜你,修改成功!, 消息,JOptionPane.INFORMATION_MESSAGE); break; case 13: sql=update BOOK set BookName=+str11+,+Publishment=
展开阅读全文