宿舍管理系统代码详解(操作界面)

       

目录

一、前端代码

1.样式展示

2.代码详解

<1>主页面列表部分

(1)template部分

(2)script部分

<2>新增页面

(1)template部分

(2)script部分

<3>修改页面

二、后端代码

(1)Servlet层

1.doGet方法

2.doPost方法

3.doGet中的方法

<1>查询学生列表

<2>查询专业列表 

 <3>删除学生

<4>查找所需内容 

(2)model层

(3)Dao层

1.查询学生列表

2.查询专业列表

3.删除学生

4.新增学生

5.查询所需的学生信息

6.修改学生


        在此系统中,操作界面大致相同,本篇将以学生管理的操作页面为例进行代码详解,在其他不同的操作页面有不同的情况下也会进行详解。

一、前端代码

1.样式展示

2.代码详解

<1>主页面列表部分

(1)template部分
<template>
	<el-card class="box-card"><!-- 卡片 -->
		<div slot="header" class="clearfix">
			<span>学生列表</span>
			<el-button style="float: right; padding: 3px 0" type="text" @click="openDialog()">
				新增<i class="el-icon-circle-plus-outline el-icon--right"></i>
			</el-button>
		</div>
		<el-table :data="tableList" border :stripe="true" style="width: 100%"><!-- stripe:斑马纹 -->
			<el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
			<el-table-column prop="num" label="学号" width="100" sortable
				align="center"></el-table-column><!-- sortable排序 -->
			<el-table-column prop="name" label="姓名" width="100" align="center"></el-table-column>
			<el-table-column prop="gender" label="性别" width="50" align="center"
				:resizable="false"></el-table-column><!-- resizable禁止拖拽 -->
			<el-table-column prop="birthday" label="生日" align="center"></el-table-column>
			<el-table-column prop="phone" label="电话" align="center"></el-table-column>
			<el-table-column prop="mname" label="专业" align="center"></el-table-column>
			<el-table-column prop="account" label="操作人" align="center"></el-table-column>
			<el-table-column prop="operTime" label="操作时间" align="center" sortable></el-table-column>
			<el-table-column label="操作" align="center">
				<template slot-scope="scope">
					<el-button size="mini" @click="openUpdateDialog(scope.row.id)">编辑</el-button><!-- scope.row获取到你所点击的那一行的数据 -->
					<el-button size="mini" type="danger" @click="deletestudent(scope.row.id)">删除</el-button>
				</template>
			</el-table-column>
		</el-table>

		<add ref="add"></add><!-- 使用组件 -->
		<update ref="update"></update>
	</el-card>
</template>

        利用element-UI组件中的布局进行修改,已达到目的要求样式

        注意最后的部分是用来调用新增,修改的组件的

(2)script部分
<script>
	/* 导入其他组件 */
	import add from "./add.vue";
	import update from "./update.vue";
	export default {
		components: { //注册组件
			add,
			update
		},
		data() {
			return {
				tableList: []
			}
		},
		methods: {
			openDialog() {
				//在父组件操作子组件
				this.$refs.add.dialogVisible = true;
			},
			openUpdateDialog(id){
				this.$refs.update.dialogVisible = true;
				this.$refs.update.findStudentById(id);
			},
			deletestudent(id) {
				this.$confirm('您确定要删除吗?', '提示', {
					confirmButtonText: '确定',
					cancelButtonText: '取消',
					type: 'warning'
				}).then(() => {
					//向后端发送请求,并返回id到后端
					this.$http.get("/api/student?mark=deletestudent&id=" + id).then((resp) => {
						if (resp.data.code == 200) {
							this.$message({type: 'success',message: '删除成功!'});
							this.$router.go(0);
						}
					})
				})
			}
		},
		mounted() {
			//打开组件后自动向后端发送一个查询学生列表的请求
			this.$http.get("api/student?mark=studentlist").then((resp) => {
				if (resp.data.code == 200) {
					//接收后端响应的数据
					this.tableList = resp.data.result;
					//把学生信息显示到数据表格中
				}

			})
		}
	}
</script>

       1. 在进行增加和修改的操作时,会弹出一个窗口来进行操作,我们将这部分的代码重新放在一个vue中调用来使用。

        正常的调用其他vue需要重新打开一个新窗口,而此方法可以在原本的额网页基础上弹出浮窗来显示vue中的内容。

        用import...from...来进行调用,并在temp中进行调用

<add ref="add"></add>
<update ref="update"></update>	

