第四天实训,学生信息管理系统

实训目的:综合运用J2SE有关知识开发【学生信息管理系统】。主要涉及程序控制结构、面向对象编程、图形用户界面、Java数据库应用、MySQL数据库这几个方面的内容。通过本项目的开发,了解系统开发的一般流程,初步了解MVC模式与单元测试,巩固所学的Java理论知识,提高Java数据库应用编程的基本技能。
项目说明:本实训案例教学,利用Java SE基本知识是开发【学生信息管理系统】。本系统包括登录注册、系统设置(设置学校信息、设置状态栏信息、修改用户密码)、数据操作(增加学生记录、编辑学生记录、删除学生记录、浏览学生记录)、查询学生(按学号查询、按姓名查询、按班级查询、按系部查询)、人数统计(按性别统计人数、按班级统计人数、按系部统计人数)等功能。
应用程序类
在这里插入图片描述
package net.zzm.student.app;
import net.zzm.student.gui.LoginFrame;
import net.zzm.student.gui.MainFrame;
import net.zzm.student.gui.RegisterFrame;

/**

  • 功能:应用程序类 存放全局数据
  • 作者:张正敏
  • 日期:2019年6月20号
    */

public class Application {
/**
* 登录用户标识符
/
public static int id;
/
*
* 登录用户名
/
public static String username;
/
*
* 登录用户密码
/
public static String password;
/
*
* 登录窗口
/
public static LoginFrame loginFrame;
/
*
* 主窗口
/
public static MainFrame mainFrame;
/
*
* 注册窗口
*/
public static RegisterFrame registerFrame;

}

此时,三个窗口界面类还未创建,因此程序会报错。

窗口界面类(JFrame)
创建net.zzm.student.gui包,在里面先创建三个界面类:LoginFrame、MainFrame与RegisterFrame。
在这里插入图片描述
1)主界面窗口MainFrame (V1.0)[因为是写好了的,所以中间有些细节问题看不到】

2)用户注册窗口RegisterFrame(V1.0)

3)用户登录窗口LoginFrame
声明变量:
/**
* 用户名
/
private String username;
/
*
* 密码
/
private String password;
/
*
* 用户名标签
/
private JLabel lblUsername;
/
*
* 密码标签
/
private JLabel lblPassword;
/
*
* 用户名文本框
/
private JTextField txtUsername;
/
*
* 密码文本框
/
private JPasswordField txtPassword;
/
*
* 确定按钮
/
private JButton btnOK;
/
*
* 取消按钮
/
private JButton btnCancel;
/
*
* 注册按钮
/
private JButton btnRegister;
/
*
* 主面板
/
private JPanel panel;
/
*
* 第一行面板
/
private JPanel panel1;
/
*
* 第二行面板
/
private JPanel panel2;
/
*
* 第三行面板
*/
private JPanel panel3;

在这里插入图片描述

实例化组件:
在这里插入图片描述

将控件添加到小面板,然后将小面板添加到主面板:
在这里插入图片描述

设置按钮热键字母,以及密码框的回显字符:
在这里插入图片描述

此时,运行程序,看看效果:

在这里插入图片描述

行间距太大,界面显得不紧凑,怎么设置窗口属性,才能让界面紧凑好看呢?很简单,调用窗口的pack()方法即可。
在这里插入图片描述

运行登录窗口程序,效果如下:
在这里插入图片描述

单击【确定】按钮,或当焦点落在【确定】按钮时按回车键,都会调用登录方法login()。
在这里插入图片描述
整体代码如下:

