超市管理系统2

package shopsys;

//用户类
public class User {
    private String name;// 用户名
    private String id;// 账号
    private String code;// 密码
    private int integral;// 积分
    private int protect;// 密保问题
    private String code2;// 密保问题的答案,只能设置一次

    public User() {
        super();
    }

    public User(String name, String id, String code, int integral,int protect,String code2) {
        super();
        this.name = name;
        this.id = id;
        this.code = code;
        this.integral = integral;
        this.protect = protect;
        this.code2 = code2;
    }

    public int getProtect() {
        return protect;
    }

    public void setProtect(int protect) {
        this.protect = protect;
    }

    @Override
    public String toString() {
        return "用户名:" + name + ", 账号:" + id + ", 积分:" + integral;
    }

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

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

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public int getIntegral() {
        return integral;
    }

    public void setIntegral(int integral) {
        this.integral = integral;
    }

    public String getCode2() {
        return code2;
    }

    public void setCode2(String code2) {
        if (this.code2 == null) {
            this.code2 = code2;
        }
    }

}
user
package shopsys;

import java.util.Random;
import java.util.Scanner;

//用户注册
public class Register {
    static Scanner input = new Scanner(System.in);

    public static void register() {
        System.out.println("………………………………注册………………………………");
        System.out.println("请输入用户名:");
        String name = Rights.getName();
        System.out.println("请输入注册密码:");
        String code = Rights.getCode();
        while(getYZM()) {
            System.out.println("验证码输出错误!");
        }
        String id = getID();
        System.out.println("请选择一个密码问题,可用于密码找回!");
        System.out.println("1、我最喜欢的电影\n2、对我最想去的地方\n3、我最爱看的一本书");
        int num = Rights.getInt();
        while(num<1||num>3) {
            System.out.println("没有该选项,请重新选择!");
            num = Rights.getInt();
        }
        
        System.out.println("请输入你的答案:");
        String answer = input.next();
        ShopSys.map.put(name, new User(name,id,code,100,num,answer));
        System.out.println("注册成功,您的卡号是:"+id+",首次注册送你100积分!");
    }
    public static void main(String[] args) {
        register();
    }

    
    
    
    //生成随机9位数卡号
    public static String getID() {
        Random rd = new Random();
        StringBuffer sbf = null;
        while(true) {
            sbf = new StringBuffer();
            for(int i =0; i<9;i++) {
                int num = rd.nextInt(9);
                sbf.append(num);
            }
            if(ShopSys.map.get(sbf)==null) {
                return sbf.toString();
            }
        }
    }
    
    // 输入验证码
    public static boolean getYZM() {
        String code = "";
        String str = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASFGHJKLZXCVBNM";
        String[] strs = str.split("");
        for (int i = 0; i < 6; i++) {
            code += strs[(int) (Math.random() * strs.length)];
        }
        System.out.println("验证码  》》》》     " + code);
        System.out.println("请输入验证码:");
        String s = input.next();
        if (s.equalsIgnoreCase(code)) {
            return false;
        }
        return true;
    }

}
注册
package shopsys;

import java.util.Scanner;

//用户登入
public class SignIn {
    static Scanner input = new Scanner(System.in);

    /**
     * 1、积分累计,要求必须是数字且大于0否则重新输入
     */

