【技能实训】DMS数据挖掘项目-Day11

文章目录

  • 任务12
    • 【任务12.1】创建用户信息表
    • 【任务12.2】在com.qst.dms.entity下创建用户实体类User,以便封装用户数据
    • 【任务12.3】在com.qst.dms.service下创建用户业务类UserService
    • 【任务12.4】在项目根目录下创建图片文件夹images,存储dms.png
    • 【任务12.5】在com.qst.dms.ui下创建用户注册窗口RegistFrame,并将用户注册信息保存到数据库
  • 任务13
    • 【任务13.1】在com.qst.dms.ui下,创建用户登录窗口LoginFrame,登录成功则进入系统主界面
    • 【任务13.2】使用对话框优化LoginFrame登录窗口中的错误提示
    • 【任务13.3】使用对话框优化RegistFrame注册窗口中的错误提示

任务12

【任务12.1】创建用户信息表

create table user
(
username VARCHAR(50) not null,
password VARCHAR(50),
gender INTEGER,
hobby VARCHAR(500),
address VARCHAR(50),
degree VARCHAR(50)
);
0

【任务12.2】在com.qst.dms.entity下创建用户实体类User,以便封装用户数据

成员变量参考12.1

public User(String username, String password, int sex, String hobby, String address, String degree)

程序设计

package com.qst.dms.entity;public class User {public String username;public String password;public Integer gender;public String hobby;public String address;public String degree;public User() {}public User(String username, String password, Integer gender, String hobby, String address, String degree) {this.username = username;this.password = password;this.gender = gender;this.hobby = hobby;this.address = address;this.degree = degree;}/*** 获取* @return username*/public String getUsername() {return username;}/*** 设置* @param username*/public void setUsername(String username) {this.username = username;}/*** 获取* @return password*/public String getPassword() {return password;}/*** 设置* @param password*/public void setPassword(String password) {this.password = password;}/*** 获取* @return gender*/public Integer getGender() {return gender;}/*** 设置* @param gender*/public void setGender(Integer gender) {this.gender = gender;}/*** 获取* @return hobby*/public String getHobby() {return hobby;}/*** 设置* @param hobby*/public void setHobby(String hobby) {this.hobby = hobby;}/*** 获取* @return address*/public String getAddress() {return address;}/*** 设置* @param address*/public void setAddress(String address) {this.address = address;}/*** 获取* @return degree*/public String getDegree() {return degree;}/*** 设置* @param degree*/public void setDegree(String degree) {this.degree = degree;}public String toString() {return "User{username = " + username + ", password = " + password + ", gender = " + gender + ", hobby = " + hobby + ", address = " + address + ", degree = " + degree + "}";}
}

【任务12.3】在com.qst.dms.service下创建用户业务类UserService

// 根据用户名查询用户,各用户的用户名不能相同
public User findUserByName(String userName) // 保存用户信息
public boolean saveUser(User user) 

程序设计

package com.qst.dms.service;import com.qst.dms.entity.User;
import com.qst.dms.util.DBUtil;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserService {DBUtil db = new DBUtil();Connection conn = null;// 根据用户名查询用户,各用户的用户名不能相同public User findUserByName(String userName) {// 返回符合条件的用户对象User user = new User();try {try {conn = db.getConnection();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}String querySqluser = "SELECT * FROM user WHERE username = ?";Object[] userParams = {userName};ResultSet userResult = db.executeQuery(querySqluser, userParams);db.commitAll();if (userResult.next()) {// 设置登出记录的属性值user.setUsername(userResult.getString("username"));user.setPassword(userResult.getString("password"));user.setAddress(userResult.getString("address"));user.setGender(userResult.getInt("gender"));user.setHobby(userResult.getString("hobby"));user.setDegree(userResult.getString("degree"));}userResult.close();} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}return user;}// 保存用户信息public boolean saveUser(User user) {// 返回保存结果,成功返回true,失败返回falsetry {try {conn = db.getConnection();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}String querySqluser = "INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)";Object[] queryParams = {user.getUsername(), user.getPassword(), user.getGender(), user.getHobby(), user.getAddress(), user.getDegree()};db.executeUpdate(querySqluser, queryParams);db.commitAll();return true;} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接,释放资源if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}return false;}
}

【任务12.4】在项目根目录下创建图片文件夹images,存储dms.png

