图书管理系统软件工程课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件工程—原理、方法与应用》
课程设计报告书
项目名称:图书管理系统
指导老师:
学生姓名:
专业:
学号:
日期:
目录
一、项目计划 0
(一)项目内容 0
(二)开发环境 0
(三)进度安排 (1)
二、结构化分析设计 (1)
(一)数据流图 (1)
(二)数据字典 (2)
(三)加工说明 (5)
(四)结构图 (5)
(五)流程图 (9)
三、面向对象分析设计 (12)
(一)用例图 (12)
(二)对象行为模型 (13)
(三)系统包图 (14)
(四)类图 (14)
四、系统实现 (16)
(一)程序代码 (16)
(二)功能演示 (31)
五、测试 (34)
六、软件发布 (39)
七、总结体会 (39)
八、参考文献 (40)
一、项目计划
(一)项目内容
在计算机日渐走进普通家庭的今天,对于个人来讲,采用一套行之有效的图书管理系统来管理自己的图书是非常方便的;对图书管理部门来讲,以前单一的手工检索已不能满足人们的要求,伴随着工业化、信息化的高速发展,图书的数目越来越庞大,图书种类也是越来越多样化;因而往往是投入了大量的人力、物力和财力却得不到高效的管理效率。
为了便于图书资料的管理、满足人们的需求,不必浪费大量的时间耗费在图书检索上,这就需要有一个有效的图书管理软件来帮助人们管理,减轻工作人员的工作量,方便工作人员对它的操作,提高管理的质量和水平,做到高效、便捷和智能化管理,达到提高图书管理效率的目的。
基于这个问题,研发了这个图书管理系统。
该系统主要实现功能:管理员登录及退出、读者信息查询、图书的增加、删除、更新和查询。
(二)开发环境
开发环境:Win 7 旗舰版。
开发工具:SQL Server 2005 JCreator1.7
作图软件:Rational Rose Enterprise Edition 2003
(三)进度安排
该软件应用JCreater1.7和SQL Server 2005进行编程,历时大概一周,最终完成了这个小型图书管理系统。
由于时间仓促,该小型图书管理系统并不完善。
我用了两天时间查找相关资料,两天时间编写代码和连接数据库。
其余三天开始应用Rational Rose Enterprise Edition 2003画数据流图、结构图、流程图、用例图和包图类图。
整个过程系我一人完成。
二、结构化分析设计
(一)数据流图
书籍信息 读者信息 读者信息 查询信息
图2.1-1图书管理系统的顶层DFD
book 表
录入信息 查询请求
更新信息 查询结果
reader 表
图2.1-2图书管理系统的第二层DFD
图书管理系 统 管 理 员 用 户
管 理
员 更新
查询
用
户
book 表 reader 表
图2.1-3图书管理系统的第三层DFD
查询结果
查询请求 无效请求 有效请求
book 表
图2.1-4图书管理系统的第三层DFD
(二)数据字典
数据流
数据流编号 D01
数据流名称 查询读者信息 数据流组成
学号
管理员
添加
删除
更新
删除
用 户
审查有效性
查询
数据流编号D02
数据流名称查询读者信息结果
数据流组成学号+姓名+性别+年龄+密码+系别数据流编号D03
数据流名称添加书籍信息
数据流组成索书号+书名+数量+作者+出版社数据流编号D04
数据流名称删除书籍信息
数据流组成索书号
数据流编号D05
数据流名称更新书籍信息
数据流组成索书号+书名+数量+作者+出版社数据流编号D06
数据流名称查询书籍信息
数据流组成索书号
数据流编号D07
数据流名称查询书籍信息结果
数据流组成索书号+书名+数量+作者+出版社
数据项
数据项名学号
取值0000-9999
数据项名姓名
取值4-6字符
数据项名性别
取值2字符
数据项名年龄
取值正整数
数据项名密码
取值6字符
数据项名系别
取值0—20字符
数据项名索书号
取值00000-99999 数据项名书名
取值0-20字符
数据项名数量
取值正整数
数据项名作者
取值0-20字符
数据项名出版社
取值0-20字符
(三)加工说明
审查用户查询书籍信息请求
2.3图-加工说明
(四)结构图
图书管理系统主界面
系统管理书籍管理
读者管理
用户登录
退
出
系
统
退
出
登
录
查
询
读
者
信
添
加
书
籍
删
除
书
籍
查
询
书
籍
信
更
新
书
籍到书籍表中检索用户输入的索书号
将信息返回给用户
如果书籍表中无此索书号
则
否则
返回无效请求
按索书号检索书籍表,获得该书籍的信息
图2.4-1—图书管理系统上层框架
图书管理系统
读出用户选择 书籍管理 读者管理
用户命令
用户命令
用户命令
添加 删除 修改 查询
查询
书籍管理
图2.4-2-图书管理子系统初始SC 图
图2.4-3-图书管理子系统初始SC 图
添加书籍
删除书籍 索书号
查询书籍
更新书籍 出版社
作者
数量 书名 读者管理
读者管理
学号
姓名 系别
密码 年龄 性别
图2.4-4-图书管理系统SC 图的上层框架
分析用户命令
图书管理系统
选择用户所需功能 登录 退出
读者管理书籍管理
1 2 3 4
1:添加命令
2:删除命令 3:修改命令 4:查询命令
(五)流程图
图2.5-1—图书管理系统登录流程图
开始
输入用户名和密码
验证用户名和密码 退出系统
提示“用户名不存在或者密码不正确!”
选择相应管理操作
进入图书管理系统主界面
验证正确
结束
开始
提示“请输入正确证件号!”
确定
查询读者信息
输入证件号
证件号正确
图2.5-2—读者信息查询流程图
图2.5-3—添加书籍流程图
图2.5-4—删除书籍流程图
结束
结束
开始
提示“此书号已存在,请重新输入索书号!”
添加书籍成功! 确定 输入书籍信息
索书号已存在
添加书籍失败!
开始 删除书籍成功! 确定
输入要删除的图书索引号
结束
图2.5-5—更新书籍流程图
图2.5-6—查询书籍流程图 输入新的图书信息
确定 更新书籍成功! 结束
开始
请输入书名或者索书号
查询书籍信息 结束
验证正确
开始 提示“对不起,没有您要找的书籍!”
三、面向对象分析设计
(一)用例图
用例图在需求分析阶段有重要作用,它是作为参与者的外部用户所能观察到的系统功能模型图。
整个开发过程都是围绕需求阶段用例进行的。
首先需要确定参与者。
管理员在登录后对读者信息进行查询以及对书籍的添加、删除、更新和查询。
用户在登录后可以对书籍信息进行查询。
图书管理系统管理员-用户用例图
(二)对象行为模型
继续选择服务 登录错误 登录正确
查询读者信息
登录系统
选择服务类型
查询读者信息
书籍管理 输入证件号! 显示读者信息 添加书籍 删除书籍
查询书籍
输入书籍信息
添加成功!
输入索书号 显示书籍信息
输入索书号 删除成功! 退出登录
结束服务
(三)系统包图
数据库包:包含数据库中所有的数据信息
用户包:包含要使用系统的用户及其属性
管理员包:包含要使用系统的管理员及其属性
接口包:表示系统和数据库的借口
系统包:表示图书管理系统
(四)类图
类是面对对象系统组成的核心。
类是对一组相同属性、操作、关系和语义的对象的描述。
这些对象包括了对现实世界中的物理实体、商业事务、逻辑事务、应用事务和行为事务等,甚至也包括了纯粹概念性的事务,它们都是类的实例。
图3.4-1类图
图3.4-2系统的类图
四、系统实现
(一)程序代码
1.主窗口界面
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.Font;
import javax.swing.JMenu;
public class MainWindow extends JFrame implements ActionListener { private static final long serialVersionUID = 1L;
static String loginName;
static String loginNo;
JLabel mlabel;
JPanel jp=new JPanel();
//建立菜单栏
JMenuBar menu=new JMenuBar();
JMenu a=new JMenu();
JMenu b=new JMenu();
JMenu c=new JMenu();
//建立系统管理菜单组
JMenuItem aa=new JMenuItem();
JMenuItem ab=new JMenuItem();
JMenuItem ac=new JMenuItem();
//建立读者管理菜单组
JMenuItem bb=new JMenuItem();
//建立书籍管理菜单组
JMenuItem ca=new JMenuItem();
JMenuItem cb=new JMenuItem();
JMenuItem cc=new JMenuItem();
JMenuItem cd=new JMenuItem();
public MainWindow(){
super("图书管理系统");
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);}});
Container d=getContentPane();
this.setSize(300,200);
this.setTitle("图书管理系统");
d.add(menu);
menu.add(a);
menu.add(b);
menu.add(c);
//添加菜单组
a.setText("系统管理");
a.setFont(new Font("Dialog",0,12));
b.setText("读者管理");
b.setFont(new Font("Dialog",0,12));
c.setText("书籍管理");
c.setFont(new Font("Dialog",0,12)); //生成系统管理菜单组的选项
aa.setText("登录");
aa.setFont(new Font("Dialog",0,12)); ab.setText("退出登录");
ab.setFont(new Font("Dialog",0,12)); ac.setText("退出系统");
ac.setFont(new Font("Dialog",0,12)); //生成读者管理菜单组的选项
bb.setText("查询读者信息");
bb.setFont(new Font("Dialog",0,12)); //生成书籍管理菜单组的选项
ca.setText("添加书籍");
ca.setFont(new Font("Dialog",0,12)); cb.setText("删除书籍");
cb.setFont(new Font("Dialog",0,12)); cc.setText("查询读书信息");
cc.setFont(new Font("Dialog",0,12)); cd.setText("更新书籍");
cd.setFont(new Font("Dialog",0,12)); //添加系统管理菜单组
a.add(aa);
a.add(ab);
a.add(ac);
//添加读者管理菜单组
b.add(bb);
//添加书籍管理菜单组
c.add(ca);
c.add(cb);
c.add(cc);
c.add(cd);
//添加事件侦听
aa.addActionListener(this);
ab.addActionListener(this);
ac.addActionListener(this);
bb.addActionListener(this);
ca.addActionListener(this);
cb.addActionListener(this);
cc.addActionListener(this);
cd.addActionListener(this);
setJMenuBar(menu);}
public void actionPerformed(ActionEvent e){ if(e.getSource()==aa){
UserLogin login=new UserLogin(this);
login.setVisible(true);}
if(e.getSource()==ab){
setVisible(false);
MainWindow mainFrame=new MainWindow();
mainFrame.setLocation(400,150);
mainFrame.setVisible(true);
}
if(e.getSource()==ac)
{System.exit(0);}
if(e.getSource()==cc)
{FindBook findbook=new FindBook();
findbook.setVisible(true);
}
if(e.getSource()==bb)
{
FindReader findreader=new FindReader(); findreader.setVisible(true);
}
if(e.getSource()==ca)
{
AddBook addBook=new AddBook();
addBook.setVisible(true);
}
if(e.getSource()==cb)
{
DeleteBook delBook=new DeleteBook();
delBook.setVisible(true);
}
if(e.getSource()==cd)
{
UpdateBook updBook=new UpdateBook();
updBook.setVisible(true);
}}
public void setenabled(int right)
{if(right==1)
{
b.setEnabled(true);
c.setEnabled(true);}
if(right==2)
{
b.setEnabled(true);
c.setEnabled(true);}
}
public static void main (String[] args){
MainWindow mainFrame=new MainWindow();
mainFrame.setLocation(400,200);
mainFrame.setVisible(true);
}
}
2.用户登录界面
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.io.*;
public class UserLogin extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
String name;
DataBaseManger db=new DataBaseManger();
MainWindow mainFrame;
JFrame f=null;
JPanel panel1,panel2;
JLabel UserLabel,PasswordLabel;
JTextField UserTextField;
JPasswordField PasswordTextField;
JButton YesBtn,CancelBtn;
Container c;
ResultSet rs;
public UserLogin(MainWindow mainFrame)
{
super("用户登录");
this.mainFrame=mainFrame;
UserLabel=new JLabel("用户名",JLabel.CENTER);
PasswordLabel=new JLabel("密码",JLabel.CENTER);
UserTextField=new JTextField(10);
PasswordTextField=new JPasswordField(10);
YesBtn=new JButton("确定");
CancelBtn=new JButton("取消");
YesBtn.addActionListener(this);
CancelBtn.addActionListener(this);
panel1=new JPanel();
panel1.setLayout(new GridLayout(2,2));
panel2=new JPanel();
c=getContentPane();
c.setLayout(new BorderLayout());
panel1.add(UserLabel);
panel1.add(UserTextField);
panel1.add(PasswordLabel);
panel1.add(PasswordTextField);
c.add(panel1,BorderLayout.CENTER);
panel2.add(YesBtn);
panel2.add(CancelBtn);
c.add(panel2,BorderLayout.CENTER);
setSize(300,150);
JLabel JL=new JLabel();
c.add(JL,"North");
c.add(panel1,"Center");
c.add("South",panel2);
panel1.setBackground(new Color(255,255,255));
setLocation(400,200);
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==CancelBtn)
{this.dispose();}
else
{char[] password=PasswordTextField.getPassword();
String passwordSTR=new String(password);
String strSQL;
strSQL="select * from users where uname='"+UserTextField.getText().trim()+"'and upassword='"+passwordSTR+"'";
rs=db.getResult(strSQL);
boolean isExist=false;
try
{ rs.next();
mainFrame.loginNo=rs.getString(1);
name=rs.getString(1);
mainFrame.loginName=name;
int right;
right=rs.getInt(1);
mainFrame.setenabled(right);
if(name.length()!=0)
isExist=true;
}
catch(Exception pe)
{ pe.printStackTrace(); }
if(UserTextField.getText().trim().equals(""))
{
JOptionPane.showMessageDialog(null,"用户名不可为空!");
return;
}
if(passwordSTR.equals(""))
{
JOptionPane.showMessageDialog(null,"密码不可为空!");
return;
}
if(!isExist)
{ JOptionPane.showMessageDialog(null,"用户名不存在或者密码不正确!");} else
{JOptionPane.showMessageDialog(null,"登录成功");
this.dispose();}
}}}
3.读者信息查询
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
import ng.String;
public class FindReader extends JFrame implements ActionListener
{ DataBaseManger db=new DataBaseManger();
MainWindow mw=new MainWindow();
ResultSet rs;
JLabel select=new JLabel("请输入证件号");
JTextField jtf=new JTextField(10);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JLabel lb=new JLabel("读者信息");
JButton findbt=new JButton("查询");
JButton yesbt=new JButton("确定");
JTextArea jta=new JTextArea(10,10);
public FindReader()
{ super("查询读者信息");
Container c=getContentPane();
p1.add(select);
p1.add(jtf);
p1.add(findbt);
c.add(p1,BorderLayout.NORTH);
p2.add(lb);p2.add(jta);
c.add(p2,BorderLayout.CENTER);
p4.add(yesbt);
c.add(p4,BorderLayout.SOUTH);
yesbt.addActionListener(this);
findbt.addActionListener(this);
setSize(500,300);
setVisible(true);
setLocation(400,150);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="查询")
{
String sno=jtf.getText();
String sqlstrR;
if((mw.loginNo.trim().equals(sno))||(mw.loginName.trim().equals("admin")))
{ sqlstrR="select * from reader where sno='"+sno+"'";
rs=db.getResult(sqlstrR);
try
{ rs.next();
jta.setText("");
jta.append("学号为:"+rs.getString(1)+","+"姓名为:"+rs.getString(2)+","+"性别为:"+rs.getString(3)+"\n");
jta.append("年龄为:"+rs.getString(4)+","+"密码为:"+rs.getString(5)+","+" 学院为:"+rs.getString(6)+"\n");
String sqlstr="select * from lendbook where sno='"+sno+"'";
rs=db.getResult(sqlstr);}
catch(Exception pe)
{ pe.printStackTrace(); } }
else
{
JOptionPane.showMessageDialog(null,"请输入正确的证件号!");
}}}}
4.增加图书信息
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class AddBook extends JFrame implements ActionListener { MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JPanel a,b,c,d,e,f;
JLabel bname=new JLabel();
JLabel bno=new JLabel();
JLabel bnum=new JLabel();
JLabel author=new JLabel();
JLabel publisher=new JLabel();
JTextField tname=new JTextField(20);
JTextField tno=new JTextField(20);
JTextField tnum=new JTextField(20);
JTextField tauthor=new JTextField(20);
JTextField tpublisher=new JTextField(20);
JButton addbt=new JButton("添加");
JButton yesbt=new JButton("确定");
JPanel p3=new JPanel();
public AddBook()
{
super("添加图书");
a=new JPanel();
b=new JPanel();
c=new JPanel();
d=new JPanel();
e=new JPanel();
f=new JPanel();
bname.setText("书名:");
bname.setFont(new Font("Dialog",0,12));
bno.setText(" 索书号:");
bno.setFont(new Font("Dialog",0,12));
bnum.setText("数量:");
bnum.setFont(new Font("Dialog",0,12));
author.setText("作者:");
author.setFont(new Font("Dialog",0,12));
publisher.setText(" 出版社:");
publisher.setFont(new Font("Dialog",0,12));
a.add(bname);
a.add(tname);
b.add(bno);
b.add(tno);
c.add(bnum);
c.add(tnum);
d.add(author);
d.add(tauthor);
e.add(publisher);
e.add(tpublisher);
f.add(addbt);
f.add(yesbt);
add(a);
add(b);
add(c);
add(d);
add(e);
add(f);
setLayout(new GridLayout(8,1));
addbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(500,300);
setLocation(400,150);
}
public void actionPerformed(ActionEvent e)
{
String bname,bno,author,publisher;
int bnum;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="添加")
{
bname=tname.getText();
bno=tno.getText();
author=tauthor.getText();
publisher=tpublisher.getText();
bnum=Integer.parseInt(tnum.getText());
String sqlstr1="select bno from book";
rs=db.getResult(sqlstr1);
try{
while(rs.next())
{
if(rs.getString(1).trim().equals(bno))
{
JOptionPane.showMessageDialog(null,"此书号已存在,请重新输入索书号!");
}
else
{break;}
}
}
catch(Exception pe)
{
pe.printStackTrace();
}
String sqlstr="insert into book (bno,bname,bnum,author,publisher) values ('"+bno+"','"+bname+"','"+bnum+"','"+author+"','"+publisher+"')";
boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{
JOptionPane.showMessageDialog(null,"添加书籍成功!");
}
else
{
JOptionPane.showMessageDialog(null,"添加书籍失败!");
}}}}
5.删除图书信息
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class DeleteBook extends JFrame implements ActionListener
{ MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JLabel bno=new JLabel("<html><font color=#000000 size='4'>请输入要删除的图书索引号:</font>",SwingConstants.CENTER);
JLabel L;
JTextField tno=new JTextField(10);
JTable table;
JButton delbt=new JButton("删除");
JButton yesbt=new JButton("确定");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
public DeleteBook()
{ super("删除图书");
Container c=getContentPane();
p1.add(bno);
p1.add(tno);
c.add(p1,BorderLayout.NORTH);
p2.add(delbt);
p2.add(yesbt);
c.add(p2,BorderLayout.SOUTH);
delbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(400,300);
setLocation(400,150);
JPanel p=new JPanel();
p.setLayout(new BorderLayout()); }
public void actionPerformed(ActionEvent e)
{ String bno;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="删除")
{ bno=tno.getText();
String sqlstr="delete bno from book where bno='"+bno+"'";
boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{JOptionPane.showMessageDialog(null,"删除书籍成功!");}
else
{JOptionPane.showMessageDialog(null,"删除书籍失败!");
}}}}
6.更新图书信息
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class UpdateBook extends JFrame implements ActionListener
{ MainWindow mw=new MainWindow();
DataBaseManger db=new DataBaseManger();
ResultSet rs;
JPanel a,b,c,d,e,f;
JLabel bname=new JLabel();
JLabel bno=new JLabel();
JLabel bnum=new JLabel();
JLabel author=new JLabel();
JLabel publisher=new JLabel();
JTextField tname=new JTextField(20);
JTextField tno=new JTextField(20);
JTextField tnum=new JTextField(20);
JTextField tauthor=new JTextField(20);
JTextField tpublisher=new JTextField(20);
JButton addbt=new JButton("更新");
JButton yesbt=new JButton("确定");
JPanel p3=new JPanel();
public UpdateBook()
{ super("更新图书");
a=new JPanel();
b=new JPanel();
c=new JPanel();
d=new JPanel();
e=new JPanel();
f =new JPanel();
bname.setText("书名:");
bname.setFont(new Font("Dialog",0,12));
bno.setText(" 索书号:");
bno.setFont(new Font("Dialog",0,12));
bnum.setText("数量:");
bnum.setFont(new Font("Dialog",0,12));
author.setText("作者:");
author.setFont(new Font("Dialog",0,12));
publisher.setText(" 出版社:");
publisher.setFont(new Font("Dialog",0,12));
a.add(bname);
a.add(tname);
b.add(bno);
b.add(tno);
c.add(bnum);
c.add(tnum);
d.add(author);
d.add(tauthor);
e.add(publisher);
e.add(tpublisher);
f.add(addbt);
f.add(yesbt);
add(a);
add(b);
add(c);
add(d);
add(e);
add(f);
setLayout(new GridLayout(8,1));
addbt.addActionListener(this);
yesbt.addActionListener(this);
setSize(500,300);
setLocation(400,150); }
public void actionPerformed(ActionEvent e)
{ String bname,bno,author,publisher;
int bnum;
if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="更新")
{ bname=tname.getText();
bno=tno.getText();
author=tauthor.getText();
publisher=tpublisher.getText();
bnum=Integer.parseInt(tnum.getText());
String sqlstr1="select bno from book";
rs=db.getResult(sqlstr1);
try{ while(rs.next())
{ if(rs.getString(1).trim().equals(bno))
{
JOptionPane.showMessageDialog(null,"此书号已存在,请重新输入索书号!");}
else
{break;}}}
catch(Exception pe)
{ pe.printStackTrace(); }
String sqlstr="update book set bno='"+bno+"',bname='"+bname+"',bnum='"+bnum+"',author='"+author+"',publisher='"+publisher+" 'where bno='"+bno+"'";
Boolean result=db.updateSql(sqlstr);
db.closeConnection();
if(result)
{JOptionPane.showMessageDialog(null,"更新书籍成功!"); }
else
{ JOptionPane.showMessageDialog(null,"更新书籍失败!"); }
}
}
}
7.查询图书信息
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;
public class FindBook extends JFrame implements ActionListener
{ DataBaseManger db=new DataBaseManger();
ResultSet rs;
JLabel select=new JLabel("请输入书名或者索书号");
JTextField jtf=new JTextField(20);
JPanel a=new JPanel();
JPanel b=new JPanel();
JLabel lb=new JLabel("书籍信息");
JButton findbt=new JButton("查询");
JButton yesbt=new JButton("确定");
JTextArea jta=new JTextArea(10,10);
public FindBook()
{ super("查询书籍信息");
Container c=getContentPane();
a.add(select);
a.add(jtf);
a.add(findbt);
c.add(a,BorderLayout.NORTH);
b.add(lb);
b.add(jta);
b.add(yesbt);
c.add(b,BorderLayout.SOUTH);
yesbt.addActionListener(this);
findbt.addActionListener(this);
setSize(500,300);
setVisible(true);
setLocation(400,150);
}
public void actionPerformed(ActionEvent e)
{ if(e.getActionCommand()=="确定")
this.dispose();
if(e.getActionCommand()=="查询")
{ String bname=jtf.getText();
String bno=jtf.getText();
String sqlstr;
sqlstr="select * from book where bname='"+bname+"' or bno='"+bno+"'";
rs=db.getResult(sqlstr);
try
{ jta.setText("");
if(rs.next()){
jta.append("索书号为:"+rs.getString(1)+"\n");
jta.append("书名为:"+rs.getString(2)+"\n");
jta.append("现有数量为:"+rs.getString(3)+"\n");
jta.append("出版社为:"+rs.getString(5)+"\n");
jta.append("作者为:"+rs.getString(4)+"\n"); }
else
{jta.append("对不起,没有您要找的书籍!"); } }
catch(Exception pe)
{ pe.printStackTrace();
} }}}
8.数据库连接
import java.sql.*;
import java.io.*;
public class DataBaseManger
{
String name;
Connection con;
Statement stmt;
ResultSet rs;
public DataBaseManger(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("驱动加载完成");
System.out.println("已建立链接");
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=library","sa", "sqlserver2005");
stmt=con.createStatement();
}catch (Exception e){
e.printStackTrace();
}
}
public ResultSet getResult(String strSQL)
{ try
{ rs=stmt.executeQuery(strSQL);
return rs; }
catch(SQLException sqle)
{System.out.println(sqle.toString());
return null; }}
public boolean updateSql(String strSQL)
{ try
{stmt.executeUpdate(strSQL);
mit();
return true; }
catch(SQLException sqle)
{System.out.println(sqle.toString());
return false; } }
public void closeConnection()
{ try
{con.close(); }
catch(SQLException sqle)
{System.out.println(sqle.toString());} }}
(二)功能演示
图1:图书管理系统主界面
图2:用户登录
图3:用户登录成功
图4:查询读者信息
图5:添加图书
图6:添加书籍成功
图7:删除书籍
图8:查询书籍信息
图9:更新图书信息
图10:更新书籍成功
五、测试
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式000000,
000000
登陆成功登陆成功正确
2 错误用户名Admin,
00000 提示“用户
名不存在或
者密码不正
确”
提示“用户
名不存在或
者密码不正
确”
正确
3 错误密码Admin,xx,
正确验证码提示“用户
名不存在或
提示“用户
名不存在或
正确
者密码不正
确”者密码不正
确”
4 用户名为空Null,00000 提示“用户
名不能为
空”提示“用户
名不能为
空”
正确
5 密码为空000000,
Null 提示“密码
不能为空”
提示“密码
不能为空”
正确
表1 登陆模块的测试用例
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式00001 王明
00001
女
20
123456
计算机
王明
00001
女
20
123456
计算机
正确
2 错误证件号
名10060028 提示“请输
入正确的证
件号!”
提示“请输
入正确的证
件号!”
正确
3 空数据Null 提示“请输
入正确的证
件号!”提示“请输
入正确的证
件号!”
正确
表2 读者查询模块的测试用例
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式00001 索书号为:
00001,书名
为:Java程
序设计,现
有数量为1
索书号为:
00001,书名
为:Java程
序设计,现
有数量为1
正确
,出版社为:清华大学出版社,作者为:沈泽刚,出版社为:清华大学出版社,作者为:沈泽刚
2 错误索书号0 提示“对不
起,没有您
要找的书
籍!”提示“对不
起,没有您
要找的书
籍!”
正确
3 空索书号Null 提示“对不
起,没有您
要找的书
籍!”提示“对不
起,没有您
要找的书
籍!”
正确
表3 图书查询模块的测试用例
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式00001 提示“删除
成功”
提示“删除
成功”
正确
2 错误索书号0 提示“删除
书籍失败!”提示“删除
书籍失败!”
正确
3 空数据Null 提示“删除
书籍失败!”提示“删除
书籍失败!”
正确
表4书籍删除模块的测试用例
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式中国近现代
史纲要,
00006,5,
编写组,高
等教育出版
社
提示“添加
书籍成功!”
提示“添加
书籍成功!”
正确
2 重复书号中国近现代
史纲要,
00006,5,
编写组,高
等教育出版
社提示“此书
号已存在,
请重新输入
索书号!”
提示“此书
号已存在,
请重新输入
索书号!”
正确
3 遗漏书名Null,
00006,5,
编写组,高
等教育出版
社提示“添加
书籍失败!”
提示“添加
书籍失败!”
正确
4 遗漏书号中国近现代
史纲要,
Null,5,编
写组,高等
教育出版社提示“添加
书籍失败!”
提示“添加
书籍失败!”
正确
5 遗漏数量中国近现代
史纲要,
00006,
Null,编写
组,高等教
育出版社提示“添加
书籍失败!”
提示“添加
书籍失败!”
正确
6 遗漏作者中国近现代
史纲要,
00006,5,
Null,高等
教育出版社提示“添加
书籍失败!”
提示“添加
书籍失败!”
正确
7 遗漏出版社中国近现代
史纲要,提示“添加
书籍失败!”
提示“添加
书籍失败!”
正确
00006,5,
编写组,
Null
表5 书籍添加模块的测试用例
序号测试内容测试数据期望结果测试结果测试结论
1 合法输入格
式行政能力测
试,00004,
7,李永新,
中共教育出
版社
提示“更新
书籍成功!”
提示“更新
书籍成功!”
正确
2 不存在书号中国近现代
史纲要,
00106,5,
编写组,高
等教育出版
社提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
3 遗漏书名Null,
00004,7,
李永新,中
共教育出版
社提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
4 遗漏书号行政能力测
试,Null,7,
李永新,中
共教育出版
社提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
5 遗漏数量行政能力测
试,00004,
Null,李永提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
新,中共教育出版社
6 遗漏作者行政能力测
试,00004,
7,Null,中
共教育出版
社提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
7 遗漏出版社行政能力测
试,00004,
7,李永新,
Null 提示“更新
书籍失败!”
提示“更新
书籍失败!”
正确
表6 书籍更新模块的测试用例
六、软件发布
1. 电脑操作系统:Windows 7/XP 数据库:SQL Server 2005 设计软件:JCreator1.7 作图软件:Rational Rose Enterprise Edition 2003
2.系统配置说明:分别需要给JCreator配置特定JDK这里用到JDK1.7.0,需要配置SQLsever系统软件我们用的的是SQL Server 2005,因此需要在给JAVA 写代码时应注意连接数据库的语句是否匹配。
3.登录用户名:00000 密码:00000
七、总结体会
在本次课程设计中,经历了无数次调试失败,修改,再调试的过程。
本系统基本实现了关键的功能模块,在功能上基本满足了用户的需求,但是由于时间较紧,有些模块以及整个系统还有许多不完善的地方,如界面不太美观,操作性不太友好等。
学习和实践了分析和设计软件系统的各种知识,包括结构化分析设计、面向对象的系统分析与设计,编码和测试方面的知识。
毋庸置疑,
在实践的过程中也遇到了一些问题,但是通过我自己的努力,以及查找资料,包括同学的帮助,很大限度的提高了自己的自身学习能力,自我独立解决问题的能力。
这次课程设计是我第一次独立完成的,但还是得到了大家的帮助,我很开心。
在今后的学习生活中,我会将这种精神继续发扬。
并且更加努力,认真学习,将在这过程中得到的经验与同伴分享,享受这个学习过程。
八、参考文献
[1] 窦万峰.软件工程方法与实践[M].机械工业出版社,2009
[2] 李兆锋,张得生.Java Web项目开发案例精粹[M].电子工业出版社,2010
[3] 沈泽刚,秦玉平.Java Web编程技术[M].清华大学出版社,2009
[4]史济民,顾春华,郑红。
软件工程—原理、方法与应用。
高等教育出版社,2009。