package net.zzm.student.gui;
/**

  • 功能:用户登录窗口
  • 作者:张正敏
  • 日期:2019年6月20日
    */
    import net.zzm.student.app.Application;
    import net.zzm.student.bean.User;
    import net.zzm.student.service.StatusService;
    import net.zzm.student.service.UserService;
    import net.zzm.student.service.impl.StatusServiceImpl;
    import net.zzm.student.service.impl.UserServiceImpl;

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class LoginFrame extends JFrame {
/**
* 用户名
/
private String username;
/
*
* 密码
/
private String password;
/
*
* 用户名标签
/
private JLabel lblUsername;
/
*
* 密码标签
/
private JLabel lblPassword;
/
*
* 用户名文本框
/
private JTextField txtUsername;
/
*
* 密码文本框
/
private JPasswordField txtPassword;
/
*
* 确定按钮
/
private JButton btnOK;
/
*
* 取消按钮
/
private JButton btnCancel;
/
*
* 注册按钮
/
private JButton btnRegister;
/
*
* 主面板
/
private JPanel panel;
/
*
* 第一行面板
/
private JPanel panel1;
/
*
* 第二行面板
/
private JPanel panel2;
/
*
* 第三行面板
*/
private JPanel panel3;

/**
 * 构造方法
 *
 * @param title
 */
public LoginFrame(String title) {
    super(title);
    // 调用初始化界面方法
    initGUI();
}

/**
 * 初始化界面
 */
private void initGUI() {
    // 实例化控件
    panel = (JPanel) getContentPane();
    panel1 = new JPanel();
    panel2 = new JPanel();
    panel3 = new JPanel();



    lblUsername = new JLabel("用户名:");
    lblPassword = new JLabel("密    码:");
    txtUsername = new JTextField(15);
    txtPassword = new JPasswordField(15);
    btnOK = new JButton("确定[O]");
    btnCancel = new JButton("取消[C]");
    btnRegister = new JButton("注册[R]");


    // 将控件分别添加到三行面板
    panel1.add(lblUsername);
    panel1.add(txtUsername);
    panel2.add(lblPassword);
    panel2.add(txtPassword);
    panel3.add(btnOK);
    panel3.add(btnCancel);
    panel3.add(btnRegister);



    // 设置主面板为网格布局,三行一列
    panel.setLayout(new GridLayout(3, 1));
    // 将三行面板添加到主面板
    panel.add(panel1);
    panel.add(panel2);
    panel.add(panel3);


    // 设置按钮热键字母
    btnOK.setMnemonic(KeyEvent.VK_O);
    btnCancel.setMnemonic(KeyEvent.VK_C);
    btnRegister.setMnemonic(KeyEvent.VK_R);
    //设置密码框回显字符
    txtPassword.setEchoChar('*');//默认是点

    // 设置窗口大小
    setSize(800,600);
    // 设置窗口屏幕居中
    setLocationRelativeTo(null);
    // 设置窗口不可调整大小
    setResizable(true);
    // 设置窗口恰好容纳组件
    pack();
    // 设置窗口可见
    setVisible(true);
    // 设置窗口默认关闭操作
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



    /*
     * 注册监听器,实现监听器接口,编写事件处理代码
     */
    //【确定】按钮单击事件
    btnOK.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            login();
        }
});

    // 确定按钮按键事件
    btnOK.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() ==KeyEvent.VK_ENTER) {
                login();//外面那种方法,最下面的那种
            }
        }
    });

    // 取消按钮单击事件
    btnCancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    });

    // 注册按钮单击事件
    btnRegister.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            // 隐藏登录窗口
            Application.loginFrame.setVisible(false);
            // 实例化注册窗口
            Application.registerFrame = new RegisterFrame("注册");
    }
    });

    // 用户名文本框按键事件
    txtUsername.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            //判断是否按下回车键
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                //让密码文本获取焦点
                txtPassword.requestFocus();
            }
        }
    });

    // 密码文本框按键事件
    txtPassword.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                login();
            }
        }
    });
}

/**
 * 登录方法(来自后台的数据库,要获取用户名,密码,传到后台看是否正确)
 */