【任务12.5】在com.qst.dms.ui下创建用户注册窗口RegistFrame,并将用户注册信息保存到数据库

Frame

Frame

  1. RegistFrame类,面板,7个标签,1个文本域,2个密码域,2个单选框,4个多选框,1个多行文本域,1个下拉复选框,2个按钮、user userService
  2. Logo 窗口标题 缩小、放大、关闭 标签 位置 大小
  3. Panel 面板,网格布局,布局 8行一列,嵌套面板,8个子面板,流式布局
  4. 7个标签,1个文本域,2个密码域,2个单选框,4个多选框,1个多行文本域,1个下拉复选框,2个按钮
  5. 8个子面板分别加入相关元素
  6. 单选框,男女单选框,单选组
  7. 确定动作及相关处理,动作监听
// 注册监听器,监听确定按钮btnOk.addActionListener(new RegisterListener());
  1. 重置动作及相关处理,动作监听
// 注册监听器,监听重置按钮
btnCancle.addActionListener(new ResetListener());
  1. RegistFrame中的成员属性如下:
// 主面板
private JPanel p;// 标签
private JLabel lblName, lblPwd, lblRePwd, lblSex, lblHobby, lblAdress,
lblDegree;
// 用户名,文本框
private JTextField txtName;
// 密码和确认密码,密码框
private JPasswordField txtPwd, txtRePwd;
// 性别,单选按钮
private JRadioButton rbMale, rbFemale;
// 爱好,多选框
private JCheckBox ckbRead, ckbNet, ckbSwim, ckbTour;
// 地址,文本域
private JTextArea txtAdress;
// 学历,组合框
private JComboBox<String> cmbDegree;
// 确认和取消,按钮
private JButton btnOk, btnCancle;
// 注册的用户
private static User user;// 用户业务类
private UserService userService;// 构造方法public RegistFrame() {super("用户注册");// 实例化用户业务类对象userService = new UserService();// 设置窗体的iconImageIcon icon = new ImageIcon("images\\dms.png");this.setIconImage(icon.getImage());// 设置面板布局,网格布局p = new JPanel(new GridLayout(8, 1));// 实例化组件lblName = new JLabel("用  户  名:");lblPwd = new JLabel("密        码:");lblRePwd = new JLabel("确认密码:");lblSex = new JLabel("性       别:");lblHobby = new JLabel("爱        好:");lblAdress = new JLabel("地        址:");lblDegree = new JLabel("学        历:");txtName = new JTextField(16);txtPwd = new JPasswordField(16);txtRePwd = new JPasswordField(16);rbMale = new JRadioButton("男");rbFemale = new JRadioButton("女");// 性别的单选逻辑ButtonGroup bg = new ButtonGroup();bg.add(rbMale);bg.add(rbFemale);ckbRead = new JCheckBox("阅读");ckbNet = new JCheckBox("上网");ckbSwim = new JCheckBox("游泳");ckbTour = new JCheckBox("旅游");txtAdress = new JTextArea(3, 20);// 组合框显示的学历数组String str[] = { "小学", "初中", "高中", "本科", "硕士", "博士" };cmbDegree = new JComboBox<String>(str);// 设置组合框可编辑cmbDegree.setEditable(true);btnOk = new JButton("确定");// 注册监听器,监听确定按钮btnOk.addActionListener(new RegisterListener());btnCancle = new JButton("重置");// 注册监听器,监听重置按钮btnCancle.addActionListener(new ResetListener());// 将组件分组放入面板,然后将小面板放入主面板JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));p1.add(lblName);p1.add(txtName);p.add(p1);JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));p2.add(lblPwd);p2.add(txtPwd);p.add(p2);JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));p3.add(lblRePwd);p3.add(txtRePwd);p.add(p3);JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));p4.add(lblSex);p4.add(rbMale);p4.add(rbFemale);p.add(p4);JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));p5.add(lblHobby);p5.add(ckbRead);p5.add(ckbNet);p5.add(ckbSwim);p5.add(ckbTour);p.add(p5);JPanel p6 = new JPanel(new FlowLayout(FlowLayout.LEFT));p6.add(lblAdress);p6.add(txtAdress);p.add(p6);JPanel p7 = new JPanel(new FlowLayout(FlowLayout.LEFT));p7.add(lblDegree);p7.add(cmbDegree);p.add(p7);JPanel p8 = new JPanel(new FlowLayout(FlowLayout.CENTER));p8.add(btnOk);p8.add(btnCancle);p.add(p8);// 主面板放入窗体中this.add(p);// 设置窗体大小和位置居中this.setSize(310, 350);this.setLocationRelativeTo(null);// 设置窗体不可改变大小this.setResizable(false);// 设置窗体初始可见this.setVisible(true);}// 监听类,负责处理确认按钮的业务逻辑private class RegisterListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 获取用户输入的数据}}// 监听类,负责处理重置按钮public class ResetListener implements ActionListener {// 重写actionPerFormed()方法,重置组件内容事件处理方法public void actionPerformed(ActionEvent e) {// 清空姓名、密码、确认密码内容txtName.setText("");txtPwd.setText("");txtRePwd.setText("");// 重置单选按钮为未选择rbMale.setSelected(false);rbFemale.setSelected(false);// 重置所有的复选按钮为未选择ckbRead.setSelected(false);ckbNet.setSelected(false);ckbSwim.setSelected(false);ckbTour.setSelected(false);// 清空地址栏txtAdress.setText("");// 重置组合框为未选择状态cmbDegree.setSelectedIndex(0);}}