import add from "./add.vue";
import update from "./update.vue";

        2.openDialog() 用来显示出弹窗,改变dialogVisible的boolean值来使得弹窗显示和消失(点击修改操作时类似)

        3.在进行删除操作时,我们需要获取到当前的id,以id来对数据库内的数据进行删除,而获取方法即:

scope.row.id

         在scope中获取点击的这一行(row)的id

        4.在进行删除操作时,要进行提示,确定用户是否要进行删除操作,删除成功后也要进行提示

deletestudent(id) {
				this.$confirm('您确定要删除吗?', '提示', {
					confirmButtonText: '确定',
					cancelButtonText: '取消',
					type: 'warning'
				}).then(() => {
					//向后端发送请求,并返回id到后端
					this.$http.get("/api/student?mark=deletestudent&id=" + id).then((resp) => {
						if (resp.data.code == 200) {
							this.$message({type: 'success',message: '删除成功!'});
							this.$router.go(0);
						}
					})
				})
			}

        this.$router.go(0)是为了关闭提示信息的。

''/api/student?mark=deletestudent&id=" + id

是用来与后端连接的,在后端中,给servlet中命名

@WebServlet(urlPatterns = "/api/student")

在前端需要后端的doget或dopost方法时,即可用/api/student来对后端进行连接

但是前端不止需要一个doget方法,所以还需要对每个不同的方法“起名”mark=deletestudent

后端在doget方法中接收不同的Mark,来执行不同的方法。

String mark = req.getParameter("mark");
if (mark.equals("studentlist")) {
    findStudents(req, resp);
}

而有些需要给后端传值,比如上面需要传id值进行查询,就在后面将id值传到后端&id=" + id

后端需要进行接收id,进行查询即可

String id = req.getParameter("id");

        5.mounted()是打开组件就进行的函数操作,将查询学生列表的函数放在其中进行查询,即可直接显示出学生列表

mounted() {
			//打开组件后自动向后端发送一个查询学生列表的请求
			this.$http.get("api/student?mark=studentlist").then((resp) => {
				if (resp.data.code == 200) {
					//接收后端响应的数据
					this.tableList = resp.data.result;
					//把学生信息显示到数据表格中
				}

			})
		}

<2>新增页面

(1)template部分
<template>
	<!-- 新增代码内容是比较多的,建议抽取出来,定义到一个独立的vue文件中
	    在列表组件中导入添加组件
	 -->
	<el-dialog title="新增学生" :visible.sync="dialogVisible" width="50%">

		<el-form ref="form" label-width="80px">
			<el-form-item label="学号">
				<el-input v-model="form.num"></el-input>
			</el-form-item>
			<el-form-item label="姓名">
				<el-input v-model="form.name"></el-input>
			</el-form-item>
			<el-form-item label="性别">
				<el-radio-group v-model="form.gender">
					<el-radio label="男"></el-radio>
					<el-radio label="女"></el-radio>
				</el-radio-group>
			</el-form-item>
			<el-form-item label="生日">
				<el-date-picker type="date" placeholder="选择日期" v-model="form.birthday" style="width: 100%;"
					value-format="yyyy-MM-dd" :picker-options="pickerOptions"></el-date-picker>
			</el-form-item>
			<el-form-item label="电话">
				<el-input v-model="form.phone"></el-input>
			</el-form-item>
			<el-form-item label="地址">
				<el-input v-model="form.address"></el-input>
			</el-form-item>
			<el-form-item label="专业">
				<el-select placeholder="请选择" v-model="form.majorid">
					<el-option v-for="major in majorlist" :key="major.id" :label="major.name" :value="major.id">
					</el-option>
				</el-select>
			</el-form-item>
		</el-form>
		<span slot="footer" class="dialog-footer">
			<el-button @click="dialogVisible = false">取 消</el-button>
			<el-button type="primary" @click="save()">保 存</el-button>
		</span>
	</el-dialog>
</template>

        利用elem-UI中的表单组件进行修改,添加所需元素。

