利用Jsp、Servlet、mybatis等技术开发的图书管理系统(coding)

图书馆管理系统

项目的功能实现

1.1 学生使用端:
功能实现:
  1. 头像、个人信息
  2. 书籍信息
    • 纸质书籍
    • 电子文稿
  3. 历史订单
    • 图书购买订单
    • 图书的借用与归还订单
  4. 图书馆简介
  5. 意见/建议
  6. 支持鼓励
  7. 退出登录
1.2 管理员使用端:
  1. 头像、个人信息
  2. 学生信息管理
  3. 书籍信息管理
    • 书籍的详细信息
    • 书籍库存数量
  4. 订单信息管理
    • 图书购买的订单信息
    • 图书的借用与归还的订单信息
  5. 意见管理中心
    • 接收学生端的意见和建议
工具:IDEA 、Navicat 、HbuilderX 、SQLyog、typora

编码:

1. 数据库的创建

Student (学生信息表)

学生信息表;记录学生的个人信息

stu_id(主键)	   学生学号
password  		登录密码
stu_name		学生姓名
gender			学生性别
class		学生班级
phone		学生手机号
Books (图书信息表)

图书信息表:记录图书的书籍信息

book_id(主)	   书籍编号
book_name		书籍名称
book_price		书籍价钱
book_category	书籍类别
book_publish	书籍出版社
Book_nums (图书数量表)

图书数量表:记录图书馆中当前所含有的图书数量

book_nums_id		图书数量id
book_id				图书id
book_nums			图书的数量
Borrow_books (图书信息借用与归还)

(图书信息借用与归还):记录学生借书与归还书的记录

borrow_id		图书借用ID
stu_id			学生ID
book_id			图书ID
borrow_time		借出时间
return_time		归还时间
Buy_books (图书购买订单)

图书购买订单:记录图书购买的订单(目前只能每次只能购买一本图书)

buy_id		购买订单ID
stu_id				学生ID
book_id				图书ID
book_price			图书价格
buy_time			购买时间 

2. JavaBean

student
package com.volta.entity;

/**
 * 学生信息表
 */
public class student {
     private   Integer stu_id;
     private   String password;
     private   String stu_name;
     private   String gender;
     private   String stu_class;
     private   String phone;

    public student() {
        super();
    }