程序设计

package com.qst.dms.ui;import com.qst.dms.entity.User;
import com.qst.dms.service.UserService;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class RegistFrame extends JFrame{// 主面板private JPanel p;// 标签private JLabel lblName, lblPwd, lblRePwd, lblSex, lblHobby, lblAdress,lblDegree;// 用户名,文本框private static JTextField txtName;// 密码和确认密码,密码框private static JPasswordField txtPwd;private static JPasswordField txtRePwd;// 性别,单选按钮private static JRadioButton rbMale;private static JRadioButton rbFemale;// 爱好,多选框private static JCheckBox ckbRead;private static JCheckBox ckbNet;private static JCheckBox ckbSwim;private static JCheckBox ckbTour;// 地址,文本域private static JTextArea txtAdress;// 学历,组合框private static JComboBox<String> cmbDegree;// 确认和取消,按钮private JButton btnOk, btnCancle;// 注册的用户private static User user;// 用户业务类private UserService userService;private Image iconImage;// 构造方法public RegistFrame() {super();// 实例化用户业务类对象userService = new UserService();// 设置窗体的iconImageIcon icon = new ImageIcon("images\\dms.png");this.setIconImage(icon.getImage());// 设置面板布局,网格布局p = new JPanel(new GridLayout(8, 1));// 实例化组件lblName = new JLabel("用  户  名:");lblPwd = new JLabel("密        码:");lblRePwd = new JLabel("确认密码:");lblSex = new JLabel("性       别:");lblHobby = new JLabel("爱        好:");lblAdress = new JLabel("地        址:");lblDegree = new JLabel("学        历:");txtName = new JTextField(16);txtPwd = new JPasswordField(16);txtRePwd = new JPasswordField(16);rbMale = new JRadioButton("男");rbFemale = new JRadioButton("女");// 性别的单选逻辑ButtonGroup bg = new ButtonGroup();bg.add(rbMale);bg.add(rbFemale);ckbRead = new JCheckBox("阅读");ckbNet = new JCheckBox("上网");ckbSwim = new JCheckBox("游泳");ckbTour = new JCheckBox("旅游");txtAdress = new JTextArea(3, 20);// 组合框显示的学历数组String str[] = { "小学", "初中", "高中", "本科", "硕士", "博士" };cmbDegree = new JComboBox<String>(str);// 设置组合框可编辑cmbDegree.setEditable(true);btnOk = new JButton("确定");// 注册监听器,监听确定按钮btnOk.addActionListener((ActionListener) new RegisterListener());btnCancle = new JButton("重置");// 注册监听器,监听重置按钮btnCancle.addActionListener(new ResetListener());// 将组件分组放入面板,然后将小面板放入主面板JPanel p1 = new JPanel(new FlowLayout(FlowLayout.LEFT));p1.add(lblName);p1.add(txtName);p.add(p1);JPanel p2 = new JPanel(new FlowLayout(FlowLayout.LEFT));p2.add(lblPwd);p2.add(txtPwd);p.add(p2);JPanel p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));p3.add(lblRePwd);p3.add(txtRePwd);p.add(p3);JPanel p4 = new JPanel(new FlowLayout(FlowLayout.LEFT));p4.add(lblSex);p4.add(rbMale);p4.add(rbFemale);p.add(p4);JPanel p5 = new JPanel(new FlowLayout(FlowLayout.LEFT));p5.add(lblHobby);p5.add(ckbRead);p5.add(ckbNet);p5.add(ckbSwim);p5.add(ckbTour);p.add(p5);JPanel p6 = new JPanel(new FlowLayout(FlowLayout.LEFT));p6.add(lblAdress);p6.add(txtAdress);p.add(p6);JPanel p7 = new JPanel(new FlowLayout(FlowLayout.LEFT));p7.add(lblDegree);p7.add(cmbDegree);p.add(p7);JPanel p8 = new JPanel(new FlowLayout(FlowLayout.CENTER));p8.add(btnOk);p8.add(btnCancle);p.add(p8);// 主面板放入窗体中this.add(p);// 设置窗体大小和位置居中this.setSize(310, 400);this.setLocationRelativeTo(null);// 设置窗体不可改变大小this.setResizable(false);// 设置窗体初始可见this.setVisible(true);}public void setIconImage(Image iconImage) {this.iconImage = iconImage;}// 监听类,负责处理确认按钮的业务逻辑private class RegisterListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 获取用户输入的数据String userName = txtName.getText().trim();String password = new String(txtPwd.getPassword());String rePassword = new String(txtRePwd.getPassword());int sex = Integer.parseInt(rbFemale.isSelected()?"0":"1");String hobby = (ckbRead.isSelected()?"阅读":"")+ (ckbNet.isSelected()?"上网":"")+ (ckbNet.isSelected()?"游泳":"")+ (ckbNet.isSelected()?"旅游":"");String address = txtAdress.getText().trim();String degree = cmbDegree.getSelectedItem().toString().trim();//判断两次输入密码是否一致if (password.equals(rePassword)){//将数据封装到对象中user = new User(userName, password, sex, hobby, address, degree);//保存数据if (userService.saveUser(user)){//输出提示信息JOptionPane.showMessageDialog(null,"注册成功!","成功提示",JOptionPane.PLAIN_MESSAGE);}else{//输出提示信息JOptionPane.showMessageDialog(null,"注册失败!","错误提示",JOptionPane.ERROR_MESSAGE);}}else{//输出提示信息JOptionPane.showMessageDialog(null,"两次输入的密码不一致!","错误提示",JOptionPane.ERROR_MESSAGE);}}}// 监听类,负责处理重置按钮public static class ResetListener implements ActionListener {// 重写actionPerFormed()方法,重置组件内容事件处理方法public void actionPerformed(ActionEvent e) {// 清空姓名、密码、确认密码内容txtName.setText("");txtPwd.setText("");txtRePwd.setText("");// 重置单选按钮为未选择rbMale.setSelected(false);rbFemale.setSelected(false);// 重置所有的复选按钮为未选择ckbRead.setSelected(false);ckbNet.setSelected(false);ckbSwim.setSelected(false);ckbTour.setSelected(false);// 清空地址栏txtAdress.setText("");// 重置组合框为未选择状态cmbDegree.setSelectedIndex(0);}}
}

