专业管理菜单的增删改、查重

news2024/11/20 1:45:17
1,点击专业管理菜单------查询所有专业信息列表

①点击菜单,切换专业组件

②切换到列表组件后,向后端发送请求到Servlet

③调用DAO层,查询数据库(sql),封装查询到的内容

④从后端向前端做出响应

⑤在前端进行渲染

网页点击触发查询事件,向后端传入"select",后端接收,再响应数据回到前端。

前端:

<template>
	<div>
		<el-button type="primary">添加专业信息</el-button>
		<el-table :data="tableData" height="400" border style="width: 100%">
			<el-table-column prop="id" label="序号" width="100">
			</el-table-column>
			<el-table-column prop="name" label="专业名" width="100">
			</el-table-column>
			<el-table-column prop="account" label="修改人">
			</el-table-column>
			<el-table-column  value-format="yyyy-MM-dd HH:mm:ss" prop="oper_time" label="修改时间" align="center">
			</el-table-column>
			<el-table-column width="200">
				<template slot-scope="scope">
					<el-button type="primary" icon="el-icon-edit"></el-button>
					<el-button type="primary" icon="el-icon-delete"></el-button>
				</template>
			</el-table-column>

		</el-table>
	</div>
</template>
<script>
	export default {
		data() {
			return {
				tableData: []
			}
		},
		methods: {
			
		},
		mounted() {
			this.$http.get("admin/MajorServlet?mark=select").then(resp => {
				this.tableData = resp.data.data;
			})
		}
	}
</script>

<style>
</style>

 后端:后端接收数据,对数据库查询,获得数据,传回前端

    private void selectMajor(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter printWriter = resp.getWriter();
        CommonData commonData = null;
        try {
            MajorDao majorDao = new MajorDao();
            List<Major> majorlist = majorDao.majors();
            commonData = new CommonData(200, majorlist, "查询成功!");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            commonData = new CommonData(200, "服务器忙...请稍后再试!");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(commonData);
        printWriter.print(json);
    }
    public List<Major>majors() throws SQLException {
        List<Major>list=new ArrayList<>();
        Connection connection= DButils.getConnection();
        String sql="SELECT m.id,m.name,a.account,m.oper_time\n" +
                "FROM major m LEFT JOIN USER a \n" +
                "ON a.id=m.adminid;";
        PreparedStatement preparedStatement= connection.prepareStatement(sql);
        ResultSet resultSet=preparedStatement.executeQuery();
        while(resultSet.next())
        {
            Major major=new Major();
            major.setId(resultSet.getInt("id"));
            major.setAccount(resultSet.getString("account"));
            major.setName(resultSet.getString("name"));
            major.setOper_time(resultSet.getDate("oper_time"));
            list.add(major);
        }
        DButils.close(resultSet,preparedStatement,connection);
        return list;
    }

页面显示结果:


2,新增专业(要求不能新增已有专业--查重) 

①点击新增,打开新增专业表单

②在表单中动态显示专业信息

③输入专业信息(查重,使用axios响应拦截器)

④点击保存,提交数据到后端,保存到数据库,前端更新页面

前端:

<template>
	<el-dialog title="新增专业" :visible.sync="dialogFormVisible">
		<el-form label-width="80px">
			<el-form-item label="专业名">
				<el-input v-model="form.name"></el-input>
			</el-form-item>
			<el-form-item label="授课老师">
				<el-input v-model="form.teacher"></el-input>
			</el-form-item>
		</el-form>
		<div slot="footer" class="dialog-footer">
			<el-button @click="dialogFormVisible = false">取 消</el-button>
			<el-button type="primary" @click="save()">确 定</el-button>
		</div>
	</el-dialog>
</template>

<script>
	export default {
		data() {
			return {
				dialogFormVisible: false,
				majorlist: [],
				form: {
					name:"",
					teacher:"",
				}
			}
		},
		methods: {
			save() {
				this.$http.post("admin/MajorServlet?mark=save", jsonToString(this.form)).then(resp => {
					if (resp.data.code == 200) {
						this.$message({
							message: resp.data.message,
							type: 'success'
						});
						this.dialogFormVisible = false;
						this.$router.go(); //更新当前页面
					}
				})
			}
		},
		mounted() {
			this.$http.get("admin/StudentServlet?mark=majorselect").then(resp => {
				this.majorlist = resp.data.data;
			})
		}
	}
	//将json对象序列化为键=值&键=值
	function jsonToString(jsonobj) {
		console.log(jsonobj)
		var str = "";
		for (var s in jsonobj) {
			str += s + "=" + jsonobj[s] + "&";
		}
		return str.substring(0, str.length - 1);
	}
</script>

<style>
</style>

后端: POST请求,传入save字符串,获取传来的数据,新增到数据库。

public class MajorServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark=req.getParameter("mark");
        if("save".equals(mark))
        {
            saveMajor(req,resp);
        }
    }

    private void saveMajor(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter printWriter = resp.getWriter();
        MajorDao majorDao=new MajorDao();
        CommonData commonData = null;
        try {
            String id=req.getParameter("id");
            String name = req.getParameter("name");
            String teacher=req.getParameter("teacher");
            String adminToken = req.getHeader("userToken");
            System.out.println(adminToken);
            DecodedJWT decodedJWT = JWTUtil.getTokenInfo(adminToken);
            int adminid = decodedJWT.getClaim("id").asInt();
            Date date = null;
            if(id==null)
            {
                majorDao.save(name,teacher,adminid);
                commonData = new CommonData(200, "新增成功!");
            }
//            else
//            {
//                studentDao.update(id,num,name,gender,birthday,phone, address,adminid, majorid, date);
//                commonData = new CommonData(200, "修改成功!");
//            }
        } catch (Exception e) {
            e.printStackTrace();
            commonData = new CommonData(500, "服务器忙,请稍后重试!");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(commonData);
        printWriter.print(json);
    }
}