(2)script部分
<script>
	export default {
		data() {
			return {
				pickerOptions: {
					disabledDate(time) {
						return time.getTime() > Date.now() - 8.64e6; //如果没有后面的-8.64e6就是不可以选择今天的
					}
				},
				dialogVisible: false,
				majorlist: [],
				form: {
					num: "",
					name: "",
					gender: "",
					birthday: "",
					phone: "",
					majorid: ""
				}
			}
		},
		methods: {
			save() {
				this.$http.post("api/student", jsonToString(this.form)).then((resp) => {
					if (resp.data.code == 200) {
					this.$message({message:resp.data.desc,type:'success'});
					this.dialogVisible = false;
					this.$router.go(0);
					}
				})
			}
		},
		mounted() {
			//向后端发送一个请求,查询专业信息
			this.$http.get("api/student?mark=majorlist").then((resp) => {
				if (resp.data.code == 200) {
					this.majorlist = resp.data.result;
				}
			})
		}

	}
	//将json对象序列化为 键=值&键=值
	function jsonToString(form) {
		var str = "";
		for (var s in form) {
			str += s + "=" + form[s] + "&";
		}
		return str.substring(0, str.length - 1);
	}
</script>

        1.pickerOptions中的disabledDate(time)是用来更改时间格式的,因为在后端查询出来的时间指的是从1979到现在的毫秒值,我们需要转换格式将其显示到前端上去。

        2.this.$http.post("api/student", jsonToString(this.form))调用的是后端的dopost方法,将form中的值传给后端进行保存。

        3.在新增中,我们需要知道所有专业信息,将专业信息放在下拉框中,才能新增学生信息时,给学生选定专业。所以我们需要查询专业信息,将查到的信息放在majorlist中,赋到专业下拉框中。

<3>修改页面

        修改页面与新增页面相同,不同的是需要在修改页面中把选中的那个学生的信息显示到修改页面当中,所以需要在点开页面时进行一次查询,将内容赋到页面上去

findStudentById(id){
				//向后端发送请求
				this.$http.get("api/student?mark=findstudent&id="+id).then((resp) => {
					if (resp.data.code == 200) {
						this.form=resp.data.result;
					}
				})
			}

        在学生列表(主页面)中,点击编辑按钮,调用openUpdateDialog(scope.row.id)函数,并将获取到的id传到findStudentById(id)中,在编辑页面进行执行,向后端传入id值,利用id查询学生信息,传回到前端中。

二、后端代码

(1)Servlet层

1.doGet方法

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("student doget");

        String mark = req.getParameter("mark");
        if (mark.equals("studentlist")) {
            findStudents(req, resp);
        }
        if (mark.equals("majorlist")) {
            findMajors(req, resp);
        }
        if(mark.equals("deletestudent")){
            deleteStudent(req,resp);
        }
        if(mark.equals("findstudent")){
            findStudent(req,resp);
        }
    }

        doget方法:因为前端传回来不同的doget请求,所以将给个请求分到不同的方法中,然后在doget中调用即可。

2.doPost方法

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id=req.getParameter("id");//新增时,请求中没有id,修改时请求中有id
        String num = req.getParameter("num");
        String name = req.getParameter("name");
        String gender = req.getParameter("gender");
        String birthday = req.getParameter("birthday");
        String phone = req.getParameter("phone");
        String address = req.getParameter("address");
        String majorid = req.getParameter("majorid");
        String token = req.getHeader("token");
        //操作人id
        DecodedJWT decodedJWT = JWTUtil.getTokenInfo(token);
        int adminid = decodedJWT.getClaim("id").asInt();
        //调用dao层,将接收到的数据保存到数据库
        StudentDao studentDao = new StudentDao();
        Result result;
        try {
            if(id==null){
                studentDao.insertStudent(num, name, gender, birthday, phone, address, majorid, adminid);
            }else{
                studentDao.updateStudent(id, name, gender, birthday, phone, address, majorid, adminid);
            }
            result = new Result(200, "保存成功", null);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result = new Result<>(500, "保存失败", null);
        }
        //向前端作出响应
        resp.getWriter().print(new ObjectMapper().writeValueAsString(result));
    }

        doPost方法中,需要先接收前端传过来的数据(form中的数据),然后根据这些数据进行下一步的操作。

        前端向后端发送的doPost请求也有两种,一种是新增学生内容,将新增的内容传给后端,一种是修改内容,将修改后的内容传给后端。因为两种请求的区别在于有没有传给后端id值,所以只需要在doPost中判断是否接受了id值,来进行不同的方法。

        后端与数据库连接的部分在dao中,所以将方法放在dao中,在Servlet中调用dao中的方法。

3.doGet中的方法

<1>查询学生列表
/*
    查询学生列表
     */
    public void findStudents(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        StudentDao studentDao = new StudentDao();
        Result result;
        try {
            ArrayList<Student> students = studentDao.findStudents();
            result = new Result(200, "查询成功", students);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result = new Result(500, "系统忙", null);
        }
        resp.getWriter().print(new ObjectMapper().writeValueAsString(result));
    }
