软件工程报告_图书馆管理系统_JAVA.docx
《软件工程报告_图书馆管理系统_JAVA.docx》由会员分享,可在线阅读,更多相关《软件工程报告_图书馆管理系统_JAVA.docx(49页珍藏版)》请在冰点文库上搜索。
XXXX大学
软件工程实验报告
(2010--2011年度第二 学期)
课程名称:
软件工程课程设计 题 目:
图书管理系统 院 系:
计算机科学与技术系班 级:
计科082 组 长:
XXX 组 员:
XX 指导教师:
姜瑛 设计周数:
七周
日期:
2008年5月30日
一、实验目的
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
二、实验要求
1.学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编码和测试方面的知识;
2.熟悉自动化的软件开发工具PowerDesigner,并将其运用于软件开发的全过程;
3.进一步加强和提高软件工程文档的编写能力;
4.培养协作能力和团队精神。
5.
三、所用仪器、材料(设备名称、型号、规格等或使用软件)
系统的开发环境及运行环境:
1.操作系统:
WindowsXPProSP32.建模工具:
PowerDesigner153.数据库系统:
SQLServer2008
4.开发工具:
Netbeans5.Web服务器:
tomcat平台
四、实验过程原始记录(测试数据、图表、计算等)
一、主要内容
1.实验题目:
图书管理系统,本系统要实现读者借阅图书的基本功能,包括读者对图书的借出、归还、计费及读者查看自己的借阅信息;管理员查看读者信息、添加读者、管理读者、管理图书、添加图书。
2.运用面向对象技术、UML及可视化的建模工具完成系统的需求分析与设计。
3.使用PowerDesigner作为需求分析与设计的建模工具,包括静态建模和动态建模,并利用对象模型自动生成数据模型,自动建立数据库。
4.采用分层模式的应用设计模式进行系统的设计实现。
5.系统要实现四个模块功能:
读者模块、管理员模块、图书模块和公用模块。
6.初步建立系统原型,实现关键的功能,并对系统进行测试。
7.编写课程设计报告。
二、任务分配
任务
负责人
参与人
备注
需求分析
李健
崔辉毅
总体设计
崔辉毅
李健
详细设计
崔辉毅
李健
系统实现与测
李健
崔辉毅
试
三、进度计划
序号
设计内容名称
完成时间
备注
1
分组及确定题目
2011.4.1
2
初步的需求分析与设计建模
2011.4.2~4.5
3
详细的需求分析与设计建模
2011.4.6~4.20
4
关键模块的实现与测试
2011.4.21~5.5
5
编写课程设计报告
2011.5.6~5.20
四、系统需求分析
图书管理系统主要满足来自三方面的需求,这三个方面分别是读者用户、读者代
理用户和管理员用户,也即是三类用户角色。
(1)读者用户是主要的需求者,主要需求功能是查询个人信息、查看自己借阅情况及进行借书、还书操作等;
(2)读者代理用户主要需求功能是协助读者用户进行相关操作、以及利用本系统提交修改借阅信息等;
(3)管理员用户的功能需求较为复杂,包括对读者信息、读者代理员信息、图书信息进行管理。
在读者信息管理子模块中,实现对读者信息的添加、修改、删除操作,还可以输入查询条件进行查询操作。
在读者代理员管理子模块中,实现对读者代理员信息的添加、修改、删除、查询等操作。
在图书管理子模块中,实现对图书信息的添加,实现对图书的修改、删除、查看某本图书的详细信息等。
本系统将读者用户、读者代理员用户、管理员用户的身份及权限进行严格的划分,让管理员拥有最高权限,可以查看、维护系统中的所有信息,如添加读者,添加图书,修改图书信息等;让读者代理员拥有查看读者借书情况,以及提交新借阅的权限;让读者拥有借书及还书的权限。
修改密码模块的权限每个用户都可拥有,用以修改自己的密码信息。
通过进行严格的权限划分,可以更好地进行管理,也可更好地保护用户信息安全。
一、用例图:
图书管理系统用例图
二、活动图:
U0读者信息验证:
U1查询及修改:
U2查询图书信息:
U3借书:
U5还书:
U7注销:
U8管理员身份验证:
U9管理读者信息:
U10添加读者:
U12删除读者:
U14管理图书信息:
U15添加图书:
U16修改图书:
三、类图:
U17删除图书:
-kjs:
int
-yjs:
ZjRecord[m]
-qk:
Float
+Creat()
+delete()
+updata()
:
boolean
:
boolean
:
boolean
1
+huanShu():
boolean
+Creat() :
boolean
* +delete() :
boolean
+updata() :
boolean
+updataAll():
boolean +findByID():
boolean
+findByID():
boolean +updataAll():
boolean
+borrow() :
boolean +borrow() :
boolean
+huanshu():
boolean +huanshu():
boolean
<>
record
+doRecord():
boolean
+set() :
boolean
-ID:
String
+dzID() :
String
+book_ID():
String
+toString():
String
+doRecord():
boolean
-type:
int
-dzID:
String
-time:
time
-type :
int
-book_ID:
String
-time :
time
<>tsglRecord
-type :
boolean
-dzID :
boolean
-book_ID:
boolean
-time :
time
<>dzglRecord
<>
zjRecord
bookreader
<>
administrator
-name:
String
-bookID:
String
-kbkyj:
boolean
-jsz :
String
<>administrator:
:
reader
<>administrator:
:
book
):
Boolean():
boolean():
boolean
+Creat(
+delete
+updata
-name :
String
-ID :
String
-password:
String
-other :
String
<>person
类图说明:
(1)person类是一个系统角色用户的基类;
(2)reader类继承自person类,主要方法有:
Creat()用于添加读者;
Delete()用于删除读者;Update()用于更新读者一般信息;updataAll()更新所有信息;findByID()通过ID找到这个类;borrow()借书;huanshu()还书;
(3)administrator类继承自person类。
(4)book类是一个图书类,主要方法有:
Huanshu()用于更改还书信息;Creat()用于添加图书;
Delete()用于删除图书;Update()用于更新图书一般信息;updataAll()更新所有信息;findByID()通过ID找到这个类;borrow()借书;huanshu()还书;
(5)record类是一记录数据的基类;Set()设置要记录的属性;doRecord()把记录存入数据库中;
(6)dzglRecord类继承自record类。
(7)tsglRecord类继承自record类。
(6)zjglRecord类继承自record类,主要方法有:
dzID()用于记录读者账号;bookID()用于记录图书编号;
四.状态机图:
4.1读者类的状态图:
借书[kjs>0]
无借书
kjs=MAX
借书[kjs>0]
借书[kjs=0]
有借书
0不可借书
kjs=0
还书[kjs=MAX]
还书[kjs4.2图书类的状态图:
还书[kjs□不
在馆
不在馆
□不
五、顺序图:
(1)借书顺序图:
借书顺序图
:
不不
:
不不
□不不不
□不不
uan]
[-za
alt
ig
□不
[za
iguan]
□不不不
:
不不不不
不
□不不
□不不不
□不不不
:
不不不不
□不
□不不不
:
不不2
:
不不2
还书顺序图
(2)还书顺序图:
六、数据库表结构:
数据库目录结构:
1、表book的详细数据字段:
序号
字段名
字段类型
说明
备注
1
name
varchar
图书名称
2
ID
varchar
图书编号
关键字
3
zaiguan
tinyint
在馆状态
4
readerID
varchar
借阅者ID
可为空
2、表dzgrecord的详细数据字段:
序号
字段名
字段类型
说明
备注
1
TYPE
tinyint
记录类型
2
ID
varchar
记录ID
关键字
3
reader
varchar
读者ID
4
time
date
记录时间
5
book
varchar
记录图书
3、表global的详细数据字段:
序号
字段名
字段类型
说明
备注
1
zjRecordID
int
租借记录ID
2
gsgRecordID
int
读者记录ID
3
tsglRecordID
int
图书管理记录ID
4
zqk
float
总欠款
5
visitNumber
int
总访问人数
4、表gly的详细数据字段:
序号
字段名
字段类型
说明
备注
1
Password
varchar
管理员密码
2
ID
varchar
管理员ID
关键字
5、表reader的详细数据字段:
序号
字段名
字段类型
说明
备注
1
name
varchar
读者姓名
2
ID
varchar
读者编号
关键字
3
Password
varchar
读者密码
4
Other
varchar
其他属性
可为空
5
Kjs
Int
可借书数量
6
Qk
Float
读者欠款
7
ZjRecord0
varchar
租借记录
8
ZjRecord1
varchar
租借记录
9
ZjRecord2
varchar
租借记录
6、表tsglrecord的详细数据字段:
序号
字段名
字段类型
说明
备注
1
Type
Tinyint
记录种类
2
bookID
varchar
图书编号
3
Time
Date
记录时间
4
ID
varchar
记录ID
关键字
7、表zjrecord的详细数据字段:
序号
字段名
字段类型
说明
备注
1
type
Tinyint
记录种类
2
readerID
varchar
读者ID
3
bookID
varchar
书籍ID
4
Time
Date
记录时间
七.系统实现
本系统采用了三层架构来实现,即分为用户界面层(UI)、业务逻辑层(BLL)和数据访问层(DAL),用户界面层是展示给用户的界面,方便用户与系统进行交互;业务逻辑层是对系统业务实体的封装,完成系统业务功能;数据访问层直接与数据库打交道,为业务逻辑层提供底层的数据库操作。
7.1文件目录结构:
界面:
控制类:
数据类:
7.2界面效果(详细源代码见附件):
默认主页:
读者登录:
进入主界面:
查看图书信息:
读者信息:
借书:
完成后个人信息和图书信息:
还书:
还书完成后个人信息及图书信息:
管理员所有界面效果如下:
图书管理:
7.3业务逻辑(完整源代码见附件):
借书核心代码:
protected void doGet(HttpServletRequest request,HttpServletResponseresponse)
throwsServletException,IOException{HttpSessionsession=request.getSession();
readerre=(reader)session.getAttribute("reader");Stringid=request.getParameter("id");Connectioncn=null;
StringdriverName="com.mysql.jdbc.Driver";
Stringurl="jdbc:
mysql:
//localhost:
3306/library";try{
Class.forName(driverName);
cn=DriverManager.getConnection(url);System.out.println("取得数据库连接成功:
");
}catch(Exceptione){
System.out.println("取得数据库连接错误:
" +e.getMessage());
}
re.borrow(cn,id);response.sendRedirect("/ruanA/login/isreal.jsp");
还书核心代码:
protected void doGet(HttpServletRequest request,HttpServletResponseresponse)
throwsServletException,IOException{Stringid=request.getParameter("id");Connectioncn=null;
StringdriverName="com.mysql.jdbc.Driver";
Stringurl="jdbc:
mysql:
//localhost:
3306/library";try{
Class.forName(driverName);
cn=DriverManager.getConnection(url);System.out.println("取得数据库连接成功:
");
}catch(Exceptione){
System.out.println("取得数据库连接错误:
" +e.getMessage());
}
bookbo=newbook();bo.findbyID(cn,id);bo.huanshu(cn);
response.sendRedirect("/ruanA/login/isreal.jsp");
}
7.4数据层主要代码:
7.4.1person类:
publicabstractclassperson{privateStringname;privateStringID;
privateStringpassword;privateStringother;
publicabstractbooleaninstert(Connectioncn); //在数据库中创
建
publicabstractbooleandeleat(Connectioncn);//在数据库中删除publicabstractbooleanuptade(Connectioncn);//在数据库中更新
/**
*@returnthename
*/
publicStringgetName(){returnname;
}
/**
*@paramnamethenametoset
*/
publicvoidsetName(Stringname){this.name=name;
}
/**
*@returntheID
*/
publicStringgetID(){returnID;
}
/**
*@paramIDtheIDtoset
*/
publicvoidsetID(StringID){this.ID=ID;
}
/**
*@returnthepassword
*/
publicStringgetPassword(){returnpassword;
}
/**
*@parampasswordthepasswordtoset
*/
publicvoidsetPassword(Stringpassword){this.password=password;
}
/**
*@returntheother
*/
publicStringgetOther(){returnother;
}
/**
*@paramothertheothertoset
*/
publicvoidsetOther(Stringother){this.other=other;
}
}
7.4.2reader类:
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedata;
importjava.sql.Connection;
importjava.sql.PreparedStatement;importjava.sql.ResultSet;
/**
*
*@authorchy
*Stringname;
*StringID;
*Stringpassword;
*Stringother;
*/
publicclassreaderextendsperson{
privateintkjs;privatefloatqk;
privateStringyjs0;//假设没人最多借3本书privateStringyjs1;
privateStringyjs2;
@Override
publicbooleaninstert(Connectioncn){
String sql = "insert into reader(name,ID,password,other,kjs,qk,ZjRecord0,ZjRecord1,ZjRecord2)"
+"values(?
?
?
?
?
?
NULL,NULL,NULL)";
try{
PreparedStatementps=cn.prepareStatement(sql);ps.setString(1,this.getName());
ps.setString(2,this.getID());ps.setString(3,this.getPassword());ps.setString(4,this.getOther());ps.setInt(5,3);
ps.setFloat(6,