飞道的博客

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

351人阅读  评论(0)

 

目录

技术选型:

功能概括:

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

版本:

基本演示

功能实现讲解

登录校验

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

不会造成偷窃的部分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代码

  • 
         
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>学生信息管理系统 </title>
    7. <link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
    8. <script src="js/vue.js"> </script>
    9. <script src="element-ui/lib/index.js"> </script>
    10. <script src="https://unpkg.com/axios/dist/axios.min.js"> </script>
    11. </head>
    12. <body>
    13. <div id="div">
    14. <b style="color: red; font-size: 20px;">学生列表 </b>
    15. <div style="float: right;">
    16. <el-button type="primary" @click="showAddStu">添加学生 </el-button>
    17. </div>
    18. <el-table :data="tableData">
    19. <el-table-column prop="name" label="姓名" width="120">
    20. </el-table-column>
    21. <el-table-column prop="age" label="年龄" width="120">
    22. </el-table-column>
    23. <el-table-column prop="address" label="籍贯" width="120">
    24. </el-table-column>
    25. <el-table-column prop="numbersss" label="电话号码" width="120">
    26. </el-table-column>
    27. <el-table-column label="操作" width="180">
    28. <template slot-scope="props">
    29. <el-button type="warning" @click="showEditStu(props.row)">编辑 </el-button>
    30. <el-button type="danger" @click="deleteStu(props.row)">删除 </el-button>
    31. </template>
    32. </el-table-column>
    33. </el-table>
    34. <!--
    35. 分页组件
    36. @size-change:当改变每页条数时触发的函数
    37. @current-change:当改变页码时触发的函数
    38. current-page:默认的页码
    39. :page-sizes:每页显示条数选择框中的选项值
    40. :page-size:默认的每页条数
    41. layout: 分页组件的布局
    42. total(总条数), sizes(每页条数), prev(上一页), pager(所有的页码), next(下一页), jumper(跳转页码)
    43. :total: 总条数
    44. -->
    45. <el-pagination
    46. @ size-change= "handleSizeChange"
    47. @ current-change= "handleCurrentChange"
    48. :current-page= "pagination.currentPage"
    49. :page-sizes= "[3, 5, 8]"
    50. :page-size= "pagination.pageSize"
    51. layout= "total, sizes, prev, pager, next, jumper"
    52. :total= "pagination.total">
    53. </el-pagination>
    54. <el-dialog title="添加学生信息" :visible.sync="dialogTableVisible4add" @close="resetForm('addForm')">
    55. <!--
    56. :model="formData": 关联数据
    57. :rules: 关联校验规则
    58. ref: 在获取表单对象时使用
    59. -->
    60. <el-form :model="formData" :rules="rules" ref="addForm" label-width="100px" class="demo-ruleForm">
    61. <el-form-item label="学生姓名" prop="name">
    62. <!--v-model : 双向绑定 -->
    63. <el-input v-model="formData.name"> </el-input>
    64. </el-form-item>
    65. <el-form-item label="学生年龄" prop="age">
    66. <el-input v-model="formData.age"> </el-input>
    67. </el-form-item>
    68. <el-form-item label="学生籍贯" prop="address">
    69. <el-input v-model="formData.address"> </el-input>
    70. </el-form-item>
    71. <el-form-item label="学生电话" prop="numbersss">
    72. <el-input v-model="formData.numbersss"> </el-input>
    73. </el-form-item>
    74. <el-form-item>
    75. <el-button type="primary" @click="addStu()">添加 </el-button>
    76. <el-button @click="resetForm('addForm')">重置 </el-button>
    77. </el-form-item>
    78. </el-form>
    79. </el-dialog>
    80. <el-dialog title="编辑学生信息" :visible.sync="dialogTableVisible4edit" @close="resetForm('editForm')" >
    81. <!--
    82. :model="formData": 关联数据
    83. :rules: 关联校验规则
    84. ref: 在获取表单对象时使用
    85. -->
    86. <el-form :model="editFormData" :rules="rules" ref="editForm" label-width="100px" class="demo-ruleForm">
    87. <el-form-item label="学生姓名" prop="name">
    88. <el-input v-model="editFormData.name"> </el-input>
    89. </el-form-item>
    90. <el-form-item label="学生年龄" prop="age">
    91. <el-input v-model="editFormData.age"> </el-input>
    92. </el-form-item>
    93. <el-form-item label="学生籍贯" prop="address">
    94. <el-input v-model="editFormData.address"> </el-input>
    95. </el-form-item>
    96. <el-form-item label="学生电话" prop="numbersss">
    97. <el-input v-model="editFormData.numbersss"> </el-input>
    98. </el-form-item>
    99. <el-form-item >
    100. <el-button type="warning" @click="updateStu()">修改 </el-button>
    101. </el-form-item>
    102. </el-form>
    103. </el-dialog>
    104. </div>
    105. </body>
    106. <script>
    107. new Vue({
    108. el: "#div",
    109. data:{
    110. dialogTableVisible4add: false, // 添加窗口显示状态
    111. dialogTableVisible4edit: false, // 编辑窗口显示状态
    112. formData:{}, // 添加表单的数据
    113. editFormData: {}, // 编辑表单的数据
    114. tableData:[], // 表格数据
    115. pagination: {
    116. currentPage: 1, // 当前页
    117. pageSize: 5, // 每页显示条数
    118. total: 0 // 总条数
    119. },
    120. rules: {
    121. name: [
    122. { required: true, message: '请输入姓名', trigger: 'blur'},
    123. { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
    124. ],
    125. age: [
    126. { required: true, message: '请输入年龄', trigger: 'blur'},
    127. { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
    128. ],
    129. address: [
    130. { required: true, message: '请输入地址', trigger: 'blur'},
    131. { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur'}
    132. ],
    133. numbersss: [
    134. { required: true, message: '请输入电话', trigger: 'blur'},
    135. { min: 2, max: 200, message: '长度在 2 到 200 个字符', trigger: 'blur'}
    136. ],
    137. }
    138. },
    139. methods: {
    140. // 改变每页显示条数时执行的函数
    141. handleSizeChange( pageSize) {
    142. // 修改分页查询的参数
    143. this. pagination. pageSize = pageSize;
    144. // 重新执行查询
    145. this. selectByPage();
    146. },
    147. // 改变当前页码时执行的函数
    148. handleCurrentChange( pageNum) {
    149. // 修改分页查询的参数
    150. this. pagination. currentPage = pageNum;
    151. // 重新执行查询
    152. this. selectByPage();
    153. },
    154. // 分页查询功能
    155. selectByPage( ) {
    156. axios. post( "studentServlet", "method=selectByPage&currentPage="+ this. pagination. currentPage
    157. + "&pageSize="+ this. pagination. pageSize)
    158. . then( resp => {
    159. // 将查询结果返回给tableData
    160. this. tableData = resp. data. list;
    161. // 设置分页参数
    162. this. pagination. currentPage = resp. data. pageNum; // 当前页
    163. this. pagination. total = resp. data. total; // 总条数
    164. })
    165. },
    166. showAddStu( ) {
    167. // 弹出窗口
    168. this. dialogTableVisible4add = true;
    169. },
    170. // 添加学生的方法
    171. addStu( ) {
    172. let param = "method=addStu&name="+ this. formData. name+ "&age="+ this. formData. age
    173. + "&address="+ this. formData. address+ "&numbersss="+ this. formData. numbersss+ "&currentPage="
    174. + this. pagination. currentPage+ "&pageSize="+ this. pagination. pageSize;
    175. axios. post( "studentServlet", param)
    176. . then( resp => {
    177. // 将查询出的数据赋值给tableData
    178. this. tableData = resp. data. list;
    179. // 设置分页参数
    180. this. pagination. currentPage = resp. data. pageNum; // 当前页
    181. this. pagination. total = resp. data. total; // 总条数
    182. })
    183. // 关闭添加窗口
    184. this. dialogTableVisible4add = false;
    185. },
    186. resetForm( addForm) {
    187. // 双向绑定,输入的数据都赋值给了formData,清空formData数据
    188. this. formData = {};
    189. // 清除表单的校验数据
    190. this. $refs[addForm]. resetFields();
    191. },
    192. showEditStu( row) {
    193. // 1. 弹出窗口
    194. this. dialogTableVisible4edit = true;
    195. // 2. 显示表单数据
    196. this. editFormData = {
    197. name:row. name,
    198. age:row. age,
    199. address:row. address,
    200. numbersss:row. numbersss,
    201. }
    202. },
    203. // 修改数据
    204. updateStu( ) {
    205. let param = "method=updateStu&name="+ this. editFormData. name+ "&age="+ this. editFormData. age
    206. + "&address="+ this. editFormData. address+ "&numbersss="+ this. editFormData. numbersss+ "&currentPage="
    207. + this. pagination. currentPage+ "&pageSize="+ this. pagination. pageSize;
    208. axios. post( "studentServlet", param)
    209. . then( resp => {
    210. // 将查询出的数据赋值给tableData
    211. this. tableData = resp. data. list;
    212. // 设置分页参数
    213. this. pagination. currentPage = resp. data. pageNum; // 当前页
    214. this. pagination. total = resp. data. total; // 总条数
    215. })
    216. // 关闭添加窗口
    217. this. dialogTableVisible4edit = false;
    218. },
    219. // 删除数据
    220. deleteStu( row) {
    221. if ( confirm( "确定要删除"+row. name+ "数据?")) {
    222. let param = "method=deleteStu&name="+row. name+ "&currentPage="
    223. + this. pagination. currentPage+ "&pageSize="+ this. pagination. pageSize;
    224. axios. post( "studentServlet", param)
    225. . then(
    226. resp => {
    227. // 将查询出的数据赋值给tableData
    228. this. tableData = resp. data. list;
    229. // 设置分页参数
    230. this. pagination. currentPage = resp. data. pageNum; // 当前页
    231. this. pagination. total = resp. data. total; // 总条数
    232. }
    233. )
    234. }
    235. }
    236. },
    237. // mounted是vue中的一个钩子函数,一般在初始化页面完成后,再对dom节点进行相关操作
    238. // created的dom还没被vue的dom替换
    239. mounted( ) {
    240. // 调用分页查询功能
    241. this. selectByPage();
    242. }
    243. });
    244. </script>
    245. </html>
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

转载:https://blog.csdn.net/weixin_59624686/article/details/128294089
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场