    public student(Integer stu_id, String password, String stu_name, String gender, String stu_class, String phone) {
        this.stu_id = stu_id;
        this.password = password;
        this.stu_name = stu_name;
        this.gender = gender;
        this.stu_class = stu_class;
        this.phone = phone;
    }
    public Integer getStu_id() {
        return stu_id;
    }
    public void setStu_id(Integer stu_id) {
        this.stu_id = stu_id;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getStu_name() {
        return stu_name;
    }
    public void setStu_name(String stu_name) {
        this.stu_name = stu_name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getStu_class() {
        return stu_class;
    }
    public void setStu_class(String stu_class) {
        this.stu_class = stu_class;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "student{" +
                "stu_id=" + stu_id +
                ", password='" + password + '\'' +
                ", stu_name='" + stu_name + '\'' +
                ", gender='" + gender + '\'' +
                ", stu_class='" + stu_class + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

3. 前端界面

index.jsp
主界面
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        body {
            font-family: "Lato", sans-serif;
            transition: background-color .5s;
            background: url("../images/background.png");
        }

        /*侧边栏选择器*/
        .sidenav {
            height: 100%;
            width: 0; /*原始宽度*/
            position: fixed;
            /*z-index、top、left共同控制侧栏的悬浮(上方1,下方-1)*/
            z-index: 1;
            top: 0;
            left: 0;
            background-color: pink;
            overflow-x: hidden;
            transition: 0.5s; /*侧栏延迟0.5s显示*/
            padding-top: 60px;
        }

        /*侧边栏标签选择器*/
        .sidenav a {
            padding: 8px 8px 8px 32px;
            text-decoration: none;
            font-size: 25px;
            color: #818181;
            display: block;
            transition: 0.3s; /*标签延迟0.3s显示*/
        }
        .sidenav select{
            padding: 8px 8px 8px 32px;
            text-decoration: none;
            font-size: 25px;
            color: #818181;
            display: block;
            transition: 0.3s; /*标签延迟0.3s显示*/
            border: 0;
            position: relative;
            appearance:none;
            -moz-appearance:none; /* Firefox */
            -webkit-appearance:none; /* Safari 和 Chrome */
            outline:none;		/*取消选中时的边框*/

        }
        /*侧栏标签和关闭按钮光标的效果*/
        .sidenav a:hover, .offcanvas a:focus{
            color: #f1f1f1;
        }

        /*侧栏和关闭按钮的位置选择器*/
        .sidenav .closebtn {
            position: absolute;
            top: 0;
            right: 25px;
            font-size: 36px;
            margin-left: 50px;
        }

        /*主体内容*/
        #main {
            transition: margin-left .5s;/*主体内容延迟0.5s整体y右移动*/
            padding: 16px;
        }

        /*当文档高度小于450px时,改变侧栏的padding属性和字体大小*/
        @media screen and (max-height: 450px) {
            .sidenav {padding-top: 15px;}
            .sidenav a {font-size: 18px;}
        }
        .round_icon{
            width: 75px;
            height: 75px;
            display: flex;
            border-radius: 50%;
            align-items: center;
            justify-content: center;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div id="mySidenav" class="sidenav">
    <img src="../images/吴彦祖.jpg" class="round_icon">
    <a href="">个人信息</a>
    <a href="${pageContext.request.contextPath}/student_information_servlet">学生信息管理</a>
    <a href="#">书籍信息管理</a>
    <a href="#">订单信息管理</a>
    <a href="#">意见管理中心</a>
    <a href="#">退出登录</a>
</div>

<div id="main">
    <h2>图书馆管理系统</h2>
    <p>点击以下菜单图标打开侧边栏,主体内容向右偏移。主体内容添加黑色透明背景</p>
    <span style="font-size:30px;cursor:pointer" id="openclose">&#9776; open</span>
</div>
</body>
<script type="text/ecmascript">
    let flag=true;
    document.getElementById("openclose").onclick = function(){
        if(flag == true){
            openNav();
            flag=-flag;
        }else{
            closeNav();
            flag=-flag;
        }
    };
    /*打开侧栏,修改侧栏宽度,主体左跨度、背景透明度*/
    function openNav() {
        document.getElementById("mySidenav").style.width = "250px";
        document.getElementById("main").style.marginLeft = "250px";
        document.body.style.backgroundColor = "rgba(255, 170, 255, 0.4)";
    }
    /*关闭侧栏,恢复原始侧栏宽度,主体左跨度、背景透明度*/
    function closeNav() {
        document.getElementById("mySidenav").style.width = "0";
        document.getElementById("main").style.marginLeft= "0";
        document.body.style.backgroundColor = "white";
    }
</script>
</html>

login.jsp
登录界面
<%--
  Created by IntelliJ IDEA.
  User: lzq
  Date: 2022/7/25
  Time: 20:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://csdnimg.cn/public/favicon.ico" rel="SHORTCUT ICON">
    <title>登录</title>
    <style>
        @import url("../css/register.css");
    </style>
</head>

<body>
<div class="content">
    <div class="avatar"></div>
    <div class="loginOrRegisterBox">
        <ul class="witch">
            <li id="loginButton">登录</li>
            <li id="registerButton">注册</li>
        </ul>
        <div id="form">
            <form action="../loginServlet" method="post" id="login">
                <input type="text" placeholder="学号" name="stu_id" id="stu_id1">
                <input type="password" placeholder="密码" name="password" id="password1">
                <div>
                    <input type="checkbox" name="">
                    <p>记住密码</p>
                    <a href="#">忘记密码?</a>
                    <span id="msg1" style="font-size: 12px;color: red"></span>
                    <%=request.getAttribute("login_msg") == null ? "" : request.getAttribute("login_msg")%>
                    <%
                        request.removeAttribute("login_msg");
                    %>
                </div>
                <input type="button" id="loginbtn" value="登 录" >
            </form>
            <form action="../registerServlet" id="register" method="post">
                <input type="text" placeholder="学号"        name="stu_id"         id="stu_id">
                <input type="text" placeholder="姓名"         name="stu_name"      id="stu_name">
                <input type="test" placeholder="性别"         name="gender"       id="gender">
                <input type="text" placeholder="班级"         name="stu_class"    id="stu_class">
                <input type="tel" placeholder="手机号"         name="phone"        id="phone">
                <input type="password" placeholder="密码"      name="password"    id="password">
                <input type="password" placeholder="确认密码"   name="confirmPassword" id="confirmPassword">
                <input type="button" value="立即注册" ID="registerbtn">
                <span id="msg" style="font-size: 12px;color: red;text-align: center"></span>
                <%=request.getAttribute("login_msg") == null ? "" : request.getAttribute("login_msg")%>
                <%
                    request.removeAttribute("login_msg");
                %>
            </form>
        </div>
    </div>
</div>
</body>
<script type="text/javascript"  src="../js/jQuery.js" ></script>
<script src="../js/login.js"></script>
<script type="text/javascript">
    //前台校验;
    $("#loginbtn").click( function (){
        var id=$("#stu_id1").val();
        var pwd=$("#password1").val();
        if(isEmpty(id)){
            //用户名为空
            $("#msg1").html("学号不允许为空!");
            return ;
        }else if(isEmpty(pwd)){
            //密码为空
            $("#msg1").html("密码不允许为空!");
            return ;
        }else{
            //两者都不为空,则手动提交表单
            $("#login").submit();
        }
    });
    //前台校验;
    $("#registerbtn").click( function (){
        alert("click");
        var id=$("#stu_id").val();
        var gender=$("#gender").val();
        var stu_class=$("#stu_class").val();
        var phone=$("#phone").val();
        var password=$("#password").val();
        var confirmPassword=$("#confirmPassword").val();
        if(isEmpty(id)){
            //用户名为空
            $("#msg").html("学号不允许为空!");
            return ;
        }else if(isEmpty(password)){
            //密码为空
            $("#msg").html("密码不允许为空!");
            return ;
        }else if(isEmpty(gender)){
            //密码为空
            $("#msg").html("性别不允许为空!");
            return ;
        }else if(isEmpty(stu_class)){
            //密码为空
            $("#msg").html("班级不允许为空!");
            return ;
        }else if(password != confirmPassword){
            //密码为空
            $("#msg").html("两次密码不同,请检查!");
            return ;
        }
        else{
            alert("submit");
            //两者都不为空,则手动提交表单
            $("#register").submit();
        }
    });

    /**
     * 判断字符串是否为空
     */
    function isEmpty(str){
        if (str == null || str.trim() == "") {
            return true;
        }
        return  false;
    }
</script>
</html>
student_information.jsp
用表格的形式加载学生表中的数据
<%--
  Created by IntelliJ IDEA.
  User: lzq
  Date: 2022/7/27
  Time: 23:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
  <!-- 指定字符集 -->
  <meta charset="utf-8">
  <!-- 使用Edge最新的浏览器的渲染方式 -->
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
  width: 默认宽度与设备的宽度相同
  initial-scale: 初始的缩放比,为1:1 -->
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
  <title>用户信息管理系统</title>

  <!-- 1. 导入CSS的全局样式 -->
  <link href="../css/bootstrap-theme.css" rel="stylesheet">
  <link href="../css/bootstrap.css" rel="stylesheet">
  <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
  <script src="../js/jQuery.js"></script>
  <!-- 3. 导入bootstrap的js文件 -->
  <script src="../js/bootstrap.min.js"></script>
  <style type="text/css">
    td, th {
      text-align: center;
    }
  </style>
</head>
<body>
<div class="container">
  <h3 style="text-align: center">学生信息列表</h3>
  <br>
  <div style="text-align: center">
    <select style="text-align: center; height:28px;width: 200px" id="inputselectid">
      <option value="stu_id" >学号</option>
      <option value="stu_name" >姓名</option>
      <option value="stu_class" >班级</option>
    </select>
    &nbsp;&nbsp;
    <input id="selectinputid"/>&nbsp;&nbsp;
    <button type="button" style="width: 50px; height: 28px" onclick="selectinput()">查询</button>
    &nbsp;&nbsp;
    <button type="reset" style="width: 50px; height: 28px" onclick="clearinput()">清空</button>
    <br>
  </div>
  <table border="1" class="table table-bordered table-hover">
    <tr class="success">
      <th>编号</th>
      <th>学号</th>
      <th>姓名</th>
      <th>性别</th>
      <th>班级</th>
      <th>手机号</th>
      <th>操作</th>
    </tr>
    <c:forEach items="${sessionScope.students}" var="student" varStatus="s">
      <tr>
        <td>${s.count}</td>
        <td>${student.stu_id}</td>
        <td>${student.stu_name}</td>
        <td>${student.gender}</td>
        <td>${student.stu_class}</td>
        <td>${student.phone}</td>
        <td><a class="btn btn-default btn-sm" onclick="updatestudent(${student.stu_id})">修改</a>&nbsp;<a class="btn btn-default btn-sm" onclick="deletestudent(${student.stu_id})">删除</a></td>
      </tr>
    </c:forEach>
    <tr>
      <td colspan="8" align="center"><a class="btn btn-primary" onclick="addinput()">添加联系人</a></td>
    </tr>
  </table>
</div>
</body>
<script>
  function deletestudent(stu_id){
    if(confirm("你确定要删除吗?")){  //删除用户
      location.href="${pageContext.request.contextPath}/deleteServlet?stu_id="+stu_id;
    }
  }
  function clearinput(){    //清空搜索框
    document.getElementById("selectinputid").value="";
  }
  function selectinput(){
    //获取操作的对象
    var op=document.getElementById("inputselectid").value;
    var value=document.getElementById("selectinputid").value;
    if(op=="stu_id"){
      location.href="${pageContext.request.contextPath}/selectServlet?stu_id="+value;
    }else if(op=="stu_name"){
      location.href="${pageContext.request.contextPath}/selectServlet?stu_name="+value;
    }else if(op=="stu_class"){
      location.href="${pageContext.request.contextPath}/selectServlet?stu_class="+value;
    }else{
      //没有匹配成功不做处理
    }
  }
  function updatestudent(stu_id) {
    location.href="${pageContext.request.contextPath}/updateServlet?stu_id="+stu_id;
  }

  function addinput() {
    location.href="${pageContext.request.contextPath}/pages/add.jsp";
  }

</script>
</html>
update.jsp
用于修改学生信息表中的信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="../css/bootstrap-theme.css" rel="stylesheet">
    <link href="../css/bootstrap.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="../js/jQuery.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="../js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <h3 style="text-align: center">学生信息列表</h3>
    <br>
    <table border="1" class="table table-bordered table-hover" id="tableid">
        <tr class="success">
            <th>编号</th>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>班级</th>
            <th>手机号</th>
            <th>操作</th>
        </tr>

        <c:forEach items="${sessionScope.students}" var="student" varStatus="s">
            <tr>
                <td>${s.count}</td>
                <td><input type="text" value="${student.stu_id}" style="border :0;" id="a"/></td>
                <td><input type="text" value="${student.stu_name}" style="border :0;" id="b"/></td>
                <td><input type="text" value="${student.gender}" style="border :0;" id="c"/></td>
                <td><input type="text" value="${student.stu_class}" style="border :0;" id="d"/></td>
                <td><input type="tel" value="${student.phone}" style="border :0;" id="e"/></td>
                <td><a class="btn btn-default btn-sm" onclick="deletestudent(${student.stu_id})">删除</a></td>
            </tr>
        </c:forEach>
            <td colspan="8" align="center"><a class="btn btn-primary" onclick="finishupdate()">提交</a></td>
    </table>
</div>
</body>
<script type="text/javascript">
    function deletestudent(stu_id){
        if(confirm("你确定要删除吗?")){  //删除用户
            location.href="${pageContext.request.contextPath}/deleteServlet?stu_id="+stu_id;
        }
    }
    function finishupdate() {
        var stu_id=$("#a").val();
        var stu_name=$("#b").val();
        var gender=$("#c").val();
        var stu_class=$("#d").val();
        var phone=$("#e").val();
        if(confirm("你确定要修改吗?")){
            location.href="${pageContext.request.contextPath}/updateServlet?stu_id="+stu_id+"&stu_name="+stu_name+"&gender="+gender+"&stu_class="+stu_class+"&phone="+phone;
        }
    }

</script>
</html>

add.jsp
用于添加学生信息表中的信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
    <!-- 指定字符集 -->
    <meta charset="utf-8">
    <!-- 使用Edge最新的浏览器的渲染方式 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
    width: 默认宽度与设备的宽度相同
    initial-scale: 初始的缩放比,为1:1 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>用户信息管理系统</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="../css/bootstrap-theme.css" rel="stylesheet">
    <link href="../css/bootstrap.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="../js/jQuery.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="../js/bootstrap.min.js"></script>
    <style type="text/css">
        td, th {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <h3 style="text-align: center">学生信息列表</h3>
    <br>
    <table border="1" class="table table-bordered table-hover" id="tableid">
        <tr class="success">
            <th>编号</th>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>班级</th>
            <th>手机号</th>
            <th>操作</th>
        </tr>

        <c:forEach items="${sessionScope.students}" var="student" varStatus="s">
            <tr>
                <td>${s.count}</td>
                <td><input type="text" value="${student.stu_id}" style="border :0;" id="a"/></td>
                <td><input type="text" value="${student.stu_name}" style="border :0;" id="b"/></td>
                <td><input type="text" value="${student.gender}" style="border :0;" id="c"/></td>
                <td><input type="text" value="${student.stu_class}" style="border :0;" id="d"/></td>
                <td><input type="tel" value="${student.phone}" style="border :0;" id="e"/></td>
                <td><a class="btn btn-default btn-sm" onclick="deletestudent(${student.stu_id})">删除</a></td>
            </tr>
        </c:forEach>
            <td colspan="8" align="center"><a class="btn btn-primary" onclick="finishupdate()">提交</a></td>
    </table>
</div>
</body>
<script type="text/javascript">
    function deletestudent(stu_id){
        if(confirm("你确定要删除吗?")){  //删除用户
            location.href="${pageContext.request.contextPath}/deleteServlet?stu_id="+stu_id;
        }
    }
    function finishupdate() {
        var stu_id=$("#a").val();
        var stu_name=$("#b").val();
        var gender=$("#c").val();
        var stu_class=$("#d").val();
        var phone=$("#e").val();
        if(confirm("你确定要修改吗?")){
            location.href="${pageContext.request.contextPath}/updateServlet?stu_id="+stu_id+"&stu_name="+stu_name+"&gender="+gender+"&stu_class="+stu_class+"&phone="+phone;
        }
    }

</script>
</html>

3. Servlet层

loginServlet
package com.volta.servlet.stuServlet;

import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import com.volta.entity.student;

@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("dopost");
        //1、设置编码格式
        request.setCharacterEncoding("utf-8");
        //2、获取数据        //获取的对象的String 与input标签的name所设置的值进行对应;
        Map<String, String[]> map = request.getParameterMap();
        //3、封装成对象
        student student = new student();
        try {
            BeanUtils.populate(student,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        System.out.println("-----===-"+student);
        //4、调用service层的方法
        loginservice loginservice = new loginserviceimpl();
        //5、是否登录成功
        if(loginservice.findstudentbyidpwd(student)){
            //true 表示在数据库中找到了对应得student;
            //登陆成功
            request.getSession().setAttribute("student",student);
            //重定向页面跳转
            //request.getContextPath()  获取request的当前的路径
            response.sendRedirect(request.getContextPath()+"/pages/index.jsp");
        }else{
            //FALSE
            //登陆失败
            request.setAttribute("login_msg","学号或密码错误!");
            System.out.println("登录错误");
            //返回消息
            //页面跳转
            request.getRequestDispatcher("/pages/login.jsp").forward(request,response);
        }
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

registerServlet
package com.volta.servlet.stuServlet;

import com.volta.entity.student;
import com.volta.service.student.loginserviceimpl;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

/**
 * 登录界面的用户注册界面的操作
 */
@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("dopost");
        request.setCharacterEncoding("utf-8");
        String id = request.getParameter("stu_id");
        Map<String, String[]> map = request.getParameterMap();
        student student = new student();
        try {
            BeanUtils.populate(student,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //先通过ID查找数据库是否含有相应的用户;
        System.out.println("student::"+student);

        loginserviceimpl lo = new loginserviceimpl();
        if(lo.findstudentbyid(student)){
            //true 表示数据库中已经存在学号
            //注册失败


        }else{
            //flase  表示数据库中不存在相应的学号
            lo.insertstudent(student);
            System.out.println("注册成功");
            //注册成功
            //跳转到登录界面
            request.setAttribute("login_msg","注册成功!");
                //返回消息
                //页面跳转
            try {
                Thread.sleep(2000);
                request.getRequestDispatcher("/pages/login.jsp").forward(request,response);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }


}

student_information_servlet
package com.volta.servlet.stuServlet;


import com.volta.entity.student;
import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/student_information_servlet")
public class student_information_servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("___ dopost____");
        loginservice loginservice =new loginserviceimpl();
        List<student> studentList = loginservice.findstudentAll();
        request.getSession().setAttribute("students",studentList);     //将userList 插入到request的作用域中进行数据共享
        request.getRequestDispatcher("/pages/student_information.jsp").forward(request,response);        //跳转到student_information.jsp页面
    }
}

selectServlet
package com.volta.servlet.stuServlet;

import com.volta.entity.student;
import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 根据搜索框的操作,进行数据库中数据的搜索
 */
@WebServlet("/selectServlet")
public class selectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("selectServlet  post");
        request.setCharacterEncoding("utf-8");
        //获取数据
        String stu_id=request.getParameter("stu_id");
        String stu_name=request.getParameter("stu_name");
        String stu_class=request.getParameter("stu_class");
        student student = new student();
        loginservice lo = new loginserviceimpl();
        List<student> studentList = null;
        if(stu_id!=null){
            student.setStu_id(Integer.parseInt(stu_id));//插入ID    //将String类型转化成一个Integer类型;
            studentList=lo.findstudentbystu_id(student);
        }else if(stu_name!=null){
            student.setStu_name(stu_name);//插入姓名
            studentList =lo.findstudentbyname(student);
        }else if(stu_class!=null){
            student.setStu_class(stu_class);   //插入班级
            studentList =lo.findstudentbyclass(student);
        }else{
            //没有任何参数不做处理
        }
        request.getSession().setAttribute("students",studentList);
        response.sendRedirect(request.getContextPath()+"/pages/student_information.jsp");
    }
}

addServlet
package com.volta.servlet.stuServlet;


import com.volta.entity.student;
import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/addServlet")
public class addServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        //获取数据
        String stu_id=request.getParameter("stu_id");
        String  stu_name=request.getParameter("stu_name");
        String  password=request.getParameter("password");
        String  gender=request.getParameter("gender");
        String  stu_class=request.getParameter("stu_class");
        String  phone=request.getParameter("phone");
        student student = new student(Integer.parseInt(stu_id),password,stu_name,gender,stu_class,phone);
        System.out.println("----addServlet--"+student);
        //调用service层的方法
        loginservice lo = new loginserviceimpl();
        int res=lo.insertstudent(student);
        if(res>0){
            response.sendRedirect(request.getContextPath()+"/student_information_servlet");
        }
    }
}

deleteServlet
package com.volta.servlet.stuServlet;

import com.volta.entity.student;
import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 用于删除操作的功能
 */
@WebServlet("/deleteServlet")
public class deleteServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码格式
        request.setCharacterEncoding("utf-8");
        String stu_id=request.getParameter("stu_id");
        student student = new student();
        student.setStu_id(Integer.parseInt(stu_id));    //将String类型转化成一个Integer类型;

        loginservice loginservice = new loginserviceimpl();
        int res=loginservice.deletetudent(student);
        if(res==1){
            System.out.println("student:"+student);
            System.out.println("删除成功!");
            //跳转到主界面
            response.sendRedirect(request.getContextPath()+"/student_information_servlet");
        }

    }
}

updateServlet
package com.volta.servlet.stuServlet;

import com.volta.entity.student;
import com.volta.service.student.loginservice;
import com.volta.service.student.loginserviceimpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 用于修改学生信息表中的信息
 */
@WebServlet("/updateServlet")
public class updateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String stu_id=request.getParameter("stu_id");
        String  stu_name=request.getParameter("stu_name");
        String  gender=request.getParameter("gender");
        String  stu_class=request.getParameter("stu_class");
        String  phone=request.getParameter("phone");
        student student = new student();
        student.setStu_id(Integer.parseInt(stu_id));
        loginservice lo = new loginserviceimpl();
        if(stu_name==null){   //执行搜索
            List<student> upstudent = lo.findstudentbystu_id(student);
            request.getSession().setAttribute("students",upstudent);
            response.sendRedirect(request.getContextPath()+"/pages/update.jsp");
        }else{  //修改
            student.setStu_name(stu_name);
            student.setStu_class(stu_class);
            student.setGender(gender);
            student.setPhone(phone);
            int res=lo.updatestudent(student);
            if(res>0){
                response.sendRedirect(request.getContextPath()+"/student_information_servlet");
            }
        }
    }
}

