Java 可以用已知帐号登录,且可以注册后登录的小程序

|--需求说明

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方法

|--运行结果

猜你喜欢

转载自www.cnblogs.com/twuxian/p/11272623.html