1、目录一、系统分析 21.1 需求分析 21.1.1 文字描述: .21.1.2 数据流图: .21.2 功能分析 .3二、数据库设计 32.1 数据库概念结构设计 .32.2 数据库逻辑结构设计 4三、系统设计 63.1 用户登录模块 .83.2 书目借阅模块 .93.3 书目归还模块 103.4 书目预约模块 113.5 书目续借模块 113.6 书目检索模块 123.7 系统管理模块 13四、系统实现 .144.1 书籍检索界面效果如下图所示: 144.2 图书预约界面效果如下图所示: 164.3 图书续借界面效果如下图所示: 174.4 系统管理界面效果如下图所示: 184.5 图书管理
2、界面效果如下图所示: 18五、总结及展望 .192一、 系统分析1.1 需求分析1.1.1 文字描述:基于 WEB 的图书借阅及管理系统1.必须持有借书卡的用户才能借书。2.所有用户都可以搜索图书(可按多种条件搜索,如作者,出版社,书名),显示在网页上的图书要有详细信息(书的信息,是否在馆,在哪个借阅处)。3.图书管理员可以添加图书,修改图书,删除图书等,可以进行图书进货,图书报废处理。4.图书管理员处理用户的借书及还书操作。5.系统管理员可以添加用户,为用户分配借书卡号,设置默认密码;可以删除用户。6.用户以借书卡考号和密码可以登录读者信息系统,读者信息系统中显示该用户的图书借阅历史,目前在
3、借图书(包括图书信息,到期信息等);可以显示用户的基本信息,如姓名,职务(教工或学生),邮箱等。用户可以对自己的基本信息进行修改。1.1.2 数据流图:读者图书查询个人信息查询图书借阅添加图书修改与删除维护图书数据维护读者信息借书 、 还书图书管理员图书信息个人信息借阅信息查询结果查询条件查询条件查询结果借阅信息操作信息读者信息查询结果查询条件图书信息3系统管理员系统维护日志维护权限维护增删用户后台数据维护1.2 功能分析程序功能模块图如下:图书馆图书管理系统读者端界面后台数据维护 图书管理 借书还书管理图书类别管理首页显示 登录 图书信息查询 个人信息 馆藏地信息管理图书管理增删用户系统管理
4、预约图书查看本系统功能实现分为三个模块:系统管理模块、图书管理模块、和用户查询模块。系统管理模块主要实现对图书馆藏地信息的添加、修改、删除操作,普通用户和图书管理员的添加与删除,以及系统数据的整理和维护。图书管理模块功能为书籍信息的维护操作,供图书管理员使用。主要实现书籍信息、书籍类别的添加、删除与修改,且图书管理员可以查看读者预约书籍,并处理读者的借书、还书及欠款缴纳操作。用户查询模块中,所有用户都有查询馆内图书的权限,用户凭借书卡号可以登录查看个人图书借阅情况,并修改个人信息,可以执行图书的预约和续借操作,所有用户的欠款信息将发布在该模块中。二、 数据库设计2.1 数据库概念结构设计根据需
5、求分析可以规划出的实体有:图书管理员信息实体、图书信息实体、书籍借阅实体、用户信息实体。实体之间关系的 E-R 图,实体之间关系如下图所示: 4用户 添加 、 删除 系统管理员图书管理员图书查询 、 借阅 、 预约添加 、 删除 、 修改1n1n 1添加 、 删除n1n借书卡号密码用户级别违章标志. . .图书 I D 号图书 号借书卡号借阅日期归还日期续借标志预约日期预约失效日期违章原因图书 I D 号图书 号索书号. . .入藏日期所属类别号所在馆藏地在馆标志可借标志用户名姓名密码性别电话地址E m a i l2.2 数据库逻辑结构设计表 1:用户信息数据表(user_Info)字段名 含
6、义 类型 注释usernumber 文本,主键 varchar2(20) 系统管理员为用户分配,用于图书借阅和个人信息维护username 读者姓名 varchar2(20)password 密码 varchar2(20) 用户密码,登录判断sex 性别 varchar2(20) check(sex in(男, 女)telphone 电话 varchar2(20)position 职位 varchar2(20)email 电子邮件 varchar2(20)useraddr 家庭住址 varchar2(30)postcode 邮政编码 varchar2(10)grade 借阅级别 varchar
7、2(10) 判断用户借书数目startdate 办证日期 date5enddate 失效日期 dateerrorstatus 处罚标志 varchar2(5) check(errorstatus in(0,1)paystatus 欠款标志 varchar2(5) check(paystatus in(0,1)currentbook 目前借阅数 numbertotalbook 历史借阅数 numberdel_check 删除标志 varchar2(10) check(del_check in(是,否)表 2:图书管理员信息数据表( bookadmin)字段名 含义 类型 注释adnumber 文
8、本,主键 varchar2(20) 图书管理员的登录证件号adname 姓名 varchar2(20)adpassword 密码 varchar2(30) 用户密码,登录判断adsex 性别 varchar2(10) check(adsex in(男,女)adtel 电话 varchar2(20)adaddr 住址 varchar2(30)ademail 电子邮件 varchar2(20)del_check 删除标志 varchar2(10) check(del_check in(是,否)表 3:图书信息数据表(book)字段名 含义 类型 注释bookID 文本,主键 varchar2(20
9、) 图书 ID 号,唯一标志每本馆藏书目,相同书名不同 ID 号checkID 索书号 varchar2(20) 索书号,相同书名同一索书号bookname 书目名称 varchar2(20)author 作者 varchar2(20)publish 出版社 varchar2(20)publishdate 出版日期 varchar2(20)categoryID 所属目录 ID 号 varchar2(10) 参照 category 表,图书所属类别topic 主题词 varchar2(50)joindate 入馆日期 date 即书目录入日期addrID 所在馆藏地 ID 号 varchar2(
10、10) 参照 bookaddr 表,图书所在地book_check 是否在馆标志 varchar2(10) 馆内是否收藏borrow_status 是否可借标志 varchar2(30) 用户是否可借del_check 删除标志 varchar2(10) check(del_check in(是,否)表 4:图书类别信息数据表(category )字段名 含义 类型 注释categoryID 文本,主键 varchar2(10) 所属目录 ID 号6content 类别名称 varchar2(20)addrID 所在馆藏地 ID 号 varchar2(10) 参照 bookaddr 表,图书所
11、在地del_check 删除标志 varchar2(10) check(del_check in(是,否)表 5:图书馆藏地信息数据表(bookaddr)字段名 含义 类型 注释addrID 文本,主键 varchar2(10) 所在馆藏地 ID 号bookaddr 馆藏地名称 varchar2(30)description 详细描述 varchar2(50)del_check 删除标志 varchar2(10) check(del_check in(是,否)表 6:图书借阅信息数据表(user_book)字段名 含义 类型 注释usernumber 文本,主键 varchar2(20)boo
12、kID 文本,主键 varchar2(20)借书卡号,参照 user_Info 表;图书 ID 号,参照 book 表,二者为联合主键,标志读者借阅情况borrowDate 借阅日期 datebackDate 归还日期 datecontinue_check 续借标志 varchar2(10) check(continue_check in(是, 否 )in_check 借阅中标志 varchar2(10) check(in_check in(是, 否)表 7:图书预约信息数据表(user_order)字段名 含义 类型 注释usernumber 文本,主键 varchar2(20)bookID
13、 文本,主键 varchar2(20)借书卡号,参照 user_Info 表;图书 ID 号,参照 book 表,二者为联合主键,标志读者预约情况orderbegin 预约开始日期 dateorderend 预约结束日期 dateorder_check 预约标志 varchar2(10) check(order_check in(是, 否)表 8:违章欠款信息数据表(user_error)字段名 含义 类型 注释usernumber 文本,主键 varchar2(20)bookID 文本,主键 varchar2(20)借书卡号,参照 user_Info 表;图书 ID,参照 book 表,二者
14、为联合主键,标志读者违章欠款情况error_check 违章标志 varchar(5)pay_check 欠款标志 varchar(5) check(pay_check in(是,否)7三、 系统设计本系统功能实现分为三个模块:系统管理模块、图书管理模块、和用户查询模块。实现所有功能模块所涉及的公用类类包括:编号 类名 功能说明1 DbCon 封装数据库连接及操作类2 ChineseFilter 解决中文乱码的过滤器3 QueryDaoImpl 封装所有数据的查询操作(1) DbCon 类该类的功能:数据库连接及关闭。返回值 方法名 功能 参数说明Connection getConnectio
15、n() 连接数据源 return connResultSet executeQuery(String sql) 执行数据库查询语句 return resultResultSet executeUpdate(String sql) 执行数据库插入、删除语句return resultvoid close() 关闭数据库(2) ChineseFilter 类该类的功能:编码转换。返回值 方法名 功能 参数说明void init(FilterConfig config) 过滤器初始化void doFilter(ServletRequest request, ServletResponse respon
16、se,FilterChain chain) 编码转换void destroy() 过滤器销毁(3) QueryDaoImpl 类该类的功能:所有数据的查询操作。返回值 方法名 功能 参数说明ArrayList listAlluser() 显示所有用户信息 adduser adArrayList listAlladmin() 显示所有管理员信息 addadmin adArrayList listAllbook() 显示所有书籍信息 addbook adArrayList listcategory() 显示所有类别信息 category adArrayList listbookaddr() 显示所
17、有馆藏地信息 bookaddr adArrayList listAlluserbook() 显示所有用户借阅信息 addbookdeal ArrayList listAlluserorder() 显示所有用户预约信息 addbookdealArrayList listAllbookdeal(String id) 显示指定用户的在借书籍 addbookdealArrayList listAllhistory(String id) 显示指定用户的历史借阅书籍信息addbookdealArrayList findByAuthor(String name,String key,String amoun
18、t,String按条件查询并显示图书信息addbook ad8model,String result,String list)ArrayList findByNumber(String number) 按借书卡号显示用户信息 adduser adArrayList findByadnumber(String number) 按证件号显示管理员信息 addadmin adArrayList findByBookID(String id) 按图书 ID 号显示书籍信息 addbook adArrayList findByBookname(String name) 按书目名称显示书籍信息 addbo
19、ok adArrayList findBycategoryIDAll(String id) 按类别 ID 信息类别信息 category adArrayList findByBookaddrID(String id) 按馆藏地 ID 显示馆藏地 bookaddr adString findByorder(String number,String bookid)显示指定用户、指定书目的预约状态无int inbookcheck(String checkid) 按索书号显示可借书籍数目无int totalbookcheck(String checkid) 按索书号显示所有在馆书籍数目无3.1 用户登
20、录模块用户登录分为普通读者、图书管理员和系统管理员登录。其中系统管理员本系统预设一位,通过 Servlet 实现其登录控制。普通读者和图书管理员登录通过读取数据库信息进行权限控制。文件结构图以普通读者为例如下所示:否否l o g i n . j s pu s e r i n f o . j s pA c c o u n t D a o I m p l . j a v aa d d u s e r . j a v ac h e c k . j s p一般用户输入是否正确用户是否存在 , 密码是否正确用户信息显示重新输入用户名 、 密码用户信息用户信息 用户信息否否图 1 用户登录流程用户登录模块
21、 jsp 页面列表如下表所示:jsp 文件名 功能login.jsp 登陆界面check.jsp 登录用户检测界面userinfo.jsp 用户信息显示界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 adduser 封装用户数据类92 AccountDaoImpl 普通用户和图书管理员登录验证(1) AccountDaoImpl 类该类的功能:普通用户和图书管理员登录验证。返回值 方法名 功能 参数说明boolean check(String name,String pw) 普通读者登录验证 无boolean admincheck(String name,String pw)图书
22、管理员登录验证 无3.2 书目借阅模块b o o k b o r r o w . j s pb o o k b o r r o w 1 . j s pQ u e r y D a o I m p l . j a v aa d d b o o k d e a l . j a v a图书管理员借书卡号 、 图书 I D 号借阅信息输入借书卡号 、图书 I D 号书籍是否在馆用户是否可借是是否已达借阅上限是借阅成功否无法借阅否否是B o o k d e a l D a o I m p l . j a v a图 2 书目借阅流程书目借阅模块 jsp 页面列表如下表所示:jsp 文件名 功能bookbor
23、row.jsp 录入借书卡号和图书 ID 号bookborrow1.jsp 借阅处理及成功界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 addbookdeal 封装用户借阅信息数据类2 BookdealDaoImpl 读者借书、还书等操作的处理类3 QueryDaoImpl 所有数据的查询操作(1) BookdealDaoImpl 类10该类的功能:读者借书、还书等操作的处理。返回值 方法名 功能 参数说明int borrowbook() 借书处理 addbookdeal aminvoid backbook() 还书处理 addbookdeal aminvoid backboo
24、k1() 更新归还的书籍和还书的用户的信息addbookdeal aminvoid orderbook(String id,String bookid) 图书预约处理 addbookdeal aminvoid pay(String error) 用户违章罚款处理 addbookdeal aminint continuebook(String id,String bookid)图书续借处理 addbookdeal amin3.3 书目归还模块b o o k b a c k . j s pb o o k b a c k 1 . j s pa d d b o o k d e a l . j a v
25、a图书管理员借阅信息输入借书卡号 、图书 I D 号借阅成功B o o k d e a l D a o I m p l . j a v a更新书目信息 、读者信息图 3 图书归还流程书目归还模块 jsp 页面列表如下表所示:jsp 文件名 功能bookback.jsp 录入借书卡号和图书 ID 号bookback1.jsp 归还处理及成功界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 addbookdeal 封装用户借阅信息数据类2 BookdealDaoImpl 读者借书、还书等操作的处理类(1) BookdealDaoImpl 类该类的功能:读者借书、还书等操作的处理。返回值
26、 方法名 功能 参数说明int borrowbook() 借书处理 addbookdeal aminvoid backbook() 还书处理 addbookdeal aminvoid backbook1() 更新归还的书籍和还书的用户的信息addbookdeal amin11void orderbook(String id,String bookid) 图书预约处理 addbookdeal aminvoid pay(String error) 用户违章罚款处理 addbookdeal aminint continuebook(String id,String bookid)图书续借处理 add
27、bookdeal amin3.4 书目预约模块否否一般用户是否登录是否有可借书目预约成功登录否是图 4 书目预约流程是不可预约o r d e r b o o k . j s pQ u e r y D a o I m p l . j a v aa d d b o o k d e a l . j a v a图书 I D 号预约信息B o o k d e a l D a o I m p l . j a v ao r d e r . j s p书目预约模块 jsp 页面列表如下表所示:jsp 文件名 功能orderbook.jsp 查看书籍信息,选择预约操作order.jsp 预约处理及成功界面实现该
28、功能模块所涉及的重要类包括:编号 类名 功能说明1 addbookdeal 封装用户借阅信息数据类2 BookdealDaoImpl 读者借书、还书等操作的处理类3 QueryDaoImpl 所有数据的查询操作(1) BookdealDaoImpl 类该类的功能:读者借书、还书等操作的处理。返回值 方法名 功能 参数说明int borrowbook() 借书处理 addbookdeal aminvoid backbook() 还书处理 addbookdeal aminvoid backbook1() 更新归还的书籍和还书的用户的信息addbookdeal aminvoid orderbook(
29、String id,String bookid) 图书预约处理 addbookdeal aminvoid pay(String error) 用户违章罚款处理 addbookdeal aminint continuebook(String id,String bookid)图书续借处理 addbookdeal amin123.5 书目续借模块已登录用户查看已借阅图书是否续借过该书不可续借续借成功是否在续借期内是否否是m y b o o k . j s pc o n t i n u e . j s pa d d b o o k d e a l . j a v aB o o k d e a l D
30、 a o I m p l . j a v a图 5 书目续借流程书目续借模块 jsp 页面列表如下表所示:jsp 文件名 功能mybook.jsp 显示个人在借图书,执行续借处理continue.jsp 续借处理及成功界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 addbookdeal 封装用户借阅信息数据类2 BookdealDaoImpl 读者借书、还书等操作的处理类(1) BookdealDaoImpl 类该类的功能:读者借书、还书等操作的处理。返回值 方法名 功能 参数说明int borrowbook() 借书处理 addbookdeal aminvoid backbo
31、ok() 还书处理 addbookdeal aminvoid backbook1() 更新归还的书籍和还书的用户的信息addbookdeal aminvoid orderbook(String id,String bookid) 图书预约处理 addbookdeal aminvoid pay(String error) 用户违章罚款处理 addbookdeal aminint continuebook(String id,String bookid)图书续借处理 addbookdeal amin3.6 书目检索模块13一般用户输入关键字 、 选择查询条件馆内是否收藏提示并未收藏显示查询结果是否
32、r e s e a r c h . j s pQ u e r y D a o I m p l . j a v a检索关键字r e s u l t b o o k . j s p n o b o o k . j s p查询结果图 6 书目检索流程书目检索模块 jsp 页面列表如下表所示:jsp 文件名 功能research.jsp 录入检索关键字并选择检索条件resultbook.jsp 查询结果显示界面nobook.jsp 未命中提示界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 addbook 封装馆藏图书数据类3 QueryDaoImpl 所有数据的查询操作3.7 系统管理模
33、块系统管理模块主要实现对图书馆藏地信息的添加、修改、删除操作,普通用户和图书管理员的添加与删除,以及系统数据的整理和维护。该模块功能应用 struts 实现,文件结构图以馆藏地修改为例,如下所示:14系统管理模块 jsp 页面列表如下表所示:jsp 文件名 功能addaddr.jsp 馆藏地信息录入addaddr1.jsp 馆藏地信息录入成功界面addadmin.jsp 图书管理员信息录入addadmin1.jsp 图书管理员信息录入成功界面adduser.jsp 读者信息录入adduser1.jsp 读者信息录入成功界面deladdr.jsp 馆藏地信息删除deladdr1.jsp 馆藏地信
34、息删除成功界面deladmin.jsp 图书管理员信息删除deladmin1.jsp 图书管理员信息删除成功界面deluser.jsp 读者信息删除deluser1.jsp 读者信息删除成功界面实现该功能模块所涉及的重要类包括:编号 类名 功能说明1 bookaddr 封装馆藏地信息数据类2 addadmin 封装图书管理员信息数据类3 adduser 封装用户信息数据类4 BookaddrDaoImpl 添加、删除、修改馆藏地信息的类5 UserDaoImpl 添加、删除用户信息的类6 QueryDaoImpl 所有数据的查询操作(1) BookaddrDaoImpl 类该类的功能:添加、删
35、除、修改馆藏地信息。返回值 方法名 功能 参数说明void addaddr() 添加馆藏地信息 无void modifyaddr() 修改馆藏地信息 无void deladdr(String addrid) 删除馆藏地信息 无(2) UserDaoImpl 类该类的功能:添加、删除用户信息。返回值 方法名 功能 参数说明void reg() 添加用户信息 无void regadmin() 添加图书管理员信息 无void del() 删除用户信息 无void deladmin() 删除图书管理员信息 无void modifyInfo(String number) 用户联系信息修改 无void m
36、odifyPw(Stringnumber,String pw)用户密码修改 无四、 系统实现4.1 书籍检索界面效果如下图所示:15功能实现图书检索主页面可以输入检索关键字,并选择检索条件来确认检索方向,结果显示页面通过调用 findByAuthor(String name,String key,String amount,String model,String result,String list)方法实现,并将查询结果通过 ArrayList 泛型类返回,主要代码如下:String sql=null;if(model.equals(“前方一致“)else if(model.equals(“
37、前方一致“)else if(model.equals(“任意匹配“)else if(model.equals(“任意匹配“)else if(model.equals(“null“)4.2 图书预约界面效果如下图所示:用户登录后,其借书卡号信息存在当前 Cookie 中,只有登录用户可以进行书籍预约操作,预约处理程序首先取出 Cookie 中数据判断用户是否登录,再通过当前在馆图书数量判断是否可以预约,主要代码如下:17返回返回4.3 图书续借界面效果如下图所示:每本图书只能续借一次,操作前应判断该读者是否已续借,主要代码如下:String result=null;int al=0;java.s
38、ql.Date date = null;Statement stmt=con.createStatement();ResultSet rs=stmt.executeQuery(“select continue_check,backdate from user_book where usernumber=“+id+“ and bookID=“+bookid+“);while(rs.next()result=rs.getString(“continue_check“);date=rs.getDate(“backdate“);if(result.equals(“是“ )al=0;elselong t
39、ime=(date.getTime()/1000)+60*60*24*30;java.sql.Date latedate=new java.sql.Date(time*1000); String mod=“update user_book set continue_check=是,backDate=“+latedate+“where usernumber=“+id+“and 18bookID=“+bookid+“ ;String book=“update book set borrow_status=已借阅-归还日期:“+latedate+“ where bookID=“+bookid+“;4
40、.4 系统管理界面效果如下图所示:4.5 图书管理界面效果如下图所示:19五、 总结及展望在设计方面,本系统采用 Struts1.3 框架,同时使用 JSP 技术进行动态页面的设计,从系统的安全性和代码的可重用性方面考虑,运用 JavaBean 对程序的关键代码进行封装。后台数据库选用 Oracle 数据库。在内容方面,本系统实现了系统管理员对图书馆藏地信息的添加、修改、删除操作,普通用户和图书管理员的添加与删除,以及系统数据的整理和维护。图书管理员对书籍信息、书籍类别的添加、删除与修改,且图书管理员可以查看读者预约书籍,并处理读者的借书、还书及欠款缴纳操作。用户登录后可以查询图书借阅信息和个人信息。以及所有的用户均可以按条件(作者、出版社等)进行图书信息的查询。由于个人实践经验不足,因此系统还存在不足,需要进一步改进和完善。本系统存在的不足和改进方向:虽然采用 Struts 框架对表单数据和数据操作类进行分别封装,也实现了 JavaBean 类对数据库操作代码的完全封装,但代码编写也出现了操作的冗余,可读性降低。在以后的编程日子,会进行改进。