图书管理系统需求分析报告附有java代码综述.docx
《图书管理系统需求分析报告附有java代码综述.docx》由会员分享,可在线阅读,更多相关《图书管理系统需求分析报告附有java代码综述.docx(107页珍藏版)》请在冰豆网上搜索。
图书管理系统需求分析报告附有java代码综述
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.12
5、开发环境
WindowXP,/7MicrosoftVisualC++,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.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.sql.*;
importjava.text.*;
importjava.util.Date;
importjava.math.*;
publicclassBookimplementsActionListener
{privateJButtonbtn1,btn2,btn3,btn4;
privateJTextFieldjtfd1,jtfd2,jtfd3,jtfd5,jtfd6,
jtfd7,jtfd8,jtfd9,jtfd10;
privateJComboBoxjcbx;
privateJTextAreajta;
privateConnectioncon;
privatePreparedStatementpstmt1,pstmt2;
privateJFrameframe;
publicBook()
{JFrame.setDefaultLookAndFeelDecorated(true);
frame=newJFrame("图书入库");
Containercontent=frame.getContentPane();
Toolkittool=frame.getToolkit();
Dimensionwndsize=tool.getScreenSize();
JLabellb1=newJLabel("书名:
");
JLabellb2=newJLabel("条形码:
");
JLabellb3=newJLabel("分类号:
");
JLabellb4=newJLabel("分类名:
");
JLabellb5=newJLabel("排架号:
");
JLabellb6=newJLabel("出版社:
");
JLabellb7=newJLabel("出版日期:
");
JLabellb8=newJLabel("入库日期:
");
JLabellb9=newJLabel("价格:
");
JLabellb10=newJLabel("作者:
");
JLabellb11=newJLabel("简介:
");
jtfd1=newJTextField();
jtfd2=newJTextField();
jtfd3=newJTextField();
String[]kindname={"马克思列宁主义、毛泽东思想","综合性图书","哲学","社会科学总论",
"政治、法律","军事","经济","文化、科学、教育、体育","语言文字","文学","天文学、地球科学",
"生物科学","医药、卫生","农业科学","工业技术","艺术","历史、地理","数理化","自然科学总论",
"环境科学","航空航天","交通"};
jcbx=newJComboBox(kindname);
jtfd5=newJTextField();
jtfd6=newJTextField();
jtfd7=newJTextField();
jtfd8=newJTextField();
jtfd9=newJTextField();
jtfd10=newJTextField();
jtfd8.addFocusListener(newFocusHandler());
jta=newJTextArea();
jta.setLineWrap(true);
btn1=newJButton("添加");
btn2=newJButton("删除");
btn3=newJButton("撤消");
btn4=newJButton("退出");
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
JPanelpl1=newJPanel();
JPanelpl2=newJPanel();
JPanelpl3=newJPanel();
JPanelpl4=newJPanel();
pl1.setLayout(newGridLayout(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);
GridBagLayoutgridbag=newGridBagLayout();
GridBagConstraintsconstraints=newGridBagConstraints();
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=newInsets(10,15,10,20);
pl2.add(jta,constraints);
GridBagLayoutgridbag1=newGridBagLayout();
GridBagConstraintsconstraints1=newGridBagConstraints();
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(newGridLayout(1,4,6,0));
pl4.add(btn1);
pl4.add(btn2);
pl4.add(btn3);
pl4.add(btn4);
content.setLayout(newBorderLayout());
content.add(pl3,BorderLayout.CENTER);
content.add(pl4,BorderLayout.SOUTH);
frame.setBounds(100,100,550,400);
frame.setResizable(false);
frame.setVisible(true);
try
{
StringsqlStr1,sqlStr2;
sqlStr1="insertintobook(bookname,bannercode,kindnumber,kindname,"+
"positionnumber,publishingcompany,publishtime,putintime,price,"+
"state,introduction,author)values(?
?
?
?
?
?
?
?
?
'在架',?
?
)";
sqlStr2="deletefrombookwherebannercode=?
";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:
odbc:
library");
pstmt1=con.prepareStatement(sqlStr1);
pstmt2=con.prepareStatement(sqlStr2);
}
catch(ClassNotFoundExceptione)
{
}
catch(SQLExceptionsqle)
{
}
}
classFocusHandlerimplementsFocusListener
{java.util.Datetoday=newjava.util.Date();
DateFormatformat=DateFormat.getDateInstance();
Stringformatted=format.format(today);
publicvoidfocusGained(FocusEvente)
{Objectobj=(JTextField)e.getSource();
if(obj==jtfd8)
{jtfd8.setText(formatted);
}
}
publicvoidfocusLost(FocusEvente)
{
}
}
publicvoidactionPerformed(ActionEvente)
{Stringstr1,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();
intresult;
try{
Objectobj=(JButton)e.getSource();
if(obj==btn1)
{
if(str1.equals("")|str2.equals("")|str3.equals("")|str4.equals("")|str5.equals(""))
{JOptionPane.showMessageDialog(frame,"can'tbenull");
return;
}
if(str6.equals("")|str7.equals("")|str8.equals("")|str9.equals("")|str10.equals(""))
{JOptionPane.showMessageDialog(frame,"can'tbenull");
return;
}
java.sql.Datetoday1,today2;
BigDecimalmoney=newBigDecimal(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,"addsuccessfully!
");
}
jtfd1.setText("");
jtfd2.setText("");
jtfd3.setText("");
jtfd5.setText("");
jtfd6.setText("");
jtfd7.setText("");
jtfd8.setText("");
jtfd9.setText("");
jtfd10.setText("");
jta.setText("");
}
elseif(obj==btn2)
{if(str2.equals(""))
{JOptionPane.showMessageDialog(frame,"bannercodecan'tbenull");
return;
}
pstmt2.setString(1,str2);
result=pstmt2.executeUpdate();
if(result>0)
{JOptionPane.showMessageDialog(frame,"Deletesuccessfully!
");
}
}
elseif(obj==btn3)
{jtfd1.setText("");
jtfd2.setText("");
jtfd3.setText("");
j