<2>查询专业列表 
/*
    查询专业列表
     */
    public void findMajors(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        StudentDao studentDao = new StudentDao();
        Result result;
        try {
            ArrayList<Major> majors = studentDao.findMajors();
            result = new Result(200, "查询成功", majors);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result = new Result(500, "系统忙", null);
        }
        resp.getWriter().print(new ObjectMapper().writeValueAsString(result));
    }
 <3>删除学生
/*
    删除学生
     */
    public void deleteStudent(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        StudentDao studentDao = new StudentDao();
        Result result;
        try {
            String id = req.getParameter("id");
            studentDao.deleteStudent(id);
            result = new Result(200, "删除成功", null);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result = new Result(500, "系统忙", null);
        }
        resp.getWriter().print(new ObjectMapper().writeValueAsString(result));

    }
<4>查找所需内容 
private void findStudent(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        StudentDao studentDao = new StudentDao();
        Result result;
        try {
            String id = req.getParameter("id");
            Student student=studentDao.findstudent(id);
            result = new Result(200, "查询1成功", student);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result = new Result(500, "系统忙", null);
        }
        resp.getWriter().print(new ObjectMapper().writeValueAsString(result));
    }

(2)model层

        在model层中,需要将所需的数据都表示出来,封装到一个类中,方便后面的调用。

package com.ffyc.dormserver.model;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.sql.Timestamp;
import java.util.Date;

public class Student {
    private int id;
    private int num;
    private String name;
    private String gender;
    @JsonFormat(pattern ="yyy-MM-dd",timezone = "GMT+8")//后端把对象转为json时,把日期格式化
    private Date birthday;
    private String phone;
    private String mname;
    private String address;
    private int majorid;
    private String account;
    @JsonFormat(pattern ="yyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date operTime;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getMname() {
        return mname;
    }

    public void setMname(String mname) {
        this.mname = mname;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public Date getOperTime() {
        return operTime;
    }

    public void setOperTime(Date operTime) {
        this.operTime = operTime;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getMajorid() {
        return majorid;
    }

    public void setMajorid(int majorid) {
        this.majorid = majorid;
    }
}

(3)Dao层

        Dao层就是后端与数据库进行连接的地方,所有SQL语句都在这里面

1.查询学生列表

public ArrayList<Student> findStudents() throws SQLException {
        ArrayList<Student> students = new ArrayList<>();
        PreparedStatement ps = null;
        Connection connection = null;
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("SELECT\n" +
                    "s.id,\n" +
                    "s.num,\n" +
                    "s.name,\n" +
                    "s.gender,\n" +
                    "s.birthday,\n" +
                    "s.phone,\n" +
                    "m.name mname,\n" +
                    "a.account,\n" +
                    "s.oper_time\n" +
                    "FROM student s LEFT JOIN major m ON s.majorid=m.id\n" +
                    "LEFT JOIN admin a ON s.adminid=a.id");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Student student = new Student();
                student.setId(rs.getInt("id"));
                student.setNum(rs.getInt("num"));
                student.setName(rs.getString("name"));
                student.setGender(rs.getString("gender"));
                student.setBirthday(rs.getDate("birthday"));
                student.setPhone(rs.getString("phone"));
                student.setMname(rs.getString("mname"));
                student.setAccount(rs.getString("account"));
                student.setOperTime(rs.getTimestamp("oper_time"));
                students.add(student);
            }
        } finally {
            JDBCUtil.close(connection, ps);
        }
        return students;
    }

2.查询专业列表

public ArrayList<Major> findMajors() throws SQLException {
        ArrayList<Major> majors = new ArrayList<>();
        PreparedStatement ps = null;
        Connection connection = null;
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("SELECT id,name FROM major");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Major major = new Major();
                major.setId(rs.getInt("id"));
                major.setName(rs.getString("name"));
                majors.add(major);
            }
        } finally {
            JDBCUtil.close(connection, ps);
        }
        return majors;
    }

3.删除学生

public void deleteStudent(String id) throws SQLException {
        System.out.println("deletestudent");
        PreparedStatement ps = null;
        Connection connection = null;
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("delete from student where id = ?");
            ps.setObject(1, id);
            ps.executeUpdate();

        } finally {
            JDBCUtil.close(connection, ps);
        }
    }

4.新增学生