任务13

【任务13.1】在com.qst.dms.ui下,创建用户登录窗口LoginFrame,登录成功则进入系统主界面

Login

// 主面板
private JPanel p;
// 标签
private JLabel lblName, lblPwd;
// 用户名,文本框
private JTextField txtName;
// 密码,密码框
private JPasswordField txtPwd;
// 确认、取消和注册,按钮
private JButton btnOk, btnCancle, btnRegist;
// 登录用户
private static User user;// 用户业务类
private UserService userService;// 构造方法public LoginFrame() {super("登录");// 实例化用户业务类对象userService = new UserService();// 设置窗体的iconImageIcon icon = new ImageIcon("images\\dms.png");this.setIconImage(icon.getImage());// 实例化组件p = new JPanel();// 使用null布局p.setLayout(null);lblName = new JLabel("用户名:");lblPwd = new JLabel("密    码:");txtName = new JTextField(20);txtPwd = new JPasswordField(20);txtPwd.setEchoChar('*');btnOk = new JButton("登录");btnOk.addActionListener(new LoginListener());btnCancle = new JButton("重置");btnCancle.addActionListener(new ResetListener());btnRegist = new JButton("注册");btnRegist.addActionListener(new RegistListener());lblName.setBounds(30, 30, 60, 25);lblPwd.setBounds(30, 60, 60, 25);txtName.setBounds(95, 30, 120, 25);txtPwd.setBounds(95, 60, 120, 25);btnOk.setBounds(30, 90, 60, 25);btnCancle.setBounds(95, 90, 60, 25);btnRegist.setBounds(160, 90, 60, 25);p.add(lblName);p.add(txtName);p.add(lblPwd);p.add(txtPwd);p.add(btnOk);p.add(btnCancle);p.add(btnRegist);// 主面板放入窗体中this.add(p);// 设置窗体大小和位置this.setSize(250, 170);// 设置窗口在屏幕中央this.setLocationRelativeTo(null);// 设置窗体不能改变大小this.setResizable(false);// 设置窗体的默认关闭按钮this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗体初始可见this.setVisible(true);}// 监听类,负责处理登录按钮public class LoginListener implements ActionListener {// 重写actionPerFormed()方法,事件处理逻辑public void actionPerformed(ActionEvent e) {// 根据用户名查询用户}}// 监听类,负责处理重置按钮public class ResetListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 清空文本框txtName.setText("");txtPwd.setText("");}}// 监听类,负责处理注册按钮public class RegistListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 创建注册窗口new RegistFrame();}}

