图书管理系统需求分析报告附有java代码.doc_第1页
图书管理系统需求分析报告附有java代码.doc_第2页
图书管理系统需求分析报告附有java代码.doc_第3页
图书管理系统需求分析报告附有java代码.doc_第4页
图书管理系统需求分析报告附有java代码.doc_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

目录1 概述 1.编写目的 2.项目背景 3.定义 4.参考资料 5.开发环境2 需求分析 1.问题提出 2.系统的业务功能分析 3.需完成的功能3 系统需求说明 1.对功能的规定 2.对性能的规定 3.输入输出要求4 新系统的逻辑模型 1.图书馆组织机构分析 2.系统功能结构图 3.业务流程图 4.数据流程图 5.数据字典一概述1、编写目的 按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的图书管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容2、项目背景数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了。造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。 。 a.待开发的软件系统的名称是图书管理系统 b.本软件适用于教育界,他是比较完善的系统管理软件,对图书馆的书籍、读者资料、借还书等可以进行方便的管理。 C.开发员:蔚奇秀,曹海花,李小峰,祁乐3、定义数据流程图(DFD):为描述软件系统中的信息流提供了一个图形方法。箭头代表数据流,方框代表数据的源点或终点,圆框代表数据流的交换,双杠代表数据存储的地方。数据字典是对数据流程图中的数据,变换等进行精确的定义。4、参考资料 1萨师煊、王珊数据库系统概论 高等教育出版社2000.2 2俞盘祥、沈金发数据库系统原理清华大学出版社2000.6 3王珊、陈红数据库系统原理教程清华大学出版社1998.7 4施伯乐、丁宝康数据库系统教程高等教育出版社1999.125、 开发环境 WindowXP,/7 Microsoft Visual C+, SQLSerevr2000.一、 需求分析1、问题的提出: 图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。2、系统的业务功能分析: 1) 建立读者类,实现对读者编号、姓名、所在单位等信息的描述。 2) 建立书籍类,实现对图书的编号、名称、作者、出版社、出版日期、价格、采购日 期、单价、数量、金额、版次、分类号、ISBN等信息的描述。 3) 建立用于记录借书情况的类,实现输入读者编号和书籍编号后成功借书的描述。 系统的业务流程分析:3、需完成的功能1) 图书基本情况的录入、修改、删除等基本操作。2) 办理借书卡模块。3) 实现借书功能。4) 实现还书功能。5) 能方便的对图书进行查询。6) 对超期的情况能自动给出提示信息。7) 具有数据备份和数据恢复功能。 二、 系统需求说明 1、对功能的规定经过以上详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标。 以下是图书管理系统必须具备的功能:1.图书基本情况的录用:对于购进的新书,系统必须具备图书信息资料的录入功能。当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。2.办理借书卡模块:系统的主要功能之一,供本校学生借阅图书。3.实现借书功能:可以方便学生们借书。 4.实现还书功能:归还图书,并进行登记。5. 能方便的对图书进行查阅:可以快速简单的对图书进行查找一些信息。6. 对超期的情况能自动给出提示信息:告诉那些同学说借书的时间已超期。7. 具有数据备份和数据恢复功能:可以在丢失后再找回。2、对性能的规定为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下的性能需求:(1)、系统处理的准确性和及时性系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。(2)、系统的开放性和系统的可扩充性图书管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。(3)、系统的易用性和易维护性图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。(4)、系统的标准性系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。(5)、系统的先进性目前计算系统的技术发展相当快,做为图书管理系统工程,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。(6)、系统的响应速度图书管理系统系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。3、输入输出要求 输入:键盘,鼠标,扫描仪等。 输出:显示器,打印机等。三、 新系统的逻辑模型1、图书馆组织机构分析 通过对图书馆工作人员的调查,图书馆主要有4个部门。借阅管理部负责图书的借阅管理;图书管理部负责书籍类别标准的制定,类别信息的输入;书籍类别信息的查询,修改;书籍信息的输入;读者管理部负责主要针对各类读者信息进行管理;系统管理部负责用户管理和密码管理。组织机构图如下:图书馆组织机构图2、系统功能结构图3、数据流程图 通过对业务流程图的细化,可得到系统的分层数据流图。如下图:顶层数据流图:图书馆管理系统的顶层数据图对顶层数据流图细化、分解可得到图书管理系统的第一层数据流图,如下图:图书馆管理系统的第一层数据图对第一层数据流图进一步细化、分解,可以得到第二层数据流图,如下图:借阅信息管理数据流图四Java代码 Book.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.sql.*;import java.text.*;import java.util.Date;import java.math.*;public class Book implements ActionListenerprivate JButton btn1,btn2,btn3,btn4; private JTextField jtfd1,jtfd2,jtfd3,jtfd5,jtfd6, jtfd7,jtfd8,jtfd9,jtfd10; private JComboBox jcbx; private JTextArea jta; private Connection con; private PreparedStatement pstmt1,pstmt2; private JFrame frame;public Book()JFrame.setDefaultLookAndFeelDecorated(true); frame=new JFrame(图书入库); Container content=frame.getContentPane(); Toolkit tool=frame.getToolkit(); Dimension wndsize=tool.getScreenSize(); JLabel lb1=new JLabel(书名:); JLabel lb2=new JLabel(条形码:); JLabel lb3=new JLabel(分类号:); JLabel lb4=new JLabel(分类名:); JLabel lb5=new JLabel(排架号:); JLabel lb6=new JLabel(出版社:); JLabel lb7=new JLabel(出版日期:); JLabel lb8=new JLabel(入库日期:); JLabel lb9=new JLabel(价格:); JLabel lb10=new JLabel(作者:); JLabel lb11=new JLabel(简介:); jtfd1=new JTextField(); jtfd2=new JTextField(); jtfd3=new JTextField(); String kindname=马克思列宁主义、毛泽东思想,综合性图书,哲学,社会科学总论, 政治、法律,军事,经济,文化、科学、教育、体育,语言文字,文学,天文学、地球科学, 生物科学,医药、卫生,农业科学,工业技术,艺术,历史、地理,数理化,自然科学总论, 环境科学,航空航天,交通; jcbx=new JComboBox(kindname); jtfd5=new JTextField(); jtfd6=new JTextField(); jtfd7=new JTextField(); jtfd8=new JTextField(); jtfd9=new JTextField(); jtfd10=new JTextField(); jtfd8.addFocusListener(new FocusHandler(); jta=new JTextArea(); jta.setLineWrap(true); btn1=new JButton(添加); btn2=new JButton(删除); btn3=new JButton(撤消); btn4=new JButton(退出); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); JPanel pl1=new JPanel(); JPanel pl2=new JPanel(); JPanel pl3=new JPanel(); JPanel pl4=new JPanel(); pl1.setLayout(new GridLayout(5,4,6,6); pl1.add(lb1); pl1.add(jtfd1); pl1.add(lb2); pl1.add(jtfd2); pl1.add(lb10); pl1.add(jtfd10); pl1.add(lb3); pl1.add(jtfd3); pl1.add(lb4); pl1.add(jcbx); pl1.add(lb5); pl1.add(jtfd5); pl1.add(lb6); pl1.add(jtfd6); pl1.add(lb7); pl1.add(jtfd7); pl1.add(lb8); pl1.add(jtfd8); pl1.add(lb9); pl1.add(jtfd9); GridBagLayout gridbag=new GridBagLayout(); GridBagConstraints constraints=new GridBagConstraints(); pl2.setLayout(gridbag); constraints.weightx=constraints.weighty=10.0; constraints.fill=constraints.BOTH; gridbag.setConstraints(lb11,constraints); constraints.weightx=1; constraints.gridwidth=1; pl2.add(lb11,constraints); gridbag.setConstraints(jta,constraints); constraints.weightx=9; constraints.gridheight=3; constraints.gridwidth=3; constraints.insets=new Insets(10,15,10,20); pl2.add(jta,constraints); GridBagLayout gridbag1=new GridBagLayout(); GridBagConstraints constraints1=new GridBagConstraints(); constraints1.weightx=1.0; constraints1.fill=constraints1.BOTH; pl3.setLayout(gridbag1); /gridbag1.setConstraints(pl1,constraints1); constraints1.weighty=0.8; constraints1.gridwidth=constraints1.REMAINDER; pl3.add(pl1,constraints1); /gridbag1.setConstraints(pl2,constraints1); constraints1.weighty=0.2; constraints1.gridheight=constraints.REMAINDER; pl3.add(pl2,constraints1); pl4.setLayout(new GridLayout(1,4,6,0); pl4.add(btn1); pl4.add(btn2); pl4.add(btn3); pl4.add(btn4); content.setLayout(new BorderLayout(); content.add(pl3,BorderLayout.CENTER); content.add(pl4,BorderLayout.SOUTH); frame.setBounds(100,100,550,400); frame.setResizable(false); frame.setVisible(true); try String sqlStr1,sqlStr2; sqlStr1=insert into book (bookname,bannercode,kindnumber,kindname,+ positionnumber,publishingcompany,publishtime,putintime,price,+ state,introduction,author) values(?,?,?,?,?,?,?,?,?,在架,?,?); sqlStr2=delete from book where bannercode=?; Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con=DriverManager.getConnection(jdbc:odbc:library); pstmt1=con.prepareStatement(sqlStr1); pstmt2=con.prepareStatement(sqlStr2); catch(ClassNotFoundException e) catch(SQLException sqle) class FocusHandler implements FocusListener java.util.Date today=new java.util.Date(); DateFormat format=DateFormat.getDateInstance(); String formatted=format.format(today); public void focusGained(FocusEvent e)Object obj=(JTextField)e.getSource(); if(obj=jtfd8) jtfd8.setText(formatted); public void focusLost(FocusEvent e) public void actionPerformed(ActionEvent e) String str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11; str1=jtfd1.getText().trim(); str2=jtfd2.getText().trim(); str3=jtfd3.getText().trim(); str4=(String)jcbx.getSelectedItem(); str5=jtfd5.getText().trim(); str6=jtfd6.getText().trim(); str7=jtfd7.getText().trim(); str8=jtfd8.getText().trim(); str9=jtfd9.getText().trim(); str10=jtfd10.getText().trim(); str11=jta.getText().trim(); int result; try Object obj=(JButton)e.getSource(); if(obj=btn1) if(str1.equals()|str2.equals()|str3.equals()|str4.equals()|str5.equals() JOptionPane.showMessageDialog(frame,cant be null); return; if(str6.equals()|str7.equals()|str8.equals()|str9.equals()|str10.equals() JOptionPane.showMessageDialog(frame,cant be null); return; java.sql.Date today1,today2; BigDecimal money=new BigDecimal(str9); today1=java.sql.Date.valueOf(str7); today2=java.sql.Date.valueOf(str8); pstmt1.setString(1,str1); pstmt1.setString(2,str2); pstmt1.setString(3,str10); pstmt1.setString(4,str4); pstmt1.setString(5,str5); pstmt1.setString(6,str6); pstmt1.setDate(7,today1); pstmt1.setDate(8,today2); pstmt1.setBigDecimal(9,money); pstmt1.setString(10,str11); pstmt1.setString(11,str10); result=pstmt1.executeUpdate(); if(result0) JOptionPane.showMessageDialog(frame,add successfully!); jtfd1.setText(); jtfd2.setText(); jtfd3.setText(); jtfd5.setText(); jtfd6.setText(); jtfd7.setText(); jtfd8.setText(); jtfd9.setText(); jtfd10.setText(); jta.setText(); else if(obj=btn2) if(str2.equals() JOptionPane.showMessageDialog(frame,bannercode cant be null); return; pstmt2.setString(1,str2); result=pstmt2.executeUpdate(); if(result0) JOptionPane.showMessageDialog(frame,Delete successfully!); else if(obj=btn3) jtfd1.setText(); jtfd2.setText(); jtfd3.setText(); jtfd5.setText(); jtfd6.setText(); jtfd7.setText(); jtfd8.setText(); jtfd9.setText(); jtfd10.setText(); jta.setText(); else if(obj=btn4) pstmt1.close(); pstmt2.close(); con.close(); frame.dispose(); catch(SQLException sqle) System.err.println(sqle); public static void main(Stringargs)new Book();BookInfo.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.table.*;import java.util.*;import java.sql.*;import javax.swing.table.AbstractTableModel;public class BookInfo implements ActionListener private JFrame frame; private Statement stmt; private Connection con; private JTable tableTest; private StringcolumnNames=书名,条形码,分类号,分类名,排架号,出版社, 出版日期,入库日期,状态,简介; private ObjectrowData=new Object10010; private JButton btn; private JRadioButton rbtn1,rbtn2; private JTextField jtfd; public BookInfo()frame=new JFrame(图书信息查询);Container content=frame.getContentPane(); btn=new JButton(查询); jtfd=new JTextField(); JPanel pl=new JPanel(); rbtn1=new JRadioButton(书名); rbtn2=new JRadioButton(条形码); rbtn1.setSelected(true); btn.addActionListener(this); ButtonGroup group=new ButtonGroup(); group.add(rbtn1); group.add(rbtn2); pl.setLayout(new GridLayout(1,4,10,0); pl.add(rbtn1); pl.add(rbtn2); pl.add(jtfd); pl.add(btn); tableTest=new JTable(rowData,columnNames);tableTest.setRowHeight(20); tableTest.setPreferredScrollableViewportSize(new Dimension(500, 30); JScrollPane scrollPane=new JScrollPane(tableTest); content.add(pl,BorderLayout.NORTH); content.add(scrollPane,BorderLayout.CENTER); frame.pack(); frame.setVisible(true); tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver); con=DriverManager.getConnection(jdbc:odbc:library); stmt=con.createStatement();catch(ClassNotFoundException e)System.err.println(e.getMessage();catch(SQLException e)System.err.println(e.getMessage();public void actionPerformed(ActionEvent e)Object obj=e.getSource(); ResultSet result; String sqlStr; int i=0; String str=jtfd.getText().trim(); if(rbtn2.isSelected() sqlStr=select bookname,bannercode,kindnumber,kindname,positionnumber,+ publishingcompany,publishtime,putintime,state,introduction from book where + bannercode=+str+; else sqlStr=select bookname,bannercode,kindnumber,kindname,positionnumber,+ publishingcompany,publishtime,putintime,state,introduction from book where + bookname like +str+%; try if(obj=btn) if(str.equals() JOptionPane.showMessageDialog(frame,Text was null!); return; result=stmt.executeQuery(sqlStr); for(int j=0;jrowData.length;j+) for(int k=0;k10;k+) rowDatajk=null; tableTest.repaint(); while(result.next() if(irowData.length) rowDatai0=result.getString(bookname); rowDatai1=result.getString(bannercode); rowDatai2=result.getString(kindnumber); rowDatai3=result.getString(kindname); rowDatai4=result.getString(positionnumber); rowDatai5=result.getString(publishingcompany); rowDatai6=result.getDate(publishtime); rowDatai7=result.getDate(putintime); rowDatai8=result.getString(state); rowDatai9=result.getString(introduction); i+; elseJOptionPane.showMessageDialog(frame,please specify the bookname!); jtfd.setText(); catch(SQLException sqle) System.err.println(sqle); public static void main(Stringargs)new BookInfo();Borrow.javaimport javax.swing.*;import java.awt.*;import java.sql.*;import java.awt.event.*;import java.util.*;import java.text.*;import java.math.*;public class Borrow extends JFrame implements ActionListenerprivate JTextField jtfd1,jtfd2,jtfd3,jtfd4; private JButton btn1,btn2,btn3; private Connection con; private Statement stmt; private PreparedStatement pstmt; private JFrame frame; private JLabel lb5;public Borrow()frame=new JFrame(借书); Container content=frame.getContentPane(); content.setLayout(new GridLayout(6,2,10,10); JLabel lb1=new JLabel(借书证号:); JLabel lb2=new JLabel(条形码:); JLabel lb3=new JLabel(借书日期:); JLabel lb4=new JLabel(应还日期:); lb5=new JLabel(罚款:); jtfd1=new JTextField(); jtfd2=new JTextField(); jtfd3=new JTextField(); jtfd4=new JTextField(); jtfd1.addFocusListener(new FocusHandler(); jtfd2.addFocusListener(new FocusHandler(); jtfd3.addFocusListener(new FocusHandler(); jtfd4.addFocusListener(new FocusHandler(); btn1=new JButton(确定); btn2=new JButton(退出); btn3=new JButton(交款); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); content.add(lb1); content.add(jtfd1); content.add(lb2); content.add(jtfd2); content.add(lb3); content.add(jtfd3); content.add(lb4); content.add(jtfd4); content.add(lb5); content.add(btn3); content.add(btn1); content.add(btn2); frame.setBounds(100,100,420,320); try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); con=DriverManager.getConnection(jdbc:odbc:library); stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); pstmt=con.prepareStatement(insert into borrow(user_cardnumber,bannercode,borrowdate,+ receivedate,renew) values(?,?,?,?,否); catch(ClassNotFoundException e) System.err.println(e); catch(SQLException e) System.err.println(e); frame.setVisible(true); class FocusHandler implements FocusListener String str1,sqlStr1,state; ResultSet result; java.util.Date today1=new java.util.Date(); java.util.Date today2=new java.util.Date(); DateFormat format=DateFormat.getDateInstance(); String formatted1=format.format(today1); public void focusGained(FocusEvent e) Object obj=(JTextField)e.getSource(); if(obj=jtfd4) today2.setMonth(today1.getMonth()+1); String formatted2=format.format(today2); jtfd4.setText(formatted2); try if(obj=jtfd2) str1=jtfd1.getText().trim(); if(str1.equals() jtfd1.requestFocus(); JOptionPane.showMessageDialog(frame,Text was null!); return; sqlStr1=select * from user where user_cardnumber=+str1+; result=stmt.executeQuery(sqlStr1); if(!result.next() jtfd1.requestFocusInWindow(); JOptionPane.showMessageDialog(frame,请注册!); jtfd1.setText(); return; else if(result.getString(user_state).equals(挂失) jtfd1.requestFocus(); JOptionPane.showMessageDialog(frame,This card has been reportlost!); jtfd1.setText(); return; sqlStr1=select * from borrow where user_cardnu

温馨提示

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

评论

0/150

提交评论