public boolean insertStudent(String num, String name, String gender, String birthday, String phone, String address, String majorid, int adminid) throws SQLException {
        System.out.println("insertstudent");
        PreparedStatement ps = null;
        Connection connection = null;
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("insert into student (num,name,gender,birthday,phone,address,majorid,adminid,oper_time)values(?,?,?,?,?,?,?,?,now())");
            ps.setObject(1, num);
            ps.setObject(2, name);
            ps.setObject(3, gender);
            ps.setObject(4, birthday);
            ps.setObject(5, phone);
            ps.setObject(6, address);
            ps.setObject(7, majorid);
            ps.setObject(8, adminid);
            ps.executeUpdate();

        } finally {
            JDBCUtil.close(connection, ps);
        }
        return true;
    }

5.查询所需的学生信息

public Student findstudent(String id) throws SQLException {
        PreparedStatement ps = null;
        Connection connection = null;
        Student student = new Student();
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("SELECT\n" +
                    "id,\n" +
                    "num,\n" +
                    "NAME,\n" +
                    "gender,\n" +
                    "birthday,\n" +
                    "phone,\n" +
                    "address,\n" +
                    "majorid\n" +
                    "FROM student WHERE id = ?");
            ps.setObject(1, id);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                student.setId(rs.getInt("id"));
                student.setNum(rs.getInt("num"));
                student.setName(rs.getString("name"));
                student.setGender(rs.getString("gender"));
                student.setBirthday(rs.getDate("birthday"));
                student.setPhone(rs.getString("phone"));
                student.setAddress(rs.getString("address"));
                student.setMajorid(rs.getInt("majorid"));
            }
        } finally {
            JDBCUtil.close(connection, ps);
        }
        return student;
    }

