基于控制台的简易学生管理系统

创建对象

创建一个为User用于登录的对象

package StudentManagementSystem;

public class User {
    private String username;
    private String password;
    private String nameid;
    private String phonenumber;

    //空参构造
    public User() {

    }

    //带参构造
    public User(String username, String password, String nameid, String phonenumber) {
        this.username = username;
        this.password = password;
        this.nameid = nameid;
        this.phonenumber = phonenumber;
    }

    //各个变量的处理
    public String getusername(){
        return username;
    }
    public void setusername(String username){
        this.username = username;
    }
    public String getpassword(){
        return password;
    }
    public void setpassword(String password){
        this.password = password;
    }
    public String getnameid(){
        return nameid;
    }
    public void setnameid(String nameid){
        this.nameid = nameid;
    }
    public String getphonenumber(){
        return phonenumber;
    }
    public void setphonenumber(String phonenumber){
        this.phonenumber = phonenumber;
    }
}

创建另一个Student用于学生管理的对象

package StudentManagementSystem;

public class Student {
    //变量私有化
    private int id;
    private String name;
    private int age;


    public Student(){
    }

    //带参构造
    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    //各个变量的处理
    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;
    }
}

代码主体

//用控制台实现学生管理系统的简单增删改查
package StudentManagementSystem;
//导入键盘输入包,集合包
import java.util.Scanner;
import java.util.ArrayList;
//导包,用于生成验证码,五位随机的数据
import java.util.Random;

public class StudentManagementSystem {
    public static void main(String[] args) {
        //创建对象,并对学生管理系统的使用说明打印
        Scanner sc = new Scanner(System.in);
        //创建一个集合,用于存放已注册的用户信息
        ArrayList<User> users = new ArrayList<>();
        User user = new User("user123" , "qwer123"
                , "123456789012345678" , "12233334444");
        users.add(user);

        //学生系统的使用需要先进行登录
        circulate : while (true) {
            printinfo1();
            int num = sc.nextInt();
            switch(num){
                case 1 :{
                    if(denglu(users)){
                        System.out.println("登录成功!");
                        break circulate;
                    }
                    System.out.println("登录失败,请重新选择");
                }
                case 2 :{
                    users = register(users);
                }
                case 3 :{
                    users = reset(users);
                }
                default :{
                    System.out.println("你所输入的功能不存在,请重新输入");
                }
            }
        }

        System.out.println("--------欢迎使用本学生管理系统!--------");

        //创建集合来记录数据
        ArrayList<Student> stu = new ArrayList<>();
        Student stu1 = new Student(001 , "小明" , 18);
        Student stu2 = new Student(002 , "王刚" , 20);
        Student stu3 = new Student(003 , "张三" , 21);
        Student stu4 = new Student(004 , "李四" , 19);
        Student stu5 = new Student(005 , "王五" , 22);
        //添加数据
        stu.add(stu1);
        stu.add(stu2);
        stu.add(stu3);
        stu.add(stu4);
        stu.add(stu5);

        //定义flag来中止循环
        boolean flag = true;
        while (flag) {
            printinfo2();
            int num = sc.nextInt();
            switch(num){
                //增加学生信息
                case 1 -> addStudent(stu);
                case 2 -> deleteStudent(stu);
                case 3 -> changeStudent(stu);
                case 4 -> queryStudent(stu);
                //如果使用break,在嵌套中需要把你想要跳出的循环进行命名
                //System.exit(0);退出虚拟机的意思
                //break 循环名;
                case 5 -> flag = false;
                default -> System.out.println("你所输入的功能不存在,请重新输入");
            }
        }
        System.out.println("感谢你使用本系统,再见!");
    }