    public static void addScore(String id) {

        System.out.println("请输入您此次消费金额(每消费1元加1积分):");
        int score = Rights.getInt();
        ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() + score);
        System.out.println("积分累计成功!");
    }

    /**
     * 2、积分兑换 每10积分抵用0.1元 不足10积分不提用且不会扣除输入抵用后剩余的不足10的积分
     * 只能输入大于0的整数,输入小于10积分提示积分太少不能抵用,输入大于剩余积分提示积分不足
     */

    public static void conversion(String id) {

        System.out.println("请输入您需要兑换使用的积分(每10积分抵用0.1元,不足10积分不做抵用):");
        int num = Rights.getInt();
        if (num < 10) {
            System.out.println("兑换积分不能小于10!");
        } else {
            if (ShopSys.map.get(id).getIntegral() - num > 0) {
                ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() - num / 10 * 10);
                System.out.println("积分兑换成功,您已用会员卡积分抵用了" + (num / 10) * 0.1D + "元!");
                return;
            } else {
                System.out.println("对不起,你当前积分不足!!!");
            }
        }

    }

    /**
     * 4、修改密码 密码设置与注册密码一致,且新密码不能与旧密码一致
     */

    public static void alterCode(String id) {
        System.out.println("………………………………………………更改密码………………………………………………");
        System.out.println("请输入新密码:");
        String newCode = Rights.getCode();

        while (true) {
            if (newCode.equals(ShopSys.map.get(id).getCode())) {
                System.out.println("新密码不能与旧密码一致!请重新输入:");
                newCode = Rights.getCode();
            } else {
                ShopSys.map.get(id).setCode(newCode);
                System.out.println("密码修改成功,请重新登入!");
                return;
            }
        }
    }

    // 5、退出(返回上一层)

    public static void signIn(String id) {
        System.out.println("………………………………登入后………………………………");

        System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出");
        String str;

        start: for (str = input.next();; str = input.next()) {
            switch (str) {
            case "1":
                addScore(id);
                break;
            case "2":
                conversion(id);
                break;
            case "3":
                System.out.println("个人信息:\n" + ShopSys.map.get(id));
                break;
            case "4":
                alterCode(id);
                break start;
            case "5":
                System.out.println("正在退出登入。。。。。。");
                break start;
            default:
                System.out.println("没有该选项,请重新输入:");
                continue start;
            }
            System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出");
        }

        System.out.println("已退出登入!");

    }

}
登入
package shopsys;

import java.util.Scanner;

//确保进行正确的操作
public class Rights {
    static Scanner input = new Scanner(System.in);

    // 设置密码 要求长度在6~16之间 只能包含数字、大小写英文字母、特殊符号,不能有空格、中文
    // 33~126 :数字0~9、大小写字母、特殊符号的ASCII码

    // 控制台输入的要求
    public static boolean getStr(String code) {
        StringBuffer sbf = new StringBuffer();
        boolean boo = false;
        char[] chars = code.toCharArray();// 存储密码的每个字符
        for (int i = 0; i < chars.length; i++) {
            if ((int) (chars[i]) < 33 || (int) (chars[i]) > 126) {
                sbf.append(chars[i]);
                boo = true;
            }
        }
        if (boo) {
            System.out.println("不能输入以下中文、中文字符或空格:");
            for (int i = 0; i < sbf.length(); i++) {
                System.out.print("\"" + sbf.charAt(i) + "\"   ");
            }
            System.out.println("\n请重新输入:");
            return false;
        } else {
            return true;
        }
    }

    // 判断密码强度
    public static void safetyCode(char[] c) {
        int b, b1, b2, b3;
        b = b1 = b2 = b3 = 0;
        for (int i = 0; i < c.length; i++) {

            // (byte)数字0~9 48~57 大小字母 65~90 小写英文字母 97~122
            if ((int) (c[i]) >= 48 && (int) (c[i]) <= 57) {
                b1 = 1;
            } else if ((int) (c[i]) >= 97 && (int) (c[i]) <= 122) {
                b2 = 1;
            } else if ((int) (c[i]) >= 65 && (int) (c[i]) <= 90) {
                b3 = 1;
            } else {
                b = 1;
            }

        }

        int num = b + b1 + b2 + b3;

        switch (num) {
        case 1:
            System.out.println("当前输入的密码强度为1级!");
            break;
        case 2:
            System.out.println("当前输入的密码强度为2级!");
            break;
        case 3:
            System.out.println("当前输入的密码强度为3级!");
            break;
        case 4:
            System.out.println("当前输入的密码强度为4级!");
            break;
        }

    }

    // 获取密码
    public static String getCode() {
        String code = input.nextLine();
        while (true) {
            if (code.length() < 6 || code.length() > 16) {
                System.out.println("密码长度必须在6~16之间!请重新输入:");
                code = input.nextLine();
            } else if (!getStr(code)) {// 不能输入非法字符
                code = input.nextLine();
            } else {
                break;
            }
        }
        return code;

    }

    public static void main(String[] args) {
        getName();
    }

    // 只能输入数字
    public static int getInt() {
//        System.out.println("请选择:");
        int num;
        while (!input.hasNextInt()) {
            String s = input.next();
            System.out.println("输入错误,请输入一个整字:");
        }
        num = input.nextInt();
        return num;
    }

    // 获取从控制台输入的空格符,并且提示不能输入空格

