|--需求说明
1、写一个注册和登录功能,使用已知的帐号和密码可以直接登录,如果没有帐号,注册后可以用刚注册的帐号登录
2、注册的时候,如果帐号已经存在,不能注册
3、注册的时候,设置两次密码,如果两次密码设置得不同,不能注册
4、登录的时候,密码输错三次,锁定帐号
5、登录的时候,如果没有这个帐号,则提醒用户注册,注册后可以登录
6、登录的时候,帐号密码都正确要输入验证码,系统给出的验证码和用户输入一致时,允许登录(忽略大小写)
7、登录之后,用户可以看到用户的预留信息
|--实现方式
1、采用循环结构,嵌套分支结构---详情见代码注释
2、创建一个用户类,用于初始化信息
3、
|--代码内容
1 package com.work.work1;
2
3 /**
4 * @auther::9527
5 * @Description: 性别
6 * @program: shi_yong
7 * @create: 2019-07-30 14:22
8 */
9 public enum Gender {
10 男,女
11 }
枚举类--选择用户性别
1 package com.work.work1;
2
3 /**
4 * @auther::9527
5 * @Description: 用户信息类
6 * @program: shi_yong
7 * @create: 2019-07-30 14:19
8 */
9 public class User {
10 private String name; //用户名
11 private String passWords; //用户密码
12 private String phoneNum; // 用户手机号码
13 private Gender sex; //用户性别
14
15 //带参构造,用于初始化数据和创建对象数组
16 public User(String name, String passWords, String phoneNum, Gender sex) {
17 this.name = name;
18 this.passWords = passWords;
19 this.phoneNum = phoneNum;
20 this.sex = sex;
21 }
22
23
24 //无参构造
25 public User() {
26 }
27
28 //getter / setter方法,用于获取或者设置信息
29 public String getName() {
30 return name;
31 }
32
33 public void setName(String name) {
34 this.name = name;
35 }
36
37 public String getPassWords() {
38 return passWords;
39 }
40
41 public void setPassWords(String passWords) {
42 this.passWords = passWords;
43 }
44
45 public String getPhoneNum() {
46 return phoneNum;
47 }
48
49 public void setPhoneNum(String phoneNum) {
50 this.phoneNum = phoneNum;
51 }
52
53 public Gender getSex() {
54 return sex;
55 }
56
57 public void setSex(Gender sex) {
58 this.sex = sex;
59 }
60 }
用户类---初始化用户信息
1 package com.work.work1;
2
3 /**
4 * @auther::9527
5 * @Description: 方法类
6 * @program: shi_yong
7 * @create: 2019-07-30 17:57
8 */
9 public class Meth {
10 //验证码生成器
11 public static String verificationCode() {
12 final int VCODE = 6; //验证码长度为6
13 String code = ""; //定义一个返回值
14
15 for (int i = 0; i < VCODE; i++) {
16 //设置一个布尔变量,如果为真,就给数字验证码,如果为假,就给字母验证码
17 boolean choose = ((int) (Math.random() * 2) == 0) ? true : false;
18 if (choose) {
19 //choose 为真,验证码在0~9之间选择
20 code += (int) (Math.random() * 10);
21 } else {
22 //翻开char值对照表,发现英文字母a 小写是从65开始的,大写是从97开始的
23 //根据以上条件进行三目运算,在大小写之间做出选择
24 int temp = ((int)(Math.random()*2)==0)?65:97;
25 //定义一个char变量,搜集英文字符,下面的26就是英文字母的总数
26 char ch = (char)(Math.random()*26+temp);
27 code += ch;
28 }
29 }
30 return code; //返回验证码
31 }
32
33 }
验证码生成器
1 package com.work.work1;
2
3 import java.util.HashMap;
4 import java.util.Scanner;
5
6 /**
7 * @auther::9527
8 * @Description: 系统注册
9 * @program: shi_yong
10 * @create: 2019-07-30 14:26
11 */
12 public class Register {
13 public static void main(String[] args) {
14 Scanner scanner = new Scanner(System.in);
15
16 //初始化信息 String name, String passWords, String phoneNum, Gender sex
17 User u1 = new User("1536", "audinig", "15356395764", Gender.女);
18 User u2 = new User("9527", "123456", "15750000564", Gender.男);
19 User u3 = new User("3721", "unu999", "16685693564", Gender.女);
20 User u4 = new User("1966", "239jdk", "18556493564", Gender.男);
21 //设定一个空的user对象,用于接收用户信息
22 User u5 = null;
23
24 //创建map集合,用于储存信息
25 HashMap<String, User> map = new HashMap();
26 map.put(u1.getName(), u1);
27 map.put(u2.getName(), u2);
28 map.put(u3.getName(), u3);
29 map.put(u4.getName(), u4);
30
31
32 //设置一个标记,用于判断是否要继续问用户
33 boolean boo = true;
34 while (boo) {
35 System.out.println("请选择登陆还是注册:1.登陆\t2.注册");
36 String answer = scanner.next();
37
38 //选择1的时候,进入登录模块
39 if ("1".equals(answer)) {
40 System.out.println("请输入用户名:");
41 String name = scanner.next();
42
43 if (map.containsKey(name)) {
44 String passWords ="";
45 //设置计数器,如果输错三次,就退出系统
46 int count = 0;
47 for (int i = 0; i < 3; i++) {
48 System.out.println("请输入用户密码:");
49 passWords = scanner.next();
50
51 if (map.get(name).getPassWords().equals(passWords)){
52 boolean isPass = true;
53 do {
54 String verificationCode = Meth.verificationCode();
55 System.out.println("请输入系统给定的验证码(忽略大小写)");
56 System.out.println("验证码:"+verificationCode);
57 String input = scanner.next();
58 if (input.equalsIgnoreCase(verificationCode)){
59 isPass = false;
60 }else {
61 System.out.println("请重新输入");
62 }
63 }while(isPass);
64 System.out.println("登陆成功,以下是你的预留信息");
65 System.out.println("你的电话号码是" + map.get(name).getPhoneNum());
66 //用户名与密码匹配,退出for循环
67 break;
68 }else {
69 count+=1;
70 if (count >=3){
71 System.out.println("连续输错三次,你再也进不了系统了");
72 System.exit(1);
73 }
74 System.out.println("你只有三次失误的机会,请重新输入");
75 }
76 }
77
78 } else {
79 System.out.println("没有这个用户,需要先注册,才能登陆");
80 //跳出本次循环,重新问是要登录还是要注册
81 continue ;
82 }
83
84 //帐号密码都正确了,退出这个循环
85 boo = false;
86 //选择2的时候,进入注册模块
87 } else if ("2".equals(answer)) {
88 //搜集用户名
89 String name = "";
90 boolean isName = true;
91 do {
92 System.out.println("请自定义一个账号");
93 name = scanner.next();
94 if (name.length() >= 3) {
95 if (name.equals(map.containsKey(name))) {
96 System.out.println("已有该账号,请重新输入一个账号");
97 } else {
98 System.out.println("该账号可用,已记录");
99 isName = false;
100 }
101 } else {
102 System.out.println("用户名长度不得小于3,请重新输入用户名");
103 }
104
105 } while (isName);
106
107 //搜集密码信息 设定一次接受用户输入的变量名
108 String passsWords = "";
109 boolean isPassWord = true;
110 do {
111
112 boolean pwLenth = true;
113 //设定二次密码输入的变量名
114 String passWords2 = "";
115 do {
116 System.out.println("请输入密码");
117 passsWords = scanner.next();
118 if (passsWords.length() < 6) {
119 System.out.println("密码长度不得小于6位");
120 } else {
121 pwLenth = false;
122 }
123 System.out.println("请再一次输入密码");
124 passWords2 = scanner.next();
125 if (passWords2.length() < 6) {
126 System.out.println("密码长度不得小于6位");
127 } else {
128 pwLenth = false;
129 }
130
131 } while (pwLenth);
132
133 if (!passsWords.equals(passWords2)) {
134 System.out.println("两次输入的密码不一致,请重新输入");
135 //如果两次输入的密码不一致,则给isPassWord 赋值为true,以便再次循环
136 isPassWord = true;
137 } else {
138 //如果两次输入的密码一致,则给isPassWord 赋值为false,以便退出循环
139 isPassWord = false;
140 }
141 } while (isPassWord);
142
143 //搜集用户其他信息 name, passWords, phoneNum, sex
144 System.out.println("请输入电话号码");
145 String phoneNum = scanner.next();
146 System.out.println("请输入性别,按1选择女性,其他任意字符选择男性");
147 Gender gender = scanner.next().equals("1") ? Gender.女 : Gender.男;
148 //向u5传参
149 u5 = new User(name,passsWords, phoneNum, gender);
150 //将获取到到用户信息放入新的map
151 map.put(u5.getName(), u5);
152 System.out.println("注册成功");
153 System.out.println("请登录");
154 System.out.println();
155
156 //选择其他任意字符,重新循环
157 } else {
158 System.out.println("只能按1或者2,请重新选择");
159 continue;
160 }
161 }
162 }
163 }
程序入口--main方法
|--运行结果