需求:
//用户类 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; } }
1 import java.util.Random; 2 import java.util.Scanner; 3 4 //用户注册 5 public class Register { 6 static Scanner input = new Scanner(System.in); 7 8 public static void register() { 9 System.out.println("………………………………注册………………………………"); 10 System.out.println("请输入用户名:"); 11 String name = Rights.getName(); 12 System.out.println("请输入注册密码:"); 13 String code = Rights.getCode(); 14 while(getYZM()) { 15 System.out.println("验证码输出错误!"); 16 } 17 String id = getID(); 18 System.out.println("请选择一个密码问题,可用于密码找回!"); 19 System.out.println("1、我的父亲叫什么\n2、我的母亲叫什么\n3、初中学校叫什么"); 20 int num = Rights.getInt(); 21 while(num<1||num>3) { 22 System.out.println("没有该选项,请重新选择!"); 23 num = Rights.getInt(); 24 } 25 26 System.out.println("请输入你的答案:"); 27 String answer = input.next(); 28 ShopSys.map.put(name, new User(name,id,code,100,num,answer)); 29 System.out.println("注册成功,您的卡号是:"+id+",首次注册送你100积分!"); 30 } 31 public static void main(String[] args) { 32 register(); 33 } 34 35 36 37 38 //生成随机9位数卡号 39 public static String getID() { 40 Random rd = new Random(); 41 StringBuffer sbf = null; 42 while(true) { 43 sbf = new StringBuffer(); 44 for(int i =0; i<9;i++) { 45 int num = rd.nextInt(9); 46 sbf.append(num); 47 } 48 if(ShopSys.map.get(sbf)==null) { 49 return sbf.toString(); 50 } 51 } 52 } 53 54 // 输入验证码 55 public static boolean getYZM() { 56 String code = ""; 57 String str = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASFGHJKLZXCVBNM"; 58 String[] strs = str.split(""); 59 for (int i = 0; i < 6; i++) { 60 code += strs[(int) (Math.random() * strs.length)]; 61 } 62 System.out.println("验证码 》》》》 " + code); 63 System.out.println("请输入验证码:"); 64 String s = input.next(); 65 if (s.equalsIgnoreCase(code)) { 66 return false; 67 } 68 return true; 69 } 70 71 }
1 import java.util.Scanner; 2 3 //用户登入 4 public class SignIn { 5 static Scanner input = new Scanner(System.in); 6 7 /** 8 * 1、积分累计,要求必须是数字且大于0否则重新输入 9 */ 10 11 public static void addScore(String id) { 12 13 System.out.println("请输入您此次消费金额(每消费1元加1积分):"); 14 int score = Rights.getInt(); 15 ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() + score); 16 System.out.println("积分累计成功!"); 17 } 18 19 /** 20 * 2、积分兑换 每10积分抵用0.1元 不足10积分不提用且不会扣除输入抵用后剩余的不足10的积分 21 * 只能输入大于0的整数,输入小于10积分提示积分太少不能抵用,输入大于剩余积分提示积分不足 22 */ 23 24 public static void conversion(String id) { 25 26 System.out.println("请输入您需要兑换使用的积分(每10积分抵用0.1元,不足10积分不做抵用):"); 27 int num = Rights.getInt(); 28 if (num < 10) { 29 System.out.println("兑换积分不能小于10!"); 30 } else { 31 if (ShopSys.map.get(id).getIntegral() - num > 0) { 32 ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() - num / 10 * 10); 33 System.out.println("积分兑换成功,您已用会员卡积分抵用了" + (num / 10) * 0.1D + "元!"); 34 return; 35 } else { 36 System.out.println("对不起,你当前积分不足!!!"); 37 } 38 } 39 40 } 41 42 /** 43 * 4、修改密码 密码设置与注册密码一致,且新密码不能与旧密码一致 44 */ 45 46 public static void alterCode(String id) { 47 System.out.println("………………………………………………更改密码………………………………………………"); 48 System.out.println("请输入新密码:"); 49 String newCode = Rights.getCode(); 50 51 while (true) { 52 if (newCode.equals(ShopSys.map.get(id).getCode())) { 53 System.out.println("新密码不能与旧密码一致!请重新输入:"); 54 newCode = Rights.getCode(); 55 } else { 56 ShopSys.map.get(id).setCode(newCode); 57 System.out.println("密码修改成功,请重新登入!"); 58 return; 59 } 60 } 61 } 62 63 // 5、退出(返回上一层) 64 65 public static void signIn(String id) { 66 System.out.println("………………………………登入后………………………………"); 67 68 System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出"); 69 String str; 70 71 start: for (str = input.next();; str = input.next()) { 72 switch (str) { 73 case "1": 74 addScore(id); 75 break; 76 case "2": 77 conversion(id); 78 break; 79 case "3": 80 System.out.println("个人信息:\n" + ShopSys.map.get(id)); 81 break; 82 case "4": 83 alterCode(id); 84 break start; 85 case "5": 86 System.out.println("正在退出登入。。。。。。"); 87 break start; 88 default: 89 System.out.println("没有该选项,请重新输入:"); 90 continue start; 91 } 92 System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出"); 93 } 94 95 System.out.println("已退出登入!"); 96 97 } 98 99 }
1 import java.util.Scanner; 2 3 //确保进行正确的操作 4 public class Rights { 5 static Scanner input = new Scanner(System.in); 6 7 // 设置密码 要求长度在6~16之间 只能包含数字、大小写英文字母、特殊符号,不能有空格、中文 8 // 33~126 :数字0~9、大小写字母、特殊符号的ASCII码 9 10 // 控制台输入的要求 11 public static boolean getStr(String code) { 12 StringBuffer sbf = new StringBuffer(); 13 boolean boo = false; 14 char[] chars = code.toCharArray();// 存储密码的每个字符 15 for (int i = 0; i < chars.length; i++) { 16 if ((int) (chars[i]) < 33 || (int) (chars[i]) > 126) { 17 sbf.append(chars[i]); 18 boo = true; 19 } 20 } 21 if (boo) { 22 System.out.println("不能输入以下中文、中文字符或空格:"); 23 for (int i = 0; i < sbf.length(); i++) { 24 System.out.print("\"" + sbf.charAt(i) + "\" "); 25 } 26 System.out.println("\n请重新输入:"); 27 return false; 28 } else { 29 return true; 30 } 31 } 32 33 // 判断密码强度 34 public static void safetyCode(char[] c) { 35 int b, b1, b2, b3; 36 b = b1 = b2 = b3 = 0; 37 for (int i = 0; i < c.length; i++) { 38 39 // (byte)数字0~9 48~57 大小字母 65~90 小写英文字母 97~122 40 if ((int) (c[i]) >= 48 && (int) (c[i]) <= 57) { 41 b1 = 1; 42 } else if ((int) (c[i]) >= 97 && (int) (c[i]) <= 122) { 43 b2 = 1; 44 } else if ((int) (c[i]) >= 65 && (int) (c[i]) <= 90) { 45 b3 = 1; 46 } else { 47 b = 1; 48 } 49 50 } 51 52 int num = b + b1 + b2 + b3; 53 54 switch (num) { 55 case 1: 56 System.out.println("当前输入的密码强度为1级!"); 57 break; 58 case 2: 59 System.out.println("当前输入的密码强度为2级!"); 60 break; 61 case 3: 62 System.out.println("当前输入的密码强度为3级!"); 63 break; 64 case 4: 65 System.out.println("当前输入的密码强度为4级!"); 66 break; 67 } 68 69 } 70 71 // 获取密码 72 public static String getCode() { 73 String code = input.nextLine(); 74 while (true) { 75 if (code.length() < 6 || code.length() > 16) { 76 System.out.println("密码长度必须在6~16之间!请重新输入:"); 77 code = input.nextLine(); 78 } else if (!getStr(code)) {// 不能输入非法字符 79 code = input.nextLine(); 80 } else { 81 break; 82 } 83 } 84 return code; 85 86 } 87 88 public static void main(String[] args) { 89 getName(); 90 } 91 92 // 只能输入数字 93 public static int getInt() { 94 // System.out.println("请选择:"); 95 int num; 96 while (!input.hasNextInt()) { 97 String s = input.next(); 98 System.out.println("输入错误,请输入一个整字:"); 99 } 100 num = input.nextInt(); 101 return num; 102 } 103 104 // 获取从控制台输入的空格符,并且提示不能输入空格 105 106 // 获取用户名 107 public static String getName() { 108 String userName = input.nextLine(); 109 while (true) { 110 if (userName.length() < 3 || userName.length() > 6) { 111 System.out.println("用户名长度应在3~6之间,请重新输入:"); 112 } else if ((int) (userName.charAt(0)) >= 48 && (int) (userName.charAt(0)) <= 57) { 113 System.out.println("用户名不能以数字开头,请重新输入:"); 114 } else if (ShopSys.map.get(userName) != null) { 115 System.out.println("该用户名已存在,请重新输入:"); 116 } else if (!getStr(userName)) { 117 118 } else { 119 break; 120 } 121 userName = input.nextLine(); 122 } 123 return userName; 124 125 } 126 }
1 import java.util.*; 2 3 //超市会员管理系统 4 public class ShopSys { 5 static Scanner input = new Scanner(System.in); 6 // 存储会员 7 static Map<String, User> map = new HashMap<String, User>(); 8 static long time1 = 0;// 输入错误3次的时间 9 static long tiem2 = 0;// 输入密码时间 10 static int num;// 输错密码的次数 11 static final long time = 15;// 锁死账号的时间 12 static final int nums = 5;// 限制输错的次数,输错次数上限将不能登入 13 static { 14 map.put("zt1", new User("zt1", "457891536", "123456", 100, 2, "天堂")); 15 map.put("zt2", new User("zt2", "512378561", "123456", 1000, 3, "从不看书")); 16 map.put("zt3", new User("zt3", "289651760", "123456", 0, 1, "游戏人生")); 17 } 18 19 //运行 20 public static void main(String[] args) { 21 operation(); 22 } 23 24 public static void operation() { 25 System.out.println("******************************XX超市会员管理系统****************************************"); 26 System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码"); 27 String s; 28 start: for (s = input.next();; s = input.next()) { 29 switch (s) { 30 case "1": 31 dr(); 32 break; 33 case "2": 34 Register.register(); 35 break; 36 case "3": 37 System.out.println("正在退出系统。。。。。"); 38 break start; 39 case "4": 40 comeback(); 41 break; 42 default: 43 System.out.println("没有该选项,请重新输入:"); 44 continue start; 45 } 46 System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码\n请选择:"); 47 } 48 System.out.println("程序退出!"); 49 } 50 51 // 密保:找回密码 52 public static void comeback() { 53 System.out.println("请输入需要找到密码的账号:"); 54 String id = input.next(); 55 if (map.get(id) != null) { 56 System.out.print("您的密码问题的:"); 57 switch (map.get(id).getProtect()) { 58 case 1: 59 System.out.println("1、我最喜欢的电影"); 60 break; 61 case 2: 62 System.out.println("2、对我最想去的地方"); 63 break; 64 case 3: 65 System.out.println("3、我最爱看的一本书"); 66 break; 67 } 68 System.out.println("请输入您的答案:"); 69 String code2 = input.next(); 70 71 if (code2.equals(map.get(id).getCode2())) { 72 System.out.println("密保验证成功!"); 73 System.out.println("您的密码为:" + map.get(id).getCode() + ",请牢记!"); 74 } else { 75 System.out.println("密保验证错误,密码找回失败!"); 76 } 77 78 } else { 79 System.out.println("密码找回失败,该用户名不存在!"); 80 } 81 82 } 83 84 // 登入 85 public static void dr() { 86 tiem2 = new Date().getTime(); 87 String id; 88 // 先判断输错次数,再判断时间是否还在锁死时间内,最后就剩被已锁死状态 89 if (num < nums) { 90 boo(); 91 } else if ((tiem2 - time1) / 1000 > time) { 92 // 时间已过,清除输错次数 93 num = 0; 94 boo(); 95 } else { 96 System.out.println("您已输错" + num + "次,请" + (time - (tiem2 - time1) / 1000) + "秒后重试"); 97 } 98 99 } 100 101 // 判断是否登入成功 102 public static void boo() { 103 System.out.println("**********************登入*********************"); 104 System.out.println("请输入账号:"); 105 String name = input.next(); 106 System.out.println("请输入密码:"); 107 String code = input.next(); 108 if (map.get(name) != null) { 109 // 输对登入成功,输错则次数+1 110 if (name.equals(map.get(name).getName()) && code.equals(map.get(name).getCode())) { 111 System.out.println("登入成功!"); 112 SignIn.signIn(name); 113 } else { 114 num++; 115 System.out.println("密码输入错误,您当前已输错" + num + "次,输错" + nums + "次将暂时不能登入!"); 116 117 // 输错3次,记录当时的时间 118 if (num == nums) { 119 time1 = new Date().getTime(); 120 } 121 } 122 } else { 123 System.out.println("没有该账号!"); 124 } 125 } 126 }