    // 获取用户名
    public static String getName() {
        String userName = input.nextLine();
        while (true) {
            if (userName.length() < 3 || userName.length() > 6) {
                System.out.println("用户名长度应在3~6之间,请重新输入:");
            } else if ((int) (userName.charAt(0)) >= 48 && (int) (userName.charAt(0)) <= 57) {
                System.out.println("用户名不能以数字开头,请重新输入:");
            } else if (ShopSys.map.get(userName) != null) {
                System.out.println("该用户名已存在,请重新输入:");
            } else if (!getStr(userName)) {

            } else {
                break;
            }
            userName = input.nextLine();
        }
        return userName;

    }
}
获取正确输入的信息
package shopsys;

import java.util.*;

//超市会员管理系统
public class ShopSys {
    static Scanner input = new Scanner(System.in);
    // 存储会员
    static Map<String, User> map = new HashMap<String, User>();
    static long time1 = 0;// 输入错误3次的时间
    static long tiem2 = 0;// 输入密码时间
    static int num;// 输错密码的次数
    static final long time = 15;// 锁死账号的时间
    static final int nums = 5;// 限制输错的次数,输错次数上限将不能登入
    static {
        map.put("zt1", new User("zt1", "457891536", "123456", 100, 2, "天堂"));
        map.put("zt2", new User("zt2", "512378561", "123456", 1000, 3, "从不看书"));
        map.put("zt3", new User("zt3", "289651760", "123456", 0, 1, "游戏人生"));
    }
    
    //运行
    public static void main(String[] args) {
        operation();
    }

    public static void operation() {
        System.out.println("******************************XX超市会员管理系统****************************************");
        System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码");
        String s;
        start: for (s = input.next();; s = input.next()) {
            switch (s) {
            case "1":
                dr();
                break;
            case "2":
                Register.register();
                break;
            case "3":
                System.out.println("正在退出系统。。。。。");
                break start;
            case "4":
                comeback();
                break;
            default:
                System.out.println("没有该选项,请重新输入:");
                continue start;
            }
            System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码\n请选择:");
        }
        System.out.println("程序退出!");
    }

    // 密保:找回密码
    public static void comeback() {
        System.out.println("请输入需要找到密码的账号:");
        String id = input.next();
        if (map.get(id) != null) {
            System.out.print("您的密码问题的:");
            switch (map.get(id).getProtect()) {
            case 1:
                System.out.println("1、我最喜欢的电影");
                break;
            case 2:
                System.out.println("2、对我最想去的地方");
                break;
            case 3:
                System.out.println("3、我最爱看的一本书");
                break;
            }
            System.out.println("请输入您的答案:");
            String code2 = input.next();

            if (code2.equals(map.get(id).getCode2())) {
                System.out.println("密保验证成功!");
                System.out.println("您的密码为:" + map.get(id).getCode() + ",请牢记!");
            } else {
                System.out.println("密保验证错误,密码找回失败!");
            }

        } else {
            System.out.println("密码找回失败,该用户名不存在!");
        }

    }

    // 登入
    public static void dr() {
        tiem2 = new Date().getTime();
        String id;
        // 先判断输错次数,再判断时间是否还在锁死时间内,最后就剩被已锁死状态
        if (num < nums) {
            boo();
        } else if ((tiem2 - time1) / 1000 > time) {
            // 时间已过,清除输错次数
            num = 0;
            boo();
        } else {
            System.out.println("您已输错" + num + "次,请" + (time - (tiem2 - time1) / 1000) + "秒后重试");
        }

    }

    // 判断是否登入成功
    public static void boo() {
        System.out.println("**********************登入*********************");
        System.out.println("请输入账号:");
        String name = input.next();
        System.out.println("请输入密码:");
        String code = input.next();
        if (map.get(name) != null) {
            // 输对登入成功,输错则次数+1
            if (name.equals(map.get(name).getName()) && code.equals(map.get(name).getCode())) {
                System.out.println("登入成功!");
                SignIn.signIn(name);
            } else {
                num++;
                System.out.println("密码输入错误,您当前已输错" + num + "次,输错" + nums + "次将暂时不能登入!");

                // 输错3次,记录当时的时间
                if (num == nums) {
                    time1 = new Date().getTime();
                }
            }
        } else {
            System.out.println("没有该账号!");
        }
    }
}
systemrun

用户注册:

登入失败:

           

 密码找回:

登入成功后  

  积分累计

  

  积分累计

      

  积分查询

  

   修改密码(使用Scanner.nextLine()方法偶尔出现的bug)

        

   

 ·

猜你喜欢

转载自www.cnblogs.com/zeng1997/p/11281725.html