用Java代码实现学生管理系统(可实现用户登录注册功能)

简介: 用Java代码实现学生管理系统(可实现用户登录注册功能)

学生管理系统


简单实现学生系统的登录和注册,以及学生信息添加、删除,修改、查询功能。根据需求,创建一个学生类和和用户类以及学生系统类,在登录管理系统之前需要先注册用户,只有输入正确的用户名和密码才可以登录,忘记密码后可以根据用户信息进行修改,用容器存储学生信息和用户信息,这里用到ArrayList<E>,这是基础版的,进一步可以将信息存到数据库中。


1.项目演示



2.学生管理系统实现思路


1.定义用户类

2.实现登录界面的代码编写

3.实现注册、登录、忘记密码功能的代码编写

4.定义学生类

5.管理系统主界面的代码编写

6.实现增删改查功能的代码编写


3.1定义用户类


package com.ithm.student;
public class User {
    private String username;
    private String password;
    private String personID;
    private String phoneNumber;
    public User() {
    }
    public User(String username, String password, String personID, String phoneNumber) {
        this.username = username;
        this.password = password;
        this.personID = personID;
        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 getPersonID() {
        return personID;
    }
    public void setPersonID(String personID) {
        this.personID = personID;
    }
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}


3.2定义学生类


package com.ithm.student;
public class Student {
    private int id;
    private String name;
    private int age;
    private String address;
    public Student() {
    }
    public Student(int id, String name, int age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }
    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;
    }
}


4.1主界面的实现


思路:

  1. 用输出语句完成主界面的编写
  2. 用Scanner实现键盘录入数据
  3. 用switch语句完成操作的选择
  4. 用循环完成再次回到主界面

 public static void menu(){
        System.out.println("-------------欢迎来到学生管理系统-----------");
        System.out.println("---           1.添加学生               ---");
        System.out.println("---           2.删除学生               ---");
        System.out.println("---           3.修改学生               ---");
        System.out.println("---           4.查询学生               ---");
        System.out.println("---           0.退出                  ---");
        System.out.println("----------------------------------------");
    }
    public static void choose(ArrayList<Student> list){
       while (true){
           menu();
           System.out.print("请输入你的选择:");
           Scanner sc=new Scanner(System.in);
           int t= sc.nextInt();
           switch (t){
               case(1):  addStudent(list);    break;
               case(2):  deleteStudent(list); break;
               case(3):  updateStudent(list); break;
               case(4):  queryStudent(list);  break;
               case(0):  System.exit(0);
               default:  return;
           }
       }
    }


4.2添加学生的代码编写


用键盘录入选择添加学生

定义一个方法,用于添加学生

显示提示信息,提示要输入何种信息        

录入id时定义一个查询方法,查看集合中是否已经添加过此id,确保id唯一

键盘录入学生对象所需要的数据创建学生对象,把键盘录入的数据赋值给学生对象的成员变量

将学生对象添加到集合中(保存数据)


 public static void addStudent(ArrayList<Student> list){
     Student stu=new Student();
     Scanner sc=new Scanner(System.in);
        System.out.print("请输入学生的学号id:");
        while (true){
            int id= sc.nextInt();
            boolean item=comain(list,id);
            if(item){
                System.out.println("此学生已经存在,请重新输入学生id");
            }else {
                stu.setId(id);
                break;
            }
        }
        System.out.print("请输入学生的名字:");
        String name=sc.next();
        stu.setName(name);
        System.out.print("请输入学生的年龄:");
        int age= sc.nextInt();
        stu.setAge(age);
        System.out.print("请输入学生的地址:");
        String address=sc.next();
        stu.setAddress(address);
        list.add(stu);
    }
public static boolean comain(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            if(id==list.get(i).getId()){
                return true;
            }
        }
        return false;
    }


4.3删除学生的代码编写


  1. 用键盘录入选择删除学生信息
  2. 定义一个方法,用于删除学生信息
    提示信息
    键盘录入要删除的学生学号
    遍历集合将对应学生对象从集合里删除
    给出删除成功提示


public static void deleteStudent(ArrayList<Student> list){
        System.out.println("请输入要删除的学生学号:");
       while (true){
           Scanner sc=new Scanner(System.in);
           int id= sc.nextInt();
           for (int i = 0; i < list.size(); i++) {
               if(list.get(i).getId()==id){
                   list.remove(i);
                   System.out.println("删除成功");
                   return;
               }
           }
           System.out.println("未找到该学生,请重新输入id");
       }
    }