调用DAO层,将数据打包发送给前端

import javax.imageio.ImageReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MajorDao {

    public void save(String name, String teacher, int adminid) throws SQLException {
        String sql="INSERT INTO major(NAME,adminid," +
                "oper_time,teacher) " +
                "VALUES (?,?,?,?);";
        Connection connection= DButils.getConnection();
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setObject(1,name);
        preparedStatement.setObject(2,adminid);
        preparedStatement.setObject(3,new Date());
        preparedStatement.setObject(4,teacher);
        preparedStatement.executeUpdate();
    }
}

结果显示:

在新增专业基础上进行查重,如果已经存在当前新增的专业和任课老师,则新增失败。

 我使用了两个方法,第一个是在DAO层数据库查询判断是否为空,为空则返回状态值“200”,表示可以新增,否则不可以。

后端:

if(id==null)
            {
                if(!majorDao.check(name,teacher))
                {
                    majorDao.save(name,teacher,adminid);
                    commonData = new CommonData(200, "新增成功!");
                }else{
                    System.out.println("课程已存在!");
                    commonData = new CommonData(202, "课程已存在!");
                }

            }
    public boolean check(String name, String teacher) throws SQLException {
        String sql="SELECT teacher,name FROM major WHERE teacher=? AND name=?";
        Connection connection= DButils.getConnection();
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setObject(1,teacher);
        preparedStatement.setObject(2,name);
        ResultSet resultSet=preparedStatement.executeQuery();
        return resultSet.next();
    }

前端:

		methods: {
			save() {
				this.$http.post("admin/MajorServlet?mark=save", jsonToString(this.form)).then(resp => {
					if (resp.data.code == 200) {
						this.$message({
							message: resp.data.message,
							type: 'success'
						});
						this.dialogFormVisible = false;
					} else if (resp.data.code == 202) {
						this.$message({
							message: resp.data.message,
							type: 'warning'
						});
					}
					this.$router.go(); //更新当前页面
				})
			}
		},

第二种方法:

axios响应拦截器,类似例子见登录或注册,直接查询是否存在当前账号。

以百度账号注册为例进行模仿:


3,修改专业

①点击修改按钮,弹出对话框,拿到专业id,传到后端,后端数据库查询

②在表单中显示专业信息

③提交学生信息到后端,更新数据库

 首先对各属性值进行前后端绑定,如下样式

然后在已有基础上进行修改。

前端代码:首先向前端传入当前修改的专业id,从后端获取该id下的专业信息。

			updateinfo(id){
				this.form.id=id;
				this.$http.get("admin/StudentServlet?mark=findstudent&id="+id).then(resp=>{
					this.form=resp.data.data;
				})
			}

 后端代码:

   @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String mark = req.getParameter("mark");
        if ("delete".equals(mark)) {
            deleteMajor(req, resp);
        } else if ("select".equals(mark)) {
            selectMajor(req, resp);
        }else if("update".equals(mark)) {
            update(req,resp);
        }
    }

    private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter printWriter = resp.getWriter();
        CommonData commonData = null;
        try {
            MajorDao majorDao=new MajorDao();
            String id = req.getParameter("id");
            Major major = majorDao.findmajor(id);
            commonData = new CommonData(200, major, "查询成功!");
        } catch (Exception e) {
            e.printStackTrace();
            commonData = new CommonData(500, "服务器忙,请稍后重试!");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(commonData);
        printWriter.print(json);
    }