    //重置密码
    public static ArrayList<User> reset(ArrayList<User> users){
        //登录需要手动输入信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的username");
        String username = sc.next();
        System.out.println("请输入你的nameid");
        String nameid = sc.next();
        System.out.println("请输入你的phonenumber");
        String phonenumber = sc.next();

        //进行比对
        int count = -1;
        for (int i = 0; i < users.size(); i++) {
            //查询是否在数据库中存在该username
            if(users.get(i).getusername().equals(username)){
                //当username存在时count != 0,且用count记录了在user中的索引
                count = i;
                //判断nameid是否正确
                if(users.get(i).getnameid().equals(nameid)){
                    //判断phonenumber是否正确
                    if(users.get(i).getphonenumber().equals(phonenumber)){
                    }else{
                        System.out.println("你输入phonenumber不正确");
                        return users;
                    }
                }else{
                    System.out.println("你输入nameid不正确");
                    return users;
                }
            }
        }
        if(count == -1){
            System.out.println("你输入username不存在");
            return users;
        }
        System.out.println("请输入你的新password");
        String password1 = sc.next();
        System.out.println("请再次输入你的新password");
        String password2 = sc.next();

        //判断两次密码一致
        if(password1.equals(password2) == false){
            System.out.println("两次的password不一致!");
            return users;
        }

        //当账号可以重置密码时,发送验证码
        String yanzhen = yanzhen();
        System.out.println(yanzhen);
        System.out.println("请输入你的yanzhen");
        String youryanzhen = sc.next();
        //对比验证码,相同则重置密码成功
        if(youryanzhen.equals(yanzhen)){
            User us = new User(username , password1 , nameid , phonenumber);
            users.set(count , us);
            System.out.println("重置密码成功!");
        }else{
            System.out.println("验证码错误,重置密码失败!");
        }
        return users;
    }

    //注册学生系统
    public static ArrayList<User> register(ArrayList<User> users){
        //输入注册信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的username");
        String username = sc.next();
        System.out.println("请输入你的password");
        String password1 = sc.next();
        System.out.println("请再次输入你的password");
        String password2 = sc.next();
        System.out.println("请输入你的nameid");
        String nameid = sc.next();
        System.out.println("请输入你的phonenumber");
        String phonenumber = sc.next();
        //判断username的合法性
        if(username.length() < 3 || username.length() > 16){
            System.out.println("username过长!");
            return users;
        }else if(judgmentusername(username) == false){
            System.out.println("username只能为字母和数字,且不能完全为数字!");
            return users;
        }

        //判断两次密码一致
        if(password1.equals(password2) == false){
            System.out.println("两次的password不一致!");
            return users;
        }

        //判断身份证号必须为18位,且第一位不为0,且前17为数字,最后一位为数字或者X和x
        if(nameid.length() == 18){
            for (int i = 0; i < username.length() - 1; i++) {
                char ch = username.charAt(i);
                //前面只能是纯数字
                if(ch < '0' || ch > '9'){
                    System.out.println("身份证前17位只能为数字!");
                    return users;
                }
            }
            char ch1 = username.charAt(0);
            char ch2 = username.charAt(username.length() - 1);
            //身份证第1位不能为0
            if(ch1 == '0'){
                System.out.println("身份证第1位不能为0!");
                return users;
            }
            //身份证最后1位为数字,X,x
            if((ch2 < '0' || ch2 > '9') && (ch2 != 'x') && (ch2 != 'X')){
                System.out.println("身份证最后1位为数字,X,x!");
                return users;
            }
        }else{
            System.out.println("身份证的位数为18位!");
            return users;
        }

        //判断手机号的正确性,只能为数字,长度为11,开头不能为0
        if(phonenumber.length() == 11){
            for (int i = 0; i < username.length() ; i++) {
                char ch = username.charAt(i);
                //只能是纯数字
                if(ch < '0' || ch > '9'){
                    System.out.println("手机号只能为数字!");
                    return users;
                }
            }
            char ch = username.charAt(0);
            //手机号第1位不能为0
            if(ch == '0'){
                System.out.println("手机号第1位不能为0!");
                return users;
            }
        }

        //判断账号是否已经存在
        if(judgmentusername(users , username)){
            System.out.println("该账号已存在,请勿重复注册!");
        }else{
            //当账号可以注册时,发送验证码
            String yanzhen = yanzhen();
            System.out.println(yanzhen);
            System.out.println("请输入你的yanzhen");
            String youryanzhen = sc.next();
            //对比验证码,相同则注册成功
            if(youryanzhen.equals(yanzhen)){
                User us = new User(username , password1 , nameid , phonenumber);
                users.add(us);
                System.out.println("注册成功!");
            }else{
                System.out.println("验证码错误,注册失败!");
            }
        }
        return users;
    }