程序设计

package com.qst.dms.ui;import com.qst.dms.entity.User;
import com.qst.dms.service.UserService;
import sun.rmi.log.ReliableLog;
import sun.rmi.runtime.Log;import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class LoginFrame extends JFrame {// 主面板private JPanel p;// 标签private JLabel lblName, lblPwd;// 用户名,文本框private JTextField txtName;// 密码,密码框private JPasswordField txtPwd;// 确认、取消和注册,按钮private JButton btnOk, btnCancle, btnRegist;// 登录用户private static User user;// 用户业务类private UserService userService;// 构造方法public LoginFrame() {super("登录");// 实例化用户业务类对象userService = new UserService();// 设置窗体的iconImageIcon icon = new ImageIcon("images\\dms.png");this.setIconImage(icon.getImage());// 实例化组件p = new JPanel();// 使用null布局p.setLayout(null);lblName = new JLabel("用户名:");lblPwd = new JLabel("密    码:");txtName = new JTextField(20);txtPwd = new JPasswordField(20);txtPwd.setEchoChar('*');btnOk = new JButton("登录");btnOk.addActionListener((ActionListener) new LoginListener());btnCancle = new JButton("重置");btnCancle.addActionListener(new RegistFrame.ResetListener());btnRegist = new JButton("注册");btnRegist.addActionListener(new RegistListener());lblName.setBounds(30, 30, 60, 25);lblPwd.setBounds(30, 60, 60, 25);txtName.setBounds(95, 30, 120, 25);txtPwd.setBounds(95, 60, 120, 25);btnOk.setBounds(30, 90, 60, 25);btnCancle.setBounds(95, 90, 60, 25);btnRegist.setBounds(160, 90, 60, 25);p.add(lblName);p.add(txtName);p.add(lblPwd);p.add(txtPwd);p.add(btnOk);p.add(btnCancle);p.add(btnRegist);// 主面板放入窗体中this.add(p);// 设置窗体大小和位置this.setSize(250, 170);// 设置窗口在屏幕中央this.setLocationRelativeTo(null);// 设置窗体不能改变大小this.setResizable(false);// 设置窗体的默认关闭按钮this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗体初始可见this.setVisible(true);}// 监听类,负责处理登录按钮public class LoginListener implements ActionListener {// 重写actionPerFormed()方法,事件处理逻辑public void actionPerformed(ActionEvent e) {// 根据用户名查询用户user = userService.findUserByName((txtName.getText().trim()));if(user != null) {//判断输入的密码是否正确if (user.getPassword().equals(new String(txtPwd.getPassword()))) {//输出提示信息JOptionPane.showMessageDialog(null,"登录成功!","成功提示",JOptionPane.PLAIN_MESSAGE);//登录成功LoginFrame.this.setVisible(false);//显示主窗口//new MainFrame();} else {//输出提示信息JOptionPane.showMessageDialog(null, "密码错误!请重新输入!", "错误提示", JOptionPane.ERROR_MESSAGE);//清空密码框txtPwd.setText("");}}else{//输出提示信息JOptionPane.showMessageDialog(null,"该用户不存在,请先注册!","错误提示",JOptionPane.ERROR_MESSAGE);}}}// 监听类,负责处理重置按钮public class ResetListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 清空文本框txtName.setText("");txtPwd.setText("");}}// 监听类,负责处理注册按钮public class RegistListener implements ActionListener {// 重写actionPerFormed()方法,事件处理方法public void actionPerformed(ActionEvent e) {// 创建注册窗口new RegistFrame();}}
}