4.4修改学生的代码编写


  1. 键盘录入选择修改学生
  2. 自定义一个方法,用于修改学生信息
    提示信息
    键盘录入要修改的学生学号
    根据提示选择修改哪一个信息
  3. 键盘录入要修改的学生信息
    遍历集合修改对应学生信息
    给出成功提示


public static void updateStudent(ArrayList<Student> list){
      while (true){
          System.out.print("请输入学生id:");
          Scanner sc=new Scanner(System.in);
          int id= sc.nextInt();
          for (int i = 0; i < list.size(); i++) {
              if(list.get(i).getId()==id){
                  System.out.println("已查询到该学生,请选择更改哪一条信息");
                  Student stu=list.get(i);
                  System.out.println("1.更改学生姓名 2.更改学生年龄 3.更改学生家庭地址");
                  int item=sc.nextInt();
                  if(item==1){
                      System.out.println("请输入更改后的学生姓名");
                      String name=sc.next();
                      stu.setName(name);
                      System.out.println("更改成功!");  return;
                  }else if(item==2){
                      System.out.println("请输入更改后的学生年龄");
                      int age=sc.nextInt();
                      stu.setAge(age);
                      System.out.println("更改成功!"); return;
                  }else if(item==3){
                      System.out.println("请输入更改后的学生家庭地址");
                      String address=sc.next();
                      stu.setName(address);
                      System.out.println("更改成功!"); return;
                  }
              }
          }
          System.out.println("未查询到该学生");
      }
    }


4.5查询学生的代码


  1. 首先判断集合里是否存在学生对象,如果没有直接返回
  2. 根据提示,按照id查询或查询全部学生
  3. 将集合中数据取出按照对应格式显示学生信息


 public static void queryStudent(ArrayList<Student> list){
        if(list.size()==0){
            System.out.println("请先添加学生,暂无学生信息!");
            return;
        }
        System.out.println("1.根据学生id查询  2.查询全部学生");
        Scanner sc=new Scanner(System.in);
        int t= sc.nextInt();
       if(t==1){
           System.out.println("请输入要查询的学生id");
           while (true){
              int id= sc.nextInt();
              for (int i = 0; i < list.size(); i++) {
                  if(list.get(i).getId()==id){
                      System.out.println("id\t\t姓名\t\t年龄\t家庭地址");
                      Student stu=list.get(i);
                      System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
                      return;
                  }
              }
              System.out.println("没有该学生信息,请重新输入id");
          }
       }else if(t==2) {
           for (int i = 0; i < list.size(); i++) {
                   System.out.println("id\t\t姓名\t\t年龄\t家庭地址");
                   Student stu=list.get(i);
                   System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
           }
       }
    }


实现用户类与学生类的思路相同,都是先定义一个用户对象,根据提示将数据添加到对象中,再将对象添加到集合中,实现用户类时对用户的各种信息的长度和格式都有要求,只有满足格式输入正确才可以成功输入,具体代码就不展示了,只展示一下验证码功能


5.登录时的验证码功能


  1. 定义一个集合存放所有的大小写字母
  2. 通过随机数获取集合的下标
  3. 遍历得到4个不同的大小写字母,将字母都添加到StringBuider,最后随机一个数字并添加
  4. 将StringBuider变成字符串再变成字符数字,随机得到该数组的任意下标,将最后一位数字与下标交换,实现了随机数字和字母的验证码


private static String getCode(){
        //验证码要求有数字和大小写字母,且数字出现在任意位置
        ArrayList<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));
            list.add((char)('A'+i));
        }
        Random random=new Random();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < 4; i++) {
           int index=random.nextInt(list.size());
           char c=list.get(index);
           sb.append(c);
        }
        int number=random.nextInt(10);
        sb.append(number);
        char []arr=sb.toString().toCharArray();
        int flag=random.nextInt(arr.length);
        char temp=arr[flag];
        arr[flag]=arr[arr.length-1];
        arr[arr.length-1]=temp;
        return new String(arr);
    }


6.1项目结构



6.2全部代码


