60_1简单的学生管理系统【功能实现(查看所有学生(分页)、修改和删除学生信息)】

news2024/11/15 23:39:01

功能实现

老师角色查看所有学生

获取学生列表和分页

分页

1.修改index.jsp

不能直接跳stuList.jsp,没数据

    <%if("teacher".equals(role)){%>
    <a href="TeaInitModifyServlet?username=<%=username%>">修改信息</a>
    <a href="GetStuListServlet?curPage=1">查看所有学生</a>
    <%}%>
2.新增GetStuListServlet

拿数据和分页

@WebServlet("/GetStuListServlet")
public class GetStuListServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取当前页数
        int curPage = Integer.parseInt(request.getParameter("curPage"));

        //设置当前页的数据条数
        int count = 15;
        //计算偏移量
        int offset = (curPage-1)*count;
        //计算总页数
        int totalPage;
        try {
            int allCount = DBUtils.getAllCount("student");
            if(allCount % count == 0){
                totalPage = allCount/count;
            }else{
                totalPage = allCount/count + 1;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //从数据库获取学生的集合
        List<Student> students = null;
        try {
            students = DBUtils.commonQueryList(Student.class, "select * from student limit ?,?", offset, count);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //处理学生集合
        List<StudentDto> studentDtos = DtoUtils.studentDtoListHandler(students);

        //将数据存入到请求对象中
        request.setAttribute("curPage",curPage);
        request.setAttribute("totalPage",totalPage);
        request.setAttribute("studentDtos",studentDtos);
        //request.setAttribute("students",students);直接传

        //跳转
        request.getRequestDispatcher("stuList.jsp").forward(request,response);

    }
}
修改DBUtils–分页

新增getAllCount()

    /**
     * 获取当前表的总条数
     */
    public static int getAllCount(String table) throws SQLException {
        Connection connection = getConnection();
        String sql = "select count(1) from " + table;
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet resultSet = statement.executeQuery();
        if(resultSet.next()){
            int allCount = resultSet.getInt(1);
            return allCount;
        }
        return 0;
    }
修改Student–分页

做假数据,在实体类里面可以写main方法,插入操作

    //做分页的假数据
    public static void main(String[] args) {

        for (int i = 1; i < 100; i++) {
            String username = "xiaohei" + i;
            String password = "123123";
            String name = "小黑" + i;
            String sex = "man";
            int age = 23;
            String[] hobbies = {"football","basketball"};
            try {
                DBUtils.commonUpdate("insert into student(username,password,name,sex,age,hobbies) values(?,?,?,?,?,?)",username,password,name,sex,age, StringUtils.handleArray(hobbies));
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

    }
新增StudentDto–处理学生信息

修饰前后

分包新增信息处理类,以方便工具类对学生的信息处理

package com.ckl.dto;

import com.ckl.pojo.Student;

public class StudentDto {

    private Student student;
    private String sex;
    private String hobbies;

//自动生成方法略
}
新增DtoUtils --处理学生信息

工具类,处理学生信息提升页面展示效果

public class DtoUtils {

    public static StudentDto studentDtoHandler(Student student){

        //处理学生的性别数据
        String sex = student.getSex();
        if("man".equals(sex)){
            sex = "男";
        }else if("woman".equals(sex)){
            sex = "女";
        }

        //处理学生的爱好数据
        String hobbies = student.getHobbies();
        hobbies = hobbies.replaceAll("football","足球");
        hobbies = hobbies.replaceAll("basketball","篮球");
        hobbies = hobbies.replaceAll("shop","购物");

        //创建StudentDto
        StudentDto studentDto = new StudentDto(student, sex, hobbies);
        return studentDto;
    }

    public static List<StudentDto> studentDtoListHandler(List<Student> students){

        List<StudentDto> studentDtos = new ArrayList<>();

        for (Student student : students) {
            StudentDto studentDto = studentDtoHandler(student);
            studentDtos.add(studentDto);
        }
        return studentDtos;
    }

}

3.stuList.jsp

直接获取数据库的学生数据

//未处理
List<Student> students = (List<Student>) request.getAttribute("students");

        <%for(Student student:students){%>
        <th><%=student.getUsername()%></th>
        <th><%=student.getName()%></th>
        <th><%=student.getSex()%></th>
        <th><%=student.getAge()%></th>
        <th><%=student.getHobbies()%></th>

添加学生信息处理后获取

//处理后
<%@ page import="java.util.List" %>
<%@ page import="com.qf.pojo.Student" %>
<%@ page import="com.qf.dto.StudentDto" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List<StudentDto> studentDtos = (List<StudentDto>) request.getAttribute("studentDtos");
        int curPage = (int) request.getAttribute("curPage");
        int totalPage = (int) request.getAttribute("totalPage");
    %>
    <button οnclick="goIndex()">返回</button>
    <h1>学生列表页面</h1>

    <table border="1" width="500px">

        <tr>
            <th>账号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>爱好</th>
            <th>操作</th>
        </tr>
//获取学生信息展示
        <%for(StudentDto studentDto:studentDtos){%>
            <tr>
                <th><%=studentDto.getStudent().getUsername()%></th>
                <th><%=studentDto.getStudent().getName()%></th>
                <th><%=studentDto.getSex()%></th>
                <th><%=studentDto.getStudent().getAge()%></th>
                <th><%=studentDto.getHobbies()%></th>
                <th>
                    <a href="#">修改</a>
                    <a href="#">删除</a>
                </th>
            </tr>
        <%}%>
    </table>
//分页
    <a href="GetStuListServlet?curPage=1">首页</a>

    <%if(curPage > 1){%>
        <a href="GetStuListServlet?curPage=<%=curPage-1%>">上一页</a>
    <%}%>
    <%if(curPage < totalPage){%>
        <a href="GetStuListServlet?curPage=<%=curPage+1%>">下一页</a>
    <%}%>
    <a href="GetStuListServlet?curPage=<%=totalPage%>">尾页</a>

    <script type="text/javascript">
        function goIndex(){
            window.location = "index.jsp";
        }
    </script>
</body>
</html>

老师角色修改和删除学生信息

修改

老师修改学生信息

修改stuList.jsp

        <%for(StudentDto studentDto:studentDtos){%>
            <tr>
                <th>
                    <a href="StuInitModifyServlet?username=<%=studentDto.getStudent().getUsername()%>">修改</a>
                    <a href="StuDeleteServlet?username=<%=studentDto.getStudent().getUsername()%>">删除</a>
                </th>
            </tr>
        <%}%>

修改StuModifyServlet

获取角色

通过角色判断修改

学生需要更新Session、Cookie里的数据,跳转详情页面

老师跳转GetStuListServlet,需要更新数据【因为修改了需要刷新页面】

//        request.setAttribute("name",name);
//        response.addCookie(CookieUtils.createCookie("name",name,60*60*24*5));
//
//        response.sendRedirect("index.jsp");

		String role = (String) request.getSession().getAttribute("role");

        if("student".equals(role)){
            //更新Session里的数据
            request.getSession().setAttribute("name",name);
            //更新Cookie里的数据
            response.addCookie(CookieUtils.createCookie("name",name,60*60*24*5));
            //跳转详情页面
            response.sendRedirect("index.jsp");
        }else if("teacher".equals(role)){
            //跳转
            response.sendRedirect("GetStuListServlet?curPage=1");
        }
删除

老师删除学生信息

新增StuDeleteServlet

设置编码格式,获取请求中的账号,通过学生账号删除学生,最后跳转GetStuListServlet同时更新数据

注意:实际开发项目中是不会直接用delete,而是改状态,数据库有提到

@WebServlet("/StuDeleteServlet")
public class StuDeleteServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String username = request.getParameter("username");

        try {
            DBUtils.commonUpdate("delete from student where username=?",username);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //跳转
        response.sendRedirect("GetStuListServlet?curPage=1");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设施农业“AutoML“时代:大模型自动调参,让农业算法模型更简单易用

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;设施农业是现代农业的重要发展方向,但在数字化、智能化的进程中仍面临诸多挑战。传统的农业算法模型虽然可以为设施农业提供一定的决策支持,但在实际应用中往往受限于参数调优复杂、模型泛化能力差等因素。…

<Rust><iced>基于rust使用iced构建GUI实例:一个CRC16校验码生成工具

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第五篇实例,是一个CRC16校验码转换程序。 本篇内容: 1、CRC16校验码生成 代码介绍 本文的crc16校验码生成工具,主要设计两个方面,一个是crc16 modbus…

PADS Router 扇出失败问题详细解决方法。

第一步&#xff1a;确定单位是一致的,我的单位是 “密尔”&#xff0c;不是“公制”。 第二步&#xff1a;进去pads router 右键选择特性&#xff0c;注意&#xff0c;是右键点击任意板框内空白位置的特性&#xff0c;这个是涵盖整体的设置&#xff0c;和单独点击一个元器件选…

react-native从入门到实战系列教程一Swiper组件的使用及bug修复

轮播图&#xff0c;在app中随处可见&#xff0c;这么重要的功能我们怎么可能不学习下在react-native中的实现方式。 依然是第三方组件react-native-swiper 官网地址 https://www.npmjs.com/package/react-native-swiper 组件使用的组件及事件参考官方即可。 实现效果 官网…

文件审查流程:使用指南

当您正在处理一个项目并且必须进行文档审查时&#xff0c;您可能会对这个过程到底涉及什么、谁是利益相关者以及审查过程的结果可能是什么感到困惑。在这篇博客文章中&#xff0c;让我们简单介绍一下文档审核过程及其对高质量内容的活力。 文件审查的定义 文件审查是文件经过…

CMD运行指令

CMD运行指令 开始→运行→CMD→键入以下命令即可: ASSOC显示或修改文件扩展名关联。 AT计划在计算机上运行的命令和程序。 ATTRIB显示或更改文件属性。 BREAK设置或清除扩展式CTRLC检查。 CACLS显示或修改文件的访问控制列表(ACLs)。 CALL从另一个批处理程序调用这一个。 CD显示…

不同类型游戏安全风险对抗概览(下)| FPS以及小游戏等外挂问题,一文读懂!

FPS 游戏安全问题 由于射击类游戏本身需要大量数值计算&#xff0c;游戏方会将部分计算存放于本地客户端&#xff0c;而这为外挂攻击者提供了攻击的温床。可以说&#xff0c;射击类游戏是所有游戏中被外挂攻击最为频繁的游戏类型。 根据网易易盾游戏安全部门检测数据显示&#…

未来十年机器人行业前景还好吗?

未来十年机器人行业的前景非常乐观&#xff0c;这一行业预计将持续快速发展并深刻影响我们的工作、生活和社会。以下是对未来十年机器人行业前景的详细分析&#xff1a; 一、技术驱动的创新与发展 1. 智能化与自主化&#xff1a;随着深度学习和神经网络技术的进步&#xff0c;…

MATLAB进阶:数据的拟合

几天我们继续深度学习MATLAB中的数据拟合 最小二乘拟合 假设已知经验公式yf(c,x)yf(c,x)&#xff08;c为参数&#xff0c;x为自变量&#xff09;&#xff0c;要求根据一批有误差的数据(xi,yi)&#xff0c;i0,1,...,n(xi​,yi​)&#xff0c;i0,1,...,n确定参数c。这样的问题称…

SSM大学生就业咨询管理系统-计算机毕业设计源码79442

目录 摘要 1 绪论 1.1 选题背景 1.2 研究目的和意义 1.3国内外研究现状 2系统分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2…

python合并音视频-通过moviepy模块合并音视频

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

从零开始的MicroPython(四) 串口

上一篇&#xff1a;按键与外部中断 文章目录 前言串口&#xff08;UART&#xff09;简介MicroPython的UARTUART 类——双工串行通信 ESP32(NodeMCU-32S)GPIO简介引脚 文档代码ESP32&&PC通讯 前言 在嵌入式学习中&#xff0c;串口发挥着重要的作用&#xff0c;不仅仅是…

C++ 随机单词(萌新练习项目)

目录 项目名称 项目目标 功能描述 技术要点 示例代码 扩展建议 学习资源 项目名称 随机单词生成器&#xff08;Random Word Generator&#xff09; 项目目标 学习C基本语法和数据结构。练习使用C标准库中的随机数生成功能。理解容器&#xff08;如std::vector&#xf…

由浅入深的了解进程(5)--环境变量

环境变量 前言环境变量1、更多的环境变量及添加和删除2、整体理解环境变量系统 前言 在上一篇文章中简单的介绍了环境变量&#xff0c;但是没有讲述的比较全面了&#xff0c;所以现在再写一篇来介绍环境变量。 环境变量 在上一篇文章中&#xff0c;我们已经简单的学习了如何…

“网络身份证”来了,淘宝、微信、小红书等已上线试点版功能

“网络身份证时代”即将开启。 近日&#xff0c;公安部、国家网信办共同起草《国家网络身份认证公共服务管理办法&#xff08;征求意见稿&#xff09;》公开征求意见后&#xff0c;未来是否需要“持证上网”一时间引发热议。而在征求意见的期间&#xff0c;小红书、淘宝、微信等…

linux-环境变量,进程地址空间

1.环境变量 1.1基本概念 环境变量 (environment variables) 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写 C/C 代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但 是照样可以链接…

Stable Diffusion绘画 | 文生图设置详解—随机种子数(Seed)

随机种子数&#xff08;Seed&#xff09; Midjourney 也有同样的概念&#xff0c;通过 --seed 种子数值 来使用。 每次操作「生成」所得到的图片&#xff0c;都会随机分配一个 seed值&#xff0c;数值不同&#xff0c;生成的画面就会不同。 默认值为 -1&#xff1a;每次随机分…

速度规划之:起点速度和终点速度不为零的非对称梯形速度规划

起点速度和终点速度不为零的非对称梯形速度规划 一、引言二、理论基础1. 梯形速度规划概述2.数学建模- 变量定义- 约束关系- 公式推导 三、计算过程1.只存在减速段2.只存在加速段3.存在加速段和减速段4.存在加速度段、匀速段和减速段 四、仿真实现五、优缺点优点缺点 六、总结 …

电销外呼系统是如何实现高效触客?

首先我们都有个疑问&#xff1f; 什么是外呼系统&#xff0c;有什么用处 简单来说就是解决打电话高频封号问题&#xff0c;提升销售工作效率&#xff0c;搞笑筛选一线客户 沃创云电销外呼系统通过一系列智能化、自动化的功能和技术手段&#xff0c;实现了高效触客。以下是该系…

MySQL数据库学习笔记

1、数据库的相关概念 数据库是存储数据的仓库,数据是有组织的进行存储 (DataBase)DB. 数据库管理系统:操作和管理数据库的大型软件 DataBase Mangement System(DBMS) SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。 1、Oracle 2、MySQL 3…