4. Service面

Service
package com.volta.service.student;

import com.volta.entity.student;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface loginservice {

    /**
     * 查询数据库中所有学生的信息
     */

    List<student> findstudentAll();

    /**
     * 搜索
     *通过学号查询数据库中的学生信息
     * 学号唯一,查询的结果唯一
     */

    List<student> findstudentbystu_id(student student);


    /**搜索
     * 通过姓名查找数据库中的学生信息
     * 可能存在重名的学生,返回List;
     */
    List<student> findstudentbyname(student student);

    /**搜索
     * 通过班级查找查找数据库中的学生信息
     * 可能存在同班的学生,返回List;
     */
    List<student> findstudentbyclass(student student);
    
    /**登录
     * 根据 ID and password 寻找学生信息,
     * 找到了返回TRUE
     * 没找到返回FALSE
     */
    boolean findstudentbyidpwd(student student);


    /**注册
     * 根据 ID 寻找学生信息,
     * 找到了返回TRUE
     * 没找到返回FALSE
     */
    boolean findstudentbyid(student student);

    //插入数据
    int insertstudent(student student);
    
    //删除学生表中的数据
    int deletetudent(student student);

    /**
     * 修改学生的信息,但是不允许修改学号
     */

    int updatestudent(student student);
}
loginserviceimpl
package com.volta.service.student;