package com.ithm.student;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentSystem {
    public static void main(String[] args) {
        ArrayList<Student> list=new ArrayList<>();
        ArrayList<User> userlist=new ArrayList<>();
        loginPage(userlist,list);
    }
    public static void loginPage(ArrayList<User> userlist,ArrayList<Student> list){
       while (true){
           System.out.println("\t欢迎来到学生管理系统");
           System.out.println("请选择操作:1登录  2注册  3忘记密码");
           Scanner sc=new Scanner(System.in);
           int item=sc.nextInt();
           switch (item){
               case (1): loginUser(userlist,list); break;
               case (2): reggisterUser(userlist); break;
               case (3): forgetPassword(userlist); break;
               default:  return;
           }
       }
    }
    public static void loginUser(ArrayList<User> userlist,ArrayList<Student> list){
        Scanner sc=new Scanner(System.in);
        while (true){
            System.out.print("请输入用户名:");
            String username=sc.next();
            boolean t=containsUsername(userlist,username);
            if(!t){
                System.out.println(username+"不存在,请先注册");
                return;
            }
            System.out.print("请输入密码:");
            String password=sc.next();
            while (true){
                String rightcode=getCode();
                System.out.println("当前正确的验证码是:"+rightcode);
                System.out.print("请输入验证码:");
                String Code=sc.next();
                if(rightcode.equalsIgnoreCase(Code)){
                    System.out.println("验证码正确");
                    break;
                }else{
                    System.out.println("验证码错误,请重新输入");
                }
            }
            User useInfo=new User(username,password,null,null);
            boolean flag=checklogin(useInfo,userlist);
            int count=0;
            if(flag){
                System.out.println("登录成功!");
                break;
            } else{
                count++;
                System.out.println("账户或者密码错误,您还有"+(3-count)+"次机会尝试登录");
                if(count==3){
                    System.out.println("您已连续三次登录失败,当前用户"+username+"已经被锁定");
                }
            }
        }
        choose(list);
    }
    public static void reggisterUser(ArrayList<User> userlist){
        Scanner sc=new Scanner(System.in);
        String username,password1,personID, number;
        while (true){
            System.out.print("请输入用户名(4-16位字母加数字):");
            username= sc.next();
            boolean flag1=checkUsername(username);
            if(flag1){
                boolean flag2=containsUsername(userlist,username);
                if(flag2){
                    System.out.println("已经存在该用户,请重新输入");
                }else{
                    System.out.println("用户名:"+username+"可以使用");
                    break;
                }
            }else{
                System.out.println("用户名的格式不满足条件,请重新输入");
            }
        }
        while (true){
            System.out.print("请输入密码:");
            password1= sc.next();
            System.out.print("请再次输入密码:");
            String password2= sc.next();
            if(password1.equals(password2)){
                System.out.println("两次密码一致");
                break;
            }else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        while (true){
            System.out.print("请输入身份证号码:");
           personID=sc.next();
            boolean flag=checkPersonID(personID);
            if(flag){
                System.out.println("身份证号码满足要求");
                break;
            }else {
                System.out.println("身份证格式错误,请重新输入");
            }
        }
        while (true){
            System.out.print("请输入电话号码:");
           number=sc.next();
            boolean flag=checkPhoneNumber(number);
            if(flag){
                System.out.println("电话号码满足格式要求");
                break;
            }else {
                System.out.println("电话号码格式错误,请重新输入");
            }
        }
        User user=new User(username,password1,personID,number);
        userlist.add(user);
        System.out.println("注册成功");
    }
    public static void forgetPassword(ArrayList<User> userlist){
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入用户名:");
        String username=sc.next();
        boolean flag=containsUsername(userlist,username);
        int index=findIndex(userlist,username);
        User user=userlist.get(index);
        if(!flag){
            System.out.println(username+"不存在,请先注册");
            return;
        }
        System.out.print("请输入身份证号码:");
        String personID=sc.next();
        System.out.print("请输入手机号码:");
        String number= sc.next();
        if(!(user.getPersonID().equals(personID)&&user.getPhoneNumber().equals(number))){
            System.out.println("用户信息输入有误,无法修改密码");
            return;
        }
        String passwor1;
        while (true){
            System.out.print("请输入新密码:");
            passwor1= sc.next();
            System.out.print("请再次输入新密码:");
            String passwor2= sc.next();
            if(passwor1.equals(passwor2)){
                System.out.println("两次密码输入一致");
                break;
            }else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        user.setPassword(passwor1);
        System.out.println("密码修改成功!");
    }
    public static boolean checkUsername(String username){
        //检查用户名长度合法,长度在4到16位
        if(username.length()<4 ||username.length()>16){
            return false;
        }
        //用户名只能是字母加数字,但不能是纯数字
        int count=0;
        for (int i = 0; i < username.length(); i++) {
            char c=username.charAt(i);
            if(!((c>='0'&&c<='9') ||(c>='a'&&c<='z') ||(c>='A'&&c<='Z'))){
               return false;
            }
            if((c>='a'&&c<='z') ||(c>='A'&&c<='Z')){
                count++;
                break;
            }
        }
       return count>0;
    }
    public static boolean containsUsername(ArrayList<User> userlist,String username){
        for (int i = 0; i < userlist.size(); i++) {
            if(userlist.get(i).getUsername().equals(username)){
                return true;
            }
        }
        return false;
    }
    private static boolean checkPersonID(String personID) {
        //身份证号码必须是18位,首位不能为0,前17位是数字,第18位是数字或字母x
      if(personID.length()!=18)     return false;
      if(personID.startsWith("0"))  return false;
        for (int i = 0; i < personID.length()-1; i++) {
            char c=personID.charAt(i);
            if(!(c>='0'&&c<='9')){
             return false;
            }
        }
        char end=personID.charAt(personID.length()-1);
        if(!(end=='x'|| end=='X'|| (end>='0'&&end<='9'))) return false;
        return true;
    }
    private static boolean checkPhoneNumber(String number) {
        //电话号码为11位纯数字,首位不能为0
        if(number.length()!=11)  return false;
        if(number.startsWith("0"))  return false;
        for (int i = 0; i < number.length(); i++) {
            char c=number.charAt(i);
            if(!(c>='0'&&c<='9')) return false;
        }
        return true;
    }
    private static boolean checklogin(User useInfo,ArrayList<User> userlist) {
        for (int i = 0; i < userlist.size(); i++) {
            User u=userlist.get(i);
            if(u.getUsername().equals(useInfo.getUsername()) &&u.getPassword().equals(useInfo.getPassword())){
                return true;
            }
        }
        return false;
    }
    private static String getCode(){
        //验证码要求有数字和大小写字母,且数字出现在任意位置
        ArrayList<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));
            list.add((char)('A'+i));
        }
        Random random=new Random();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < 4; i++) {
           int index=random.nextInt(list.size());
           char c=list.get(index);
           sb.append(c);
        }
        int number=random.nextInt(10);
        sb.append(number);
        char []arr=sb.toString().toCharArray();
        int flag=random.nextInt(arr.length);
        char temp=arr[flag];
        arr[flag]=arr[arr.length-1];
        arr[arr.length-1]=temp;
        return new String(arr);
    }
    private static int findIndex(ArrayList<User> userlist, String username) {
        for (int i = 0; i < userlist.size(); i++) {
            if(userlist.get(i).getUsername().equals(username)){
                return i;
            }
        }
        return -1;
    }
    public static void menu(){
        System.out.println("-------------欢迎来到学生管理系统-----------");
        System.out.println("---           1.添加学生               ---");
        System.out.println("---           2.删除学生               ---");
        System.out.println("---           3.修改学生               ---");
        System.out.println("---           4.查询学生               ---");
        System.out.println("---           0.退出                  ---");
        System.out.println("----------------------------------------");
    }
    public static void choose(ArrayList<Student> list){
       while (true){
           menu();
           System.out.print("请输入你的选择:");
           Scanner sc=new Scanner(System.in);
           int t= sc.nextInt();
           switch (t){
               case(1):  addStudent(list);    break;
               case(2):  deleteStudent(list); break;
               case(3):  updateStudent(list); break;
               case(4):  queryStudent(list);  break;
               case(0):  System.exit(0);
               default:  return;
           }
       }
    }
    public static void addStudent(ArrayList<Student> list){
     Student stu=new Student();
     Scanner sc=new Scanner(System.in);
        System.out.print("请输入学生的学号id:");
        while (true){
            int id= sc.nextInt();
            boolean item=comain(list,id);
            if(item){
                System.out.println("此学生已经存在,请重新输入学生id");
            }else {
                stu.setId(id);
                break;
            }
        }
        System.out.print("请输入学生的名字:");
        String name=sc.next();
        stu.setName(name);
        System.out.print("请输入学生的年龄:");
        int age= sc.nextInt();
        stu.setAge(age);
        System.out.print("请输入学生的地址:");
        String address=sc.next();
        stu.setAddress(address);
        list.add(stu);
    }
    public static void deleteStudent(ArrayList<Student> list){
        System.out.println("请输入要删除的学生学号:");
       while (true){
           Scanner sc=new Scanner(System.in);
           int id= sc.nextInt();
           for (int i = 0; i < list.size(); i++) {
               if(list.get(i).getId()==id){
                   list.remove(i);
                   System.out.println("删除成功");
                   return;
               }
           }
           System.out.println("未找到该学生,请重新输入id");
       }
    }
    public static void updateStudent(ArrayList<Student> list){
      while (true){
          System.out.print("请输入学生id:");
          Scanner sc=new Scanner(System.in);
          int id= sc.nextInt();
          for (int i = 0; i < list.size(); i++) {
              if(list.get(i).getId()==id){
                  System.out.println("已查询到该学生,请选择更改哪一条信息");
                  Student stu=list.get(i);
                  System.out.println("1.更改学生姓名 2.更改学生年龄 3.更改学生家庭地址");
                  int item=sc.nextInt();
                  if(item==1){
                      System.out.println("请输入更改后的学生姓名");
                      String name=sc.next();
                      stu.setName(name);
                      System.out.println("更改成功!");  return;
                  }else if(item==2){
                      System.out.println("请输入更改后的学生年龄");
                      int age=sc.nextInt();
                      stu.setAge(age);
                      System.out.println("更改成功!"); return;
                  }else if(item==3){
                      System.out.println("请输入更改后的学生家庭地址");
                      String address=sc.next();
                      stu.setName(address);
                      System.out.println("更改成功!"); return;
                  }
              }
          }
          System.out.println("未查询到该学生");
      }
    }
    public static void queryStudent(ArrayList<Student> list){
        if(list.size()==0){
            System.out.println("请先添加学生,暂无学生信息!");
            return;
        }
        System.out.println("1.根据学生id查询  2.查询全部学生");
        Scanner sc=new Scanner(System.in);
        int t= sc.nextInt();
       if(t==1){
           System.out.println("请输入要查询的学生id");
           while (true){
              int id= sc.nextInt();
              for (int i = 0; i < list.size(); i++) {
                  if(list.get(i).getId()==id){
                      System.out.println("id\t\t姓名\t\t年龄\t家庭地址");
                      Student stu=list.get(i);
                      System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
                      return;
                  }
              }
              System.out.println("没有该学生信息,请重新输入id");
          }
       }else if(t==2) {
           for (int i = 0; i < list.size(); i++) {
                   System.out.println("id\t\t姓名\t\t年龄\t家庭地址");
                   Student stu=list.get(i);
                   System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
           }
       }
    }
    public static boolean comain(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            if(id==list.get(i).getId()){
                return true;
            }
        }
        return false;
    }
}


