目录
一、需求分析 2
1.1 功能描述 2
1.1.1“读者”功能 2
1.1.2“管理员”功能 3
1.2 系统用例图 4
三、数据库概要设计 5
2.1 系统E-R图 5
四、数据库逻辑结构设计 5
3.1 系统关系模型 5
3.2 数据库结构SQL代码 7
3.2.1基本表 7
3.2.1存储过程 8
3.2.3定时事件 11
四、系统设计 12
4.1 系统流程图 12
4.2 模块设计 12
后端设计: 17
1.1 功能描述
1.1.1“读者”功能
1)图书的查询:图书的查询可以通过搜索图书id、书名、作者名、出版社来实现,显示结果中需要包括书籍信息以及是否被借阅的情况;
2)图书的借阅:借阅图书时,需要判断该读者现已借阅的图书数量,若超过3本,则暂时不能借书;若尚有未缴纳罚金,暂时不能借书;否则点击“确认借阅”,即完成借阅。
3)图书的归还:归还图书时,若尚有罚金未缴纳,提示学生去管理中心线下缴纳罚金再进行线下还书;否则界面显示所有待还书籍的信息,点击“确认还书”或输入图书id再点击“确认”即完成还书。
4)查看、修改个人信息:个人信息包括用户id、姓名、密码、姓名以及电话;修改个人信息:包括修改姓名、密码、性别、电话等,其中用户id不可修改。
5)查询借阅历史:通过输入书籍的id、书名、作者或出版社来查询借阅记录;记录内容包括读者id、书籍信息和借阅的开始日期以及结束日期;若书籍尚未归还,“结束日期”后会显示“尚未归还”。
6)查看处罚记录:处罚记录的内容包括违规的借阅记录的信息;如若相关书籍仍未进行线下归还且读者也未缴纳罚金,本文转载自http://www.biyezuopin.vip/onews.asp?id=15302则提示尚未缴纳罚金;否则显示该条借阅记录的超期天数。
7)注册
1.1.2“管理员”功能
1)添加图书:输入图书的Id、书名、作者、出版社、其他信息,系统将信息导入数据库;
2)删除图书:如果书籍未被借出,则可通过鼠标点击“删除图书”来完成删除任务;否则不能进行删除。
3)修改图书信息:通过点击“修改信息”,打开修改图书信息页面,修改相应信息后(书名、作者、出版社、其他信息),点击保存;
4)借阅处罚管理:输入用户id,可以查看用户的借阅违规处罚情况,用户缴纳罚款后,可点击“缴纳罚款”,撤销对该生的处罚,恢复其正常借阅和归还权利;
5)权限管理:输入最长借阅天数可修改读者最长借阅期限;点击“开启”、“关闭”按钮可以开启或者关闭“黑名单”功能。
6)用户管理:可以输入读者id或者姓名来查找读者,点击“删除用户”可以删除该用户;若“黑名单”功能被启用,可以点击“加入黑名单”、“移除黑名单”来控制用户的登陆权限。
7)管理员个人信息修改
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆到图书管理系统</title>
<style>
.window {
width: 332px;
position: absolute;
top: 30%;
left: 50%;
display: block;
z-index: 2000;
background: #fff;
padding: 20 0;
}
</style>
<link rel="stylesheet" href="./layui/css/layui.css">
</head>
<!-- background存放登陆页面背景图片 -->
<body>
<script src="./layui/layui.js"></script>
<%
Cookie[] cookies = request.getCookies();//从cookie中获取登陆用户名和密码
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("id")) {
id = cookie.getValue();
}
if (cookie.getName().equals("pwd")) {
pwd = cookie.getValue();
}
}
}
%>
<!-- 登录失败时弹出错误消息 -->
<%
Object message = session.getAttribute("message");
if (message != null && !"".equals(message)) {
session.setAttribute("message", "");
%>
<script>
layui.use('layer', function() {
var layer = layui.layer;
layer.msg("<%=message%>");
});
</script>
<%
}
%>
<div class="layui-carousel" id="test1">
<div carousel-item>
<div style="background-image: url(1.JPG); background-size: cover;"></div>
<div style="background-image: url(2.JPG); background-size: cover;"></div>
<div style="background-image: url(3.JPG); background-size: cover;"></div>
<div style="background-image: url(4.JPG); background-size: cover;"></div>
</div>
</div>
<!-- 登陆和注册卡片-->
<div class="window">
<div class="layui-row">
<div class="layui-col-xs12">
<div class="layui-tab layui-tab-card"
style="width: 330px; background-color: white">
<!-- 卡片头选项-->
<ul class="layui-tab-title">
<li class="layui-this">登陆</li>
<li>注册</li>
</ul>
<!-- 卡片内容-->
<div class="layui-tab-content">
<!-- 登陆表 -->
<div class="layui-tab-item layui-show">
<%!String id, pwd;//用户名和密码%>
<div class="layui-anim layui-anim-up">
<fieldset class="layui-elem-field layui-field-title"
style="margin-top: 20px;">
<legend>登录到图书管理系统</legend>
</fieldset>
<!-- 登陆交给login.java处理 -->
<form action="login" class="layui-form layui-form-pane"
method=post name=form>
<div class="layui-form-item">
<label class="layui-form-label">用户ID</label>
<div class="layui-input-inline">
<input type="text" name="id"
value="<%=(id == null ? "" : id)%>" placeholder="请输入用户ID"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-inline">
<input type="password" name="pwd"
value="<%=(pwd == null ? "" : pwd)%>" placeholder="请输入密码"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<input type="radio" name="identity" lay-skin="primary"
value="reader" title="普通用户" checked> <input
type="radio" name="identity" lay-skin="primary" value="admin"
title="管理员"> <input type="submit"
class="layui-btn layui-btn-radius" value="登陆">
</div>
</form>
</div>
</div>
<!-- 注册表 -->
<div class="layui-tab-item">
<div class="layui-anim layui-anim-up">
<fieldset class="layui-elem-field layui-field-title"
style="margin-top: 20px;">
<legend>普通用户注册</legend>
</fieldset>
<!-- 登陆交给register.java处理 -->
<form action="register" class="layui-form layui-form-pane"
method=post name=form>
<div class="layui-form-item">
<label class="layui-form-label">设置密码</label>
<div class="layui-input-inline">
<input type="password" name="pwd" placeholder="请输入密码"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-inline">
<input type="text" name="name" placeholder="请输入您的姓名"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">电话</label>
<div class="layui-input-inline">
<input type="text" name="tel" placeholder="请输入您的电话"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">性別</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男" checked>
<input type="radio" name="sex" value="女" title="女">
</div>
</div>
<div class="layui-form-item">
<input type="submit"
class="layui-btn layui-btn-radius layui-btn-fluid "
value="注册">
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
layui.use('form', function() {
var form = layui.form;
form.render();
//监听提交
form.on('submit(formDemo)', function(data) {
layer.msg(JSON.stringify(data.field));
return false;
});
});
layui.use('element', function() {
var element = layui.element;
});
layui.use('carousel', function() {
var carousel = layui.carousel;
//建造实例
carousel.render({
elem : '#test1',
width : '100%', //设置容器宽度
height : '700px',
autoplay : 'true',
interval : 5000,
arrow : 'hover' //始终显示箭头
//,anim: 'updown' //切换动画方式
});
});
</script>
</body>
</html>