首页 > 编程语言 >Java超市收银系统(三、密码修改)

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

时间:2024-08-11 17:59:15浏览次数:16  
标签:Java String rs System 超市 密码 user 收银 pst

引言

        我们还是用之前使用的方法,只不过这次是为了实现密码修改功能,在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博客

标签:Java,String,rs,System,超市,密码,user,收银,pst
From: https://blog.csdn.net/m0_74325713/article/details/140969490

相关文章

  • Java超市收银系统(一、用户登录)
    引言        今天,我们来学习一下如何用java写一个简单的系统(后续内容包括网络连接、数据库连接、json字符串编码、爬虫、数据增删改查、线程处理等等)会不间断更新,首先是环境配置要求,我们需要在maven库中下载4个包,分别是Jsoup、Gson、JXL、mysql用于字符串解析、数据库......
  • Java计算机毕业设计的场馆预订系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全民健身热潮的兴起和体育产业的蓬勃发展,体育场馆作为体育活动的重要载体,其高效管理和便捷服务需求日益凸显。然而,传统的手工预订或简单的在线预......
  • Java计算机毕业设计的蛋糕店线上选购系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,电子商务已成为现代消费模式的重要组成部分,深刻改变了人们的购物习惯。在食品行业,尤其是烘焙领域,线上购物因其便捷性、多样性及......
  • Java计算机毕业设计宠物领养系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,宠物已成为许多家庭不可或缺的一员,它们不仅为人们的生活带来了欢乐与陪伴,还促进了人与自然的和谐共处。然......
  • JetBrains IntelliJ IDEA 2024.2 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin I
    JetBrainsIntelliJIDEA2024.2(macOS,Linux,Windows)-领先的Java和KotlinIDE请访问原文链接:https://sysin.org/blog/jetbrains-idea/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsIntelliJIDEA-领先的Java和KotlinIDE使开发更高效、更......
  • Java计算机毕业设计的多媒体的应用(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着信息技术的飞速发展,多媒体技术在各行各业的应用日益广泛且深入,彻底改变了信息的传播与接收方式。在数字化时代,视频作为多媒体信息的重要载体,凭借......
  • Java计算机毕业设计的党员信息数据可视化分析平台(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,数据已成为推动社会进步和组织管理优化的重要力量。在党建工作中,党员信息作为核心资源,其管理与利用直接关系到党组织决策的科......
  • Java计算机毕业设计的“IDO”体育会员管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全民健身热潮持续升温的当下,体育健身行业迎来了前所未有的发展机遇。然而,传统的体育场馆和健身俱乐部在会员管理、课程安排、资源调度等方面面临着......
  • Java GeoTools构建地理点线面的方法
    在Java中,使用GeoTools库可以方便地处理地理空间数据,包括构建地理点、线、面等。以下是一个详细的示例,展示如何使用GeoTools来创建地理点(Point)、线(LineString)和多边形(Polygon)。1.准备工作首先,确保我们已经添加了GeoTools库到我们的项目中。如果我们使用的是Maven,可以在pom.xml中......
  • Java方法
    一、方法的定义方法就是将功能重复的代码封装成一段独立的代码,通过调用方法的方式(作用)提高代码的复用性(减少代码重复)。每一个方法只能完成一个功能。二、方法的声明格式[修饰符1,修饰符2]返回值类型方法名(参数类型形式参数1,参数类型形式参数2,...){执行语句......