水了一学期的java web,终于在课设付出了代价,真是平时幼儿园,期末似高三做完课程设计,老师不让用框架,只能用HTML+CSS+JavaScript+JSP+Servlet+JavaBean+JDBC+DAO,当然我们悄咪咪的用了一点点EL,下面是用户端的一些基本功能的思路,写下来思路更清晰了
第五,六天任务
(1)用户借阅图书
(2)用户归还图书
(3)用户续借图书
(4)用户预约图书
写在前面,这四个功能看似简单,写起来却要有机结合,就比如借阅图书时,除了要判断这本书是否在馆,还要判断这本书是否被预约,被预约后还要判断这本书是被谁预约了,如果是当前借书人预约的话,就允许借阅,如果不是当前人预约的话,就提醒不允许借书,当然,判断当前借书人的借阅量是否大于0这是必不可少的。还有一点要注意,如果是预约的人将图书借走之后,要将预约记录删掉。还有还书的功能,也需要与预约结合起来,接下来我将介绍这几个功能的实现,及其操作页面。
(1)借阅图书:
流程图先整上,接下来将结合代码来解释整个借书流程
整个的借书流程是写在一个servelt中的,然后将处理结果传到jsp中。
String x = session.getAttribute("userid").toString();
stu_id = Integer.parseInt(x);//将session中的学号取出
String y = request.getParameter("book_id").toString();
int book_id = Integer.parseInt(y);//取出借阅的书号
1.通过book_state.equals("不在馆")
来判断是否在馆
2.在馆后,再通过yyd.find_yuyue_book(book_id)
判断这本书是否被预约
3.如果被预约,就通过yyd.find_yuyue_stu(book_id)== stu_id
来判断当前借书人是否与预约人是同一个人
4.如果是一个人,通过std.select_id_num(stu_id)
来取得当前借书人的可借阅量
5.如果可借阅量大于0,则开始执行
boolean b = std.update_nownum(stu_id);
int a = bko.book_update3(book);
int c = jld.create(jl);
int d = yyd.delete_yuyue(book_id);
其余情况都不允许借阅
如果没被预约,则执行上述第4、5步命令。
功能总结,借书的操作是基本操作之一,所以情况会比较复杂,要清晰的考虑到会发生的情况,以及对各个表的操作,借书写的好,还书、预约、续借都会简单许多。
(2)归还图书:
归还图书的操作是比较繁琐的,要涉及罚款,以及对预约本书人的通知,还是先上流程图
取出学号及书号的步骤同借书,就不重复说了
还书就没有那么多判断了,对数据库的操作的仍是对用户,对图书,对记录。通过STU.stu_update(stu)
修改用户借阅量+1;通过BK.book_update(bk)
修改图书状态为在馆
通过BK.book_update_xj(0, number)
修改图书的被续借次数为0(这里省去一个判断步骤,无论该本书是否被续借过,都直接归0)。
再通过JL.jl_update(jl)
修改用户对当前这本书的记录(一定要是当前的,因为这个人可能借了这本书很多次,sql语句要加一个jl_hdate is null)。
至此,还书操作结束,要考虑还书人是否逾期,将当前日期与应还日期做减法,并将结果通过request传到jsp中处理,如果h>0,一天1元,小于0,就不用罚款了。
最后,判断这本书是否被人预约,yyd.find_yuyue_book(number)
来判断是否被预约,如果被预约,则通过yyd.yuyue_update(x, number)
来修改预约记录的到书时间和截至时间,并通过联系方式发送提醒给预约者(这里是通过邮件)。
归还图书的操作比借书好写一点,主要没那么多判断情况,但还有下一步改善的地方,将还书操作提取到主页面中,通过书号及还书时间为空查询出记录,可直接还书。
(3)续借图书:
续借是这四个功能中最简单的操作了,只需判断书的续集次数是否等于0(规定每本书最多被当前借书人续借一次),上流程图
学号,书号的获得同上,通过bkd.find_xj(number) == 0
判断是否被需续借过,如果没被续借,则
int x = jdo.jl_update_yhuan(id, number);
修改应还时间
int y = bkd.book_update_xj(1, number);
修改图书续借状态
到此,续借就被完成了。
(4)预约图书:
其实预约图书的流程比续借图书还少,但要考虑清楚情况,而且预约的情况主要是在借书和还书中处理的,虽然简单,但还是流程图。
预约的判断和借书相比,还是比较简单的,只需要根据是否在馆和是否被预约来组成四周结果。
通过yyd.find_yuyue_book(number))
来判断是否被预约。结果组成如流程图,这里只说没被预约和不在馆,这样情况才被允许预约,通过Jl_DAO中的create()
函数来创建预约记录,预约的记录得创建将空出到书日和截至日期,这两个属性要等预约的书被还时才被添加(详情请见归还图书)。