private void login() {//外面的那种方法
    // 获取用户名
    username = txtUsername.getText().trim();//trim把空格去掉
    // 获取密码
    password = new String(txtPassword.getPassword());
    // 创建用户服务对象
    UserService userService = new UserServiceImpl();
    // 调用用户登录,返回登录用户对象
    User user = userService.login(username, password);
    // 判断登录是否为空,来判断是否登录成功
    if (user != null) {
        // 隐藏登录窗口
        Application.loginFrame.setVisible(false);
        // 定义状态服务对象
        StatusService statusService = new StatusServiceImpl();
        // 保存用户标识
        Application.id = user.getId();
        // 保存用户名
        Application.username = user.getUsername();
        //保存用户密码
        Application.password=user.getPassword();
        // 提示用户登录成功
        JOptionPane.showMessageDialog(null, "欢迎使用学生信息管理系统" +
                        statusService.findStatusById(1).getVersion() + "!", "用户登录",
                        JOptionPane.INFORMATION_MESSAGE);//最后一个是正确图标
        // 显示系统主窗口
        Application.mainFrame = new MainFrame("");
        // 释放登录窗口
        Application.loginFrame.dispose();
    } else {
        // 隐藏登录窗口
        Application.loginFrame.setVisible(false);
        // 提示用户登录失败
        JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新输入!",
                "学生信息管理系统", JOptionPane.ERROR_MESSAGE);//最后一个是错误图标
        // 显示登录窗口
        Application.loginFrame.setVisible(true);
        // 用户名文本框全部选中
        txtUsername.selectAll();
        // 密码文本全部选中
        txtPassword.selectAll();
        // 用户名文本框获取焦点
        txtUsername.requestFocus();
    }
}

/**
 * 主方法
 *
 * @param args
 */
public static void main(String[] args) {
    // 设置应用程序登录窗口
    Application.loginFrame = new LoginFrame("用户登录");
}

}
此时,运行登录程序,效果如下:
在这里插入图片描述
在这里插入图片描述
在这个里面我们应该学会
怎样才能按enter键直接跳到下一个空格?
以下是解决方法

编写【密码】文本框按键事件处理代码(敲回车后执行登录方法):
在这里插入图片描述

编写【密码】文本框按键事件处理代码(敲回车后执行登录方法):
在这里插入图片描述
编写【密码】文本框按键事件处理代码(敲回车后执行登录方法):
在这里插入图片描述编写【取消】按钮单击事件处理代码:
在这里插入图片描述 编写【注册】按钮单击事件处理代码:
在这里插入图片描述
4)用户注册窗口RegisterFrame(V1.1)
package net.zzm.student.gui;

import net.zzm.student.app.Application;
import net.zzm.student.bean.User;
import net.zzm.student.service.UserService;
import net.zzm.student.service.impl.UserServiceImpl;

import javax.swing.;
import java.awt.
;
import java.awt.event.*;
import java.sql.Timestamp;
import java.util.Date;

import static sun.java2d.loops.GeneralRenderer.register;

/**

  • 功能:注册窗口
  • 作者:张正敏
  • 日期:2019年6月20日
    */