总结


1.注册时所有的信息都有数据上的判断和要求,都是基础的String方法,没有使用正则表达式。


2.使用ArrayList集合来实现简单的学生管理系统,测试类和用数组实现的方法一样。


2.添加学生时候先对list数组内学生进行判断,确保学生id唯一,修改学生信息可以根据需求修改每一项数据,查询学生可以根据id查询或者查询全部。


注:需将用户类和学生类和测试类三个代码放在同一个包下才可运行



相关文章
|
1天前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
1天前
|
Java 程序员 图形学
程序员教你用代码制作飞翔的小鸟--Java小游戏,正好拿去和给女神一起玩
《飞扬的小鸟》Java实现摘要:使用IntelliJ IDEA和JDK 16开发,包含小鸟类`Bird`,处理小鸟的位置、速度和碰撞检测。代码示例展示小鸟图像的加载、绘制与旋转。同时有`Music`类用于循环播放背景音乐。游戏运行时检查小鸟是否撞到地面、柱子或星星,并实现翅膀煽动效果。简单易懂,可直接复制使用。
|
2天前
|
小程序 Java 关系型数据库
Java毕设之社区生活超市管理系统
Java毕设之社区生活超市管理系统
11 1
|
2天前
|
小程序 Java 关系型数据库
Java毕设之人事管理系统
Java毕设之人事管理系统
10 3
|
2天前
|
小程序 Java PHP
Java毕设之人才公寓管理系统
Java毕设之人才公寓管理系统
8 2
|
2天前
|
小程序 Java PHP
Java毕设之高校四六级报名管理系统
Java毕设之高校四六级报名管理系统
17 3
|
2天前
|
JavaScript Java 数据库
Java毕设之学院党员管理系统的设计与实现
Java毕设之学院党员管理系统的设计与实现
9 3
|
2天前
|
JavaScript 小程序 Java
Java毕设之学生社团管理系统的设计与实现
Java毕设之学生社团管理系统的设计与实现
8 2
|
2天前
|
监控 安全 Java
基于java的商店积分管理系统的设计与实现
基于java的商店积分管理系统的设计与实现
10 2
|
2天前
|
Java 数据库 Maven
Java毕设之新闻发布及管理系统的设计与实现
Java毕设之新闻发布及管理系统的设计与实现
10 1