学生信息管理系统---java

这个是基于系统需求写的

【有道云笔记】学生管理系统升级版需求.md
https://note.youdao.com/s/EcEsKxO1

思路:首先定义了两个JavaBean类Student和User类,来封装学生和用户属性以及成员变量的方法,接着就是根据需求一个一个实现方法,我们在测试类里面一般才会用到静态方法。

这里再多说一点就是静态方法使用的另一个场景,用作工具类。定义工具类时,它是一个抽象的概念,我们不需要去创建对象,而且也不能,此时我们就会使用private的构造器,不允许外界来调用它生成实列对象。这时我们就会使用static修饰的静态方法,静态方法是与类一起同时加载的,可以通过类名直接调用。

public class Student {
    private String id;
    private String name;
    private int age;
    private String adrress;

    public Student() {
    }

    public Student(String id, String name, int age, String adrress) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.adrress = adrress;
    }

    public String getId() {
        return id;
    }

    public void setId(String 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 getAdrress() {
        return adrress;
    }

    public void setAdrress(String adrress) {
        this.adrress = adrress;
    }
}
public class User {
    private String userName;
    private String password;
    private String idNumber;
    private String phoneNumber;

    public User() {
    }

    public User(String userName) {
        this.userName = userName;
    }

    public User(String userName, String password, String idNumber, String phoneNumber) {
        this.userName = userName;
        this.password = password;
        this.idNumber = idNumber;
        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 getIdNumber() {
        return idNumber;
    }

    public void setIdNumber(String idNumber) {
        this.idNumber = idNumber;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
//登录用户之后的主界面
package studentsystemplus;

import studentsystem.Student;

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

public class stusystem_copy {
    private ArrayList<Student> list;

    public stusystem_copy() {
    }

    public stusystem_copy(ArrayList<Student> list) {
        this.list = list;
    }

    public ArrayList<Student> getList() {
        return list;
    }

    public void setList(ArrayList<Student> list) {
        this.list = list;
    }

    public  void menu(stusystem_copy stusystemCopy){
        Scanner sc=new Scanner(System.in);
        while(true){
            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.println("请输入选择:");
            /*字符串类型容错率更高,如果用户输成其他字符,不会报错*/
            String choice=sc.next();
            switch (choice){
                case "1" -> stusystemCopy.addStudent(stusystemCopy.getList());
                case "2" -> stusystemCopy.deleteStudent(stusystemCopy.getList());
                case "3" -> stusystemCopy.modifyStudent(stusystemCopy.getList());
                case "4" -> stusystemCopy.searchStudent(stusystemCopy.getList());
                case "5"->System.exit(0);
                default -> System.out.println("输入数据错误,请重新输入");
            }
        }
    }

    public  void addStudent(ArrayList<Student> list){
        Scanner sc=new Scanner(System.in);
        String id;
        while(true){
            System.out.println("请输入学生id:");
            id=sc.next();
            if(contains(list,id)){
                System.out.println("该id已存在,请重新输入id:");
            }else{
                break;
            }
        }
        System.out.println("请输入学生姓名:");
        String name=sc.next();
        System.out.println("请输入学生年龄:");
        int age=sc.nextInt();
        System.out.println("请输入学生家庭地址:");
        String address=sc.next();
        Student student=new Student(id,name,age,address);
        list.add(student);
        System.out.println("添加成功");
    }
    public  void deleteStudent(ArrayList<Student> list){
        System.out.println("请输入要删除学生id");
        Scanner sc=new Scanner(System.in);
        String id=sc.next();
        int index=getIndex(list,id);
        if(index!=-1){
            list.remove(index);
            System.out.println("删除成功");
        }else{
            System.out.println("该学生不存在");
        }
    }
    public  void modifyStudent(ArrayList<Student> list){
        System.out.println("请输入要修改学生的id:");
        Scanner sc=new Scanner(System.in);
        String id=sc.next();
        int index=getIndex(list,id);
        Student student;
        if(index!=-1){
            student=list.get(index);
            System.out.println("请输入修改年龄");
            int age=sc.nextInt();
            student.setAge(age);
            System.out.println("请输入修改家庭地址");
            String address=sc.next();
            student.setAdrress(address);
            System.out.println("修改成功");
        }else{
            System.out.println("该学生不存在");
            return;
        }
    }
    public  void searchStudent(ArrayList<Student> list){
        if(list.isEmpty()){
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }
        System.out.println("id\t姓名\t年龄\t家庭住址");
        for(Student student:list){
            System.out.println(student.getId()+"\t"+student.getName()+"\t"
                    +student.getAge()+"\t"+student.getAdrress());
        }

    }

    //判断集合中
    public  boolean contains(ArrayList<Student> list,String id){
        return getIndex(list,id)>=0;
    }

    public  int getIndex(ArrayList<Student> list,String id){
        for (int i = 0; i < list.size(); i++) {
            Student student=list.get(i);
            if(student.getId().equals(id)){
                return i;
            }
        }
        return -1;
    }
}
//登录界面,以及对登录时可能出现情况的判断
package studentsystemplus;

import studentsystem.Student;

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

public class StudentSystemPlus {
    public static void main(String[] args) {
        ArrayList<User> list=new ArrayList<>();

        Scanner sc=new Scanner(System.in);
        while(true){
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择:操作1登录 操作2注册 操作3忘记密码");
            String choice=sc.next();
            switch (choice){
                case "1"-> login(list);
                case "2"-> enroll(list);
                case "3"-> forgetPassWord(list);
                case "4"-> System.exit(0);
                default-> System.out.println("输入错误,请重新输入");
            }
        }
    }
    public static void enroll(ArrayList<User> list){
        Scanner sc=new Scanner(System.in);
        //1、用户名
        String userName;
        while(true){
            System.out.println("请输入用户名");
            userName=sc.next();
            if(userName.length()>=3&&userName.length()<=15){
                if(judge_NumberandLetter(userName)){
                    //判断用户名是否存在,若存在,那么重新输入
                    if(contains(list,userName)){
                        System.out.println("该用户名已存在,请重新输入");
                    }else{
                        break;
                    }
                }else{
                    System.out.println("用户名只能由字母或字母和数字组合组成,请重新输入");
                }
            }else{
                System.out.println("用户名过长或过短,请重新输入");
            }
        }


        //2、密码的校验
        String password;
        while(true){
            System.out.println("请输入密码");
            password=sc.next();
            System.out.println("第二次输入密码");
            String pw=sc.next();
            if(password.equals(pw)){
                break;
            }else{
                System.out.println("前后两次密码不同,请重新输入密码");
            }
        }


        //3、验证身份证号码
        String idNumber;
        while(true){
            System.out.println("请输入身份证号码");
            idNumber=sc.next();
            if(checkIdNumber(idNumber)){
                break;
            }else{
                System.out.println("身份证号码错误,请重新输入");
            }
        }

        //4、手机号验证
        String phoneNumber;
        while(true){
            System.out.println("请输入手机号码");
            phoneNumber=sc.next();
            if(checkPhoneNumber(phoneNumber)){
                break;
            }else{
                System.out.println("手机号码错误,请重新输入");
            }
        }

        User user=new User(userName,password,idNumber,phoneNumber);
        list.add(user);
        System.out.println("注册成功");

    }

    public static void login(ArrayList<User> list){
        Scanner sc=new Scanner(System.in);
        System.out.println("用户名");
        String userName=sc.next();
        if(!contains(list,userName)){
            System.out.println("用户名未注册,请先注册");
            return;
        }

        String password;
        for (int i = 0; i < 3; i++) {
            System.out.println("密码");
            password=sc.next();
            int index=getIndex(list,userName);
            if(list.get(index).getPassword().equals(password)){
                while(true){
                    String aimCaptcha=getCaptcha();
                    System.out.println(aimCaptcha);
                    System.out.println("请输入验证码");
                    String captcha=sc.next();
                    if(aimCaptcha.equals(captcha)){
                        break;
                    }else{
                        System.out.println("验证码错误,请重新输入");
                    }
                }
                System.out.println("登录成功");
                ArrayList<Student> studentArrayList=new ArrayList<>();
                stusystem_copy stusystemCopy=new stusystem_copy(studentArrayList);
                stusystemCopy.menu(stusystemCopy);
            }else{
                if(i==2){
                    System.out.println("该账号已被锁定,请通过验证修改密码");
                }else{
                    System.out.println("还有"+(2-i)+"次机会");
                }
            }

        }

    }

    public static void forgetPassWord(ArrayList<User> list){
        System.out.println("请输入用户名");
        Scanner sc=new Scanner(System.in);
        String userName=sc.next();
        if(contains(list,userName)){
            System.out.println("身份证号码");
            String idNumber=sc.next();
            System.out.println("手机号码");
            String phoneNumber=sc.next();
            for(User user:list){
                if(user.getIdNumber().equals(idNumber)&&user.getPhoneNumber().equals(phoneNumber)){
                    System.out.println("请输入密码");
                    String newPassWord=sc.next();
                    user.setPassword(newPassWord);
                    System.out.println("修改密码成功");
                    return;
                }
            }
            System.out.println("账号信息不匹配,修改失败");
        }else{
            System.out.println("未注册");
            return;
        }
    }

    public static boolean contains(ArrayList<User> list,String userName){
        return getIndex(list,userName)>=0;
    }

    public static boolean judge_NumberandLetter(String userName){
        boolean flag=true;
        int numCount=0;
        int letterCount=0;
        for (int i = 0; i < userName.length(); i++) {
            char ch=userName.charAt(i);
            if(ch>='0'&&ch<='9'){
                numCount++;
            }
            if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
                letterCount++;
            }
        }
        if(letterCount+numCount<userName.length()||numCount==userName.length()){
            flag=false;
        }
        return flag;
    }

    public static boolean checkIdNumber(String idNumber){
        if(idNumber.length()!=18){
            return false;
        }else{
                for (int i = 0; i < idNumber.length()-1; i++) {
                    if(!(idNumber.charAt(i)>='0'&&idNumber.charAt(i)<='9')){
                        return false;
                    }
                }
                if(idNumber.charAt(0)=='0'){
                    return false;
                }
                String str=idNumber.substring(idNumber.length()-1);
            return (str.charAt(0) >= '0' && str.charAt(0) <= '9') || str.equalsIgnoreCase("x");
        }
    }

    public static boolean checkPhoneNumber(String phoneNumber){
        if(phoneNumber.length()!=11){
            return false;
        }else{
            for (int i = 0; i < phoneNumber.length(); i++) {
                char ch=phoneNumber.charAt(i);
                if(!(ch>='0'&&ch<='9')){
                    return false;
                }
                }
            return phoneNumber.charAt(0)!='0';
            }
        }


    public static String getCaptcha(){
        int length=5;
        char[] chs=new char[52];
        for (int i = 0; i < chs.length; i++) {
            if(i<=25){
                chs[i]=(char)('A'+i);
            }else{
                chs[i]=(char)('A'+32+i-26);
            }
        }
        Random r=new Random();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < length-1; i++) {
            sb.append(chs[r.nextInt(52)]);
        }
        char ch=(char)(r.nextInt(10)+'0');
        sb.insert(r.nextInt(5),ch);
        return sb.toString();
    }


    public static int getIndex(ArrayList<User> list,String userName){
        for (int i = 0; i < list.size(); i++) {
            User user=list.get(i);
            if(user.getUserName().equals(userName)){
                return i;
            }
        }
        return -1;
    }

    }

上述整体是一个使用控制台来模仿登录界面的代码。

收获与反思:在写代码量较大的小项目时,一定是写一个功能测试一个,保证代码的完整性和健壮性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值