大二毕设.1-学生信息管理系统

news2024/11/28 16:51:14

 

目录

技术选型:

功能概括:

可扩展性良好,添加其余操作无非是多加点信息,重复编码改数据罢

版本:

基本演示

功能实现讲解

登录校验

可调整每页条数的分页显示与增删查改

不会造成偷窃的部分web代码


  • 技术选型:

  • 前端: Vue + Element UI
  • 后端: SpringBoot + SpringMVC + Mybatis
  • 数据库: MySQL
  • 功能概括:

  • 可视化操作界面
  • 账号密码登录校验
  • 提供欢迎界面,提供页面返回跳转
  • 可视化对学生多种信息进行增删查改(效果实时重定向同步,无需手动刷新)
  • 信息分页显示,可调整每页显示条数
  • 与数据库数据保持同步
  • 可扩展性良好,添加其余操作无非是多加点信息,重复编码改数据罢

  • 版本:

  • IDEA 2022.2.1
  • SpringBoot 2.7.5
  • Navicat Premium 15
  • SDK 1.8
  • 基本演示

  • 登录校验
  • 正确管理员账号密码表,登录成功跳转至管理界面
  • 信息分页显示,可调整每页显示条数
  • 信息添加
  • 信息删除
  • 信息修改(设计为学生信息一旦添加,则不可修改其姓名,其余3项均可修改)
  • 功能实现讲解

  • 登录校验

  • 通过 @WebFilter拦截 与获取Session会话域数据验证自定义拦截器实现登录校验
  • 在由登录界面跳转至管理界面时,进行拦截校验
  • 首先将请求和响应对象转换为和HTTP协议相关,方便后续获取Session会话域数据与重定向到登录页面
  • 获取Session会话域数据后,通过结果是否为""或null来判断是否重定向登录界面
  • 用户密码正确则给予放行
  • 数据验证通过Mybatis查询MySQL数据库管理员表返回结果是否为0来验证
  • 首先设置dataSource相关属性(使用druid连接池(归还连接)提升数据库性能)
  • 所谓归还连接
  • 再定义数据层接口映射配置,创建接口实现类,再@Autowired 注入实现Mybatis操作
  • @RequestMapping配合前端axios请求实现绑定验证方法
  • @RequestParam绑定请求参数与对应处理方法形参间的关系
  • 封装请求参数(账号与密码),调用@Autowired 注入类进行login验证查表
  • 判断是否查询出结果,成功响应给客户端true,失败响应false
  • 完成校验操作
  • 可调整每页条数的分页显示与增删查改

  • 首先配置PageHelper信息,前端配置好分页组件与对应method
  • 定义Mybatis增删查改接口
  • 在service分页实现类中需要保证PageHelper的startPage调用后紧跟MyBatis查询方法,不然分页将会失效
  • 不能将Page对象返回给前端,前端得不到分页属性信息,如:分页总数,总共记录数等
  • 所以在controller层将查询结果封装成PageInfo对象,才能将分页属性信息发送给前端(通过@ResponseBody标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器)
  • 至于接收请求参数则通过@RequestMapping配合前端axios请求实现绑定验证方法与@RequestParam接收url地址传参或表单传参实现
  • 得到请求参数后便可以封装Student对象执行增删改,为了效果实时重定向同步,无需手动刷新,需要执行增删改后进行重定向,由于设计问题使用的是通过HttpServletResponse跳转
  • 不会造成偷窃的部分web代码

  • <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>学生信息管理系统</title>
        <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
        <script src="js/vue.js"></script>
        <script src="element-ui/lib/index.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    </head>
    <body>
    <div id="div">
        <b style="color: red; font-size: 20px;">学生列表</b>
        <div style="float: right;">
            <el-button type="primary" @click="showAddStu">添加学生</el-button>
        </div>
        <el-table :data="tableData">
            <el-table-column prop="name" label="姓名" width="120">
            </el-table-column>
            <el-table-column prop="age" label="年龄" width="120">
            </el-table-column>
            <el-table-column prop="address" label="籍贯" width="120">
            </el-table-column>
            <el-table-column prop="numbersss" label="电话号码" width="120">
            </el-table-column>
            <el-table-column label="操作" width="180">
              <template slot-scope="props">
                  <el-button type="warning" @click="showEditStu(props.row)">编辑</el-button>
                  <el-button type="danger" @click="deleteStu(props.row)">删除</el-button>
              </template>
            </el-table-column>
        </el-table>
    
        <!--
            分页组件
              @size-change:当改变每页条数时触发的函数
              @current-change:当改变页码时触发的函数
              current-page:默认的页码
              :page-sizes:每页显示条数选择框中的选项值
              :page-size:默认的每页条数
              layout: 分页组件的布局
                  total(总条数), sizes(每页条数), prev(上一页), pager(所有的页码), next(下一页), jumper(跳转页码)
              :total: 总条数
        -->
        <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="pagination.currentPage"
                :page-sizes="[3, 5, 8]"
                :page-size="pagination.pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="pagination.total">
        </el-pagination>
    
        <el-dialog title="添加学生信息" :visible.sync="dialogTableVisible4add" @close="resetForm('addForm')">
            <!--
                :model="formData": 关联数据
                :rules: 关联校验规则
                ref: 在获取表单对象时使用
            -->
            <el-form :model="formData" :rules="rules" ref="addForm" label-width="100px" class="demo-ruleForm">
                <el-form-item label="学生姓名" prop="name">
                    <!--v-model : 双向绑定 -->
                    <el-input v-model="formData.name"></el-input>
                </el-form-item>
                <el-form-item label="学生年龄" prop="age">
                    <el-input v-model="formData.age"></el-input>
                </el-form-item>
                <el-form-item label="学生籍贯" prop="address">
                    <el-input v-model="formData.address"></el-input>
                </el-form-item>
                <el-form-item label="学生电话" prop="numbersss">
                    <el-input v-model="formData.numbersss"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="addStu()">添加</el-button>
                    <el-button @click="resetForm('addForm')">重置</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
    
        <el-dialog title="编辑学生信息" :visible.sync="dialogTableVisible4edit" @close="resetForm('editForm')" >
            <!--
                :model="formData": 关联数据
                :rules: 关联校验规则
                ref: 在获取表单对象时使用
            -->
            <el-form :model="editFormData" :rules="rules" ref="editForm" label-width="100px" class="demo-ruleForm">
                <el-form-item label="学生姓名" prop="name">
                    <el-input v-model="editFormData.name"></el-input>
                </el-form-item>
                <el-form-item label="学生年龄" prop="age">
                    <el-input v-model="editFormData.age"></el-input>
                </el-form-item>
                <el-form-item label="学生籍贯" prop="address">
                    <el-input v-model="editFormData.address"></el-input>
                </el-form-item>
                <el-form-item label="学生电话" prop="numbersss">
                    <el-input v-model="editFormData.numbersss"></el-input>
                </el-form-item>
                <el-form-item >
                    <el-button type="warning" @click="updateStu()">修改</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>
    </div>
    </body>
    <script>
        new Vue({
            el: "#div",
            data:{
                dialogTableVisible4add: false,  // 添加窗口显示状态
                dialogTableVisible4edit: false,  // 编辑窗口显示状态
                formData:{},  // 添加表单的数据
                editFormData: {},  // 编辑表单的数据
                tableData:[],  // 表格数据
                pagination: {
                    currentPage: 1, // 当前页
                    pageSize: 5,    // 每页显示条数
                    total: 0        // 总条数
                },
                rules: {
                    name: [
                        {required: true, message: '请输入姓名', trigger: 'blur'},
                        {min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
                    ],
                    age: [
                        {required: true, message: '请输入年龄', trigger: 'blur'},
                        {min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
                    ],
                    address: [
                        {required: true, message: '请输入地址', trigger: 'blur'},
                        {min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
                    ],
                    numbersss: [
                        {required: true, message: '请输入电话', trigger: 'blur'},
                        {min: 2, max: 200, message: '长度在 2 到 200 个字符', trigger: 'blur'}
                    ],
                }
            },
            methods: {
                // 改变每页显示条数时执行的函数
                handleSizeChange(pageSize) {
                    // 修改分页查询的参数
                    this.pagination.pageSize = pageSize;
                    // 重新执行查询
                    this.selectByPage();
                },
                // 改变当前页码时执行的函数
                handleCurrentChange(pageNum) {
                    // 修改分页查询的参数
                    this.pagination.currentPage = pageNum;
                    // 重新执行查询
                    this.selectByPage();
                },
                // 分页查询功能
                selectByPage() {
                    axios.post("studentServlet", "method=selectByPage&currentPage="+this.pagination.currentPage
                        +"&pageSize="+this.pagination.pageSize)
                    .then(resp => {
                        // 将查询结果返回给tableData
                        this.tableData = resp.data.list;
                        // 设置分页参数
                        this.pagination.currentPage = resp.data.pageNum;  // 当前页
                        this.pagination.total = resp.data.total;  // 总条数
                    })
                },
                showAddStu() {
                    // 弹出窗口
                    this.dialogTableVisible4add = true;
                },
                // 添加学生的方法
                addStu() {
                    let param = "method=addStu&name="+this.formData.name+"&age="+this.formData.age
                        +"&address="+this.formData.address+"&numbersss="+this.formData.numbersss+"&currentPage="
                        +this.pagination.currentPage+"&pageSize="+this.pagination.pageSize;
                    axios.post("studentServlet", param)
                        .then(resp => {
                            // 将查询出的数据赋值给tableData
                            this.tableData = resp.data.list;
                            // 设置分页参数
                            this.pagination.currentPage = resp.data.pageNum;  // 当前页
                            this.pagination.total = resp.data.total;  // 总条数
                        })
                    // 关闭添加窗口
                    this.dialogTableVisible4add = false;
                },
                resetForm(addForm) {
                    // 双向绑定,输入的数据都赋值给了formData,清空formData数据
                    this.formData = {};
                    // 清除表单的校验数据
                    this.$refs[addForm].resetFields();
                },
                showEditStu(row) {
                    // 1. 弹出窗口
                    this.dialogTableVisible4edit = true;
                    // 2. 显示表单数据
                    this.editFormData = {
                        name:row.name,
                        age:row.age,
                        address:row.address,
                        numbersss:row.numbersss,
                    }
                },
                // 修改数据
                updateStu() {
                    let param = "method=updateStu&name="+this.editFormData.name+"&age="+this.editFormData.age
                        +"&address="+this.editFormData.address+"&numbersss="+this.editFormData.numbersss+"&currentPage="
                        +this.pagination.currentPage+"&pageSize="+this.pagination.pageSize;
                    axios.post("studentServlet", param)
                        .then(resp => {
                            // 将查询出的数据赋值给tableData
                            this.tableData = resp.data.list;
                            // 设置分页参数
                            this.pagination.currentPage = resp.data.pageNum;  // 当前页
                            this.pagination.total = resp.data.total;  // 总条数
                        })
                    // 关闭添加窗口
                    this.dialogTableVisible4edit = false;
                },
                // 删除数据
                deleteStu(row) {
                    if (confirm("确定要删除"+row.name+"数据?")) {
                        let param = "method=deleteStu&name="+row.name+"&currentPage="
                            +this.pagination.currentPage+"&pageSize="+this.pagination.pageSize;
                        axios.post("studentServlet", param)
                        .then(
                            resp => {
                                // 将查询出的数据赋值给tableData
                                this.tableData = resp.data.list;
                                // 设置分页参数
                                this.pagination.currentPage = resp.data.pageNum;  // 当前页
                                this.pagination.total = resp.data.total;  // 总条数
                            }
                        )
                    }
                }
            },
            // mounted是vue中的一个钩子函数,一般在初始化页面完成后,再对dom节点进行相关操作
            // created的dom还没被vue的dom替换
            mounted() {
                // 调用分页查询功能
                this.selectByPage();
            }
        });
    </script>
    </html>
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

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

相关文章

喜报|众享链网荣获第二届中国可信区块链安全攻防大赛优秀案例奖

近日&#xff0c;第二届中国可信区块链安全攻防大赛决赛在成都成功举办并圆满落幕。经过预赛初审、预赛复审的层层选拔&#xff0c;众享链网脱颖而出&#xff0c;成功进入赛道三“原创自主区块链平台优秀应用案例评选比赛”总决赛环节&#xff0c;荣获优秀案例奖&#xff0c;入…

[附源码]计算机毕业设计的桌游信息管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

弗洛伊德算法(Floyd)的实现与可视化其最短路径

弗洛伊德算法Floyd是针对多源路径找出最短的路径&#xff0c;其中数据结构会使用到前面介绍过的邻接矩阵&#xff0c;有兴趣的可以先查阅&#xff1a;图数据结构之邻接矩阵Adjacency Matrix(Python版) 先了解这个邻接矩阵然后再回看本文章也可以。 区别在于这里我们介绍的是带…

浅撸一下spring源码---大致内容实现

手写spring-模拟spring 1&#xff0c;普及一个小知识 UserService.class Component public class UserService{public void test(){ System.out.println("test") }}Test.classpublic class Test{public static void main(String[] args){AnnotationConfigApplicati…

什么软件可以将录音转写为文字?这几款好用软件不容错过

录音实时转写软件有哪些 &#xff08;百&#xff09;录音实时转写软件有哪些&#xff1f;这些录音转文字软件推荐给你 &#xff08;搜&#xff09;音频转文字工具有哪些&#xff1f;推荐三个实用转写软件 &#xff08;企&#xff09;哪些软件可以把录音转写为文字&#xff1f;这…

微信小程序|系统配送员如何登陆抢单?同城配送、预约服务

系统中有多个功能有有配送端&#xff0c;最主要的是同城配送&#xff0c;和预约服务两个功能&#xff0c;首先介绍一下同城配送的配送员登录&#xff08;扩展的同城配送需要开启&#xff09; 第一步&#xff0c;设置模板消息&#xff0c;配送员通过微信模板消息接收配送信息&am…

离婚数据可视化,经济越发达的地区离婚率越高,但为何天津离婚率最高?

这几年我国的离婚率持续走高&#xff0c;2021年全国各个省份平均离婚率在2.1‰&#xff0c;离婚率高于和低于全国平均水平的省份各有15个。 离婚率高于平均水平2.1‰有9个是北方地区&#xff0c;分别是天津、北京、新疆和内蒙古以及黑吉辽三省&#xff1b;南方地区有6个省份高…

[附源码]Python计算机毕业设计电视设备租借系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

最全的Go资料汇总和最走心的学Go建议

推荐语 最用心的Go学习资料和学习建议&#xff0c;可能没有之一。怎么学Go快&#xff1f;有哪些教程建议看&#xff1f;学到什么程度能去找工作&#xff1f;我觉得这个问题的关键要看你的目标是什么&#xff1f;一定要结合你自己的情况去考虑这个事情。 前言 最近不少读者私…

智能学习硬件小程序开发,提升学习感受

随着科学技术的飞速发展&#xff0c;各种智能学习硬件层出不穷&#xff0c;日常生活中的智能电子产品也愈来愈多&#xff0c;但是大部分硬件产品都是单独使用的&#xff0c;并没有配套的app或者小程序&#xff0c;在使用过程中总是会出现一些小插曲&#xff0c;比如&#xff1a…

FL Studio21.0.0中文版发布更新下载支持简体中文版

FL Studio 21.0.0官方中文版重磅发布纯正简体中文支持&#xff0c;更快捷的音频剪辑及素材管理器&#xff0c;多样主题随心换&#xff01;Mac版新增对苹果M2/1家族芯片原生支持。 更新版本&#xff1a;21.0.0支持语言&#xff1a;简体中文/英语更新时间&#xff1a;2022.12.07…

[附源码]Python计算机毕业设计动物园动物饲养管理Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

[附源码]Python计算机毕业设计电影推荐系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

[附源码]Nodejs计算机毕业设计基于web的网上订餐系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

Seekbar和ProgressBar进度条样式

有时项目中需要实现水平圆角进度&#xff0c;如下两种&#xff0c;其实很简单 下面开始看代码&#xff0c;先从主界面布局开始看起: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

计算机网络:应用层

应用层 应用层是计算机体系结构中的最顶层&#xff0c;是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务. 1. C&#xff08;客户端&#xff09;/S&#xff08;服务器&#xff09;和P&#xff08;Peer&#xff09;2P&a…

Java编码实现Activemq通讯

目录 一、IDEA建Maven工程 二、pom.xml 三、JMS编码总体架构 四、粗说目的地Destination——队列和主题 五、点对点消息传递域中&#xff0c;目的地被称为队列&#xff08;queue&#xff09; 六、在发布订阅消息传递域中&#xff0c;目的地被称为主题&#xff08;topic&a…

vue axios实战,请求天气预报接口

效果预览 创建流程 1. 创建项目目录 mkdir test22. 进入目录 cd test23. 引入vue 引入vue&#xff0c; 一路敲回车就行了 npm init vuelatest4. 启动项目 创建成功&#xff0c;启动项目 cd vue-project npm install npm run dev执行run 后的访问结果 > vue-project…

简单得令人发指,说不会一定是在骗领导:配准法在地图上叠加边缘透明旅游图演示

目录 1 前言 2 基本设置 3 配准设置 4 切图 5 更简单的切图方法 1 前言 居然还有人在抱怨&#xff0c;说在地图上叠加手绘图好麻烦啊好复杂&#xff0c;都干了一星期了又要推倒重来简直不想活了&#xff0c;眼睛都累哗啦了。。。嗯&#xff0c;我相信同学你没说假话&#…

网络工程师备考5章

5.1 考点分析 5.2 WLAN基础 注&#xff1a;例如上面图中蜂窝的A&#xff0c;周围全是其他的蜂窝&#xff0c;实现了相同频率的区域隔离&#xff0c;简单了解一下它发展的几个阶段。 注&#xff1a;简单了解即可。 WLAN、802.11Wifi 这三个有什么区别&#xff1f; WLAN是无线局…