public class RegisterFrame extends JFrame {
/**
* 标签
* @param title
*/
private JLabel lblUsername;
private JLabel lblPassword;
private JLabel lblTelephone;

/**
 * 文本框
 * @param title
 */
private JTextField txtUsername;
private JTextField  texTelephone;
private JPasswordField texPassword;

/**
 * 按钮
 * @param title
 */
private JButton btnSubmit;
private JButton btnCancel;
private JButton btnLogin;

/**
 * 面板
 * @param title
 */
private JPanel panel;
private JPanel panel1;
private JPanel panel2;
private JPanel panel3;
private JPanel panel4;

private String username;
private String password;
private String telephone;
private Date  registerTime;
public RegisterFrame(String title){
    super(title);
    initGUI();
}

private void initGUI() {
    //创建组件(面板与控件)
    panel = (JPanel) getContentPane();
    panel1 = new JPanel();
    panel2 = new JPanel();
    panel3 = new JPanel();
    panel4 = new JPanel();

    lblUsername = new JLabel("用户名:");
    lblPassword = new JLabel("密    码:");
    lblTelephone = new JLabel("电   话:");
    txtUsername = new JTextField("", 15);
    texPassword = new JPasswordField("", 15);
    texTelephone = new JTextField("", 15);
    btnSubmit = new JButton("提交[S]");
    btnCancel = new JButton("取消[C]");
    btnLogin = new JButton("登录[L]");


    // 将控件添加到四个小面板
    panel1.add(lblUsername);
    panel1.add(txtUsername);
    panel2.add(lblPassword);
    panel2.add(texPassword);
    panel3.add(lblTelephone);
    panel3.add(texTelephone);
    panel4.add(btnSubmit);
    panel4.add(btnCancel);
    panel4.add(btnLogin);


    //设置大面板布局,将四个小面板添加到大面板
    panel.setLayout(new GridLayout(4, 1));
    panel.add(panel1);
    panel.add(panel2);
    panel.add(panel3);
    panel.add(panel4);


    //设置窗口大小
    setSize(800, 600);
    //设置窗口屏幕居中
    setLocationRelativeTo(null);
    //设置窗口不可调整大小
    setResizable(false);
    //设置窗口刚好容纳组件
    pack();
    //设置窗口可见
    setVisible(true);
    //设置窗口标题
    setTitle("用户注册");
    //注册窗口监听器
    addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e);
            //卸载当前窗口
            dispose();
            //让登陆窗口重新可见
            Application.loginFrame.setVisible(true);
        }
    });


    //【提交】按钮单击事件处理
    btnSubmit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            register();
        }
    });
    //提交】按钮按键事件处理
    btnSubmit.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                register();
            }
        }
    });

    //【取消】按钮单击事件处理
    btnCancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //显示登陆窗口
            Application.loginFrame.setVisible(true);
            //卸载当前窗口
            dispose();
        }
    });
    //【登陆】按钮单击事件处理
    btnLogin.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            //显示登陆窗口
            Application.loginFrame.setVisible(true);
            //卸载当前窗口
            dispose();
        }
    });
    //【用户名】文本框按键事件处理
    txtUsername.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                texPassword.requestFocus();
            }
        }
    });
    //【密码】文本框按键事件处理
    texPassword.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == 10) {
                texTelephone.requestFocus();
            }
        }
    });
    //【电话】文本框事件处理
    texTelephone.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                btnSubmit.requestFocus();
            }
        }
    });
}

/**
 * 注册方法
 * @param
 */
 private void register() {
     //获取用户名
     username = txtUsername.getText().trim();
     //获取密码
     password = new String(texPassword.getPassword());
     //获取电话
     telephone = texTelephone.getText().trim();
     //定义当前时间为注册时间
     registerTime =new Timestamp(System.currentTimeMillis());
     //定义用户服务对象
     UserService userService = new UserServiceImpl();
     //创建用户
     User user = new User();
     user.setUsername(username);
     user.setPassword(password);
     user.setTelephone(telephone);
     user.setRegisterTime(registerTime);
     //添加用户
     int count = userService.addUser(user);
     //判断是否添加成功
     if (count > 0) {
         setVisible(false);
         JOptionPane.showMessageDialog(null, "恭喜!注册成功!", "学生信息系统管理",JOptionPane.INFORMATION_MESSAGE);
         setVisible(true);
     } else {
         JOptionPane.showMessageDialog(null,"遗憾!注册失败!", "学生信息系统管理",JOptionPane.INFORMATION_MESSAGE);
     }
 }



/**
 * 主方法
 * @param args
 */


public static void main(String[] args) {
    Application.registerFrame=new RegisterFrame("");
}

}

先启动登录窗口,单击【注册】按钮,跳转到注册窗口,注册一个新用户,然后以新用户登录系统。
在这里插入图片描述
利用注册窗口,我们注册一个名叫自已的新用户,然后利用自已登录系统,测试成功。
5)设置学校信息窗口SetCollegeInfoFrame
package net.zzm.student.gui;

