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; } } }
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("没有该账号!"); } } }
用户注册:
登入失败:
密码找回:
登入成功后
积分累计
积分累计
积分查询
修改密码(使用Scanner.nextLine()方法偶尔出现的bug)
·