dao层:查询

    public Major findmajor(String id) throws SQLException {
        String sql="SELECT NAME,teacher FROM major WHERE id=?;";
        Connection connection= DButils.getConnection();
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setObject(1,id);
        ResultSet resultSet=preparedStatement.executeQuery();
        Major major=new Major();
        while(resultSet.next())
        {
            major.setTeacher(resultSet.getString("teacher"));
            major.setName(resultSet.getString("name"));
        }
        return major;
    }

修改之后,进行保存。

 保存大体上和新增类似,依旧使用新增的save()函数,向后端传去save字符串,

			save() {
				this.$http.post("admin/MajorServlet?mark=save", jsonToString(this.form)).then(resp => {
					if (resp.data.code == 200) {
						this.$message({
							message: resp.data.message,
							type: 'success'
						});
					}
					this.dialogFormVisible = false;
					this.$router.go(); //更新当前页面
				})
			}

后端收到前端传来的请求,判断id是否为空。如果id为空说明此时是新增专业,如果id不为空,说明是修改专业信息,从后端传来的id。

所以我们就依据id是否为空来使用分支编写代码。

 private void saveMajor(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter printWriter = resp.getWriter();
        MajorDao majorDao=new MajorDao();
        CommonData commonData = null;
        try {
            String id=req.getParameter("id");
            String name = req.getParameter("name");
            String teacher=req.getParameter("teacher");
            String adminToken = req.getHeader("userToken");
            System.out.println(adminToken);
            DecodedJWT decodedJWT = JWTUtil.getTokenInfo(adminToken);
            int adminid = decodedJWT.getClaim("id").asInt();
            Date date = null;
            if(id==null)
            {
                if(!majorDao.check(name,teacher))
                {
                    majorDao.save(name,teacher,adminid);
                    commonData = new CommonData(200, "新增成功!");
                }else{
                    System.out.println("课程已存在!");
                    commonData = new CommonData(202, "课程已存在!");
                }

            }
            else//id不为空,存在当前专业,进行修改操作
            {
                if(!majorDao.check(name,teacher)){
                    majorDao.update(id,name,teacher,adminid);
                    commonData = new CommonData(200, "修改成功!");
                }else{
                    System.out.println("课程存在!无需再增加");
                    commonData = new CommonData(202, "课程存在!无需再增加");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            commonData = new CommonData(500, "服务器忙,请稍后重试!");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(commonData);
        printWriter.print(json);
    }

在修改专业信息情况下调用dao层。

public void update(String id, String num, String name, String gender, String birthday, String phone, String address, int adminid, String majorid, Date date) throws SQLException {
        String sql="UPDATE student s SET\n" +
                " s.num=?,\n" +
                " s.name=?,\n" +
                " s.gender=?,\n" +
                " s.address=?,\n" +
                " s.phone=?,\n" +
                " s.birthday=?,\n" +
                " s.majorid=?,\n" +
                " s.adminid=?,\n" +
                " s.oper_time=?\n" +
                " WHERE id=?;";
        Connection connection= DButils.getConnection();
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setObject(1,num);
        preparedStatement.setObject(2,name);
        preparedStatement.setObject(3,gender);
        preparedStatement.setObject(4,address);
        preparedStatement.setObject(5,phone);
        preparedStatement.setObject(6,birthday);
        preparedStatement.setObject(7,majorid);
        preparedStatement.setObject(8,adminid);
        preparedStatement.setObject(9,new Date());
        preparedStatement.setObject(10,id);
        preparedStatement.executeUpdate();
    }

 最后要判断一下,如果该专业已经存在那么修改失败。

结果展示:


 4,删除专业

 ①点击删除按钮,弹出对话框,拿到专业id,传到后端,后端数据库删除

②点击确认删除,保存到数据库,前端更新页面

前端代码:向后端传id,和字符串

handleDelete(id) {
				this.$confirm('此操作将删除当前专业, 是否继续?', '操作提示', {
					confirmButtonText: '确定',
					cancelButtonText: '取消',
					type: 'warning'
				}).then(() => {
					this.$http.get("admin/MajorServlet?mark=delete&id=" + id).then(resp => {
						this.$message({
							message: resp.data.message,
							type: 'success'
						});
						this.$router.go(); //更新当前页面
					});
				});
			}

后端获取数据,调用dao删除当前专业

private void deleteMajor(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        PrintWriter printWriter = resp.getWriter();
        MajorDao majorDao = new MajorDao();
        CommonData commonData = null;
        try {
            majorDao.deleteinfo(req.getParameter("id"));
            commonData = new CommonData(200, "删除成功!");
        } catch (Exception e) {
            e.printStackTrace();
            commonData = new CommonData(500, "服务器忙,请稍后重试!");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(commonData);
        printWriter.print(json);
    }

dao:

public void deleteinfo(String id) throws SQLException {
        String sql="DELETE FROM major WHERE id=?";
        Connection connection= DButils.getConnection();
        PreparedStatement preparedStatement=connection.prepareStatement(sql);
        preparedStatement.setObject(1,id);
        preparedStatement.executeUpdate();
    }

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

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

相关文章

律师必备软件Alpha系统,为专业律师提供高效解决方案!

Alpha法律智能操作系统由iCourt开发&#xff0c;是一款集大数据、市场拓展、律所管理等功能于一体的智能操作系统&#xff0c;它旨在通过强大的法律科技赋能法律人&#xff0c;更快速地获取同类型案件的办理经验&#xff0c;进而减轻律师工作负担、提升工作效率。目前&#xff…

python知识:从PDF 提取文本

一、说明 PDF 到文本提取是自然语言处理和数据分析中的一项基本任务&#xff0c;它允许研究人员和数据分析师从 PDF 文件中包含的非结构化文本数据中获得见解。Python 是一种通用且广泛使用的编程语言&#xff0c;它提供了多个库和工具来促进提取过程。 二、各种PDF操作库 让我…

SPSS|正负偏态的转换方法|限值1.96|反转后处理(对数法)|正态得分法|实战小练-SPSS学习(2)

目录 学习目的软件版本参考文档基础数据正负偏态的转换方法&#xff08;引自《小白爱上SPSS》&#xff09;正偏态数据转换方法负偏态数据转换 实战数据准备数据初探输出结果分析查看峰度、偏度查看峰度标准误差、偏度标准误差计算偏度系数和峰度系数Tips&#xff1a;为什么判断…

Anthropic全球上线AI语言模型Claude 2;多模态系统:融合文本和图像的新前沿

&#x1f989; AI新闻 &#x1f680; Anthropic全球上线AI语言模型Claude 2&#xff0c;编程、数学、推理能力大幅提升 摘要&#xff1a;Anthropic在全球正式上线了AI语言模型Claude 2。相比前代版本&#xff0c;Claude 2在编程、数学、推理等方面都有大幅提升&#xff0c;支…

MySQL学习(八)——锁

文章目录 1. 锁概述2. 全局锁2.1 全局锁的必要性2.2 语法2.3 全局锁的特点 3. 表级锁3.1 表锁3.2 元数据锁3.3 意向锁3.4 自增锁 4. 行级锁4.1 介绍4.2 记录锁4.3 间隙锁4.4 临键锁 1. 锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传…

使用Spire.PDF for Python插件从PDF文件提取文字和图片信息

目录 一、Spire.PDF插件的安装 二、从PDF文件提取文字信息 三、从PDF文件提取图片信息 四、提取图片和文字信息的进阶应用 总结 在Python中&#xff0c;提取PDF文件的文字和图片信息是一种常见的需求。为了满足这个需求&#xff0c;许多开发者会选择使用Spire.PDF插件&…

13.2测试用例

一.测试用例的四个重要要素 1.测试环境 2.操作步骤 3.测试数据 4.预期结果 注意:不需要执行结果. 5.为什么要有测试用例 a.提高测试效率,节约测试设计. b.测试用例是自动化测试的前提. 二.设计方法(黑盒测试) a.基于需求的设计方法(4,0.50) b.等价类: 依据需求,将输…

软件开发团队的成本分布

软件开发团队的成本分布通常涵盖了各种因素和人员&#xff0c;这些因素在项目的不同阶段会有所变化。以下是一个一般性的软件开发团队成本分布示例&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 开发…

Pysied6 ComboBox

Pysied6 ComboBox Pysied6 ComboBoxComboBox常用函数ComboBox常用信号例程ComboBox添加选项程序设置界面设置 返回选项信息添加删除选项完整程序界面程序主程序 Pyside6的ComboBox下拉列表框&#xff0c;可以给用户提供一系列的选项&#xff0c;下面就来简单了解一下Pysied6 Co…

SpringCloud-Sentinel

一、介绍 &#xff08;1&#xff09;提供界面配置配置服务限流、服务降级、服务熔断 &#xff08;2&#xff09;SentinelResource的blockHandler只处理后台配置的异常&#xff0c;运行时异常fallBack处理&#xff0c;且资源名为value时才生效&#xff0c;走兜底方法 二、安装…

数据分析:密度图

目前拥有的数据如图&#xff0c;三列分别对应瑕疵种类&#xff0c;对应的置信 度&#xff0c;x方向坐标。 现在想要做的事是观看瑕疵种类和置信度之间的关系。 要显示数据分布的集中程度&#xff0c;可以使用以下几种常见的图形来观察&#xff1a; 1、箱线图&#xff08;Box P…

【工具】电脑网络连接正常,但是有些页面无法登录,如何解决?

目录 0.环境 1.背景 2.具体操作 0.环境 windows 11 64位 1.背景 我们公司的大楼无法进移动联通这种网络的线&#xff0c;所以网络用的是小厂的&#xff0c;有些小厂为了提高网络速度&#xff0c;会屏蔽一些网站&#xff0c;这就导致在工作中有些网站直接通过WIFI连接是无法访…

头歌平台——基于结构体的学生信息管理系统

第1关&#xff1a;学生信息管理系统 任务描述 本关任务&#xff1a;编写一个基于结构体得学生成绩信息管理系统。主要功能如下&#xff1a; 1. 用结构体存放所有数据。 2. 每个功能都用函数实现。 3. 输入10个学生的学号和三门课程的成绩。 4. 计算每个学生的总分。 5. 按总分…

头歌平台——C语言之数学运算强化练习题

第1关&#xff1a;逐一挑出来 任务描述 本关需要完成一个输出某个三位数各个位上的数字的小程序。 相关知识 算数运算符 %是取模运算符&#xff0c;获得整除后的余数。 /是通过分子除以分母&#xff0c;获得整除后的整数部分。 floor floor()是返回一个浮点型的整数部分…

腾讯云服务器带宽下载速度表(附上行带宽计算方法)

腾讯云服务器公网带宽下载速度计算&#xff0c;1M公网带宽下载速度是128KB/秒&#xff0c;5M带宽下载速度是512KB/s&#xff0c;腾讯云10M带宽下载速度是1.25M/秒&#xff0c;腾讯云百科txybk.com来详细说下腾讯云服务器不同公网带宽实际下载速度以及对应的上传速度对照表&…

MySQL官方文档如何查看,MySQL中文文档

这里写自定义目录标题 MySQL官方文档如何查看MySQL中文文档 MySQL官方文档如何查看 MySQL官网地址&#xff1a;https://dev.mysql.com/doc/ 比如这里我要找InnoDB架构 MySQL中文文档 MySQL 5.1中文文档地址&#xff1a;https://www.mysqlzh.com/

头歌平台——C语言之链表练习题

第1关&#xff1a;建单向链表 任务描述 本关需要你建立一个带头结点的单向链表。 相关知识 什么是链表&#xff1f;链表和二叉树是C语言数据结构的基础和核心。 链表有多种形式&#xff0c;它可以是单链接的或者双链接的&#xff0c;可以是已排序的或未排序的&#xff0c;…

C# CodeFormer 图像(人脸面部)修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {p…

AArch64 TrustZone

概述 本文我们介绍了 TrustZone 技术。通过CPU内置的硬件强制隔离&#xff0c;TrustZone 提供了一种高效的全系统安全设计。 我们介绍了如下功能&#xff1a;将 TrustZone 技术添加到处理器架构中&#xff0c;内存系统对于 TrustZone 的支持以及典型的软件架构。我们还介绍了…

京东API接口助力京东ToB和ToC全面发展

目前京东企业业务已建成7大智能化采购平台&#xff0c;3大场景化产品&#xff0c;4条企业专属供应链体系&#xff0c;发布API接口200余个&#xff0c;在ToB场景的应用能力方面&#xff0c;京东企业业务在2019年还推出三款重量级的技术产品——采购ERP、神算子数据平台和采购大脑…