import net.zzm.student.bean.College;
import net.zzm.student.service.CollegeService;
import net.zzm.student.service.impl.CollegeServicelmpl;

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class SetCollegeInfoFrame extends JFrame {
/**
* 面板
*/
JPanel panel;
JPanel pnlNorth;
JPanel panel1;
JPanel panel2;
JPanel panel3;
JPanel panel4;
JPanel panel5;
JPanel pnlCenter;
JPanel pnlSouth;

/**
 * 标签
 */
JLabel lblName;
JLabel lblPresident;
JLabel lblStartTime;
JLabel lblTelephone;
JLabel lblEmail;
JLabel lblAddress;
JLabel lblProfile;
/**
 * 按钮
 */
JButton btnSave;
JButton btnExit;

/**
 * 文本框与文本区
 */

JTextField txtName;
JTextField txtPresident;
JTextField txtStartTime;
JTextField txtTelephone;
JTextField txtEmail;
JTextField txtAddress;
JTextArea txtProfile;

/**
 * 滚动面板
 */
JScrollPane scrollPane;
/**
 * 学校服务
 */
private CollegeService collegeService;
private College college;
private  int id=1;

/**
 * 构造方法
 */
public  SetCollegeInfoFrame(String title){
    super(title);
    initGUI();
}

private void initGUI() {
    //创建组件(面板与控件)
    panel = (JPanel) getContentPane();
    pnlNorth = new JPanel();
    panel1 = new JPanel();
    panel2 = new JPanel();
    panel3 = new JPanel();
    panel4 = new JPanel();
    panel5 = new JPanel();
    pnlCenter = new JPanel();
    pnlSouth = new JPanel();


    lblName = new JLabel("学校名称:");
    lblPresident = new JLabel("校    长");
    lblStartTime = new JLabel("建校时间");
    lblTelephone = new JLabel("联系电话");
    lblEmail = new JLabel("电子邮箱");
    lblAddress = new JLabel("通讯地址");
    lblProfile = new JLabel("学校简介");


    txtName = new JTextField(30);
    txtPresident = new JTextField(11);
    txtStartTime = new JTextField(12);
    txtTelephone = new JTextField(11);
    txtEmail = new JTextField(12);
    txtAddress = new JTextField(30);
    txtProfile = new JTextArea(5, 37);
    txtProfile.setLineWrap(true);// 让文本区自动换行
    scrollPane = new JScrollPane(txtProfile, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    btnSave = new JButton("保存[S]");
    btnSave.setMnemonic(KeyEvent.VK_C);
    btnExit = new JButton("退出[X]");
    btnExit.setMnemonic(KeyEvent.VK_X);

    // 设置大面板布局,将北面板、中面板与南面板添加到大面板
    panel.setLayout(new BorderLayout());
    panel.add(pnlNorth, "North");
    panel.add(pnlCenter, "Center");
    panel.add(pnlSouth, "South");

    //设置北面板布局,添加5个小面板
    pnlNorth.setLayout(new GridLayout(5, 1));
    pnlNorth.add(panel1);
    pnlNorth.add(panel2);
    pnlNorth.add(panel3);
    pnlNorth.add(panel4);
    pnlNorth.add(panel5);
    //将控件依次添加到五个小面板
    panel1.add(lblName);
    panel1.add(txtName);
    panel2.add(lblPresident);
    panel2.add(txtPresident);
    panel2.add(lblStartTime);
    panel2.add(txtStartTime);
    panel3.add(lblTelephone);
    panel3.add(txtTelephone);
    panel3.add(lblEmail);
    panel3.add(txtEmail);
    panel4.add(lblAddress);
    panel4.add(txtAddress);
    panel5.add(lblProfile);

    //将滚动面板添加到中面板
    pnlCenter.add(scrollPane);

    //将两个按钮添加到南面板
    pnlSouth.add(btnSave);
    pnlSouth.add(btnExit);

    //创建学校服务对象
    collegeService = new CollegeServicelmpl();
    //获取学校对象
    college = collegeService.findCollegeById(id);
    //利用学校对象属性值设置相应控件的内容
    txtName.setText(college.getName());
    txtPresident.setText(college.getPresident());
    txtStartTime.setText(college.getStartTime().toString());
    txtTelephone.setText(college.getTelephone());
    txtEmail.setText(college.getEmail());
    txtAddress.setText(college.getAddress());
    txtProfile.setText(college.getProfile());

    //设置窗口大小
    setSize(600, 450);
    //设置窗口屏幕居中
    setLocationRelativeTo(null);
    //设置窗口不可调整大小
    setResizable(false);
    //设置窗口刚好容纳组件
    pack();
    //设置窗口标题
    setTitle("设置学校信息");
    //设置窗口可见
    setVisible(true);
    //设置窗口默认关闭操作
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //【关闭】按钮单击事件处理
    btnExit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //关闭窗口
            dispose();
        }
    });
    //【保存】按钮单击事件处理
    btnSave.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                //修改学校对象属性
                college.setName(txtName.getText());
                college.setPresident(txtPresident.getText());
                college.setStartTime(new Timestamp(
                        new SimpleDateFormat("yyyy-MM-dd")
                                .parse(txtStartTime.getText().toString()).getTime()));
                college.setTelephone(txtTelephone.getText());
                college.setEmail(txtEmail.getText());
                college.setAddress(txtAddress.getText());
                college.setProfile(txtProfile.getText());
                //更新学校信息
                collegeService.updateCollege(college);
                //提示用户更新成功
                JOptionPane.showMessageDialog(null, "更新数据成功!");
            } catch (ParseException e1) {
                //提示用户更新失败
                JOptionPane.showMessageDialog(null, "更新数据失败");
            }
        }
    });
}
/**
 * 主方法
 */
