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

目录

技术选型:

功能概括:

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

版本:

基本演示

功能实现讲解

登录校验

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

不会造成偷窃的部分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 => {// 将查询结果返回给tableDatathis.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 => {// 将查询出的数据赋值给tableDatathis.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 => {// 将查询出的数据赋值给tableDatathis.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 => {// 将查询出的数据赋值给tableDatathis.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>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【毕设系列】电子信息/通信仿真/图像专业课程设计/毕业设计项目汇总

Date&#xff1a;2022.4.14 文章目录 1、通信仿真2、图像处理3、图像识别4、语音处理5、视频编解码 1、通信仿真 2、图像处理 3、图像识别 4、语音处理 5、视频编解码 THE END!

【毕设选题】最新电子信息工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 嵌入式开发方向2.2 物联网方向2.3 移动通信方向2.4 人工智能方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 3 最后 1前言 &#x1f947; 近期不少学弟学妹询问学长关于电子信息工程专业相关的毕设选题&#xff0c;学…

【毕设选题】最新通信工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 移动通信方向2.2 嵌入式开发方向2.3 人工智能方向2.4 物联网方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 4 最后 1前言 &#x1f947; 近期不少学弟学妹询问学长关于通信工程相关的毕设选题&#xff0c;学长特意写…

GEE代码解释-毕设版【chatgpt】

ee.ImageCollection和ee.ImageCollection.fromImages有什么区别&#xff1f; 【ee.ImageCollection 和 ee.ImageCollection.fromImages 是两种不同的方法&#xff0c;用于从图像集中获取图像。 ee.ImageCollection 是一个函数&#xff0c;它将一个或多个图像集合成一个图像集。…

万能Prompt句式拆解,人人都是Prompt 工程师

正文共 1318字&#xff0c;阅读大约需要 5 分钟 内容特辑&#xff0c;介绍单一技能的同时今天我们添加一个Prompt造句模板&#xff0c;学会这个&#xff0c;你会成为一个优秀的Prompt Engineer ~ 快去学习、收藏、下载资料包&#xff0c;输出你的独立Prompt吧 ~ 推荐人 | 互联…

ChatGPT专业应用:品牌简介自动生成

正文共 572字&#xff0c;阅读大约需要 3 分钟 品牌营销/新媒体运营人群必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 一句话品牌简介速成 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | 爱管闲事…

全新插件版Beezy喳喳蜂带来独特功能

作为一款备受欢迎的AI应用软件&#xff0c;Beezy喳喳蜂一直致力于为用户打造卓越体验。在不断迭代、改进的过程中&#xff0c;我们收到许多用户的宝贵建议和期待。 现在&#xff0c;全新插件版Beezy喳喳蜂即将上线&#xff01;此次升级&#xff0c;我们带来了众多前瞻功能助力您…

ChatGPT专业应用:生成产品文档

正文共 547 字&#xff0c;阅读大约需要 3 分钟 产品经理必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 生成产品文档 Beezy评级 &#xff1a;A级 *经过寻找和一段时间的学习&#xff0c;一部分人能掌握。主要提升效率并增强自身技能。 推荐人 | Kim 编辑者 …

ChatGPT专业应用:撰写知乎提问-品牌活动版

正文共 763字&#xff0c;阅读大约需要 5 分钟 数字/内容营销市场人群必备技巧&#xff0c;您将在5分钟后获得以下超能力&#xff1a; 知乎多层面提问生成 Beezy评级 &#xff1a;A级 *经过寻找和一段时间的学习&#xff0c;一部分人能掌握。主要提升效率并增强自身技能。 推…

【跟ChatGPT学习python】class的使用

python水平处于科学计算能用的程度&#xff0c;想着希望能让自己的python代码更加清晰可读&#xff0c;因此想到问问chatgpt&#xff0c;结果它给出的例子和解释比直接百度得来的还要通俗易懂&#xff0c;分享给大家一起学习。 目录 1、python如何使用class和def&#xff1f;可…

大乐透号码随机生成与排序

前面两篇介绍了两个非常简单的排序算法&#xff0c;本篇介绍排序算法的一个简单应用——对大乐透随机号码进行排序。 由于工作中涉及很多前端的开发&#xff0c;所以对前端技术有一定了解&#xff0c;前端的一个好处是可以直观地看到页面的布局。每次下班回家的路上总会路过一家…

简单的彩票大乐透选号工具

彩票大乐透由前区和后区组成&#xff0c;前区是5位数&#xff0c;后区是2位数。前区的位数数字是1-35从中任意选择5个数&#xff0c;后区是1-12&#xff0c;从中任选2个数。根据规律&#xff0c;我们可以简单编辑彩票选号工具&#xff1a; import random wint(input(输入你需要…

python爬取分析超级大乐透历史开奖数据!你中奖了吗?

爬取网站&#xff1a;http://datachart.500.com/dlt/history/history.shtml —500彩票网 &#xff08;分析后发现网站源代码并非是通过页面跳转来查找不同的数据&#xff0c;故可通过F12查找network栏找到真正储存所有历史开奖结果的网页&#xff09; 如图&#xff1a; 爬虫部…

ChatGPT的发展给我们带来了什么?

1.智能对话&#xff1a; ChatGPT可以进行自然语言对话&#xff0c;理解用户的问题并提供相应的回答。这为用户提供了一种直接、便捷的方式来获取信息、寻求帮助或进行交流。它可以应用于在线客服、虚拟助手、智能聊天机器人等领域&#xff0c;为用户提供个性化的支持和解答。 2…

chatgpt的原理 第三部分

对话 我们是如何学会中文的&#xff1f;从0岁开始&#xff0c;听、说&#xff0c;也就是对话。 我们是如何学外语的&#xff1f;看教材&#xff0c;听广播&#xff0c;背单词。唯独缺少了对话&#xff01;正是因为缺少了对话这个高效的语言学习方式&#xff0c;所以我们的英语…

原创程序#模拟书本世界#Ai角色互动#ChatGPT学外语#Ai模拟人生#Ai虚拟世界#ChatGPT文字冒险游戏

今天和大家介绍我这个程序&#xff0c;这个平台叫做「模拟书本世界-外语训练营」&#xff0c;介绍它之前&#xff0c;大家可以先体验一下&#xff1a;www.chatlangue.com 目前支持安卓系统。 接下来介绍一下它的实现方法&#xff1a; 它的核心其实是通过调用ChatGPT的API实现&…

对比应用ChatGPT3.5和4,和4比起来,3.5略显清澈且愚蠢

你有没有想过&#xff0c;拥有一位贴心的智能助手&#xff0c;让你在工作、生活、学习等方面都得心应手&#xff1f;这不再是科幻电影的场景&#xff0c;而是已经成为现实的科技奇迹。今天&#xff0c;就让我来为大家揭秘这位让无数用户为之倾倒的“聊天天才”——ChatGPT&…

chatgpt赋能Python-pythonpip报错

Python pip报错解决方案 介绍 Python是一门功能强大、易学易用、支持多种编程范式的开发语言。它有着丰富的标准库和第三方库&#xff0c;可以用于多种开发场景&#xff0c;从数据分析、机器学习、Web开发到网络编程等。而Python pip是Python的一个包管理工具&#xff0c;可以…

四段论提问让ChatGPT更懂你心!

用户故事是描述客户需求的方法&#xff0c;通常记为四段论的格式&#xff1a; 角色&#xff0d;功能&#xff0d;目的&#xff0d;验收标准。 如&#xff1a; 作为一个家庭主妇&#xff0c;我需要一个30平方米的餐厅&#xff0c;用以招待10位客人聚餐。 我希望这个餐厅&…

产品经理如何与G端领导沟通

从事G端产品已经一年有余&#xff0c;之前都是做的B端产品&#xff0c;自从接触G端产品后&#xff0c;发现做事的方式有了一些变化。 下面谈谈自己的一些沟通技巧&#xff0c;主要从以下几方面进行探讨。 选择合适的时间 如果找政府人员进行产品需求的调研或者产品规划确认&a…