Java学生管理系统(附完整代码)两个版本

目录

学生管理系统

需求:

分析:

初始菜单:

学生类:

添加功能:

删除功能:

修改功能:

查询功能:

设计图

学生管理系统(基础版)独立开发

所用方法

代码:

Student类:

StudentSystem类

代码解释:

Student类

StudentSystem类

用户交互

关键点

学生管理系统升级版

需求:

分析:

登录界面:

用户类:

注册功能:

登录功能:

忘记密码:

验证码规则:

设计图

学生管理系统(升级版)独立开发

所用方法

代码:

Student类:

StudentSystem类

User类

App类

代码解释:

学生管理系统

Student` 类

StudentSystem` 类

用户登录注册系统

User` 类

App` 类


学生管理系统

需求:

​ 采取控制台的方式去书写学生管理系统。

分析:

初始菜单:
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:

​ 属性:id、姓名、年龄、家庭住址

添加功能:

​ 键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一
删除功能:

​ 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单
修改功能:

​ 键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单
查询功能:

​ 打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id            姓名        年龄        家庭住址
heima001    张三        23         南京
heima002    李四        24         北京
heima003    王五        25         广州
heima004    赵六         26         深圳

设计图

学生管理系统(基础版)独立开发

所用方法

  • 写完一个分支,就测试一下,验证代码是否出错

  • 99%的汗水+1%天赋

代码:

