[学生管理系统(升级版)]

学生管理系统(升级)

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

分析

登陆界面
““欢迎来到学生管理系统””
“请操作.1.登录2.注册.3.忘记密码”
用户类
属性:用户名,密码,身份证号码,手机号码

注册功能

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

登录功能

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

忘记密码

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

验证码规则

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

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class UserSystem {
    public static void main(String[] args) {

        ArrayList<User> list = new ArrayList<>();
        loop:
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请操作:1.登录2.注册3.忘记密码");
            Scanner sc = new Scanner(System.in);
            int option = sc.nextInt();
            switch (option) {
                case 1:
                    //登录
                    login(list);
                    break;
                case 2:
                    //注册
                    register(list);
                    break;
                case 3:
                    //忘记密码
                    forget(list);
                    break;
                default:
                    System.out.println("系统无此操作");
                    break loop;
            }
        }
    }
    //忘记密码
    public static void forget(ArrayList<User> list){
        System.out.println("请输入用户名");
        Scanner sc = new Scanner(System.in);
        String username = sc.next();
        //判断当前用户是否存在
        int index = isUnique(list,username);
        if(index == -1){
            System.out.println("未注册");
            return ;
        }
        System.out.println("请输入身份证号码");
        String idCard = sc.next();
        System.out.println("请输入手机号码");
        String phoneNumber = sc.next();
        if(idCard.equals(list.get(index).getIdCard()) && phoneNumber.equals(list.get(index).getPhoneNumber())){
            System.out.println("请输入新密码");
            String password = sc.next();
            list.remove(index);
            list.add(new User(username,password,idCard,phoneNumber));
            System.out.println("修改成功");
            return ;
        }else{
            System.out.println("身份证号或手机号码错误,修改失败");
            return ;
        }
    }
    //用户登录
    public static void login(ArrayList<User> list) {
        System.out.println("请输入用户名");
        Scanner sc = new Scanner(System.in);
        String username = sc.next();

        System.out.println("请输入用户密码");
        String password = sc.next();

        System.out.println("请输入验证码");
        String code = sc.next();
        //验证用户名
        if(isUnique(list,username) == -1){
            System.out.println("用户名未注册,请先注册");
            return ;
        }
        //验证验证码
        String systemCode = getCode();
        System.out.println(systemCode);
        while(!code.equals(systemCode)) {
            System.out.println("验证码错误,请重新输入");
            code = sc.next();
        }
        //验证用户名和密码
        for (int i = 0; i < 3; i++) {
            boolean flag = true;
            int index = isUnique(list,username);
            if(index == -1){
                System.out.println("用户名或密码错误");
                flag = false;
                continue;
            }else{
                if(! list.get(index).getPassword().equals(password)){
                    System.out.println("用户名或密码错误");
                    flag = false;
                    continue;
                }
            }
            if(flag){
                System.out.println("登陆成功");
                return ;
            }
        }
    }

    //系统获得随机验证码
    public static String getCode() {
        char[] bigChar = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        char[] smallChar = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
        Random r = new Random();
        String s = "";
        int numberindex = r.nextInt(5);//随机数的位置
        int number = r.nextInt(10);//随机数
        for (int i = 0; i < 6; i++) {
            if(i == numberindex){
                s += number;
                continue;
            }
            int option = r.nextInt(2);
            int rr = r.nextInt(26);
            if (option == 0) {
                s += bigChar[rr];
            } else {
                s += smallChar[rr];
            }
        }
        return s;
    }

    //用户注册
    public static void register(ArrayList<User> list) {
        System.out.println("请输入用户名");
        Scanner sc = new Scanner(System.in);
        String username = sc.next();

        System.out.println("请输入用户密码");
        String password = sc.next();
        System.out.println("请再次输入密码");
        String repassword = sc.next();

        System.out.println("请输入身份证号码");
        String idCard = sc.next();

        System.out.println("请输入手机号");
        String phoneNumber = sc.next();

        //验证用户名是否符合规定
        if (!isUserName(username, list)) {
            System.out.println("注册失败");
            return;
        }
        //验证密码是否符合规定
        if (!password.equals(repassword)) {
            System.out.println("两次密码输入不一致,注册失败");
            return;
        }
        //验证身份证号
        if (!isIdCard(idCard)) {
            System.out.println("注册失败");
            return;
        }
        //验证手机号
        if(!isPhoneNumber(phoneNumber)){
            System.out.println("注册失败");
            return;
        }
        System.out.println("注册成功");
        User user = new User(username, password, idCard, phoneNumber);
        list.add(user);
    }

    //验证手机号是否符合规定
    public static boolean isPhoneNumber(String phoneNumber){
        if(phoneNumber.length() != 11){
            System.out.println("手机号长度不正确");
            return false;
        }
        if(phoneNumber.charAt(0) == '0'){
            System.out.println("第一位不能是0");
            return false;
        }
        for (int i = 0; i < phoneNumber.length(); i++) {
            if(phoneNumber.charAt(i) < '0' || phoneNumber.charAt(i) > '9'){
                System.out.println("电话号码只能是数字");
            }
        }
        return true;
    }

    //验证身份证号是否符合规定
    public static boolean isIdCard(String idCard) {
        if (idCard.length() != 18) {
            System.out.println("身份证号码长度错误");
            return false;
        }
        if (idCard.charAt(0) == '0') {
            System.out.println("身份证号码不能以0开头");
            return false;
        }
        for (int i = 0; i < idCard.length() - 1; i++) {
            if (idCard.charAt(i) < '0' || idCard.charAt(i) > '9') {
                System.out.println("身份证号码前17为必须是数字");
                return false;
            }
        }
        char c = idCard.charAt(idCard.length() - 1);
        if ((c < '0' || c > '9') && (c != 'X') && (c != 'x')) {
            System.out.println("最后一位有问题");
            return false;
        }
        return true;
    }

    //验证用户名是否符合规定
    public static boolean isUserName(String username, ArrayList<User> list) {
        //判断用户名长度是否合规
        if (username.length() < 3 || username.length() > 15) {
            System.out.println("用户名长度应在3-15之间");
            return false;
        }
        //判断用户名是否由字母加数字的组合
        boolean containChar = false;
        boolean containNumber = false;
        for (int i = 0; i < username.length(); i++) {
            if ((username.charAt(i) >= 'a' && username.charAt(i) <= 'z') ||
                    (username.charAt(i) >= 'A' && username.charAt(i) <= 'Z')) {
                containChar = true;
            }
            if (username.charAt(i) >= '0' && username.charAt(i) <= '9') {
                containNumber = true;
            }
            if (containChar && containNumber) {
                break;
            }
        }
        if (!(containChar && containNumber)) {
            System.out.println("用户名需为数字和字母的组合");
            return false;
        }
        //判断用户名的唯一性
        int unique = isUnique(list, username);
        if (unique != -1) {
            System.out.println("用户名已被注册");
            return false;
        }
        return true;
    }

    //验证用户名的唯一性
    public static int isUnique(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getUsername().equals(username)) {
                return i;
            }
        }
        return -1;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值