后端学习 Java 学生管理系统 升级版(附源码)

每一步都做过测试了,创建好类与对象复制进去即可

一、对象

1.学生
public class student {
    private int id;
    private String name;
    private int age;
    private String address;

    public student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
2.用户
public class user {
    private String name;
    private String password;
    private String id;
    private final String phone;

    public user(String name, String password, String id, String phone) {
        this.name = name;
        this.password = password;
        this.id = id;
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPhone() {
        return phone;
    }

}

二、类

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class TestDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("欢迎来到学生管理系统");
        System.out.println("请选择操作1登录 2注册 3忘记密码");
        int choose = sc.nextInt();
        ArrayList<user> list = new ArrayList<>();
        while (choose != 4) {
            switch (choose) {
                case 1 -> log(list);
                case 2 -> create(list);
                case 3 -> forget(list);
            }
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录 2注册 3忘记密码");
            choose = sc.nextInt();
        }
    }
    // 登录
    @SuppressWarnings("DuplicatedCode")
    public static void log(ArrayList<user> list) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入用户名:");
        String name = sc.next();
        user myUser;
        boolean answer = false;
        for (int i = 0; i < list.size(); i++) {
            myUser = list.get(i);
            if (name.equals(myUser.getName())) {
                answer = true;
                System.out.print("输入密码:");
                String password = sc.next();
                boolean passwordFlag = false;
                for (i = 0; i < 2; i++) {
                    if (password.equals(myUser.getPassword())) {
                        passwordFlag = true;
                        String verification = identify();
                        System.out.println("验证码为:"+verification+",请在下方输入该验证码");
                        String verificationTest = sc.next();
                        while (!verificationTest.equals(verification)) {
                            verification = identify();
                            System.out.println("验证错误");
                            System.out.println("验证码为:"+verification+",请在下方输入该验证码");
                            verificationTest = sc.next();
                        }
                        manage();
                        break;
                    } else {
                        System.out.print("密码错误,请重新输入:");
                        password = sc.next();
                    }
                }
                if (!passwordFlag) System.out.println("错误超过3次,请稍后尝试");
                break;
            }
        }
        if (!answer) System.out.println("未注册,请先注册");
    }
    // 验证码
    @SuppressWarnings("DuplicatedCode")
    public static String identify() {
        Random r = new Random();
        // 大写
        // (char) (r.nextInt(26)+65)
        // 小写
        // (char) (r.nextInt(26)+97)
        // 数字
        // (char) (r.nextInt(10)+48)
        int number = 5;
        char[] c = new char[number];
        for (int i = 0; i < number - 1; i++) {
            int random = r.nextInt(2);
            switch (random) {
                case 0 -> c[i] = (char) (r.nextInt(26)+65);
                case 1 -> c[i] = (char) (r.nextInt(26)+97);
            }
        }
        c[4] = (char) (r.nextInt(10)+48);
        for (int i = 0; i < c.length; i++) {
            int random = r.nextInt(c.length);
            char temp = c[random];
            c[random] = c[i];
            c[i] = temp;
        }
        return new String(c);
    }
    // 注册
    public static void create(ArrayList<user> list) {
        Scanner sc = new Scanner(System.in);
        user myUser;
        // 设置用户名
        System.out.print("请输入用户名:");
        String name = sc.next();
        int index = 0;
        while (index <= list.size()) {
            if (name.length() > 15 || name.length() < 3) {
                System.out.print("用户名长度必须在3~15位之间:");
                name = sc.next();
            } else if (!checkName(name)) {
                System.out.print("只能是字母加数字的组合,但是不能是纯数字:");
                name = sc.next();
                index = 0;
            } else {
                index++;
            }
            if (index >= 1) {
                for (com.itheima.finaltest.user user : list) {
                    myUser = user;
                    if (name.equals(myUser.getName())) {
                        System.out.print("用户名必须唯一:");
                        name = sc.next();
                        index = 0;
                        break;
                    }
                }
            }
        }
        // 设置密码
        boolean passConfig = false;
        System.out.print("请输入密码:");
        String password = sc.next();
        System.out.print("请再次输入密码:");
        String passwordConfig = sc.next();
        while (!passConfig) {
            if (password.equals(passwordConfig)) {
                passConfig = true;
            } else {
                System.out.println("密码不一致");
                System.out.print("请输入密码:");
                password = sc.next();
                System.out.print("请再次输入密码:");
                passwordConfig = sc.next();
            }
        }
        // 输入身份证
        System.out.print("输入身份证:");
        String id = sc.next();
        while (!checkID(id)) {
            System.out.println("身份证验证错误");
            System.out.print("重新输入验证身份证:");
            id = sc.next();
        }
        // 验证手机号
        System.out.print("输入手机号:");
        String phone = sc.next();
        while (!checkPhone(phone)) {
            System.out.println("手机号验证错误");
            System.out.print("重新输入手机号:");
            phone = sc.next();
        }
        myUser = new user(name,password,id,phone);
        list.add(myUser);
    }
    // 验证用户名
    public static boolean checkName(String name) {
        boolean answer = true;
        int sum = 0;
        char[] c = new char[name.length()];
        for (int i = 0; i < c.length; i++) {
            int number = name.charAt(i);
            if (number >= 48 && number <= 57) {
                sum++;
            }
            if (number<48||(number>57&&number<65)||(number>90&&number<97)||number>122) {
                answer = false;
            }
        }
        if (sum == name.length()) answer = false;
        return answer;
    }
    // 验证身份证
    public static boolean checkID(String id) {
        boolean answer = false;
        if (id.length() != 18) {
            return answer;
        }
        char[] c = new char[id.length()];
        for (int i = 0; i < c.length; i++) {
            c[i] = id.charAt(i);
            if (c[0] == '0') return answer;
            int check = c[i];
            if (i < c.length - 1) {
                if (check < 48 || check >57) return answer;
            }
            if (i == c.length - 1) {
                if (check < 48 || (check >57 && check < 88) || (check > 88 && check < 120) || (check > 120)) return answer;
            }
        }
        return !answer;
    }
    // 验证手机号
    @SuppressWarnings("DuplicatedCode")
    public static boolean checkPhone(String phone) {
        boolean answer = false;
        if (phone.length() != 11) {
            return answer;
        }
        char[] c = new char[phone.length()];
        for (int i = 0; i < c.length; i++) {
            c[i] = phone.charAt(i);
            if (c[0] == '0') return answer;
            int check = c[i];
            if (check < 48 || check >57) return answer;
        }
        return !answer;
    }
    // 忘记密码
    @SuppressWarnings("DuplicatedCode")
    public static void forget(ArrayList<user> list) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入用户名:");
        String name = sc.next();
        user myUser;
        boolean answer = false;
        for (int i = 0; i < list.size(); i++) {
            myUser = list.get(i);
            if (name.equals(myUser.getName())) {
                System.out.print("输入身份证:");
                String id = sc.next();
                System.out.print("输入手机号:");
                String phone = sc.next();
                if (id.equals(myUser.getId()) && phone.equals(myUser.getPhone())) {
                    boolean passConfig = false;
                    System.out.print("请输入密码:");
                    String password = sc.next();
                    System.out.print("请再次输入密码:");
                    String passwordConfig = sc.next();
                    while (!passConfig) {
                        if (password.equals(passwordConfig)) {
                            passConfig = true;
                        } else {
                            System.out.println("密码不一致");
                            System.out.print("请输入密码:");
                            password = sc.next();
                            System.out.print("请再次输入密码:");
                            passwordConfig = sc.next();
                        }
                    }
                    myUser.setPassword(password);
                    answer = true;
                    list.set(i,myUser);
                } else {
                    System.out.println("账号信息不匹配,修改失败");
                    answer = true;
                }
                break;
            }
        }
        if (!answer) System.out.println("未注册");
    }
    @SuppressWarnings("DuplicatedCode")
    public static void manage() {
        Scanner sc = new Scanner(System.in);
        System.out.println("-------------欢迎来到学生管理系统用户界面----------------");
        System.out.println("1:添加学生");
        System.out.println("2:删除学生");
        System.out.println("3:修改学生");
        System.out.println("4:查询学生");
        System.out.println("5:退出");
        System.out.print("请输入您的选择:");
        int choose = sc.nextInt();
        ArrayList<student> list = new ArrayList<>();
        while (choose != 5) {
            switch (choose) {
                case 1 -> add(list);
                case 2 -> delete(list);
                case 3 -> change(list);
                case 4 -> search(list);
            }
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");
            System.out.print("请输入您的选择:");
            choose = sc.nextInt();
        }
    }
    public static void add(ArrayList<student> list) {
        Scanner sc = new Scanner(System.in);
        student stu = new student();
        System.out.println("请输入学生的个人信息:");
        System.out.print("id:");
        stu.setId(sc.nextInt());
        System.out.print("姓名:");
        stu.setName(sc.next());
        System.out.print("年龄:");
        stu.setAge(sc.nextInt());
        System.out.print("家庭住址:");
        stu.setAddress(sc.next());
        list.add(stu);
    }
    public static void delete(ArrayList<student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请在下方输入希望删除的id");
        int deleteID = sc.nextInt();
        boolean deleteIndex = false;
        for (int i = 0; i < list.size(); i++) {
            student stu = list.get(i);
            if (deleteID == stu.getId()) {
                list.remove(i);
                deleteIndex = true;
                break;
            }
        }
        if (!deleteIndex) {
            System.out.println("不存在该id,回到初始菜单");
        }
    }
    @SuppressWarnings("DuplicatedCode")
    public static void change(ArrayList<student> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请在下方输入希望修改的id");
        int changeID = sc.nextInt();
        boolean changeIndex = false;
        for (int i = 0; i < list.size(); i++) {
            student stu = list.get(i);
            if (changeID == stu.getId()) {
                System.out.println("请输入希望修改的信息:");
                System.out.print("修改id为:");
                stu.setId(sc.nextInt());
                System.out.print("修改姓名为:");
                stu.setName(sc.next());
                System.out.print("修改年龄为:");
                stu.setAge(sc.nextInt());
                System.out.print("修改家庭住址为:");
                stu.setAddress(sc.next());
                list.set(i,stu);
                changeIndex = true;
                break;
            }
        }
        if (!changeIndex) {
            System.out.println("不存在该id,回到初始菜单");
        }
    }
    public static void search(ArrayList<student> list) {
        if (list.size() != 0) {
            System.out.println("id\t\t\t姓名\t\t年龄\t\t家庭住址");
            for (student stu : list) {
                System.out.print(stu.getId() + "\t\t\t");
                System.out.print(stu.getName() + "\t\t");
                System.out.print(stu.getAge() + "\t\t");
                System.out.println(stu.getAddress());
            }
        } else System.out.println("当前无学生信息,请添加后再查询");
    }
}

三、常见问题

创建集合的时候需要在得到参数后再new一次,不然每一次add都会把前一次覆盖。
在写代码时为了解决这个问题我花了不少时间,所以专门在这里提醒一下。
走过路过点个赞吧 (~ ̄▽ ̄)~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值