Java超市收银系统(三、密码修改)

引言

        我们还是用之前使用的方法,只不过这次是为了实现密码修改功能,在4个包除了vo包,其余我们都需要修改增加。

功能函数包(增删改查)—dao

        在我们对数据库进行简单操作时,最主要的数据操作就是增加、删除、修改、查询,我们之前已经写了用户名查询函数,用来实现对数据库的操作,那么现在我们分析一下,密码修改涉及密码查询是否输入正确和修改功能。

        我们可以看到在两个函数中sql语句,分别对应密码查询和密码修改功能。当然在用java使用数据库语句进行操作时,我们一定要连接数据库,调用util包DBUtil类中连接函数来连接数据库。

其他功能函数包—util

        在util中,我们增加MD5解密,为了登录安全问题,这里增加MD5解密,那么同时数据库中也需要更改增加数据,密码需加密。(这里是为大家提供的进阶性操作,我们暂时先用简单方法来实现密码修改。)

主函数界面包—ui

        基于控制台的应用程序,允许用户更改他们的密码。它提示用户输入其用户名并验证其是否存在,检查当前密码,确保新密码满足复杂性要求,并通过重新输入新密码来确认新密码,然后再使用新密码更新数据库。这是一个非常简单的逻辑,我们对应代码。这里最后记得更新到数据库中

        对于密码修改要求,我们为了保证密码复杂性,设置限制,密码长度不少于6个字符,至少有一个小写字母,至少有一个大写字母,至少一个数字。

结果展示

        我们进行测试修改密码,结束后刷新数据库,发现存储的密码已经发生变化。

完整代码

Driver

package ui;

import vo.User;

import java.util.Scanner;

import static dao.UserDAO.*;
import static util.Encrypt.MD5;

public class Driver {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = scanner.nextLine();
        while (!isUserNameExit(userName)) {
            System.out.println("该用户不存在,请重新输入");
            userName = scanner.nextLine();
        }
        System.out.println("请输入当前用户的原密码:");
        String oldPassword = scanner.nextLine();
        while (!isOldPasswordExit(oldPassword)) {
            System.out.println("原密码输入不正确,请重新输入");
            oldPassword = scanner.nextLine();
        }
        System.out.println("请设置新的密码:");
        String newPassword = scanner.nextLine();
        while (!isDifficult(newPassword)) {
            System.out.println("您的密码不符合复杂性要求(密码长度不少于6个字符,至少有一个小写字母,至少有一个大写字母,至少一个数字)");
            System.out.println("请重新输入:");
            newPassword = scanner.nextLine();
        }
        System.out.println("请输入确认密码:");
        String AgainPassword = scanner.nextLine();
        while(!AgainPassword.equals(newPassword)) {
            System.out.println("两次输入的密码必须一致,请重新输入确认密码:");
            AgainPassword = scanner.nextLine();
        }
        // 修改数据库中的用户表
        update(userName,AgainPassword);

        System.out.println("您已成功修改密码,请谨记,退出程序");
        System.exit(0);


    }

    private static boolean isDifficult(String newPassword) {
        return newPassword.length() >= 6 &&
                newPassword.matches(".*[a-z].*") &&
                newPassword.matches(".*[A-Z].*") &&
                newPassword.matches(".*\\d.*");

    }

    private static boolean isOldPasswordExit(String oldPassword) {
        User password = queryPassword(oldPassword);
        return password!=null && oldPassword.equals(password.getPassword());
    }

    private static boolean isUserNameExit(String userName) {
        User user = queryUserName(userName);
        return user != null && userName.equals(user.getUserName());
    }

}

Encrypt

package util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Encrypt {
    public static String MD5(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes());
            byte[] b = md.digest();
            StringBuffer sb = new StringBuffer();
            for (byte c : b) {
                int val = ((int) c) & 0xff;
                if (val < 16)
                    sb.append("0");
                sb.append(Integer.toHexString(val));
            }
            return sb.toString().toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

}

UserDAO

package dao;

import util.DBUtil;
import vo.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDAO {
    public static User queryUserName(String userName) {
        //获取链接
        Connection con = DBUtil.getConnection();
        //创建语句
        String sql = "select * from t_yonghu where yonghuming = ?";
        PreparedStatement pst = null;
        User user = null;
        try {
            pst = con.prepareStatement(sql);
            //执行语句
            pst.setString(1,userName);
            ResultSet rs = pst.executeQuery();
            //处理结果 将rs存放在user对象中
            if(rs.next()) {
                user = new User();
                user.setUserName(rs.getString("yonghuming"));
                user.setPassword(rs.getString("mima"));
                user.setChrName(rs.getString("xingming"));
                user.setRole(rs.getString("juese"));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //释放资源
            DBUtil.close(con,pst);
        }
        return user;
    }

    public static User queryPassword(String password) {
        //获取链接
        Connection con = DBUtil.getConnection();
        //创建语句
        String sql = "select * from t_yonghu where mima = ?";
        PreparedStatement pst = null;
        User user = null;
        try {
            pst = con.prepareStatement(sql);
            //执行语句
            pst.setString(1,password);
            ResultSet rs = pst.executeQuery();
            //处理结果 将rs存放在user对象中
            if(rs.next()) {
                user = new User();
                user.setUserName(rs.getString("yonghuming"));
                user.setPassword(rs.getString("mima"));
                user.setChrName(rs.getString("xingming"));
                user.setRole(rs.getString("juese"));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //释放资源
            DBUtil.close(con,pst);
        }
        return user;
    }

    public static void update(String userName, String newPassword) {
        //获取链接
        Connection con = DBUtil.getConnection();
        //创建语句
        String sql = "UPDATE t_yonghu SET mima = ? WHERE yonghuming = ?";
        PreparedStatement pst = null;
        try {
            pst = con.prepareStatement(sql);
            //设置参数
            pst.setString(1, newPassword);
            pst.setString(2, userName);
            //执行更新
            pst.executeUpdate();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //释放资源
            DBUtil.close(con, pst);
        }
    }

}

其余相关代码User和DBUtil请参考前面的博客。Java超市收银系统(一、用户登录)-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值