资源描述
基于JSP的图书管理系统
1. 开发工具及相关技术介绍
1.1 SSH框架
SSH框架是指Struts2 + Hibernate + Spring三大开源框架技术,用SSH技术进行开发,能够提高开发效率,层次清晰。
Struts2实现页面的设计和请求的跳转调用业务逻辑;Hibernate实现对数据的增删改查;Spring通过依赖注入控制对象的生成和事务的处理。
1.2 Tomcat
Tomcat服务器是Apache Group Jakarta小组开发的一个免费服务器软件,适合于嵌入Apache中使用,而且,它的源代码可以免费获得,你可以自由地对它进行扩充。Tomcat服务器的兼容性很好,有众多大软件的公司的支持,而且服务器的性能稳定,其发展前景很好。
2.运行需求
(1)台式计算机:CPU P4 2.0G以上,内存256M以上,硬盘40G以上,10M/100M网卡,Windows 2000/2003/NT/XP/Vista/Windows 7中文操作系统;
(2)数据库管理系统:Oracle 9g及以上。
3.图书馆管理系统总体功能概述
图书管理系统包含五个模块分别是:系统登录、图书管理、学生管理、借阅信息管理、图书检索。
系统登录模块:一般用户和管理员都必须登录才能进入系统,用户登录时在后台判断用户的权限类型,分为普通用户和管理员,普通用户可以对书籍进行浏览及个人借阅信息的查询,管理员可以对多种信息进行操作。
图书管理模块:管理员通过验证界面进入系统后,进入到图书管理模块,可以对图书进行添加,删除、修改图书信息、查询、查看等一系列的操作。
学生管理模块:管理员可以在此模块中创建新的普通用户,并且可以对用户的信息进行修改,删除等操作。
借阅信息管理模块:这是图书管系统中最重要的模块之一,管理员进入该模块中可以为普通用户办理借阅图书,归还图书的功能,并且能够实现还款的操作。
图书检索模块:普通用户通过验证界面进入系统后,能够按照书名,作者等多种条件对图书进行查询操作,确保查询到的都是最新的信息。
整体系统的功能模块如图4-2所示:
图4-2 图书馆管理系统功能图
4. 图书馆管理系统各功能模块概述
4.1 系统登录模块
用户进入系统时调用的一个模块。该模块根据用户输入的用户名、密码来判断用户的类型,跳转到该类用户的界面。
本模块的功能点包括:
(1) 判断用户名和密码是否相符;
(2) 根据用户的权限类型,登录到系统的制定界面操作使用。
登录功能模块流程图如图4-3所示:
图4-3 登录模块流程图
4.2 图书管理模块
在本模块中图书馆工作人员可以对图书进行管理操作。
本模块的功能点包括:
(1) 新书入库,将新进图书按其类型将图书的基本信息录入系统数据库;
(2) 图书出库,某一部分图书会随着时间的增长及知识的更新而变得不再有收藏的价值,或者图书被损坏,这些图书就要在图书库中除去。即从图书库中删除此图书记录;
(3) 新书编码,图书入库后,需要贴上条形码,以便以后提供借阅,本系统不涉及到条形码阅读器,只是假定此过程已经生成条形码。编码只是将条形码帖于书上以唯一标识图书;
(4) 图书信息修改,图书信息由于工作人员的疏忽,而出现录入错误,提供其图书ID就可以查看图书的基本信息并对其进行修改;
图书管理功能模块流程图如图4-4所示:
图4-4 图书管理模块流程图
4.3 学生管理模块
本模块主要是工作者对学生信息(读者借书证信息)进行管理。
本模块的功能点包括:
(1) 办理借书证,为新读者办理借书证,填写用户基本信息;
(2) 注销借书证,输入读者借书证编号,根据借书证ID删除读者表中此借书证信息;
(3) 挂失借书证,主要是将借书证的状态改为挂失,更新读者表状态字段,有图书管理员操作;
(4) 修改图书证信息,由于工作人员的疏忽,而出现办理借书证时录入信息有误,则可根据借书证编号对其信息进行查看和修改。
借书证管理功能模块流程图如图4-5所示:
图4-5 借书证管理模块流程图
4.4 借阅信息管理模块
本模块主要是工作者对图书外借和归还进行管理。
本模块的功能点包括:
(1) 图书借阅,记录借阅证编号和图书编号,进行借书过程。在数据库中插入一天借书记录,该记录包括图书ID、借书证ID、借阅日期、归还日期等;
(2) 图书归还,输入借书证编号,图书编号,根据输入的编号在借阅登记表中找到相应的记录,将借阅记录删除,并将该记录相应的数据更新到历史借阅记录信息表中;
(3) 查看借阅记录,可以根据借书证ID以及图书ID查询借阅记录。
(4) 办理还款,如读者有图书超期的情况将会有欠款,可以根据借书证的ID来为读者班里还款。
借阅信息管理功能模块流程图如图4-6所示:
图4-6 借阅信息管理模块流程图
4.5 图书检索模块
使用该模块的用户有:读者和管理员。
本模块的功能点包括:
(1) 根据图书ID进行检索;
(2) 根据图书名称进行检索;
(3) 根据图书类型进行检索。
(4) 根据图书作者或译者进行检索。
图书检索功能模块流程图如图4-7所示:
图4-7 图书检索模块流程图
4.1系统数据库设计
4.1.1 概念结构设计
(1)实体图
学生:学生属性有学号、姓名、密码、性别、学院、班级、电话、email、宿舍、地址、已借书数量、创建日期。学生实体图如图4-8所示:
学生
学号
创建日期
已借书数量
地址
宿舍
email
电话
班级
学院
性别
密码
姓名
图4-8 学生实体图
图书:图书属性有图书编号、书名、作者、类别、单价、出版社、出版日期、总数量、当前数量、购买日期、内容摘要。图书实体图如图4-9所示:
图书编号
书名
内容摘要
购买日期
当前数量
作者
图书
总数量
类别
出版日期
出版社
单价
图4-9 图书实体图
(2)E—R图
根据以上实体图,分析了各个实体的属性,根据这些属性,可以得到系统的E—R图,如图4-10所示
班级
属于
1 n 学生
借书日期
n n
属于
借阅
还书日期
超期罚款
1 n
学生
图书
图4.8 系统E-R图
4.1.2 逻辑结构设计
根据上述功能模块的需求,设计如下主要数据库表:
表4.1 图书信息表(t_book)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Book_num
图书编号
Varchar2(15)
主键
否
Book_name
书名
Varchar2(20)
否
Writer
作者
Varchar2(10)
否
Sort_id
类加ID
Varchar2(5)
否
表4.1图书信息表(t_book) 续表01
Price
单价
Number(5.2)
是
Pub_company
出版社
Varchar2(20)
是
Pub_date
出版日期
Date
是
Total_num
总数量
Number(3)
否
Current_num
当前数量
Number(3)
否
Buy_date
入库日期
Date
否
Brief
内容摘要
Varchar2(100)
是
表4.2 学生信息表 (t_student)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Student_num
学号
Varchar2(15)
主键
否
Student_name
姓名
Varchar2(10)
否
Password
密码
Varchar2(20)
否
Academy_id
学院ID
Varchar2(10)
否
Class_id
班级ID
Varchar2(10)
否
Sex
性别
Varchar2(2)
是
Telephone
电话
Varchar2(15)
是
Email
Email
Varchar2(20)
是
Lended_num
已借书数量
Number(2)
默认为0
否
Create_date
创建日期
Date
否
表4.3 借阅信息表(t_book_student)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Id
ID号
Varchar2(35)
主键
否
Book_id
图书编号
Varchar2(15)
否
Student_id
学号
Varchar2(15)
否
borrow_date
借书日期
Date
否
return_date
还书日期
Date
否
Money
超期罚款
Number(5.2)
否
表4.4 管理员表(t_admin)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Admin_id
管理员ID
Number(5)
主键
否
Admin_name
管理员姓名
Varchar2(10)
否
Admin_password
管理员密码
Varchar2(20)
否
表4.5 学院表(t_admin)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Academy_id
学院ID
Varchar2(10)
主键
否
Academy_name
学院名
Varchar2(30)
否
表4.6 班级表(t_class)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Class_id
班级ID
Varchar2(10)
主键
否
Class_name
班级名
Varchar2(30)
否
Academy_id
所属学院ID
Varchar2(10)
否
表4.7 图书类别表(t_admin)
字段英文名称
字段中文名称
字段类型
字段约束
是否可为空
Sort_id
类别ID
Varchar2(5)
主键
否
Sort_name
类别名
Varchar2(20)
否
5 系统实现
5.1 系统的软件结构
处理静态WEB是由Web浏览器向Web发送静态页面, Web服务器直接对发送的静态网页进行处理。
处理动态WEB数据库查询的过程是:当Web浏览器向Web服务器发送请求时,动态网页的处理流程是,屏蔽掉HTML语言,只输入动态网页文件,由Web服务器向数据库中传递信息,经过数据库的处理返回数据集,Web应用服务器再把含有程序代码的动态网页转换为静态网页返还给Web浏览器。这就是用动态网页对数据库进行查询并将数据返还给浏览器处理的全过程,具体见图5-1所示。
图5-1数据库查询示意图
5.2 登录系统模块的实现
本模块主要是用户通过图书馆管理系统的首页进入该系统。用户输入正确的用户名和密码,如果登录信息有错误,则系统提示登录错误信息,并且禁止系统用户进行任何操作。若登录信息正确,系统会根据用户的身份进行相应权限的判断,读者进入前台系统,管理员进入后台系统。图书馆系统登录主页面如图5-2所示。
图5-2 图书馆管理系统登录界面
其实现的代码如下:
Action层:
public String login() {
boolean flag = iss.login(admin);
if(flag) { return "success"; }
message = "用户名或口令错误!";
return "fail";
}
Service层:
public boolean login(TAdmin admin) {
TAdmin a = isd.login(admin);
if(a != null) { return true; }
return false;
}
Dao层:
public TAdmin login(TAdmin admin) {
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query q = session.createQuery("from TAdmin a where a.adminName = ? and a.adminPassword = ?").setString(0, admin.getAdminName()).setString(1, admin.getAdminPassword());
TAdmin a = (TAdmin)q.uniqueResult();
return a;
}
5.3 图书管理模块的实现
图书管理模块主要分为图书入库、查看图书、统计图书,其中图书入库是往图书管理数据库中添加图书信息。看图书功能中可以查看图书详细信息,并对图书信息进行修改或删除某些废弃图书信息。
5.3.1 图书入库功能的实现
点击添加图书功能,填写图书基本信息,为图书选择类型,类型是与数据库交互动态生成的下拉列表,具体界面如图5-3所示。
图5-3 图书入库界面
其实现的代码如下:
public String addInfoBook() {
this.sortList = ibs.listBookSort();
return "add";
}
public List<TSort> listBookSort() {
return this.getHibernateTemplate().find("from TSort tsort");
}
public String addSaveBook() {
ibs.saveBook(book);
book = null;
bookList = this.listBook();
return "Book";
}
public void saveBook(TBook book) {
Date now = new Date();
book.setBuyDate(now);
book.setCurrentNum(book.getTotalNum());
ibd.saveBook(book);
}
public void saveBook(TBook book) { this.getHibernateTemplate().save(book);
}
5.3.2 图书维护功能的实现
点击图书维护功能,展示所有图书的信息列表,在每个图书信息行后提供删除和修改操作功能,并且可以单击选定某一个图书信息后的详细信息进行详细查看图书信息。具体图书列表界面如图5-4所示
图5-4 图书列表界面
其实现的代码如下:
public String listAllBook() {
bookList = this.listBook();
return "Book";
}
public List<TBook> listBook(TBook book, Page page) {
String hql = "from TBook tb where 1=1";
if(book!=null) {
if(book.getBookNum() != null && !"".equals(book.getBookNum().trim())) {
hql = hql + " and tb.bookNum = '" + book.getBookNum()+"'";
}
if(book.getBookName() != null && !"".equals(book.getBookName().trim())) {
hql = hql + " and tb.bookName = '" + book.getBookName()+"'";
}
if(book.getWriter() != null && !"".equals(book.getWriter().trim())) { hql = hql + " and tb.writer = '" + book.getWriter()+"'"; }
if(!book.getSortId().getSortId().trim().equals("-1")) {
hql = hql + " and tb.sortId.sortId = '" + book.getSortId().getSortId()+"'";
}
hql = hql + " order by tb.bookName";
} else {
hql = hql + " order by tb.buyDate desc";
}
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query q = session.createQuery(hql);
q.setFirstResult(page.getStartRow());
q.setMaxResults(5);
List<TBook> list = q.list();
return list;
}
(1)删除图书功能的实现
管理员删除图书,删除时可删除一个,也可同时多选删除,
其实现的代码如下:
public String deleteOneBook() {
ibs.delBookById(bookNum);
bookList = this.listBook();
return "Book";
}
public String deleteMoreBook() {
ibs.delMoreBook(bookNums);
bookList = this.listBook();
return "Book";
}
public void delBookById(String bookNum) {
this.getHibernateTemplate().delete(this.getHibernateTemplate().get(TBook.class, bookNum));
}
public void delMoreBook(String[] bookNums) {
for(int i=0; i<bookNums.length;i++) {
this.getHibernateTemplate().delete(this.getHibernateTemplate().get(TBook.class, bookNums[i])); }
}
(2)修改图书信息功能的实现
在管理员修改图书信息时,跳转到图书信息详细表单中,列出所要修改图书的详细信息,并可以进行修改,则修改界面如图5-5所示。
图5-5 修改图书信息界面
其实现的代码如下:
public String modifyInfoBook() {
this.sortList = ibs.listBookSort();
book = ibs.queryOneBookById(bookNum);
return "modifyInfo";
}
public String modifySaveBook() {
ibs.modifyBook(book);
book = null;
bookList = this.listBook();
return "Book";
}
public TBook queryOneBookById(String bookNum) {
TBook book = (TBook)this.getSession().createQuery("from TBook tb where tb.bookNum = ?").setString(0, bookNum).uniqueResult();
this.getSession().close();
return book;
}
public void modifyBook(TBook book) {
this.getHibernateTemplate().update(book);
}
(3)查看图书详细信息功能的实现
在管理员点击详细信息时,跳转到某图书信息详细表单中,列出所选图书的详细信息,则显示界面如图5-6所示。
图5-6图书详细信息界面
其实现的代码如下:
public String infoDetailBook() {
book = ibs.queryOneBookById(bookNum);
return "Detail";
}
public TBook queryOneBookById(String bookNum) {
TBook book = (TBook)this.getSession().createQuery("from TBook tb where tb.bookNum = ?").setString(0, bookNum).uniqueResult();
this.getSession().close();
return book;
}
5.4 学生管理模块的实现
学生管理模块主要分为添加学生、查看学生、修改学生,查看学生的详细信息。
5.4.1 学生添加功能的实现
点击添加学生,填写学生基本信息,具体界面如图5-7所示。
图5-7办理借书证界面
其实现的代码如下:
public String addInfoStudent() {
this.academyList = iss.listAllAcademy();
return "add";
}
public void addStudent(TStudent student) {
Date now = new Date();
student.setCreateDate(now);
student.setLendedNum(0);
isd.saveStudent(student);
}
public List<TAcademy> listAllAcademy() {
return this.getHibernateTemplate().find("from TAcademy ta");
}
public List<TClass> listAllClass() {
return this.getHibernateTemplate().find("from TClass tc");
}
public void saveStudent(TStudent student) {
this.getHibernateTemplate().save(student);
}
5.4.2 学生维护功能的实现
点击学生维护功能,展示所有读者的信息列表,在每个读者信息行后提供删除和修改操作功能,并且可以单击选定某一个读者信息后的详细信息进行详细查看读者信息。具体读者列表界面如图5-8所示
图5-8 读者列表界面
其实现的代码如下:
public String listAllStudent() {
studentList = this.getStudentListByPage();
return "Student";
}
public List<TStudent> listAllStudent(Page page) {
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query q = session.createQuery("from TStudent ts");
q.setFirstResult(page.getStartRow());
q.setMaxResults(5);
List<TStudent> list = q.list();
return list;
}
(1)删除学生功能的实现
管理员删除读者,删除时可删除一个,也可同时多选删除。
其实现的代码如下:
public String deleteOneStudent() {
iss.deleteOneStudent(studentNum);
studentList = this.getStudentListByPage();
return "Student";
}
public String deleteMoreStudent() {
iss.deleteMoreStudent(studentNums);
studentList = this.getStudentListByPage();
return "Student";
}
public void deleteOneStudent(String studentNum) {
this.getHibernateTemplate().delete(this.getHibernateTemplate().get(TStudent.class, studentNum));
}
public void deleteMoreStudent(String[] studentNums) {
for(int i=0;i<studentNums.length;i++) {
this.getHibernateTemplate().delete(this.getHibernateTemplate().get(TStudent.class, studentNums[i]));
}
}
(2)修改学生信息功能的实现
在管理员修改学生信息时,跳转到学生信息详细表单中,列出所要修改学生的详细信息,并可以进行修改,则修改界面如图5-9所示。
图5-9 修改读者信息界面
其实现的代码如下:
public String modifyInfoStudent() {
this.student = iss.getStudentByid(studentNum);
this.academyList = iss.listAllAcademy();
this.classList = iss.listClassById(student.getAcademyId().getAcademyId());
return "modifyInfo";
}
public String modifySaveStudent() {
iss.modifyStudentByid(student);
student = null;
studentList = this.getStudentListByPage();
return "Student";
}
public TStudent getStudentByid(String studentNum) {
return (TStudent)this.getHibernateTemplate().get(TStudent.class, studentNum);
}
public void modifyStudentByid(TStudent student) {
this.getHibernateTemplate().update(student);
}
(3)查看读者详细信息功能的实现
在管理员点击详细信息时,跳转到某读者信息详细表单中,列出所选读者的详细信息,则显示界面如图5-10所示。
图5-10读者详细信息界面
其实现的代码如下:
public String infoDetailStudent() {
student = iss.getOneStudentById(studentNum);
return "Detail";
}
public TStudent queryOneStudentById(String studentNum) {
TStudent student = (TStudent)this.getSession().createQuery("from TStudent ts where ts.studentNum = ?").setString(0, studentNum).uniqueResult();
this.getSession().close();
return student;
}
5.5 借阅信息管理模块的实现
借书信息管理模块主要分为办理图书借阅、办理图书归还、借阅信息查看,其中借阅信息查看可按图书编号和借书证编号查看。
5.5.1 办理图书借阅功能的实现
点击图书借阅,填写图书编号和借书证编号,具体界面如图5-11所示。
图5-11办理图书借阅界面
其实现的代码如下:
public String saveBookStudent() {
message = ils.saveBookStudent(bookStudent);
return "success";
}
public String saveBookStudent(TBookStudent bookStudent) {
TBook book = ild.getOneBook(bookStudent.getBookId());
if(book.getCurrentNum() == 0) {
return "该书已被借完!";
}
TStudent student = ild.getOneStudent(bookStudent.getStudentId());
if(student.getLendedNum() == 9) {
return "借书数量已达到最大,不能在借!";
}
Date borrowDate = new Date();
long l = borrowDate.getTime();
long ll = l + 30*24*60*60*1000L;
Date returnDate = new Date(ll);
bookStudent.setBorrowDate(borrowDate);
bookStudent.setReturnDate(returnDate);
bookStudent.setMoney(0d); //补上所欠金额的计算
ild.saveBookStudent(bookStudent);
book.setCurrentNum(book.getCurrentNum()-1);
ild.modifyBook(book);
student.setLendedNum(student.getLendedNum()+1);
ild.modifyStudent(student);
return "借书成功!";
}
public void saveBookStudent(TBookStudent bookStudent) {
this.getHibernateTemplate().save(bookStudent);
}
5.5.2 办理图书归还功能的实现
点击图书归还,填写图书编号和借书证编号,具体界面如图5-12所示。
图5-12 办理图书归还界面
其实现的代码如下:
public String delBookStudent() {
message = ils.delBookStudent(bookStudent);
return "success";
}
public String delBookStudent(TBookStudent bookStudent) {
TBook book = ild.getOneBook(bookStudent.getBookId());
TStudent student = ild.getOneStudent(bookStudent.getStudentId());
boolean flag = ild.delBookStudent(bookStudent.getStudentId(), bookStudent.getBookId());
if(!flag) {
return "没有该 记录!";
}
book.setCurrentNum(book.getCurrentNum()+1);
student.setLendedNum(student.getLendedNum()-1);
return "还书成功";
}
public boolean delBookStudent(String studentId, String bookId) {
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Query q = session.createQuery("from TBookStudent tbs where tbs.studentId = ? and tbs.bookId = ?").setString(0, studentId).setString(1, bookId);
List<TBookStudent> list = q.list();
if(list.size() != 0) {
TBookStudent bookStudent = list.get(0);
this.getHibernateTemplate().delete(bookStudent);
return true;
}
return false;
}
5.6 图书检索模块的实现
本模块主要是用户能够输入自己想要查询图书的条件来快速的检索。图书检索页面如图5-13示。
图5-13图书检索界面
其实现的代码如下:
public List<TBook> listBook() {
this.sortList = ibs.listBookSort();
if(page == null) {
page = new Page();
page.setCu
展开阅读全文