第一篇:图书管理系统需求分析报告附有java代码
需
求
分
析
报
告
课程设计题目 :图书管理系统
专业:计算机科学与技术
班级:11060341X 姓名:蔚奇秀,曹海花,李小峰,祁乐
目录 一.概述 1.编写目的 2.项目背景 3.定义 4.参考资料 5.开发环境 二.需求分析 1.问题提出
2.系统的业务功能分析 3.需完成的功能 三.系统需求说明 1.对功能的规定 2.对性能的规定 3.输入输出要求 四.新系统的逻辑模型 1.图书馆组织机构分析 2.系统功能结构图 3.业务流程图 4.数据流程图 5.数据字典 一.概述
1、编写目的
按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的图书管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容
2、项目背景
数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了。造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。
a.待开发的软件系统的名称是《图书管理系统》
b.本软件适用于教育界,他是比较完善的系统管理软件,对图书馆的书籍、读者资料、借还书等可以进行方便的管理。
C.开发员:蔚奇秀,曹海花,李小峰,祁乐
3、定义
数据流程图(DFD):为描述软件系统中的信息流提供了一个图形方法。箭头代表数据流,方框代表数据的源点或终点,圆框代表数据流的交换,双杠代表数据存储的地方。
数据字典是对数据流程图中的数据,变换等进行精确的定义。
4、参考资料
1.萨师煊、王珊《数据库系统概论》 高等教育出版社2000.2
2.俞盘祥、沈金发《数据库系统原理》清华大学出版社2000.6
3.王珊、陈红《数据库系统原理教程》清华大学出版社1998.7
4.施伯乐、丁宝康《数据库系统教程》高等教育出版社1999.12
5、开发环境
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、数据流程图
通过对业务流程图的细化,可得到系统的分层数据流图。如下图: 顶层数据流图:
图书管理系统读者信息会员信息读者审核信息借阅信息借还书信息读者图书信息借书卡、借阅信息管理员 图书馆管理系统的顶层数据图
对顶层数据流图细化、分解可得到图书管理系统的第一层数据流图,如下图:
借阅信息 借还书信息P1借阅信息管理借书信读者息还书信息读者P2图书信息管理书库文件管理员借书卡、借阅信息读者资料读者信息审核会员信息P3读者信息管理读者记录管理员信息P4系统管理 图书馆管理系统的第一层数据图
对第一层数据流图进一步细化、分解,可以得到第二层数据流图,如下图: 借书卡P1.1身份审核合格读者借书信息读者记录借还书信息P1.2借书登记管理员还书信息书库文件P1.3书籍检查合格书籍读者还书信息P1.4还书处理借阅信息管理数据流图
四.Java代码 Book.java import 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 ActionListener {private 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)',?,?)”;sqlStr2=“delete from book where bannercode=?”;
values(?,?,?,?,?,?,?,?,?,'
在架 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,”can't be null“);return;}
if(str6.equals(”“)|str7.equals(”“)|str8.equals(”“)|str9.equals(”“)|str10.equals(”“)){JOptionPane.showMessageDialog(frame,”can't 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(result>0){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 can't be null“);return;}
pstmt2.setString(1,str2);result=pstmt2.executeUpdate();if(result>0){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(String[]args){new Book();} } BookInfo.java import 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 String[]columnNames={”书名“,”条形码“,”分类号“,”分类名“,”排架号“,”出版社“, ”出版日期“,”入库日期“,”状态“,”简介“};private Object[][]rowData=new Object[100][10];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);try
{Class.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;j if(i rowData[i][0]=result.getString(”bookname“);rowData[i][1]=result.getString(”bannercode“);rowData[i][2]=result.getString(”kindnumber“);rowData[i][3]=result.getString(”kindname“);rowData[i][4]=result.getString(”positionnumber“);rowData[i][5]=result.getString(”publishingcompany“);rowData[i][6]=result.getDate(”publishtime“);rowData[i][7]=result.getDate(”putintime“);rowData[i][8]=result.getString(”state“); rowData[i][9]=result.getString(”introduction“);i++;} else{JOptionPane.showMessageDialog(frame,”please specify the bookname!“); } } jtfd.setText(”“);} } catch(SQLException sqle){System.err.println(sqle);} } public static void main(String[]args){new BookInfo();} } Borrow.java import 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 ActionListener {private 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; 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());public Borrow(){frame=new JFrame(”借书“);Container content=frame.getContentPane(); content.setLayout(new GridLayout(6,2,10,10)); 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_cardnumber=“+ ”'“+str1+”'“;result=stmt.executeQuery(sqlStr1);int i=0;while(result.next()){i=i+1;} if(i==4){ jtfd1.requestFocus();JOptionPane.showMessageDialog(frame,”you can't borrow more than four books!“); jtfd1.setText(”“); return;} } } if(obj==jtfd3){ jtfd3.setText(formatted1); str1=jtfd2.getText().trim();if(str1.equals(”“)){ jtfd2.requestFocus();JOptionPane.showMessageDialog(frame,”Text was null!“);return;} sqlStr1=”select state from book where bannercode=“+”'“+str1+”'“;result=stmt.executeQuery(sqlStr1);if(!result.next()){jtfd2.requestFocus(true);JOptionPane.showMessageDialog(frame,”invalid bannercode!“); jtfd2.setText(”“);return;} else {state=result.getString(”state“); if(state.equals(”离架“)){jtfd2.requestFocus(true);JOptionPane.showMessageDialog(frame,”this book has been lent!“); jtfd2.setText(”“);return;} } } } catch(SQLException sqle){System.err.println(sqle);} } public void focusLost(FocusEvent e){ try{ str1=jtfd1.getText().trim();sqlStr1=”select sum_account from punishment user_cardnumber=“+ ”'“+str1+”'“; result=stmt.executeQuery(sqlStr1); if(result.next()) { BigDecimal money=result.getBigDecimal(”sum_account“,2); lb5.setText(”罚款:“+money); } else {lb5.setText(”罚款:0.00“); } } catch(SQLException sqle) {System.err.println(sqle); } } where } public void actionPerformed(ActionEvent e){String sqlStr1,sqlStr2,str1,str2,str3,str4;int result;str1=jtfd1.getText().trim();str2=jtfd2.getText().trim();str3=jtfd3.getText().trim();str4=jtfd4.getText().trim();java.sql.Date today1,today2; Object obj=(JButton)e.getSource();try{ if(obj==btn1){ if(str1.equals(”“)|str2.equals(”“)|str3.equals(”“)|str4.equals(”“)) {JOptionPane.showMessageDialog(frame,”The Text can't be null!“);return;} sqlStr1=”update book set state=' 离 架 ' where bannercode=“+”'“+str2+”'“; today1=java.sql.Date.valueOf(str3);today2=java.sql.Date.valueOf(str4);pstmt.setString(1,str1);pstmt.setString(2,str2);pstmt.setDate(3,today1);pstmt.setDate(4,today2); result=pstmt.executeUpdate();if(result>0){JOptionPane.showMessageDialog(frame,”borrow successfully!“);} result=stmt.executeUpdate(sqlStr1);if(result>0){JOptionPane.showMessageDialog(frame,”update successfully!“);} jtfd1.setText(”“);jtfd2.setText(”“);jtfd3.setText(”“);jtfd4.setText(”“);} if(obj==btn3){sqlStr1=”delete from punishment where user_cardnumber=“+ ”'“+str1+”'“;result=stmt.executeUpdate(sqlStr1);if(result>0){JOptionPane.showMessageDialog(frame,”pay successfully!“);lb5.setText(”罚款:0.00“);} } if(obj==btn2){stmt.close();con.close();frame.dispose();} } } catch(SQLException sqle){System.err.println(sqle);} } public static void main(String[]args){new Borrow();} BorrowQuery.java import javax.swing.*;import javax.swing.table.*;import java.sql.*;import java.awt.event.*;import java.awt.*;import java.util.*; public class BorrowQuery implements ActionListener { private JFrame frame;private JButton btn1,btn2;private JTextField jtfd1,jtfd2;private JTable tableTest;private String[]columnNames={”借阅证号“,”图书条码“,”借书日期“,”应还日期“}; private Object[][] rowData=new Object[4][4];private Statement stmt;private Connection con;public BorrowQuery() { tableTest.setPreferredScrollableViewportSize(new JFrame.setDefaultLookAndFeelDecorated(true);frame=new JFrame(”借阅查询“);Container content=frame.getContentPane();content.setLayout(new BorderLayout()); JLabel lb1=new JLabel(”借阅证号:“);JLabel lb2=new JLabel(”姓名:“);btn1=new JButton(”查询“);btn2=new JButton(”退出“);btn1.addActionListener(this);btn2.addActionListener(this);jtfd1=new JTextField();jtfd2=new JTextField();JPanel pl=new JPanel();pl.setLayout(new GridLayout(2,3,10,10));pl.add(lb1);pl.add(jtfd1);pl.add(btn1);pl.add(lb2);pl.add(jtfd2);pl.add(btn2); tableTest=new JTable(rowData,columnNames);tableTest.setRowHeight(30);Dimension(500,60));JScrollPane scrollPane=new JScrollPane(tableTest); } content.add(pl,BorderLayout.NORTH);content.add(scrollPane,BorderLayout.CENTER);frame.pack();frame.setVisible(true);try { } catch(ClassNotFoundException e){ } catch(SQLException e){System.err.println(e);} Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);con=DriverManager.getConnection(”jdbc:odbc:library“);stmt=con.createStatement();public void actionPerformed(ActionEvent e){String sqlStr,cardnumber,user_name,str1,str2,bannercode;ResultSet result;java.util.Date day1,day2;Object obj=(JButton)e.getSource();str1=jtfd1.getText().trim();str2=jtfd2.getText().trim();try {if(obj==btn1) {if(str1.equals(”“)|str2.equals(”“)){JOptionPane.showMessageDialog(frame,”Text can't be null!“);return;} sqlStr=”select borrow.user_cardnumber,user_name,bannercode,borrowdate,receivedate“+ ” from borrow,user where borrow.user_cardnumber=user.user_cardnumber and“+ ” borrow.user_cardnumber=“+”'“+str1+”'“;result=stmt.executeQuery(sqlStr); for(int j=0;j cardnumber=result.getString(”user_cardnumber“);user_name=result.getString(”user_name“);if(str2.equals(user_name)){ day1=result.getDate(”borrowdate“); day2=result.getDate(”receivedate“); bannercode=result.getString(”bannercode“); } rowData[i][0]=cardnumber; rowData[i][1]=bannercode; rowData[i][2]=day1; rowData[i][3]=day2; i++;} } jtfd1.setText(”“);jtfd2.setText(”“);} if(obj==btn2){stmt.close();con.close();frame.dispose();} } catch(SQLException sqle){System.err.println(sqle);} } public static void main(String[]args){new BorrowQuery();} CallUpReturn.java import javax.swing.*;import javax.swing.table.*;import java.awt.*;import java.sql.*;import java.util.*;public class CallUpReturn {private Vector columnField=new Vector();private Vector column=new Vector();private Vector rowData=new Vector();private Connection con;private Statement stmt;private ResultSet result,result2,result3;private String sqlStr,cardnumber,bannercode,user_name,user_office, bookname,publisher;private java.util.Date day1,day2,today;private String[]columnNames={”借阅证“,”姓名“,”单位“,”图书条码“,”书名“,”作者“, ”借出时间“,”到期时间“}; public CallUpReturn(){JFrame frame=new JFrame(”催还通告“);Container content=frame.getContentPane();try { Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);con=DriverManager.getConnection(”jdbc:odbc:library“);stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); sqlStr=”select borrow.user_cardnumber,borrow.bannercode,borrowdate,receivedate,“+ ”user_name,user_office,bookname,publishingcompany from borrow,book,user“+ ” where borrow.user_cardnumber=user.user_cardnumber and borrow.bannercode=“+ result=stmt.executeQuery(sqlStr);”book.bannercode“;today=new java.util.Date(); int i=0;while(result.next()){ columnField.clear();day1=result.getDate(”borrowdate“);day2=result.getDate(”receivedate“); if(day2.before(today)){ cardnumber=result.getString(”user_cardnumber“);bannercode=result.getString(”bannercode“); user_name=result.getString(”user_name“);user_office=result.getString(”user_office“); bookname=result.getString(”bookname“);publisher=result.getString(”publishingcompany“); } columnField.add(cardnumber);columnField.add(user_name);columnField.add(user_office);columnField.add(bannercode);columnField.add(bookname);columnField.add(publisher);columnField.add(day1);columnField.add(day2);rowData.add(columnField.clone());} System.out.println(i);} stmt.close();con.close(); catch(ClassNotFoundException e){System.err.println(e);} catch(SQLException e){System.err.println(e.getCause());System.err.println(e.getErrorCode());System.err.println(e.getNextException());System.err.println(e.getStackTrace()); } } for(int i=0;i JTable tableTest=new JTable(rowData,column);tableTest.setRowHeight(30);JScrollPane scrollPane=new JScrollPane(tableTest);scrollPane.setPreferredSize(new Dimension(500,80));content.add(scrollPane,BorderLayout.CENTER);frame.pack();frame.setVisible(true);} public static void main(String[]args){ } new CallUpReturn();CardManagement.java import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.border.*;import java.sql.*;import java.util.*;import java.text.*;public class CardManagement implements ActionListener { private JTextField jtfd1,jtfd2,jtfd3,jtfd4;private JButton btn1,btn2,btn3,btn4;private Statement stmt;private PreparedStatement pstmt;private Connection con;private JFrame frame; public CardManagement(){JFrame.setDefaultLookAndFeelDecorated(true);frame=new JFrame(”借阅证管理“); Container content=frame.getContentPane();JLabel lb1=new JLabel(”借阅证号:“);JLabel lb2=new JLabel(”按借阅证号:“);JLabel lb3=new JLabel(”按有效期:“);JLabel lb4=new JLabel(”借阅证号:“);jtfd1=new JTextField();jtfd2=new JTextField();jtfd3=new JTextField();jtfd4=new JTextField();jtfd3.addFocusListener(new FocusHandler());btn1=new JButton(”挂失“);btn2=new JButton(”注销“);btn3=new JButton(”注销“);btn4=new JButton(”取消挂失“);btn3.addActionListener(this); btn1.addActionListener(this);btn2.addActionListener(this);btn4.addActionListener(this);JPanel pl1=new JPanel();JPanel pl2=new JPanel();JPanel pl3=new JPanel();pl1.setBorder(BorderFactory.createTitledBorder(”挂失“));pl2.setBorder(BorderFactory.createTitledBorder(”注销“));pl3.setBorder(BorderFactory.createTitledBorder(”取消挂失"));GridBagLayout gbl=new GridBagLayout();GridBagConstraints gbc=new GridBagConstraints();gbc.fill=GridBagConstraints.BOTH;gbc.weightx=gbc.weighty=10.0;pl1.setLayout(gbl); gbc.gridwidth=1;gbc.weightx=1.0;gbl.setConstraints(lb1,gbc); pl1.add(lb1); gbc.weightx=8.0;gbc.gridheight=2;gbc.gridwidth=2;gbc.insets=new Insets(15,15,15,5);gbl.setConstraints(jtfd1,gbc);pl1.add(jtfd1); gbc.insets=new Insets(19,0,19,5);gbc.weightx=1.0;gbc.gridheight=2;gbc.gridwidth=3;gbc.gridwidth=gbc.REMAINDER;gbl.setConstraints(btn1,gbc);pl1.add(btn1); GridBagLayout gbl2=new GridBagLayout();GridBagConstraints gbc2=new GridBagConstraints();gbc2.fill=GridBagConstraints.BOTH;gbc2.weightx=gbc2.weighty=10;pl2.setLayout(gbl2); gbc2.gridwidth=1;gbc2.weightx=1;gbl2.setConstraints(lb2,gbc2); pl2.add(lb2); gbc2.gridwidth=2;gbc2.insets=new Insets(0,0,0,5);gbc2.weightx=8;gbc2.gridheight=2;gbl2.setConstraints(jtfd2,gbc2);pl2.add(jtfd2); gbc2.gridwidth=gbc2.REMAINDER; gbc2.insets=new Insets(5,0,5,5);gbc2.weightx=1;gbc2.gridwidth=2;gbc2.gridheight=2;gbl2.setConstraints(btn2,gbc2);pl2.add(btn2); gbc2.gridx=0;gbc2.insets=new Insets(5,0,0,0);gbc2.gridwidth=1;gbc2.weightx=1;gbl2.setConstraints(lb3,gbc2);pl2.add(lb3); gbc2.gridx=1;gbc2.gridwidth=2;gbc2.insets=new Insets(5,0,0,5);gbc2.weightx=8;gbl2.setConstraints(jtfd3,gbc2);pl2.add(jtfd3);gbc2.gridx=3;gbc2.gridwidth=gbc2.REMAINDER;gbc2.insets=new Insets(10,0,5,5);gbc2.weightx=1;gbl2.setConstraints(btn3,gbc2);pl2.add(btn3); GridBagLayout gbl4=new GridBagLayout(); GridBagConstraints gbc4=new GridBagConstraints();gbc4.fill=GridBagConstraints.BOTH;gbc4.weightx=gbc4.weighty=10.0;pl3.setLayout(gbl4); gbc4.gridwidth=1;gbc4.gridheight=1;gbc4.weightx=1.0; gbl4.setConstraints(lb4,gbc4); pl3.add(lb4); gbc4.weightx=8;gbc4.gridheight=2;gbc4.gridwidth=2;gbc4.insets=new Insets(15,15,15,5);gbl4.setConstraints(jtfd4,gbc4);pl3.add(jtfd4); gbc4.insets=new Insets(19,0,19,5);gbc4.weightx=1.0;gbc4.gridheight=2; gbc4.gridwidth=gbc4.REMAINDER;gbl4.setConstraints(btn4,gbc4); 目录 一.概述 1.编写目的 2.项目背景 3.定义 4.参考资料 5.开发环境 二.需求分析 1.问题提出 2.系统的业务功能分析 3.需完成的功能 三.系统需求说明 1.对功能的规定 2.对性能的规定 3.输入输出要求 四.新系统的逻辑模型 1.图书馆组织机构分析 2.系统功能结构图 3.业务流程图 4.数据流程图 5.数据字典 一.概述 1、编写目的 按照关系型数据库的基本原理,综合运用所学的知识,以小组为单位,设计开发一个小型的图书管理系统。通过对一个实际问题的分析、设计与实现,将原理与应用相结合,使学生学会如何把书本上学到的知识用于解决实际问题,培养学生的动手能力;另一方面,使学生能深入理解和灵活掌握教学内容 2、项目背景 数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了。造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。 a.待开发的软件系统的名称是《图书管理系统》 b.本软件适用于教育界,他是比较完善的系统管理软件,对图书馆的书籍、读者资料、借还书等可以进行方便的管理。 C.开发员:王林飞,张应锋 3、定义 数据流程图(DFD):为描述软件系统中的信息流提供了一个图形方法。箭头代表数据流,方框代表数据的源点或终点,圆框代表数据流的交换,双杠代表数据存储的地方。数据字典是对数据流程图中的数据,变换等进行精确的定义。 5、开发环境 WindowXP,/7 eclipse,需求分析 1、问题的提出: 图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。 2、系统的业务功能分析: 1)建立读者类,实现对读者编号、姓名、所在单位等信息的描述。 2)建立书籍类,实现对图书的编号、名称、作者、出版社、出版日期、价格、采购日 期、单价、数量、金额、版次、分类号、ISBN等信息的描述。 3)建立用于记录借书情况的类,实现输入读者编号和书籍编号后成功借书的描述。 系统的业务流程分析: 3、需完成的功能 1)图书基本情况的录入、修改、删除等基本操作。2)实现借书功能。3)实现还书功能。 4)能方便的对图书进行查询。5)管理员进行借书者用户进行管理 一、系统需求说明 1、对功能的规定 经过以上详细的用户调查,在现行业务流程和数据分析的基础上,基本可以确定系统设计必须达到的目标。 以下是图书管理系统必须具备的功能: 1.图书基本情况的录用:对于购进的新书,系统必须具备图书信息资料的录入功能。当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。 2.办理借书卡模块:系统的主要功能之一,供本校学生借阅图书。3.实现借书功能:可以方便学生们借书。 4.实现还书功能:归还图书,并进行登记。 5.能方便的对图书进行查阅:可以快速简单的对图书进行查找一些信息。 2、对性能的规定 为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下的性能需求: (1)、系统处理的准确性和及时性 系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。 (2)、系统的开放性和系统的可扩充性 图书管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。 (3)、系统的易用性和易维护性 图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。 (4)、系统的标准性 系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。 (5)、系统的先进性 目前计算系统的技术发展相当快,做为图书管理系统工程,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。 (6)、系统的响应速度 图书管理系统系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。 3、输入输出要求 输入:键盘,鼠标。输出:显示器。 二、新系统的逻辑模型 1、图书馆组织机构分析 通过对图书馆工作人员的调查,图书馆主要有4个部门。借阅管理部负责图书的借阅管理;图书管理部负责书籍类别标准的制定,类别信息的输入;书籍类别信息的查询,修改;书籍信息的输入;读者管理部负责主要针对各类读者信息进行管理;系统管理部负责用户管理和密码管理。组织机构图如下: 图书馆组织机构图 2、系统功能结构图 图书馆管理系统 借阅信息管理 图书信息管理 读者信息管理 系统管理 还书信息管理 借书信息管理 设置图书信息 设置图书种类 设置读者信息 设置读者种类 密码管理 用户管理还还还书书书信信信息息息查修添询改加 借借借书书书信信信息息息查添修询加改 图图图书书书信信信息息息查修添询改加 图图书书类类别别添修加改 读读读者者者信信信息息息查修添询改加 读读者者种种类类修添改加 3、数据流程图 通过对业务流程图的细化,可得到系统的分层数据流图。如下图: 顶层数据流图: 读者信息读者图书信息借书卡、借阅信息图书管理系统会员信息读者审核信息借阅信息借还书信息管理员 图书馆管理系统的顶层数据图 对顶层数据流图细化、分解可得到图书管理系统的第一层数据流图,如下图: 借阅信息 借还书信息P1借阅信息管理借书信读者息还书信息读者P2图书信息管理书库文件管理员借书卡、借阅信息读者资料读者信息审核会员信息P3读者信息管理读者记录管理员信息P4系统管理 图书馆管理系统的第一层数据图 对第一层数据流图进一步细化、分解,可以得到第二层数据流图,如下图: 借书卡P1.1身份审核合格读者借书信息读者记录借还书信息P1.2借书登记管理员还书信息书库文件P1.3书籍检查合格书籍读者还书信息P1.4还书处理借阅信息管理数据流图 注:附一些操作页面 1、登录页面 2、系统主页面(用户)(管理员 用户名:admin 密码:123) 3、新增图书 4、所有图书 5、借书 图书管理系统需求分析报告 摘要: 图书管理系统主要是用来管理图书信息和读者信息而设计的。图书管理系统的管理包括:用户管理、图书管理、读者管理、借阅管理。图书管理系统的查询包括:图书查询、读者查询、借阅查询。该系统可以查询图书的基本信息、读者的基本信息;可以查询某种图书的借阅情况;也可以查询某读者的借阅情况;也可以统计某种图书的在库数量和借出数量,还有能保存图书的流动记录等功能。该系统可以在连接网络的计算机上运行。 关键字: 图书信息管理、读者信息管理、信息检索 参考资料: [1]曾强聪.软件工程[M], 高等教育出版社 [2]微软公司.SQL Server 2005数据库程序设计[M], 高等教育出版社 系统的现状与不足: 目前我国各类高等学校中有相当一部分单位图书资料管理还停留在人工管理的基础上。这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,这种传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。图书管理是高校必须切实面对的工作。图书馆在正常运营中面对大量书籍、读者信息以及两者间相互联系产生的借书信息、还书信息。现有的人工记录方法既效率低又错误过多,大大影响了图书馆的正常管理工作。人工系统是不符合标准化协议、通用性不强、不实用的系统,不能提高图书信息的现代化管理水平,不能实现信息资源的共享。人工方式管理系统存在着许多缺点,如效率低、保密性差且较为繁琐,图书管理人员工作量大。另外,随着图书资料数量的增加,其工作量也将大大增加,这必将增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。不能对书籍资源、读者资源、借书信息、还书信息进行及时管理,不能及时了解各个环节中信息的变更,不能有效的提高管理效率。处理时间赶不上需要,响应不及时,数据存储能力不足,处理功能 不够等。人工系统不能使学校的图书管理工作真正做到科学、合理的规划,系统、高效的实施。基于人工系统的这些缺点和不足,我们有开发新的管理系统的需求。 解决方案及方案对比: 为了满足图书馆管理人员对图书馆书籍,读者资料,借还书等进行高效的管理,并结合图书馆管理现状,在工作人员具备一定的计算机操作能力的前提下,希望建立图书管理系统以提高图书馆的管理效率。图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。图书管理系统的建成无疑会为管理者对图书管理系统提供很大的帮助。 1.整个图书管理的业务流程抽象描述如下: ①新的图书购进后,分门别类地进行归并并汇总,加以编号。 ②新书编号后,上到书架以备学生借阅。 ③如某学生需要借阅图书,则在其本人的借阅登记表上进行登记,记录相关借 阅信息与借阅日期。 ④学生借阅图书后,应及时归还图书,并在本人的借阅登记表上注明还书日期 和时间。 2.使用范围 所有读者、图书管理人员。在学校局域网的网络环境下,信息由各用户在规定的权限下录入、修改、查询、调用 达到信息的共享。 3.功能分析 (1)读者信息的制定、录入、修改、查询,包括学号、姓名、性别、借书数量、借书起始 日期、借书种类,续借情况、备注等等信息。 (2)书籍信息制定、录入、修改、查询,包括书籍编号、书籍分类、关键字、续借情况、备注等等。 (3)借书信息制定、录入、修改、查询,包括书籍的编号、读者编号、借书日期、借书期 限,续借情况、日志 维护、备注等等。 (4)还书信息制定、录入、修改、查询,包括书籍编号、读者编号、还书日期、还书期限、超期自动提醒,日志维护、备注等等。 (5)新旧读者的信息的删除和添加。限定条件的查询。 (6)图书证信息的办理,挂失,补办等等。 读者(借书者):借书,还书,续借,支付欠费 前景展望: 本系统通过强大的计算机技术给图书管理人员和读者借、还书带来便利。减 少图书管理人员的工作量,读者借阅书更加方便。本系统除了图书馆内管理的一 般功能还外,还包括网上在线查询图书信息、查询本人的借阅情况和续借等功能。 系统的功能相对比较完善,根据以后不同的需要,还要对系统进行更新。 图书管理系统 1引言 1.1编写目的 本项目为图书管理系统;书写此文档是为了确定客户的真正需求,因此我们在可行性分析的基础上进一步了解、调查、明确用户对系统的综合要求、数据要求等;确定了一份完整、准确、清晰、具体的系统要求,从而得出系统必须完成什么样的功能。 此文档包含了用户对系统的具体要求,系统的功能需求等;可做为用户需求的确定书和总体设计的依据,也是验证和维护系统的依据。 1.2背景 社会的信息化带来了极大的信息量,而图书作为一种重要的信息交流传输载体,不管是在数量还是种类上都大大增加;因此我们迫切需要设计图书管理系统来满足日益增加的服务需求和管理需求。图书管理信息化中的一个主要环节就是图书借阅和归还的管理,因此针对这个环节的就成为图书管理系统的一个重要组成部分,而且是必不可少的一部分,也是应用最广的一部分。我们开发的系统正是为满足这一部分的需求,期望该系统能给管理者和借阅者都带来利益。 说明: A.软件系统的名称:图书管理系统 B.开发者:徐达、金振兴、叶雷、王鹏 C.该软件系统同其他系统的关系 软件属于图书管理信息系统的一部分,应用中可能需要引用图书管理系统其它部分的数据内容,此处暂且使用自定义的数据表项 1.3定义 B/S:Browser/Server(浏览器/服务器)结构 SQL语言:用于数据库操纵的标准语言.NET:MS提供的一种高效的开发以及运行平台 ASP:全称为Active Server Pages,是一套由微软公司开发的服务器端运行的脚本平台,可用于开发动态网页 1.4参考资料 a.《软件工程导论 》 清华大学出版社 张海潘编著 b.《软件工程学实验 》 科学出版社 苏正、王文等编著 c.《数据库系统概论 》 高等教育出版社 王珊、萨师煊等编著 d.《C#.NET程序设计基础教程》 清华大学出版社 王华秋主编 2任务概述 2.1目标 2.1目标 图书查询系统的初衷是: (1).让用户在最快的时间内找到他所需要的书目 (2).让用户在最短的时间内了解新书的到馆的情况以及书刊在馆情况(3).让用户最大限度的使用图书这种公共资源 (4).让用户了解自己的学习目标以及有哪些相应的图书与之配套(5).让管理人员在尽可能短的时间内完成书刊的流通(6).让管理人员在短时间内了解学生们的需要(7).让管理人员及时更新在观书目 (8).让管理人员更好的控制书刊的流通 可以在广大的学校中或者小型图书馆推广这套系统,来提高图书管理的效率,解决人工管理的问题。2.2用户的特点 (1).在校读书的学生有很强的适应性可以在很短的时间内完成对这套系统的适应在最短的时间内提高效率(2).想不断加强自身学习的人可以在图书馆以外的地方使用客户端来完成自己想要借阅的书籍(3).对新鲜事物有很强好奇心的用户可以用这套系统来在最快时间内充实自己让系统可以更好的适应自己(4).有一定知识水平了解简单电脑操作的用户可以在熟悉系统的前提下深入的了解系统,使之更好的为自己服务(5).管理人员要熟悉服务器的维护数据的更新以及备份工作这就要求管理人员要了解数据库的一些基本原理在出现问题的情况下可以简单的处理(6).经过简单培训可以熟练使用该系统的服务人员 预计使用频度为平均一个5000人的学校为:大约平均500—1000人/天 2.3假定和约束 在开发中要考虑用户的可能出现的操作以及在出现问题后的处理: 假定使用查询功能的人员出现登陆不了的情况及时的恢复对原有数据的备份可以由管理人员来完成。 最大限度满足接受不同用户在同时发出的请求。例如可以有100人同时查询数据就可以有100人同时修改自己的数据 如果用户的知识结构不是很好可以进行一下简单的培训。应该教会用户相应的操作以及应对紧急情况的手段。 如果用户的密码丢失则需要重新验证,需要输入一个密码提示问题 管理人员对数据出现误操作则需要完成数据的恢复 管理人员如果没有及时更改书目信息则该书不能被借出 管理人员需要良好的职业素质来保证图书更新的情况 管理人员有良好的专业素养来应对突发事件如服务器操作系统的崩溃 3需求规定 3.1对功能的规定 用列表的方式,逐项定量和定性地叙述对软件所提出的功能要求,说明输入什么量、经怎样的处理、得到什么输出。3.2对性能的规定 3.2.1精度 该软件在使用中,对“按序列号查询”要求全数字外,其他查询方式并没有特殊要求,并且在按照书名查询时候支持“模糊查询”,如:你要查询的书名为“软件工程基础导论”,你可以在查询框里面输入“软件工程”,系统将把所有的书名含有“软件工程”字样的书名列出。 3.2.2时间特性要求 如果本系统使用局域网链接,网络速度较快,并且本系统只适应于中小型图书馆使用,不会造成数据拥塞的现象,所以查询时间、内容更新时间都是瞬间完成。如果使用互联网链接,则由于网络速度问题可能造成一定延迟。或者由于长期使用致使的软件老化或数据库负担增加也可能造成延时。 3.2.3灵活性 a. 可以使用多种查询方式查询,时间允许的前提下可以增加多重条件模糊查询功能。b. 适用多种windows版本。 c. 适当整理数据库,或者增加网络传输速度可以提高速度。 d. 在时间允许的情况下可以适当增加读者留言板、图书推荐等模块,方便用户使用。 3.3输入输出要求 输出数据:如果添加成功,输出成功提示信息,失败则提示检查信息,重新输入。3.4 数据字典 (1)读者(帐号,姓名,班级,性别,组号) 名字:帐号简述:用以唯一标识用户的信 息。范围:长度:使用位置:用户登录时进行相应的判断核对。名字:姓名简述:对用户加以说明,修饰。不能标识具体用户。范围:长度:使用位置:在进入系统时,显示相关的信息。名字:性别简述:对用户加以说明,修饰。不能标识具体用户。范围:长度:使用位置:在进入系统时,显示相关的信息。 名字:班级简述:对用户加以说明,修饰。不能标识具体用户。范围:长度:使用位置:在进入系统时,显示相关的信息。名字:组号简述:对用户的等级说明,并且管理最大借书量。范围:”01“„”05”长度:使用位置:借书时对借书量进行限制。(2)管理员(帐号,姓名) 名字:帐号简述:用以唯一标识用户的信 息。范围:长度:使用位置:用户登录时进行相应的判断核对。名字:姓名简述:对用户加以说明,修饰。不能标识具体用户。范围:长度:使用位置:在进入系统时,显示相关的信息。 (3)图书(图书编号,类别,书名,作者,出版日期,出版社,定价,总数量,剩下数量,备注) 名字:图书编号简述:唯一标识每一本图书的关键域 范围:长度:使用位置:在新书入库,借阅登记,借阅查询,图书整理,超期提示中使用到名字:书名名字:类名简述:标识每一本图书的十简述:每一个图书有一个类几名字 别,用以管理员分类管理 范围:范围:长度:长度:使用位置:在在新书入库,借阅登记,借阅查询,使用位置:用户查找的时候图书整理,超期提示中使用可以对查找的项目进行限制到名字:作者简述:标识每一本图书的写作者 范围:长度:使用位置:在新书入库,借阅等级,图书整理中使用到 名字:定价名字:类别简述:每一个图书有一个类简述:标识每一本图书的实别,用以管理员分类管理际价格 范围:长度:使用位置:用户查找的时候使用位置:在新书入库,借可以对查找的项目进行限制阅等级,图书整理中使用到名字:类型名字:类名简述:每一个图书有一个类 简述:标识图书的分类种类别,用以管理员分类管理 范围:范围:长度:长度:使用位置:在新书入库,借使用位置:用户查找的时候阅等级,图书整理中使用到可以对查找的项目进行限制名字:图书库存数量简述:管理每一种图书的现存量 范围:长度:使用位置:在新书入库,借阅等级,图书整理中使用到 名字:出版社简述:标识每一个图书的出版处 范围:长度:使用位置:在新书入库,借阅等级,图书整理中使用到名字:出版日期 简述:标识每一本图书的出版日期范围:长度:使用位置:在新书入库,借阅等级,图书整理中使用到(4)借还(用户帐号,图书编号,借书日期,到期日期,数量,还书日期)名字:帐号简述:用以唯一标识用户的信 息。范围:长度:使用位置:用户登录时进行相应的判断核对。名字:图书编号简述:唯一标识每一本图书的关键域 范围:长度:使用位置:在新书入库,借阅登记,借阅查询,图书整理,超期提示中使用到名字:数量简述:管理每一种图书的现存量 范围:长度:使用位置:在新书入库,借阅等级,图书整理中使用到 名字:借书日期简述:标识用户在何时借书 范围:长度:使用位置:在借阅等级中使用名字:到期日期简述:标识用户应在何时还书 范围:长度:使用位置:借阅登记中使用名字:还书日期简述:标识用户在何时还书 范围:长度:使用位置:在借阅登记中使用 (5)数据流图 a.新书入库 b.图书借阅 C.过期提示 d.借阅查询 e.还书处理 3.5数据管理能力要求 要求对两万左右的学生借阅信息和10万本以上的图书进行有效的管理,并且随着学生人数的增长和图书数量的增多,要能快速地查询出有效的信息,3.6故障处理要求 对于任何硬件或软件系统来说,都不可避免的会存在问题,当机器或者软件出现故障的时候,就应要有可靠的办法来解决才行。我们做的系统是可以通过网络运行的,所以应该考虑当网络发生拥塞时的处理情况。这个图书查询系统当遇到上述情况时会自动重新发送数据给服务器,避免了使用者再次输入信息的麻烦,而如果机器遇到突然死机就可能造成数据丢失,我们也设置了系统自动恢复到操作前状态的功能,尽可能的降低拥护的损失。 3.6其他专门要求 对于此系统来说,为了维护读者的权利,防止数据在传输的过程中泄露个人信息,必须给传输的数据加密,而且本系统界面全由图象和文字组成,使用方便。 在用户登录操作界面的时候,密码采用了密文的形式,防止用户使用不当造成密码泄露。在系统内部,考虑到不同拥护的需求以及系统的维护需要和长期发展的要求,我们的设计使得系统的可补充性好,维护简单,易读易懂,对系统软件的适应性强 4运行环境规定 4.1设备 a. 为了使系统稳定的运行,硬件要求cpu达到奔腾3以上,内存至少为256MB。 b.外存可以不做要求,但建议应该在20GB以上。 c. 本系统要求在联机情况下使用,用户可以通过网络(局域网或者Internet)访问,但是为了便于使用,建议用户使用局域网。 4.2支持软件 建议使用windowos2000及以上的系统,测试环境为windows xp操作系统下使用asp.net.4.3接口 软件与其他软件之间应该有较好的接口和通信协议,实现相互之间的通信需要,增强本软件的实用性和功能。 4.4控制 当使用者通过图形界面进行操作时,用户输入相应信息后,点击相应按键,激发内部数据传输。软件自身对输入数据进行对照识别,判断数据类型(和格式)是否相符,做出相应处理,把结果输出给用户。 需求分析人工管理图书的手续繁索、效率低下给具有强烈时间观念的管理人员带来了诸多不便,学校图书馆缺少一套完善的图书管理软件,为了对图书的管理方便,因此必须开发图书管理系统。,以往书面随着计算机技术的不断应用和提高,计算机已经深入到社会生活的各个角落 记载进行图书管理的方法已经不能适应实际的需要,且容易出错和浪费大量时间。而采用手工管理图书的方法,不仅效率低、易出错、手续繁琐,而且耗费大量的人力。为了满足图书馆管理人员对图书馆书籍,读者资料,借还书等进行高效的管理,在工作人员具备一定的计算机操作能力的前提下,很有必要来开发一个图书管理系统来管理图书,这样可以节省人力物力且准确率高。 待开发系统的一般概述 : 立足于校园实际,着眼于未来发展,建成符合标准 化协议、通用性较强、实用的系统,以提高图书信息的现代化管理水平,实现信 息资源的共享。图书管理系统是一种基于集中统一规划的数据库数据管理新模式。在对图书、读者的管理,其实是对图书、读者数据的管理。本系统的建成无疑会 为管理者对图书管理系统提供极大的帮助。使用该系统之后,图书馆管理人员可 以管理读者的登记、图书的购入、借出、归还以及注销等;还可以查询某位读者、某本图书的借阅情况,对当前借阅情况给出一些统计,以全面掌握图书的流通情况。本系统的宗旨是提高图书管理工作的效率,减少相关人员的工作量,使学校的 图书管理工作真正做到科学、合理的规划,系统、高效的实施。 1.数据需求分析 本系统的主要信息为图书信息。图书信息主要包括书名、编号、作者、库存 量等。 2.功能需求分析 本系统主要实现对图书信息信息进行管理,需要实现以下几个方面的管理 功能: 1.采集图书信息。 2.加入新图书。加入新图书。 3.查询图书信息。查询图书信息。 4.删除图书。 5.图书的显示。 6.借阅图书。 7.归还图书。第二篇:图书管理系统需求分析报告
第三篇:图书管理系统需求分析报告
第四篇:图书管理系统需求分析报告
第五篇:图书管理系统需求分析