    //登录学生系统
    public static boolean denglu(ArrayList<User> users){
        //登录需要手动输入信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的username");
        String username = sc.next();
        System.out.println("请输入你的password");
        String password = sc.next();
        String yanzhen = yanzhen();
        System.out.println(yanzhen);
        System.out.println("请输入你的yanzhen");
        String youryanzhen = sc.next();
        //登录需要查询id的唯一性,只有不唯一才能继续判断
        if(judgmentusername(users , username ,password)){
            if(yanzhen.equals(youryanzhen)){
                return true;
            }
        }
        return false;
    }

    //生成验证码
    public static String yanzhen(){
        //创建对象
        Random rand = new Random();
        //创建随机的大小写字母的数字的范围字符串
        StringBuilder sb = new StringBuilder();
        //将大小写字母,放入sb中
        for (int i = 0; i < 26; i++) {
            char c1 = 'A';
            char c2 = 'a';
            sb.append((char) (c1 + i));
            sb.append((char) (c2 + i));
        }//AaBb.....
        //在字符串的末尾加入0-9
        for (int i = 0; i < 10; i++) {
            char c1 = '0';
            sb.append((char) (c1 + i));
        }
        //创建一个reuslt来存放验证码
        StringBuilder result = new StringBuilder();
        //生成随机的验证码
        for (int i = 0; i < 5; i++) {
            int num = rand.nextInt(sb.length());
            result.append(sb.charAt(num));
        }
        return result.toString();
    }

    //查询学生操作
    public static void queryStudent(ArrayList<Student> list){
        //查询的信息需要手动输入id
        Scanner sc = new Scanner(System.in);
        System.out.println("你正在使用查询学生信息功能!");
        System.out.println("请选择你要执行的功能:");
        System.out.println("1:查询所有学生");
        System.out.println("other:查询单个学生");
        int num = sc.nextInt();
        if(num == 1){
            //遍历集合
            printassemble(list);
        }else{
            System.out.println("请输入你要查询学生信息的学生id");
            int id = sc.nextInt();
            if(judgmentid(list , id)){
                System.out.println("你要查询学生信息的学生id不存在,正在返回主菜单!");
            }else{
                Student stu = list.get(id);
                System.out.println("ID" + "\t" + "姓名" + "\t" + "年龄");
                System.out.println(stu.getid() + "\t" + stu.getname() + "\t" + stu.getage());
            }
        }
    }

    //修改学生操作,修改失败时退回主菜单
    public static ArrayList<Student> changeStudent(ArrayList<Student> list){
        //修改的信息需要手动输入id
        Scanner sc = new Scanner(System.in);
        System.out.println("你正在使用修改学生信息功能!");
        System.out.println("请输入你要修改学生信息的学生id");
        //记录输入数据的变量初始化
        int id = sc.nextInt();
        //judgmentid方法有重复的返回false,无重复返回true
        if(judgmentid(list , id)){
            System.out.println("你要修改学生信息的学生id不存在,正在返回主菜单!");
        }else{
            System.out.println("请输入你要修改学生信息的学生name");
            String name = sc.next();
            System.out.println("请输入你要修改学生信息的学生age");
            int age = sc.nextInt();
            int index = foundid(list , id);
            Student stu = new Student(id , name , age);
            list.set(index , stu);
            System.out.println("修改成功,正在返回主菜单!");
        }
        //遍历集合验证结果
        printassemble(list);
        return list;
    }