public static void main(String[] args) {
    new SetCollegeInfoFrame("");
}

}

运行程序,效果如下:
在这里插入图片描述
6)修改用户密码窗口ChangePasswordFrame
package net.zzm.student.gui;

import net.zzm.student.app.Application;
import net.zzm.student.bean.User;
import net.zzm.student.service.UserService;
import net.zzm.student.service.impl.UserServiceImpl;

import javax.swing.;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class ChangePasswordFrame extends JFrame{
/**
* 面板
*
*/
private JPanel panel;
private JPanel pnlRow1;
private JPanel pnlRow2;
private JPanel pnlRow3;
private JPanel pnlRow4;
private JPanel pnlRow5;

/**
 * 标签
 */
private JLabel lblUsername;
private  JLabel lblPassword;
private  JLabel lblNewPassword1;
private  JLabel lblNewPassword2;

/**
 * 文本框
 */
private JTextField txtUsername;
private JPasswordField txtPassword;
private JPasswordField txtNewPassword1;
private JPasswordField txtNewPassword2;


/**
 * 按钮
 */

private JButton btnOK;
private JButton btnCancel;

/**
 * 用户服务对象
 */
private UserService userService;

/**
 * 构造方法
 */
public ChangePasswordFrame(String title){
    super(title);
    initGUI();
}

private void initGUI() {
    //创建主键
    panel = (JPanel) getContentPane();
    pnlRow1 = new JPanel();
    pnlRow2 = new JPanel();
    pnlRow3 = new JPanel();
    pnlRow4 = new JPanel();
    pnlRow5 = new JPanel();

    lblUsername = new JLabel("用户名");
    lblPassword = new JLabel("旧密码");
    lblNewPassword1 = new JLabel("新密码");
    lblNewPassword2 = new JLabel("确认密码");


    txtUsername = new JTextField(20);
    txtUsername.setEnabled(false);
    txtPassword = new JPasswordField(20);
    txtNewPassword1 = new JPasswordField(20);
    txtNewPassword2 = new JPasswordField(20);


    btnOK = new JButton("确定[O]");
    btnOK.setMnemonic(KeyEvent.VK_C);
    btnCancel = new JButton("取消[C]");
    btnCancel.setMnemonic(KeyEvent.VK_C);

    //设置大面板布局,添加五个小面板
    panel.setLayout(new GridLayout(5, 1));
    panel.add(pnlRow1);
    panel.add(pnlRow2);
    panel.add(pnlRow3);
    panel.add(pnlRow4);
    panel.add(pnlRow5);

    //控制添加五个到五个小面板
    pnlRow1.add(lblUsername);
    pnlRow1.add(txtUsername);
    pnlRow2.add(lblPassword);
    pnlRow2.add(txtPassword);
    pnlRow3.add(lblNewPassword1);
    pnlRow3.add(txtNewPassword1);
    pnlRow4.add(lblNewPassword2);
    pnlRow4.add(txtNewPassword2);
    pnlRow5.add(btnOK);
    pnlRow5.add(btnCancel);


    //设置窗口不可调整大小
    setResizable(false);
    //设置窗口刚好容纳组件
    pack();
    //设置窗口屏幕居中
    setLocationRelativeTo(null);
    //设置窗口标题;
    setTitle("修改用户名密码");
    //设置窗口可见
    setVisible(true);
    //设置窗口默认关闭操作
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //设置控件属性
    txtUsername.setEnabled(false);
    txtUsername.setText(Application.username);

    //[取消]按钮单击事件处理
    btnCancel.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            dispose();
        }
    });
    //确定按钮事件处理
    btnOK.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            changePassword();
        }
    });
    //确定按钮事件处理
    btnOK.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == 10) {
                changePassword();
            }
        }
    });
    //用户名文本框按钮事件处理

    txtUsername.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                txtPassword.requestFocus();
            }
        }
    });
    //【密码】文本框按键事件处理
    txtPassword.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                txtNewPassword1.requestFocus();
            }
        }
    });
    //【新密码1】文本框按键事件处理
    txtNewPassword1.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                txtNewPassword1.requestFocus();
            }
        }
    });
    //【新密码2】
    txtNewPassword2.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                btnOK.requestFocus();
            }
        }
    });
}
    /**
     * 修改密码方法
     */