import com.volta.entity.student;
import com.volta.mapper.loginmapper;
import com.volta.service.student.loginservice;
import com.volta.utils.mybatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class loginserviceimpl implements loginservice {

    @Override
    public boolean findstudentbyidpwd(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        student loginstu=loginmapper.findstudentbyidpwd(student);
        if(loginstu!=null){
            //根据stu_id and password 在数据库中寻找相应的用户;
            return true;
        }
        return false;
    }


    @Override
    public boolean findstudentbyid(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        student studentList=loginmapper.findstudentbyid(student);
        if(studentList!=null){
            //根据stu_id and password 在数据库中寻找相应的用户;
            return true;
        }
        return false;
    }


    @Override
    public int insertstudent(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper registermapper = sqlSession.getMapper(loginmapper.class);
        int res=registermapper.insertstudent(student);
        return res;
    }

    @Override
    public int deletetudent(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper deletemapper = sqlSession.getMapper(loginmapper.class);
        int res=deletemapper.deletestudent(student);
        return res;
    }

    @Override
    public List<student> findstudentAll() {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        List<student> studentList = loginmapper.findstudentAll();
        return studentList;
    }


    @Override
    public List<student> findstudentbystu_id(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        List<student> studentList  = loginmapper.findstudentbystu_id(student);
        return studentList;
    }

    @Override
    public List<student> findstudentbyname(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        List<student> studentList = loginmapper.findstudentbyname(student);
        return studentList;
    }

    @Override
    public List<student> findstudentbyclass(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        List<student> studentList = loginmapper.findstudentbyclass(student);
        return studentList;
    }

    @Override
    public int updatestudent(student student) {
        SqlSession sqlSession = mybatisUtil.getSqlSession();
        loginmapper loginmapper = sqlSession.getMapper(loginmapper.class);
        int res = loginmapper.updatestudent(student);
        return res;
    }
}