    //删除学生操作,删除失败时退回主菜单
    public static ArrayList<Student> deleteStudent(ArrayList<Student> list){
        //删除的信息需要手动输入id
        Scanner sc = new Scanner(System.in);
        System.out.println("你正在使用删除学生信息功能!");
        System.out.println("请输入你要删除学生信息的学生id");
        //记录输入数据的变量初始化
        int id = sc.nextInt();
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            if(id == stu.getid()){
                list.remove(i);
                System.out.println("删除成功!");
                break;
            }
            if(i == list.size() - 1){
                System.out.println("删除失败,数据中不存在id为" + id +
                        "的学生,正在返回主菜单!");
            }
        }
        //遍历集合验证结果
        printassemble(list);
        return list;
    }

    //增加学生的操作
    public static ArrayList<Student> addStudent(ArrayList<Student> list){
        //添加的信息需要手动输入
        Scanner sc = new Scanner(System.in);
        System.out.println("你正在使用增加学生信息功能!");
        //记录输入数据的变量初始化
        int id = 0;
        String name = ("");
        int age = 0;
        while(true){
            System.out.println("请输入学生id");
            id = sc.nextInt();
            System.out.println("请输入学生姓名");
            name = sc.next();
            System.out.println("请输入学生年龄");
            age = sc.nextInt();
            //对输入的数据进行合法性判断
            if(judgmentid(list , id)){
                if(age >= 0 && age <= 200){
                    break;
                }else{
                    System.out.println("你所输入的学生年龄不合理,请重新输入");
                }
            }else{
                System.out.println("你所输入的学生id已重复,请重新输入");
            }
        }
        //将数据放入数组
        Student stu = new Student(id , name , age);
        list.add(stu);
        System.out.println("添加成功!");
        //遍历集合验证结果
        printassemble(list);
        return list;
    }

    //遍历集合
    public static void printassemble(ArrayList<Student> list){
        System.out.println("ID" + "\t" + "姓名" + "\t" + "年龄");
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            if(stu != null){
                System.out.println(stu.getid() + "\t" + stu.getname() + "\t" + stu.getage());
            }else{
                System.out.println("当前无学生信息!");
            }
        }
    }

    //返回重复id的索引
    public static int foundid(ArrayList<Student> list , int id){
        int index = 0;
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getid() == id){
                index = i;
                break;
            }
        }
        return index;
    }

    //判断字符串中是否只包含字母和数字
    public static boolean judgmentusername(String username){
        for (int i = 0; i < username.length(); i++) {
            char ch = username.charAt(i);
            //不能是纯数字
            int count = 0;
            if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
                    || (ch >= '0' && ch <= '9')){
                if(ch >= '0' && ch <= '9'){
                    count++;
                }
                if(count == username.length()){
                    return false;
                }
                return true;
            }
        }
        return false;
    }

    //账号密码判断
    public static boolean judgmentusername(ArrayList<User> list
            , String username , String password){
        for (int i = 0; i < list.size(); i++) {
            //查询是否在数据库中存在该username
            if(list.get(i).getusername().equals(username)){
                //判断密码是否正确
                if(list.get(i).getpassword().equals(password)){
                    //账号密码都正确
                    return true;
                }
            }
        }
        return false;
    }//只有重复才能证明有该用户

    //账号唯一判断
    public static boolean judgmentusername(ArrayList<User> list , String username){
        for (int i = 0; i < list.size(); i++) {
            //查询是否在数据库中存在该username
            if(list.get(i).getusername().equals(username)){
                 return true;
            }
        }
        return false;
    }

    //id唯一性判断
    public static boolean judgmentid(ArrayList<Student> list , int id){
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getid() == id){
                return false;
            }
        }
        return true;
    }

    //打印使用说明
    public static void printinfo1(){
        System.out.println("1:登录");
        System.out.println("2:注册");
        System.out.println("3:忘记密码");
        System.out.println("请根据提示输入数字");
    }

    public static void printinfo2(){
        System.out.println("1:增加学生信息");
        System.out.println("2:删除学生信息");
        System.out.println("3:修改学生信息");
        System.out.println("4:查询学生信息");
        System.out.println("5:退出该系统");
        System.out.println("请根据提示输入数字");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值