private void changePassword() {
    //获取用户信息
    int id=Application.id;
    String username=Application.username;

   //保存用户输入的旧密码与两个新密码
    String password=new String(txtPassword.getPassword());
    String newPassword1=new String(txtNewPassword1.getPassword());
    String newPassword2=new String(txtNewPassword2.getPassword());

    //创建学生服务对象
    userService=new UserServiceImpl();

    if(userService.login(username,password)==null){
        JOptionPane.showMessageDialog(null,"旧密码错误,请重新输入!",
                "错误提示",JOptionPane.ERROR_MESSAGE);
        txtPassword.requestFocus();
        txtPassword.selectAll();
    }else if(newPassword1.equals("")){
        JOptionPane.showMessageDialog(null,"新密码不能为空!",
                "错误提示",JOptionPane.ERROR_MESSAGE);
        txtNewPassword1.requestFocus();
    }else if(!newPassword2.equals("")){
        JOptionPane.showMessageDialog(null,"确定密码不能为空!",
                "错误提示",JOptionPane.ERROR_MESSAGE);
        txtNewPassword2.requestFocus();
    }else  if(!newPassword1.equals(newPassword2)){
        JOptionPane.showMessageDialog(null,"两次密码不一致,请重新输入!",
                "错误提示",JOptionPane.ERROR_MESSAGE);
        txtNewPassword1.setText("");
        txtNewPassword2.setText("");
        txtNewPassword1.requestFocus();

    }else {
        //按键标识符获取用户
        User user=userService.findUserId(id);
        //修改用户的密码属性
        user.setPassword(newPassword1);
        //调用用户服务对象的更新方法,更新用户信息
        int count=userService.updateUser(user);
        if(count>0){
            JOptionPane.showMessageDialog(null,"密码修改成功",
                    "设置密码",JOptionPane.INFORMATION_MESSAGE);
            dispose();
        }else {
            JOptionPane.showMessageDialog(null,"密码修改失败!",
                    "设置密码",JOptionPane.WARNING_MESSAGE);
        }
    }
}
/**
 * 主方法
 */
public static void main(String[] args) {
    Application.id=5;
    Application.username="李红";
    new  ChangePasswordFrame("");
}

}
测试,修改id为5的用户李红的密码,结果如下:
在这里插入图片描述
总结:今天都是跟着老师的代码打的,从不会到了后面的慢慢熟悉,总的来说,还是有进步

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序设计》课程实验指导书程序代码(答案)(实验一),个人原创,仅供参考与交流。 实验一 Java开发环境的安装与配置,熟悉Java程序结构 一、实验目的: 1. 掌握JDK的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及它们的设置方法。 3. 熟悉Editplus(或TextPad,JCreator)编辑环境,编写简单的Application程序和Applet程序,并编译和执行。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序和Applet程序(能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 4. 写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。 四、实验步骤: 1.从http://java.sun.com 上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译和执行。 3.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorld.java程序, (1)在主方法static public void main(String[ ] args)中调用System.out.println()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe和java.exe编译和执行程序) 4.在Editplus(或JCreator ,Textpad)环境下编写一个HelloWorldApplet.java程序。 (1)在public void paint(Graphics g)方法中调用g.drawString()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用javac.exe编译和浏览器解释执行Applet程序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值