【任务13.2】使用对话框优化LoginFrame登录窗口中的错误提示

JOptionPane.showMessageDialog(null,"密码错误!请重新输入!","错误提示",	JOptionPane.ERROR_MESSAGE);JOptionPane.showMessageDialog(null,"该用户不存在,请先注册!","错误提示",JOptionPane.ERROR_MESSAGE);

【任务13.3】使用对话框优化RegistFrame注册窗口中的错误提示

JOptionPane.showMessageDialog(null,"注册成功!","成功提示",JOptionPane.PLAIN_MESSAGE);JOptionPane.showMessageDialog(null,"注册失败!","错误提示",JOptionPane.ERROR_MESSAGE);JOptionPane.showMessageDialog(null,"两次输入的密码不一致!","错误提示",JOptionPane.ERROR_MESSAGE);

测试

注册界面
1
2
3

登录界面

4

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

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

相关文章

计算机毕业论文选题推荐|软件工程|信息管理|数据分析|系列一

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程|信息管理 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于requests多线程…

微信小程序——字符串截取

indexOf() &#xff1a; 判断一个字符是否在字符串 中 存在&#xff0c;如果存在返回该元素或字符第一次出现 的 位置 的 索引&#xff0c;不存在返回-1。 lastIndexOf() &#xff1a; 返回一个指定的字符串值最后出现的位置&#xff0c;在一个字符串中的指定位置从后向前搜索。…

静态数码管显示

学习芯片&#xff1a; EP4CE6F17C8 本次学习使用的为共阴极数码管&#xff0c;即用低电平点亮数码管&#xff0c;同样可知&#xff0c;共阳极数码管的阳极连在一起&#xff0c;即用高电平点亮数码管。 八段数码管示意图&#xff1a; a,b,c,d,e,f,g,dg表示八段数码管时&#…

7、sentinel使用和源码分析

一、分布式系统遇到的问题 1、服务雪崩效应 在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。如果一个服务出现了问题&#xff0c;调用这个服务就会出现线程阻塞的情况&#xff0c;此时若有大量的请求涌入&#xff0c;就会出现多条线程阻塞等待&#x…

力扣 135. 分发糖果

题目来源&#xff1a;https://leetcode.cn/problems/candy/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 先从左往右比较&#xff0c;右边孩子评分比左边高就多发1颗糖&#xff0c;否则就只发1颗&#xff1b;再从右往左比较&#xff0c;左边孩子评分…

机械臂的雅克比矩阵推导

1. 线速度和角速度的递推通式推导 p i p i − 1 R i − 1 r i − 1 , i i − 1 \mathbf{p}_{i}\mathbf{p}_{i-1}\mathbf{R}_{i-1} \mathbf{r}_{i-1, i}^{i-1} pi​pi−1​Ri−1​ri−1,ii−1​ p i − 1 \mathbf{p}_{i-1} pi−1​是 { i − 1 } \{i-1\} {i−1}坐标系的原点的…

记一次ruoyi中使用Quartz实现定时任务

一、首先了解一下Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个&#xff0c;百个&#xff0c;甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标…

UE4/5AI制作基础AI跳跃(适合新手)

目录 制作 添加逻辑 添加导航链接代理 结果 在上一章中&#xff0c;我们讲解了简单的AI跟随玩家&#xff0c;制作了一个基础的ai。 UE4/5AI制作基础AI&#xff08;适合新手入门&#xff0c;运用黑板&#xff0c;行为树&#xff0c;ai控制器&#xff0c;角色类&#xff0c;任…