6.修改学生

 public void updateStudent(String id, String name, String gender, String birthday, String phone, String address, String majorid, int adminid) throws SQLException {
        System.out.println("insertstudent");
        PreparedStatement ps = null;
        Connection connection = null;
        try {
            connection = JDBCUtil.GetConnection();
            ps = connection.prepareStatement("UPDATE student set NAME=?,gender=?,birthday=?,phone=?,address=?,majorid=?,adminid=?,oper_time=NOW() WHERE id=?\n");
            ps.setObject(1, name);
            ps.setObject(2, gender);
            ps.setObject(3, birthday);
            ps.setObject(4, phone);
            ps.setObject(5, address);
            ps.setObject(6, majorid);
            ps.setObject(7, adminid);
            ps.setObject(8, id);
            ps.executeUpdate();

        } finally {
            JDBCUtil.close(connection, ps);
        }

    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mongodb介绍及springboot集成增删改查

文章目录 1. MongoDB相关概念1.1 业务应用场景1.2 MongoDB简介1.3 体系结构1.4 数据模型1.5 MongoDB的特点 2. docker安装mongodb3. springboot集成3.1 文件结构3.2 增删改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查询3.2.5 删除 1. MongoDB相关概念 1.1 业务…

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入&#xff0c;这样会导致性能上的损失 。 JS提供的…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

构建智慧城市公共服务系统的功能架构设计

随着城市化进程的加速&#xff0c;城市公共服务系统在保障居民生活品质、提升城市管理水平方面扮演着愈发重要的角色。构建智慧城市公共服务系统的功能架构设计至关重要&#xff0c;它不仅需要充分考虑居民需求与城市管理的实际情况&#xff0c;还需要整合先进的科技手段&#…

冷冻式压缩空气干燥机常见几种系统原理图

冷冻式压缩空气干燥机 我们以两种典型的设计流程图为例 1.干式蒸发型&#xff0c;这类冷干机是我们最为常见的设计型式。下图为deltech公司的典型流程图 此类设备各家设计不同的最大区别基本就是在换热器的结构型式上有比较大的区别。换热器主要有&#xff1a;管壳式、铝板换、…

echarts饼图图例右侧纵向排列

如图所示&#xff0c;一开始&#xff0c;我设置了图例的right和top值&#xff0c;还有orient&#xff0c;但图例始终不能纵向排成一排&#xff0c;要么上面两个一行&#xff0c;要么最后两个一行&#xff0c;最后我发现同时设置一下left的值就可以了&#xff0c;如下所示&#…

51单片机-实机演示(按键)

书接上回。http://t.csdnimg.cn/4wSSW 目录 一.按下灭&#xff0c;松开亮 二.两个按键控制两个灯 三.点一下灯开&#xff0c;在按一下关 四。优化按键消抖 1.加入bit变量 一.按下灭&#xff0c;松开亮 代码 #include <reg52.h> //此文件中定义了单片机的一些特…

关于Iterator 和ListIterator的详解

1.Iterator Iterator的定义如下&#xff1a; public interface Iterator<E> {} Iterator是一个接口&#xff0c;它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口如下&#xff1a; forEachRemaining(Consumer<? super E> act…

Android Studio开发之路(十三)主题影响Button颜色问题解决及button自定义样式

一、问题描述 在开发过程中发现安卓的默认主题色是紫色&#xff0c;并且会导致button也是紫色&#xff0c;有时直接在xml布局文件中直接设置button的背景色或者设置背景图片不起效果 方案一、如果是app&#xff0c;可以直接设置主题颜色 比如&#xff0c;将主题设置为白色&a…

GNSS的经纬度使用float还是doubble数据类型存储传输?

1. 背景 当你在使用导航、打车、定位等等场景下&#xff0c;一定会有形或者无形的使用位置服务&#xff0c;位置服务的基础功能功能就是向你提供位置信息&#xff0c;而经纬度是位置信息的主要信息&#xff0c;一般情况可以简单的认为位置信息就是经纬度信息。经纬度使用小数进…

五分钟”手撕“异常

目录 一、什么是异常 二、异常的体系和分类 三、异常的处理 1.抛出异常 2.异常的捕获 异常声明throws&#xff1a; try-catch处理 四、finally finally一定会被执行吗&#xff1f; 五、throw和throws区别 六、异常处理的流程 七、自定义异常 一、什么是异常 顾名…

Java顺序表

Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我帮助很大。我想与…

ESP8266 接入阿里云物联网云平台

AT指令集参考资料 乐鑫科技&#xff1a;基础 AT 命令集 概念浅析 物模型 是对设备在云端的功能描述&#xff0c;包括设备的属性、服务和事件。物联网平台通过定义一种物的描述语言来描述物模型&#xff0c;称之为TSL&#xff08;即 Thing Specification Language&#xff0…

【学习笔记】3D-2D:PnP

主要解决什么问题&#xff1f; 主要解决的是已知空间中N个3D点及其图像中的2D点坐标&#xff0c;求相机在空间中的位置与姿态 求解PnP问题最少需要几个点&#xff1f; 最少只需要3个点对 求解PnP问题的常用方法 主要有用3对点估计位姿的P3P&#xff0c;另外还有DLT&#x…

前端如何学会全栈分页开发?源码和思路都在这了

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前言 这是博客系…

商标注册申请名称的概率,多想名称选通过率好的!

近日给深圳客户申请的商标初审下来了&#xff0c;两个类别都下的初审&#xff0c;和当初的判断基本一致&#xff0c;普推知产老杨当时沟通说需要做担保申请注册也可以&#xff0c;后面选择了管家注册&#xff0c;最近大量的帮客户检索商标名称&#xff0c;分享下经验。 两个字基…

STM32H7系统窗口看门狗 (WWDG)应用方法介绍

目录 概述 1 认识窗口看门狗 (WWDG) 1.1 窗口看门狗定义 1.2 WWDG 主要特性 2 WWDG 功能说明 2.1 WWDG框图 2.2 WWDG 内部信号 2.3 控制递减计数器 2.4 看门狗中断高级特性 2.5 如何设置看门狗超时 3 WWDG 寄存器 3.1 控制寄存器 (WWDG_CR) 3.2 配置寄存器 (W…

如何调用通义千问大模型API

目录 登录阿里云 大模型服务平台百炼 登录控制台 QWen Long QWen 通义千问开源系列 大语言模型 OpenAI接口兼容 登录阿里云 阿里云-计算&#xff0c;为了无法计算的价值 大模型服务平台百炼 降价信息&#xff1a; 登录控制台 右上角取得API key 创建Key QWen Long qw…

C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程

前言&#xff1a;有时候远程服务器的进程你想偷偷去围观一下有哪些&#xff0c;或者对一些比较调皮的进程进行封杀&#xff0c;或者对一些自己研发的服务进行远程手动启动或者重启等&#xff0c;又不想打开远程桌面&#xff0c;只想悄咪咪地执行&#xff0c;那也许下面的文章会…

关于解决Qt在安装的时候没有勾选sources组件的方法

关于解决Qt在安装的时候没有勾选sources组件的方法 一、引言 在安装数据库连接到qt的时候发现没有sources文件夹&#xff0c;原来是安装的时候没有勾选sources组件&#xff0c;发现问题后找到了维护qt组件的安装方式&#xff0c;特此记下来 二、分析原因 首先在安装的时候就…