5. Mapper层

loginMapper
package com.volta.mapper;

import com.volta.entity.student;
import org.apache.ibatis.annotations.*;

import java.util.List;

/*
实现查询数据库中数据的接口,并且使用注解和xml进行基本开发
 */
public interface loginmapper {
    /**
     * 寻找数据库中所有学生的信息
     */
    @Select("select * from student")
    List<student> findstudentAll();
    /**
     * 通过学号和密码查询数据库中的数据
     */
    @Select("select * from student where stu_id=#{stu_id} and password=#{password}")
    student findstudentbyidpwd(student student);
    /**
     * 通过学号查询数据库中的数据
     */
    @Select("select * from student where stu_id=#{stu_id} and password=#{password}")
    student findstudentbyid(student student);

    /**
     *通过学号查询数据库中的学生信息
     * 学号唯一,查询的结果唯一
     */
    @Select("select * from student where stu_id=#{stu_id}")
    List<student> findstudentbystu_id(student student);

    /**
     * 通过姓名查找数据库中的学生信息
     * 可能存在重名的学生,返回List;
     */
    @Select("select * from student where stu_name=#{stu_name}")
    List<student> findstudentbyname(student student);


    /**
     * 通过班级查找查找数据库中的学生信息
     * 可能存在同班的学生,返回List;
     */
    @Select("select * from student where stu_class=#{stu_class}")
    List<student> findstudentbyclass(student student);


    /**
     *学生表的插入操作
     */
    @Insert("insert into student values(#{stu_id} , #{password} , #{stu_name},#{gender},#{stu_class},#{phone})")
    int insertstudent(student student);

    /**
     * 学生表的删除操作
     */
    @Delete("delete from student where stu_id=#{stu_id}")
    int deletestudent(student student);

    /**
     * 修改学生的信息,但是不允许修改学号
     */
    @Update("update student set stu_name=#{stu_name},gender=#{gender},stu_class=#{stu_class},phone=#{phone} where stu_id=#{stu_id}")
    int updatestudent(student student);
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ROY_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值