4、深入理解ribbon

一、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所以这种方式又被称为…

linux之Ubuntu系列(-)常见指令 重定向

Ubuntu 中文 版本 注意点 通过修改语言改成英文 在终端录入&#xff1a;export LANGen_US 在终端录入&#xff1a;xdg-user-dirs-gtk-update 单用户和多用户 命令格式 command [-选项] [参数] –查看命令的帮助 命令 --help man 命令 |操作键| 功能| |空格键|-显示手册的下…

OSS对象存储后端实现+Vue实现图片上传【基于若依管理系统开发】

文章目录 基本介绍术语介绍图片上传方式介绍普通上传用户直传应用服务器签名后直传 OSS对象存储后端实现maven配置文件配置类ServiceController 图片上传前端图片上传组件api页面使用组件组件效果 基本介绍 术语介绍 Bucket&#xff08;存储空间&#xff09;&#xff1a;用于…

【论文】基于GANs的图像文字擦除 ——2010.EraseNet: End-to-End Text Removal in the Wild(已开源)

pytorch官方代码&#xff1a;https://github.com/lcy0604/EraseNet 论文&#xff1a;2010.EraseNet: End-to-End Text Removal in the Wild 网盘提取码&#xff1a;0719 一、图片文字去除效果 图10 SCUT-EnsText 真实数据集的去除 第一列原图带文字、第二列为去除后的标签&a…

爆肝整理,Postman接口测试-全局变量/接口关联/加密/解密(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 全局变量和环境变…

AJAX:宏任务与微任务

异步任务划分为了 宏任务&#xff1a;由浏览器环境执行的异步代码 微任务&#xff1a;由 JS 引擎环境执行的异步代码 宏任务和微任务具体划分&#xff1a; 左边表格是宏任务&#xff0c;右边是微任务 事件循环模型 /*** 目标&#xff1a;阅读并回答打印的执行顺序 */ console…

Spark编程-键值对RDD(K,V)创建及常用操作

简述 SparkRDD中可以包含任何类型的对象&#xff0c;在实际应用中&#xff0c;“键值对”是一种比较常见的RDD元素类型&#xff0c;分组和聚合操作中经常会用到&#xff0c;尤其是groupByKey和reduceByKey。 Spark操作中经常会用到“键值对RDD”&#xff08;Pair RDD&a…

CSS样式

1.高度和宽度 .c1{height:300px;width:500px;}注意事项&#xff1a; 宽度支持百分比&#xff0c;高度不支持。行内标签&#xff1a;默认无效会计标签&#xff1a;默认有效&#xff08;霸道&#xff0c;右侧区域空白&#xff0c;也不给你用&#xff09; 2.块级和行内标签 块…

【Django学习】(十四)自定义action_router

之前我们的视图类可以继承GenericViewSet或者ModelViewSet&#xff0c;我们不用再自定义通用的action方法&#xff0c;但是有时候我们需要自定义action&#xff0c;我们该如何设计呢&#xff1f; 自定义action 1、手写视图逻辑 1.1、先在视图集里自定义action方法&#xff0…

GO语言泛型

set一般没什么不方便的 但是使用GET 需要使用类型断言,将取出来的数据转为预期数据, 空接口本身是一个装箱,会产生内存逃逸和多一部分空间. 于是1.17GO使用泛型. 泛型实现: 分析可执行文件后:发现 也就是泛型会为每个数据类型都生产一套代码,导致可执行文件大小增加,并且使用…

uni-app中a标签下载文件跳转后左上角默认返回键无法继续返回

1.首先使用的是onBackPress //跟onShow同级别 onBackPress(option){ uni.switchTab({ url:/pages/....... return true }) }发现其在uni默认头部中使用是可以的 但是h5使用了"navigationStyle":"custom"后手机默认的返回并不可以&#xff0c; 2.经过查询…

LCD-STM32液晶显示中英文-(5.字符编码)

目录 字符编码 字符编码说明参考网站 字符编码 ASCII编码 ASCII编码介绍 ASCII编码表 中文编码 1. GB2312标准 区位码 2. GBK编码 3. GB18030 各个标准的对比说明 4. Big5编码 字符编码 字符编码说明参考网站 字符编码及转换测试&#xff1a;导航菜单 - 千千秀字 …