苦学Java笔记(day12)

学生管理系统升级版

1.需求

为学生管理系统书写一个登陆、注册、忘记密码的功能
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

(1)登录界面

System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");

(2)用户类

属性:用户名、密码、身份证号码、手机号码

(3)注册功能

1.用户名需要满足以下要求:
验证要求:
用户名唯一
用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
2.密码键盘输入两次,两次一致才可以进行注册
3.身份证号码需要验证
验证要求:
长度为18位
不能以0开头
前17位,必须都是数字
最后一位可以是数字,也可以是大写或小写x
4.手机号验证
验证要求:
长度为11位
不能以0开头
必须都是数字

(4)登录功能

1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,重新输入
再判断用户名和密码是否正确,有3次机会

(5)忘记密码

1.键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
2.键盘录入身份证号码和手机号
3.判断当前用户的身份证号码和手机号码是否一致
如果一致,则提示输入密码,进行修改
如果不一致,则提示:账号密码不匹配,修改失败

(6)验证码规则:

长度为5
有4位大写或小写字母和1位数字组成,同一个字母可重复
数字可以出现在任意位置
比如:aQa1k

2.代码实现

public class User{
    private String username;
    private String password;
    private String id;
    private String phone;
    public User(){
    }
    public User(String username,String password,String id,String phone){
        this.username = username;
        this.password = password;
        this.id = id;
        this.phone = phone;
    }
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return username;
    }
    public void setPassword(String password){
        this.password = password;
    }
    public String getPassword(){
        return password;
    }
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }
    public void setPhone(String phone){
        this.phone = phone;
    }
    public String getPhone(){
        return phone;
    }
}
import java.util.Scanner;
import java.util.Random;
import java.util.ArrayList;
public class UserText{
    public static void main(String[] args) {
        ArrayList<User> users = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        User u1 = new User("7777uuuu","1234aaaa","362330200308244584","18296423420");
        User u2 = new User("8888vvvv","1234aaaa","362330200308244584","18296423420");
        users.add(u1);
        users.add(u2);
        String a;
        loop:while(true){
            System.out.println("-----------欢迎来到学生管理系统---------");
            System.out.println("---------------1.登录-----------------");
            System.out.println("---------------2.注册-----------------");
            System.out.println("---------------3.忘记密码--------------");
            System.out.println("---------------4.退出-----------------");
            System.out.println("--------------------------------------");
            System.out.println("----------------请输入选择:------------");
            a = sc.next();
            switch(a){
                case "1" -> logIn(users);
                case "2" -> users = register(users);
                case "3" -> users = forget(users);
                case "4" -> {
                    System.out.println("退出成功");
                    break loop;
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }
    public static ArrayList<User> register(ArrayList<User> users){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入新的用户名");
        String username = sc.next();
        boolean flag = false;
        if(!usernameCheck(username)) {//先判断格式,再判断唯一
            System.out.println("用户名未注册但不符合要求");
        }else {
            for (int i = 0; i < users.size(); i++) {
                if (username.equals(users.get(i).getUsername())) {
                    System.out.println("用户名已被注册");
                    flag = true;
                }
            }
            if (!flag) {
                System.out.println("设置登录密码");
                String pw1 = sc.next();
                System.out.println("再次输入");
                String pw2 = sc.next();
                if (pw1.equals(pw2)) {
                    System.out.println("密码输入一致");
                    System.out.println("请输入身份证号");
                    String s1 = sc.next();
                    System.out.println("请输入手机号");
                    String s2 = sc.next();
                    System.out.println("请输入验证码");
                    String s = getCaptcha();
                    System.out.println(s);
                    String captcha = sc.next();
                    if (checkId(s1) && checkPhone(s2)) {
                        if(captcha.equals(s)){//也可用equalsIgnoreCase()
                            User u = new User(username, pw1, s1, s2);
                            users.add(u);
                            System.out.println("注册成功");
                            return users;
                        }else{
                            System.out.println("验证码错误");
                        }
                    } else {
                        System.out.println("身份证号或手机号不符合要求");
                    }
                } else {
                    System.out.println("两次输入密码不同");
                }
            }
        }
        return users;
    }
    public static boolean usernameCheck(String username){
        char[] arr = username.toCharArray();
        int count1 = 0;
        int count2 = 0;
        if(arr.length < 3 || arr.length > 15){
            return false;
        }else {
            for (int i = 0; i < arr.length; i++) {
                if ((arr[i] >= 'A' && arr[i] <= 'Z') || (arr[i] >= 'a' && arr[i] <= 'z')) {
                    count1++;
                } else if ((arr[i] >= '0' && arr[i] <= '9')) {
                    count2++;
                }
            }
            if (count1 + count2 == arr.length && count2 != arr.length) {
                return true;
            } else {
                return false;
            }
        }
    }
    public static String getCaptcha(){
        Random r = new Random();
        char[] arr = new char['Z' - 'A' + 1 + 'z' - 'a' + 1];
        String s = "";
        for (int i = 0; i < arr.length / 2; i++) {
            arr[i] = (char) (i + 'A');
        }
        for (int i = arr.length / 2; i < arr.length; i++) {
            arr[i] = (char) (i + 'a' - arr.length / 2);
        }
        for (int i = 0; i < 4; i++) {
            s += arr[r.nextInt(arr.length)];
        }
        s += r.nextInt(10);
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            int j = r.nextInt(chs.length);
            char tmp = chs[i];
            chs[i] = chs[j];
            chs[j] = tmp;
        }
        String result = new String(chs);
        return result;
    }
    public static boolean checkId(String id){
        int count = 0;
        for (int i = 0; i < id.length(); i++) {
            if(id.charAt(i) >= '0' && id.charAt(i) <= '9'){
                count++;
            }
        }
        if(id.length() == 18 && id.charAt(0) != '0' && count >= 17 && last(id.charAt(17))){//id.startsWith("0")是否以"0"开头
            return true;
        }else{
            return false;
        }
    }
    public static boolean last(char c){
        if((c == 'X') || (c == 'x') || (c >= '0' && c <= '9')){
            return true;
        }else{
            return false;
        }
    }
    public static boolean checkPhone(String phone){
        int count = 0;
        for (int i = 0; i < phone.length(); i++) {
            if(phone.charAt(i) >= '0' && phone.charAt(i) <= '9'){
                count++;
            }
        }
        if(phone.length() == 11 && count == 11){
            return true;
        }else {
            return false;
        }
    }
    public static ArrayList<User> forget(ArrayList<User> users){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.next();
        boolean flag = false;
        int index = 0;
        for (int i = 0; i < users.size(); i++) {
            if(username.equals(users.get(i).getUsername())) {
                flag = true;
                index = i;
            }
        }
        if(!flag){
            System.out.println("未注册");
            return users;
        }else{
            System.out.println("请输入身份证号");
            String uId= sc.next();
            System.out.println("请输入手机号");
            String uPhone = sc.next();
            if(uId.equals(users.get(index).getId()) && uPhone.equals(users.get(index).getPhone())){
                System.out.println("请输入新密码");
                String newPassword =sc.next();
                if(newPassword.equals(users.get(index).getPassword())){
                    System.out.println("新密码与原密码一致,修改失败");
                }else {
                    users.get(index).setPassword(newPassword);
                    System.out.println("修改成功,请重新登录");
                }
            }else{
                System.out.println("身份证号或手机号输入错误,密码修改失败");
            }
        }
        return users;
    }
    public static void logIn(ArrayList<User> users){
        Scanner sc = new Scanner(System.in);
        boolean flag = false;
        int index = 0;
        System.out.println("请输入您的用户名");
        String username = sc.next();
        for (int i = 0; i < users.size(); i++) {
            if(username.equals(users.get(i).getUsername())) {
                flag = true;
                index = i;
            }
        }
        if(!flag){
            System.out.println("未注册");
        }else {
            String captcha;
            String s;
            int count = 0;
            do {
                count++;;
                s = getCaptcha();;
                System.out.println(s);
                System.out.println("请输入验证码");
                captcha = sc.next();
                if(count > 1){
                    System.out.println("验证码错误,请重新输入");
                }
            } while (!s.equals(captcha));
            System.out.println("验证码正确");
            int i;
            for (i = 0; i < 3; i++) {
                System.out.println("请输入密码,还有" + (3 - i) + "次机会");
                String uPassword = sc.next();
                if (uPassword.equals(users.get(index).getPassword())) {
                    System.out.println("登录成功");
                    break;
                }
            }
            if (i == 3) {
                System.out.println("3次机会用完,登录失败");
            }

        }
    }
}

IDEA注释:Ctrl(+Shift)+/

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值