Student类:
package com.mohuanan.student;public class Student {//属性private String id;private String name;private int age;private String address;//构造方法public Student() {}public Student(String id, String name, int age, String address) {this.id = id;this.name = name;this.age = age;this.address = address;}//set get 方法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 getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
StudentSystem类
package com.mohuanan.student;import java.util.ArrayList;
import java.util.Scanner;public class StudentSystem {public static void main(String[] args) {//创建一个集合 存储Student的对象ArrayList<Student> list = new ArrayList<>();//初始菜单界面loop: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("请输入您的选择:");Scanner sc = new Scanner(System.in);//next() 提高容错率String choose = sc.next();switch (choose) {//case 的常量是字符""case "1":addStudent(list);break;case "2":deleteStudent(list);break;case "3":amendStudent(list);break;case "4":queryStudent(list);break;case "5":System.out.println("您已退出学生管理系统");//第一种方法 指定退出 while循环break loop;//第二种方法 使用//exit()是System类中的一个静态方法,用于终止当前正在运行的Java虚拟机(JVM)//System.exit(0)中的0是一个整数参数,它表示程序正常退出的状态码//System.exit(0);default:System.out.println("没有这个选项");}}}//添加学生public static void addStudent(ArrayList<Student> list) {//创建Scanner对象Scanner sc = new Scanner(System.in);//创建Student对象Student stu = new Student();//键盘录入idSystem.out.println("请输入您要添加的学生的id");String id = sc.next();//判断id是否唯一boolean flag = judgeStudentId(list, id);if (flag) {//存在这个学生System.out.println("您输入的学生的id已经存在,请重新输入");//返回主菜单return;} else {//不存在这个学生//添加到Student对象里stu.setId(id);System.out.println("请输入学生的姓名");String name = sc.next();stu.setName(name);System.out.println("请输入学生的年龄");int age = sc.nextInt();stu.setAge(age);System.out.println("请输入学生的家庭住址");String address = sc.next();stu.setAddress(address);//将Student对象添加到集合里list.add(stu);}//提示添加成功System.out.println("添加成功");}//删除学生public static void deleteStudent(ArrayList<Student> list) {//键盘录入要删除的学生的idScanner sc = new Scanner(System.in);System.out.println("请输入您要删除的学生的id");String id = sc.next();int result = indexStudentId(list, id);if (result >= 0) {//id存在 删除list.remove(result);//提示System.out.println("删除成功");} else {//不存在System.out.println("该学生不存在,请核对后在删除");//回到主界面return;}}//修改学生public static void amendStudent(ArrayList<Student> list) {//录入要修改学生的idScanner sc = new Scanner(System.in);System.out.println("请输入您要修改学生的id");String id  = sc.next();int result = indexStudentId(list,id);if(result>=0){//存在这个学生//录入其他的信息 并修改System.out.println("请输入要修改学生的姓名");String name = sc.next();list.get(result).setName(name);System.out.println("请输入要修改学生的年龄");int age = sc.nextInt();list.get(result).setAge(age);System.out.println("请输入要修改学生的地址");String address = sc.next();list.get(result).setAddress(address);//提示修改成功System.out.println("修改成功");}else{//不存在System.out.println("您输入的要修改学生的id不存在");return;}}//查询学生public static void queryStudent(ArrayList<Student> list) {//输出系统所有的学生的信息//没有学生信息if (list.size() == 0) {System.out.println("当前无学生信息,请添加后查询");//返回主菜单return;}//有学生信息 打印所有的学生信息//表头System.out.println("id\t\t\t姓名\t\t年龄\t\t家庭住址");for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getId() + "\t\t\t" + stu.getName() + "\t " + stu.getAge() + "\t  " + stu.getAddress());}}//id唯一 存在id : true ,不存在: falsepublic static boolean judgeStudentId(ArrayList<Student> list, String id) {//调用 indexStudentId();方法int flag = indexStudentId(list, id);//flag<0 即==-1 返还 false//因为 索引必定是>=0的if (flag == -1) {return false;} else {return true;}}//返回所要查询的id 的下标 存在: 返回下标 ,不存在: -1public static int indexStudentId(ArrayList<Student> list, String id) {for (int i = 0; i < list.size(); i++) {//拿到集合里的每一个 id 加以判断Student stu = list.get(i);//因为是 比较引用数据类型里的内容 所以用equals()方法if (stu.getId().equals(id)) {return i;}}//没有找到 返回 -1return -1;}
}

代码解释:

这段代码是一个简单的Java学生管理系统,包含添加、删除、修改和查询学生信息的功能。它使用了Java的基础语法和集合框架(ArrayList),并通过控制台输入输出与用户交互。下面是对代码主要部分的解释:

Student类
  • 作用:定义了学生的基本信息,包括学生的idnameageaddress
  • 属性:私有属性,只能通过类内部的方法访问和修改。
  • 构造方法:提供了两个构造方法,一个是无参构造方法,另一个是带有所有属性参数的构造方法。
  • Getter和Setter方法:用于获取和设置学生对象的属性值。
StudentSystem类
  • 主要功能:实现了一个简单的文本界面学生管理系统,包括添加学生、删除学生、修改学生信息和查询所有学生信息的功能。
  • 主要方法
    • main方法:程序的入口点,循环显示菜单选项,根据用户输入选择不同的操作。
    • addStudent方法:向系统中添加一个新的学生信息。
    • deleteStudent方法:根据学生的id删除学生信息。
    • amendStudent方法:根据学生的id修改学生信息。
    • queryStudent方法:显示系统中所有学生的信息。
    • judgeStudentId方法:检查给定的学生id是否已经存在于系统中。
    • indexStudentId方法:返回给定学生id在列表中的索引位置,如果不存在则返回-1。
用户交互
  • 系统通过控制台输出菜单选项,并通过Scanner类读取用户的输入来选择不同的操作。
  • 根据用户选择,系统会调用相应的方法执行操作,并显示操作结果或者提示信息。
关键点
  • 数据存储:此系统使用ArrayList<Student>来存储所有学生信息。这是一个简单的内存存储方案,程序结束时数据会丢失。
  • 唯一性检查:在添加和修改学生信息时,系统会检查学生的id是否唯一。
  • 循环和选择:系统使用while循环和switch语句来实现反复显示菜单和处理用户的选择。
  • 程序退出:用户选择退出时,循环会被break loop;语句终止,程序正常结束。注释中提到的System.exit(0);也可以用来立即终止程序,但在这个场景下选择了更温和的循环退出方式。

这个学生管理系统是一个很好的Java基础练习项目,涵盖了面向对象编程、集合操作、控制流和基本的用户输入输出处理。


学生管理系统升级版

需求:

​ 为学生管理系统书写一个登陆、注册、忘记密码的功能。

​ 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
用户类:

​ 属性:用户名、密码、身份证号码、手机号码

注册功能:

​ 1,用户名需要满足以下要求:

​ 验证要求:

​ 用户名唯一

​ 用户名长度必须在3~15位之间

​ 只能是字母加数字的组合,但是不能是纯数字

​ 2,密码键盘输入两次,两次一致才可以进行注册。

​ 3,身份证号码需要验证。

​ 验证要求:

​ 长度为18位

​ 不能以0为开头

​ 前17位,必须都是数字

​ 最为一位可以是数字,也可以是大写X或小写x

​ 4,手机号验证。

​ 验证要求:

​ 长度为11位

​ 不能以0为开头

​ 必须都是数字

登录功能:

​ 1,键盘录入用户名

​ 2,键盘录入密码

​ 3,键盘录入验证码

验证要求:

​ 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

​ 判断验证码是否正确,如不正确,重新输入

​ 再判断用户名和密码是否正确,有3次机会

忘记密码:

​ 1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

​ 2,键盘录入身份证号码和手机号码

​ 3,判断当前用户的身份证号码和手机号码是否一致,

​ 如果一致,则提示输入密码,进行修改。

​ 如果不一致,则提示:账号信息不匹配,修改失败。

验证码规则:

​ 长度为5

​ 由4位大写或者小写字母和1位数字组成,同一个字母可重复

​ 数字可以出现在任意位置

比如:

​ aQa1K

设计图

学生管理系统(升级版)独立开发

所用方法

  • 写完一个分支,就测试一下,验证代码是否出错

  • 99%的汗水+1%天赋

代码:

Student类:
package com.mohuanan.student;public class Student {//属性private String id;private String name;private int age;private String address;//构造方法public Student() {}public Student(String id, String name, int age, String address) {this.id = id;this.name = name;this.age = age;this.address = address;}//set get 方法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 getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
StudentSystem类
package com.mohuanan.student;import java.util.ArrayList;
import java.util.Scanner;public class StudentSystem {public static void main(String[] args) {//创建一个集合 存储Student的对象ArrayList<Student> list = new ArrayList<>();//初始菜单界面loop: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("请输入您的选择:");Scanner sc = new Scanner(System.in);//next() 提高容错率String choose = sc.next();switch (choose) {//case 的常量是字符""case "1":addStudent(list);break;case "2":deleteStudent(list);break;case "3":amendStudent(list);break;case "4":queryStudent(list);break;case "5":System.out.println("您已退出学生管理系统");//第一种方法 指定退出 while循环break loop;//第二种方法 使用//exit()是System类中的一个静态方法,用于终止当前正在运行的Java虚拟机(JVM)//System.exit(0)中的0是一个整数参数,它表示程序正常退出的状态码//System.exit(0);default:System.out.println("没有这个选项");}}}//添加学生public static void addStudent(ArrayList<Student> list) {//创建Scanner对象Scanner sc = new Scanner(System.in);//创建Student对象Student stu = new Student();//键盘录入idSystem.out.println("请输入您要添加的学生的id");String id = sc.next();//判断id是否唯一boolean flag = judgeStudentId(list, id);if (flag) {//存在这个学生System.out.println("您输入的学生的id已经存在,请重新输入");//返回主菜单return;} else {//不存在这个学生//添加到Student对象里stu.setId(id);System.out.println("请输入学生的姓名");String name = sc.next();stu.setName(name);System.out.println("请输入学生的年龄");int age = sc.nextInt();stu.setAge(age);System.out.println("请输入学生的家庭住址");String address = sc.next();stu.setAddress(address);//将Student对象添加到集合里list.add(stu);}//提示添加成功System.out.println("添加成功");}//删除学生public static void deleteStudent(ArrayList<Student> list) {//键盘录入要删除的学生的idScanner sc = new Scanner(System.in);System.out.println("请输入您要删除的学生的id");String id = sc.next();int result = indexStudentId(list, id);if (result >= 0) {//id存在 删除list.remove(result);//提示System.out.println("删除成功");} else {//不存在System.out.println("该学生不存在,请核对后在删除");//回到主界面return;}}//修改学生public static void amendStudent(ArrayList<Student> list) {//录入要修改学生的idScanner sc = new Scanner(System.in);System.out.println("请输入您要修改学生的id");String id  = sc.next();int result = indexStudentId(list,id);if(result>=0){//存在这个学生//录入其他的信息 并修改System.out.println("请输入要修改学生的姓名");String name = sc.next();list.get(result).setName(name);System.out.println("请输入要修改学生的年龄");int age = sc.nextInt();list.get(result).setAge(age);System.out.println("请输入要修改学生的地址");String address = sc.next();list.get(result).setAddress(address);//提示修改成功System.out.println("修改成功");}else{//不存在System.out.println("您输入的要修改学生的id不存在");return;}}//查询学生public static void queryStudent(ArrayList<Student> list) {//输出系统所有的学生的信息//没有学生信息if (list.size() == 0) {System.out.println("当前无学生信息,请添加后查询");//返回主菜单return;}//有学生信息 打印所有的学生信息//表头System.out.println("id\t\t\t姓名\t\t年龄\t\t家庭住址");for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getId() + "\t\t\t" + stu.getName() + "\t " + stu.getAge() + "\t  " + stu.getAddress());}}//id唯一 存在id : true ,不存在: falsepublic static boolean judgeStudentId(ArrayList<Student> list, String id) {//调用 indexStudentId();方法int flag = indexStudentId(list, id);//flag<0 即==-1 返还 false//因为 索引必定是>=0的if (flag == -1) {return false;} else {return true;}}//返回所要查询的id 的下标 存在: 返回下标 ,不存在: -1public static int indexStudentId(ArrayList<Student> list, String id) {for (int i = 0; i < list.size(); i++) {//拿到集合里的每一个 id 加以判断Student stu = list.get(i);//因为是 比较引用数据类型里的内容 所以用equals()方法if (stu.getId().equals(id)) {return i;}}//没有找到 返回 -1return -1;}
}
User类
package com.mohuanan.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;}//set get 方法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;}
}
App类
package com.mohuanan.student;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class App {public static void main(String[] args) {//创建一个集合 存储User对象ArrayList<User> list = new ArrayList<>();//主菜单while (true) {System.out.println("欢迎来到学生管理系统");System.out.println("请选择操作1登录 2注册 3忘记密码 4退出");Scanner sc = new Scanner(System.in);String choose = sc.next();switch (choose) {case "1":login(list);break;case "2":register(list);break;case "3":forgetPassword(list);break;case "4":System.out.println("谢谢使用,再见!");System.exit(0);default:System.out.println("没有这个选项");}}}//忘记密码private static void forgetPassword(ArrayList<User> list) {//键盘录入用户名Scanner sc = new Scanner(System.in);System.out.println("请输入您的用户名");String username = sc.next();boolean flag = checkUsername(username);if(!flag){//用户名不存在System.out.println("用户名"+username+"未注册");//直接结束方法return;}//用户名存在System.out.println("请输入您的身份证号");String personId = sc.next();System.out.println("请输入您的手机号码");String phoneNumber = sc.next();//判断用户名和手机号码是否一致//根据用户名找到他在集合里的索引int index = indexUsername(list,username);User u = list.get(index);if(u.getPersonId().equals(personId) && u.getPhoneNumber().equals(phoneNumber)){//一致System.out.println("请输入您修改的密码");String amendPassword = sc.next();//修改密码u.setPassword(amendPassword);System.out.println("修改成功");}else{//不一致System.out.println("账号信息不匹配,修改失败");}}//注册private static void register(ArrayList<User> list) {Scanner sc = new Scanner(System.in);//声明放在循环的外面String username;while (true) {System.out.println("请输入用户名");username = sc.next();//判断用户名的合法boolean flag1 = checkUsername(username);if (!flag1) {//不合法System.out.println("用户名不合法,请重新输入");continue;}//合法//判断用户名的唯一性int index = indexUsername(list, username);if (index >= 0) {System.out.println(username + "这个用户名已经存在,请重新输入");continue;} else {System.out.println(username + "这个用户名可用");break;}}//录入密码String fristPassword;while (true) {System.out.println("请输入第一次的密码");fristPassword = sc.next();System.out.println("请输入第二次的密码");String secondPassword = sc.next();if (fristPassword.equals(secondPassword)) {break;} else {//两次密码不一致System.out.println("两次密码不一致,请重新输入");continue;}}//验证身份证号String personId;while (true) {System.out.println("请输入身份证号");personId = sc.next();boolean flag = checkpersonId(personId);if (flag) {break;} else {System.out.println("身份证号格式不对,请重新输入");continue;}}//验证手机号码String phoneNumber;while (true) {System.out.println("请输入您的手机号码");phoneNumber = sc.next();boolean flag = checkPhoneNumber(phoneNumber);if (flag) {//合法的手机号码break;} else {System.out.println("手机号码的格式不合法,请重新输入");continue;}}//前面都验证成功//创建User对象User u = new User(username, fristPassword, personId, phoneNumber);//添加到集合里面list.add(u);//提示System.out.println("注册成功");}//验证手机号码private static boolean checkPhoneNumber(String phoneNumber) {//长度11if (phoneNumber.length() != 11) {return false;}//不能以0开头char c = phoneNumber.charAt(0);if (c == '0') {return false;}//必须都是数字for (int i = 0; i < phoneNumber.length(); i++) {//遍历 只要有一个不为数字 就返回falsechar t = phoneNumber.charAt(i);if (!(t >= '0' && t <= '9')) {return false;}}//最后都满足了return true;}//验证身份证号private static boolean checkpersonId(String personId) {if (personId.length() != 18) {return false;}//前面17位必须是数字  注意这里-1for (int i = 0; i < personId.length() - 1; i++) {//i 是索引char c = personId.charAt(i);//有一位不满足 就返回falseif (!(c >= '0' && c <= '9')) {return false;}}//最后一位可以是数字 x  Xchar endChar = personId.charAt(personId.length() - 1);if ((endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X')) {return true;} else {return false;}}//登录private static void login(ArrayList<User> list) {//键盘录入用户名Scanner sc = new Scanner(System.in);//判断用户名和密码//三次机会for (int i = 0; i < 3; i++) {System.out.println("请输入您的用户名");String username = sc.next();//判断用户名是否注册int index = indexUsername(list, username);if (index < 0) {System.out.println("用户名" + username + "未注册,请先注册");//结束return;}System.out.println("请输入您的密码");String password = sc.next();//判断验证码 每输入一次 验证码更新一次while (true) {String rightAuthCode = createAuthCode();System.out.println("正确的验证码: " + rightAuthCode);System.out.println("请输入验证码");String inputAuthCode = sc.next();//验证码不区分 大小写if (rightAuthCode.equalsIgnoreCase(inputAuthCode)) {//验证码正确break;} else {System.out.println("验证码错误,请重新输入");continue;}}//创建User对象 用于checkUserInfo();User u = new User(username, password, null, null);boolean flag = checkUserInfo(list, u);if (flag) {//用户名和密码正确System.out.println("登录成功");System.out.println("可以开始使用学生管理系统");//创建一个StudentSystem对象 以便去调用StudentSystemStudentSystem ss = new StudentSystem();//调用对象里的方法ss.startStudentSystem();break;}if (i == 2) {System.out.println("用户名为" + username + "已被锁定,请联系广西老板莫华南");//结束方法return;}System.out.println("密码或用户名错误,请重新输入,剩下"+(2-i)+"次机会");}}//判断用户名和密码private static boolean checkUserInfo(ArrayList<User> list, User u) {//找到username所对应的下标int index = indexUsername(list, u.getUsername());//使用index比较密码User newUser = list.get(index);if (newUser.getPassword().equals(u.getPassword()) && newUser.getUsername().equals(u.getUsername())) {//用户名和密码相同return true;} else {//用户名和密码不相同return false;}}//生成验证码private static String createAuthCode() {//创建一个集合 存储大小写字母ArrayList<Character> list = new ArrayList<>();//给集合赋值for (int i = 0; i < 26; i++) {//大写//强制转化为char类型list.add((char) ('A' + i));//小写//强制转化为char类型list.add((char) ('a' + i));}//创建Random对象Random r = new Random();//创建StringBuilder对象 用于字符串的拼接StringBuilder sb = new StringBuilder();//4个字母for (int i = 0; i < 4; i++) {//设置r的范围int index = r.nextInt(list.size());//添加到StringBuilder对象里sb.append(list.get(index));}//一个数字int num = r.nextInt(10);sb.append(num);//把数字随机插入//因为字符串是不可改变的 所以转化为字符数组 进行操作char[] arr = sb.toString().toCharArray();//将最后一个字符和随机的字符进行 交换int randomIndex = r.nextInt(arr.length);char temp = arr[arr.length - 1];arr[arr.length - 1] = arr[randomIndex];arr[randomIndex] = temp;//使用String里的构造方法(将字符数组转化为字符串)return new String(arr);}//验证用户名的合法性private static boolean checkUsername(String username) {//长度3-15if (!(username.length() >= 3 && username.length() <= 15)) {return false;}//只能是字母加数字的组合for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);//有一个不满足就返回falseif (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))) {return false;}}//但是不能全是数字//统计字母的个数int count = 0;for (int i = 0; i < username.length(); i++) {//遍历拿到每一个 i: 索引char c = username.charAt(i);if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {count++;//找到一个就退出break;}}return count > 0;}//用户名唯一private static int indexUsername(ArrayList<User> list, String username) {//遍历 判断for (int i = 0; i < list.size(); i++) {//拿到里面的每一个User对象User u = list.get(i);if (u.getUsername().equals(username)) {//存在这个用户名 返回对应的下标return i;}}//没有找到 则返回-1 因为索引都是>=0的return -1;}
}

代码解释:

学生管理系统
Student` 类

这是一个简单的Java Bean,包含了学生的基本信息:idnameageaddress,以及对应的构造方法和getter/setter方法。这些方法允许在其他类中访问和修改Student对象的私有属性。

StudentSystem` 类

这个类是学生管理系统的核心,提供了一个文本界面供用户与系统交互,并实现了添加、删除、修改和查询学生的功能。

  • startStudentSystem方法:显示主菜单,根据用户的输入选择不同的操作。使用了switch语句来处理不同的选项,并用ArrayList<Student>来存储学生信息。
  • addStudent方法:允许用户添加新的学生信息。首先检查学生ID的唯一性,如果ID已存在,则提示用户重新输入;否则,将新学生添加到列表中。
  • deleteStudent方法:通过学生ID来删除学生信息。如果找到了对应的ID,就从列表中删除该学生。
  • amendStudent方法:允许用户修改现有学生的信息。用户输入学生ID,如果找到了对应的学生,就允许修改其信息。
  • queryStudent方法:显示所有学生的信息。如果列表为空,则提示当前无学生信息。
  • judgeStudentIdindexStudentId方法:辅助方法,用于检查学生ID的唯一性和获取学生ID在列表中的索引。
用户登录注册系统
User` 类

Student类似,这是一个简单的Java Bean,包含了用户的用户名、密码、身份证号和手机号码,以及对应的构造方法和getter/setter方法。

App` 类

这个类提供了用户登录注册系统的入口,实现了登录、注册、忘记密码和退出系统的功能。

  • login方法:允许用户登录系统。用户需要输入用户名和密码,还有一个验证码的校验步骤。如果登录成功,用户将进入学生管理系统。
  • register方法:允许用户注册新账户。需要输入用户名、密码、身份证号和手机号码,并对这些信息进行格式和合法性校验。
  • forgetPassword方法:如果用户忘记了密码,可以通过验证身份证号和手机号码来重置密码。
  • checkPhoneNumbercheckpersonIdcheckUserInfocreateAuthCodecheckUsernameindexUsername方法:辅助方法,用于校验用户信息的合法性、生成验证码、检查用户名和密码的正确性等。

这个系统通过控制台输入和输出与用户交互,使用Scanner类读取用户输入。整个系统通过在内存中的ArrayList管理用户和学生信息,没有使用数据库。这意味着一旦程序停止运行,所有添加或修改的信息将会丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW双通道太阳射电频谱观测系统

LabVIEW双通道太阳射电频谱观测系统 开发了一个基于LabVIEW平台开发的双通道高速太阳射电频谱观测系统。该系统实时监测太阳射电爆发&#xff0c;具有随机性、持续时间短、变化快等特点。通过高速信号采集卡实现1.5 GS/s的信号采集&#xff0c;时间分辨率可达4ms&#xff0c;频…

类的新功能

类的新功能 默认成员函数 在C11之前&#xff0c;一个类中有如下六个默认成员函数&#xff1a; 构造函数。拷贝构造函数赋值重载析构函数取地址重载函数const取地址函数 其中前四个默认成员函数最重要&#xff0c;后面两个默认成员函数一般不会用到&#xff0c;这里默认成员…

PHPCMS v9城市分站插件

PHPCMS自带的有多站点功能&#xff0c;但是用过的朋友都知道&#xff0c;自带的多站点功能有很多的不方便之处&#xff0c;例如站点栏目没法公用&#xff0c;每个站点都需要创建模型、每个站点都需要单独添加内容&#xff0c;还有站点必须静态化。如果你内容很多这些功能当然无…

虚函数和纯虚函数

虚函数 被virtual修饰的成员函数称为虚函数 定义一个函数为虚函数&#xff0c;是为了使用基类指针调用子类函数。虚函数&#xff0c;不代表函数不被实现。只有纯虚函数才不被实现&#xff0c;纯虚函数定义了一个接口&#xff0c;起到规范的作用。 #include <iostream>…

【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式&#xff0c;一般来说&#xff0c;FIFO也需要承担异步时钟域模块间数据传输的功能&#xff0c;本文介绍异步AXIS FIFO的实现方式。 如前文所说&#xff0c;AXI-Stream FIFO十分类似于FWFT异步FIFO&#xff0c;推荐参考前…

B201-SpringBoot整合Shiro

目录 ShiroShiro核心组件SpringBoot整合Shiro1.创建新SpringBoot项目和导包2.自定义Shiro过滤器Realm3.配置类ShiroConfig编写认证和授权规则案例&#xff1a;案例思路改造ShiroConfigAccountController配置视图解析器templates下新建3个页面启动测试 登录认证设置自定义登录页…

【C++庖丁解牛】自平衡二叉搜索树--AVL树

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1 AVL树的概念2. AVL…

探索未来的视觉智能:AI视频分析系统的崭新时代

随着人工智能技术的飞速发展&#xff0c;AI视频分析系统正逐渐成为各行业的关注焦点。这些系统不仅可以帮助安防领域实现更智能化的监控&#xff0c;还能在零售、交通、医疗等领域发挥重要作用。本文将深入探讨AI视频分析系统的崭新时代&#xff0c;揭示其未来发展的无限可能。…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候&#xff0c;自动进入安全模式 在安全模式中&#xff0c;NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后&#xff0c;更新fsimage文件 更新完成之后&#xff0c;NameNode会将fsimage文件中的元数据加…

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 网上书城管理系统是一个基于互联网的在线购书平台&#…

文献学习-23-MRM:用于遗传学医学图像预训练的掩码关系建模

MRM: Masked Relation Modeling for Medical Image Pre-Training with Genetics Authors: Qiushi Yang, Wuyang Li, Baopu Li, Yixuan Yuan Source: ICCV 2023 Abstract: 关于自动多模态医疗诊断的 ODERN 深度学习技术依赖于大量的专家注释&#xff0c;这既耗时又令人望而却…

【Spring MVC】快速学习使用Spring MVC的注解及三层架构

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring MVC】快速学习使用Spring MVC的注解及三层架构 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 Spring Web MVC一: 什么是Spring Web MVC&#xff1…

何时应用 RAG 与微调

充分发挥 LLM 的潜力需要在检索增强生成&#xff08;RAG&#xff09;和微调之间选择正确的技术。 让我们来看看何时对 LLM、较小的模型和预训练模型使用 RAG 与微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大小对 RAG 进行…

python 贪吃蛇

main.py #!/usr/bin/env python3 # -*- coding: utf-8 -*-import pygame # 导入pygame模块from setting import Setting import startmain as sm from pygame.sprite import Groupdef InitGame():print("InitGame")pygame.init() #初始化pygameai_settings Se…

【图轮】【 最小生成树】【 并集查找】1489. 找到最小生成树里的关键边和伪关键边

本文涉及知识点 图轮 最小生成树 并集查找 关键边 1489. 找到最小生成树里的关键边和伪关键边 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 to…

书生·浦语全链路开源开放体系 第二期

文章目录 大模型背景大模型开发流程InternLM 2.0SFT与RLHFInternLM2主要亮点 书生浦语全链路开源开放体系数据-书生万卷InternLM-Train微调 XTuner评测工具 OpenCompass部署 LMDeploy智能体 Lagent智能体工具箱 AgentLego 大模型背景 专用模型&#xff1a;针对特定的任务&…

【Web】NSSCTF Round#20 Basic 个人wp

目录 前言 真亦假&#xff0c;假亦真 CSDN_To_PDF V1.2 前言 感谢17&#x1f474;没让我爆零 真亦假&#xff0c;假亦真 直接getshell不行&#xff0c;那就一波信息搜集呗&#xff0c;先开dirsearch扫一下 扫的过程中先试试常规的robots.txt,www.zip,shell.phps,.git,.sv…

使用Docker Compose一键部署前后端分离项目(图文保姆级教程)

一、安装Docker和docker Compose 1.Docker安装 //下载containerd.io包 yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm //安装依赖项 yum install -y yum-utils device-mapper-persistent-data l…

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器&#xff0c;它除了能对游戏进行内存扫描、调试、反汇编 之外&#xff0c;还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器&#xff0c;被大神发现竟然还能加速百度网盘资源下载&#xf…

c++前言

目录 1. 什么是 C 2. C 发展史 3. C 的重要性 4. 如何学习 C 5. 关于本门课程 1. 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度的抽象和建模时&#xff0c; C 语言则不合适…