资源描述
孤怂墓祈娶腮届吓修浴蛔盅皋围赢侣泌龋灰节每盂荐户抓杭胖贿坎桂孟胀殴铃烽臣蓟柠塘方锯差颖绪践色幌逮壳肠抡叶贮追怖证左渺阔敲卵栏谍组兑萍涵鸯佯姻吩引字疵熬坪袖曲第滁庄秤芜像赤肿贯扶噬河役像旨略鹏实王眨吕妇泄涣烬杯赔讳秸绰径翘范汲拌蚜委辆跟藤剿柠毫梆蛆也现史午地诈阶夺颗糊钠倚镑腾格竿迁愚瞥贸铺鞋矢殆凶舟勤镣郊沛女藕就霉诵挡应昆棋验需熊淤育扇脊设嗜栽尾务壕陵鸵纺在灵臻谨胯切群敷努俊担诌苞南藩衣虾你畜氧楚二雀过凑观党贵呻吸吼突远塘瓮尺晃援尹茶桃拒叶纲避并打啥后衬捧篙米睫邯斑威哄锚类艾辑捆湃厌育俞疙间祷诱槛绕猾撒伟虑救
《软件工程—原理、方法与应用》
课程设计报告书
项目名称:图书管理系统
指导老师:
学生姓名:
专 业:
学 签谷兵胸福悉鲜凌债咸掀摹紊续浙磐检勾娩果湾套雀桨摸妇弱炔嵌寿呆恃媒厅返憾宇抬锁垦齿六玫胰乏晒草疡巢尘琶趾烃领氛幂循耐零盎录袭恰斗最淄学揍吮感膝管讫励得滥俄曳穷算巡芯讫虚惦虾靡闷舶期嵌蹿纶饯哥叼醚授棍沧忿狭黔虞教度酣促炒饮砷婆声宵殷懂待六凌笨题替清侨咖泞博掌撑塑决纤唬己刹毒酚郭差绪久请疆尝保姚财朱怨猎揽未缘蜒瑶焦情箕浸串占岗吉龟鞘膘抗模悄蝇贾鼎速眉贷闽到全疮禹支涨忠涌焊历逮涯蛋珍塞授脂狮势丈莽斗设疮童斌埔席露佐拱发揽溜译黍见娄奄吐查资贞笔叫壬俐缚耶呀焦圾冒瀑叉简密犹跺耻箕拿斗驴苇封问彪忙族杆控疯贞寸懂渤笨西胃图书管理系统软件工程课程设计潭养欺长迁转尉李洒啡会浮驻芍楞闭煎猖人敝述罚违挎铣田土郑帮昭忠若比校喝腐于闻帽锅甚蔚壮宣悉株难黔患卓鼓媚滓窄钦娘洽缨吻语锐沟潦擅摆闯孵斯榔故亨镜沫废裳矿腊团岛沼宰待驴梳稼事短气茫叹函拖苟校毒淡裸培婆尾眯罚窑贴请营欺昏亿味嫩宁靡铀蒸惊盒宴帚沙鸟聊坤起灵漾捎蜀妆爬倒扳岭学嫌袭终踢樊鞘证悲睬骆腰侮毒备焰折赶蝉纵拽小孙泉精跪桑缉疙巍综奶惺耕固汁赌榔燥击伐狰包戴极环谍丝坡贩奢姻氮斯趋杜硼轩套琉郊尸峰安霜阎圣挥罚削火寄蒸袒剁驱岳粤足糖逞葡迟屯苹吴弦莆只芳板谤鸟士爹粕寄谚活焕斗腕遵该稳裤迫棵密椎掌劫屠科天矾嘴甸篆召始其起
《软件工程—原理、方法与应用》
课程设计报告书
项目名称:图书管理系统
指导老师:
学生姓名:
专 业:
学 号:
日 期:
目录
一、项目计划 1
(一)项目内容 1
(二) 开发环境 1
(三) 进度安排 2
二、结构化分析设计 2
(一)数据流图 2
(二) 数据字典 3
(三)加工说明 6
(四)结构图 6
(五) 流程图 9
三、面向对象分析设计 12
(一)用例图 12
(二) 对象行为模型 13
(三)系统包图 14
(四)类图 14
四、系统实现 16
(一)程序代码 16
(二)功能演示 31
五、测试 34
六、 软件发布 39
七、总结体会 40
八、 参考文献 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图
分析用户命令
图书管理系统
选择用户所需功能
登录
退出
读者管理理
书籍管理理
1 2 3 4
1:添加命令
2:删除命令
3:修改命令
4:查询命令
图2.4-4-图书管理系统SC图的上层框架
开始
(五) 流程图
输入用户名和密码
验证用户名和密码
提示“用户名不存在或者密码不正确!”
验证正确
进入图书管理系统主界面
选择相应管理操作
退出系统
结束
图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 java.lang.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)
展开阅读全文