云计算百科
云计算领域专业知识百科平台

Java综合项目(一)之学生管理系统

 前言:本次项目是对多天以来Java学习的总结,项目主体包含两部分,分别是学生登录界面以及学生信息管理界面,使用ArrayList集合对数据进行存储。总体包含Student和User两个JavaBean类和两个界面测试类
在这里插入图片描述

一、双界面展示

在这里插入图片描述

在这里插入图片描述

二、JavaBean类

学生类:

  • 成员变量:id、姓名、年龄、家庭住址。
  • 构造方法:无参构造和带四个参数的构造。
  • 成员方法:每个成员变量对应给出get/set方法。

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;
}

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;
}
}

用户类:

  • ​属性:用户名、密码、身份证号码、手机号码
  • 构造方法:无参构造和带四个参数的构造。
  • 成员方法:每个成员变量对应给出get/set方法。

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.1 main()方法

思路:
 使用sout语句完成对登录界面的构建。
 使用Scanner对象输入操作选项。
 使用switch语句完成操作的选择。
 使用循环反复操作。

public static void main(String[] args) {
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);
case "2" -> register(list);
case "3" -> forgetPassword(list);
case "4" -> {
System.out.println("谢谢使用,再见");
System.exit(0);
}
default -> System.out.println("选项错误,请重新输入");
}

}

}

3.2注册功能register()方法

需求:

  • 用户名需要满足要求: ​用户名唯一; 用户名长度必须在3~15位之间; ​只能是字母加数字的组合,但是不能是纯数字
  • ​密码需要满足要求:键盘输入两次,两次一致才可以进行注册。
  • 身份证号码需要满足要求: 长度为18位 ;不能以0为开头 前17位,必须都是数字; 最为一位可以是数字,也可以是大写X或小写x
  • 手机号需要满足要求: 长度为11位 ;不能以0为开头 ;必须都是数字
  • 思路:
     创建用户对象和扫描器,用于接收用户输入并存储用户信息
     分步骤验证并获取用户信息:
      验证用户名格式及唯一性,直到输入符合要求
      验证两次输入密码的一致性,直到输入一致
      验证身份证格式,直到输入符合要求
      验证手机号格式,直到输入符合要求
     所有信息验证通过后,提示注册成功
     将新用户添加到用户列表中

    public static void register(ArrayList<User> list){
    User u = new User();
    Scanner sc = new Scanner(System.in);
    //判断用户名
    while (true) {
    System.out.println("请输入用户名");
    String username = sc.next();
    //先判断合法,在判断唯一
    boolean flag = checkUserName(username);
    if(!flag){
    System.out.println("格式不满足条件,请重新输入");
    continue;
    }
    boolean flag2 = contains(list, username);
    if(flag2){
    //用户名已存在,重新输入
    System.out.println("用户名" + username + "已存在,请重新输入");
    }else {
    System.out.println("用户名" + username + "输入成功" );
    u.setUsername(username);
    break;
    }
    }
    //判断密码
    while (true){
    System.out.println("请输入密码");
    String password1 = sc.next();
    System.out.println("请再次输入密码");
    String password2 = sc.next();
    boolean flag = checkPassword(password1,password2);
    if(!flag){
    System.out.println("密码不一致,请重新输入");
    }else {
    u.setPassword(password1);
    System.out.println("密码一致,输入其他数据");
    break;
    }
    }
    //判断身份证
    while (true){
    System.out.println("请输入身份证");
    String personId = sc.next();
    boolean flag = checkPersonId(personId);
    if(flag){
    System.out.println("身份证号码满足要求");
    u.setPersonId(personId);
    break;
    }else {
    System.out.println("身份证格式错误,请重新输入");
    }
    }
    //判断手机号
    while (true){
    System.out.println("请输入手机号");
    String phoneNumber = sc.next();
    boolean flag = checkPhoneNumber(phoneNumber);
    if(flag){
    System.out.println("手机格式正确");
    u.setPhoneNumber(phoneNumber);
    break;
    }else {
    System.out.println("手机号格式错误,请重新输入");
    }
    }

    System.out.println("注册成功!");
    list.add(u);
    //遍历集合
    printList(list);

    }

    3.3登录功能login()方法

    需求:

    • 键盘录入用户名、密码、验证码
    • ​用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
    • ​判断验证码是否正确,如不正确,重新输入
    • ​再判断用户名和密码是否正确,有3次机会

    思路:
     最多提供 3 次登录机会,通过 for 循环控制
     每次登录流程:
      输入用户名,检查是否已注册,未注册则直接返回
      输入密码后,生成并验证验证码(忽略大小写),直到输入正确
      将用户名和密码封装成 User 对象,验证与列表中存储的信息是否匹配
     验证通过则提示登录成功,启动学生管理系统
     验证失败则提示错误,若 3 次都失败则锁定账号并返回,否则显示剩余尝试次数

    //登录功能
    public 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();
    //判断用户名是否存在
    boolean flag = contains(list,username);
    if (!flag){
    System.out.println("用户名" + username + "未注册,请先注册再登录");
    return;
    }
    System.out.println("请输入密码");
    String password = sc.next();

    while (true) {
    String rightCode = getCode();
    System.out.println("请输入验证码(" + rightCode + ")");
    String Code = sc.next();
    //忽略大小写
    if (Code.equalsIgnoreCase(rightCode)){
    System.out.println("验证码正确");
    break;
    }else{
    System.out.println("验证码错误");
    continue;
    }
    }
    //验证用户名和密码
    //定义一个方法验证用户名和密码是否正确

    //封装思想的应用:
    //可以把一些零散的数据,封装成一个对象
    //以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据
    User userInfo = new User(username,password,null,null);
    boolean result = checkUserInfo(list,userInfo);
    if (result){
    System.out.println("登录成功,可以开始使用学生管理系统");
    //创建对象调用方法,启动学生管理系统
    StudentSystem ss = new StudentSystem();
    ss.startStudentSystem();
    break;
    }else {
    System.out.println("登录失败,用户名或密码错误");
    if (i == 2){
    System.out.println("当前账号" + username + "被锁定");
    return;
    }else{
    System.out.println("用户名或密码错误,还剩下" + (2i) + "次机会");
    }
    }
    }
    }

    3.4忘记密码功能forgetPassword()方法

    需求:

    • 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
    • 键盘录入身份证号码和手机号码
    • 判断当前用户的身份证号码和手机号码是否一致, 如果一致,则提示输入密码,进行修改。 如果不一致,则提示:账号信息不匹配,修改失败。

    思路:
     输入用户名,检查是否已注册,未注册则直接返回
     验证身份:输入身份证号和手机号,与该用户注册时的信息比对
     信息验证通过后,进入密码修改流程:
      输入新密码并再次确认
      两次输入一致则更新密码,否则重新输入
     密码修改成功后给出提示

    //忘记密码
    public static void forgetPassword(ArrayList<User> list){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入用户名");
    String username = sc.next();
    boolean flag = contains(list,username);
    if (!flag){
    System.out.println("当前用户" + username + "未注册,请先注册");
    return;
    }

    //键盘录入身份证和手机号
    System.out.println("请输入身份证号码");
    String personId = sc.next();
    System.out.println("请输入手机号");
    String phoneNumber = sc.next();

    //需要把用户对象通过索引先获取出来
    int index = findIndex(list,username);
    User user = list.get(index);
    //比较用户对象中的手机号码和身份证是否相同
    if (!(user.getPersonId().equalsIgnoreCase(personId) && user.getPhoneNumber().equals(phoneNumber))){
    System.out.println("身份证或手机输入有误,不能修改");
    return;
    }

    //当代码执行到这里,表示所有的数据全部验证成功,可以修改
    while (true) {
    System.out.println("请输入新的密码");
    String password = sc.next();
    System.out.println("请再次输入新的密码");
    String againPassword = sc.next();
    boolean result = checkPassword(password,againPassword);
    if (result){
    System.out.println("输入一致");
    user.setPassword(password);
    break;
    }else {
    System.out.println("两次密码输入不一致,请重新输入");
    continue;
    }
    }

    System.out.println("密码修改成功");
    }

    四、学生管理系统界面

    需求:

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

    4.1 startStudentSystem()方法

    思路:
     使用sout语句完成对登录界面的构建。
     使用Scanner对象输入操作选项。
     使用switch语句完成操作的选择。
     使用循环反复操作。

    public static void startStudentSystem() {
    ArrayList<Student> list = new ArrayList<>();
    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);
    String choose = sc.next();
    switch (choose){
    case "1" -> addStudent( list);
    case "2" -> deleteStudent(list);
    case "3" -> updateStudent(list);
    case "4" -> queryStudent(list);
    case "5" -> {
    System.out.println();
    System.exit(0);
    }
    default -> System.out.println("没有这个选项");
    }
    }
    }

    4.2 添加功能:

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

    • id唯一

    思路:
     创建学生对象和扫描器,用于存储学生信息和接收输入
     验证并设置学生 ID:
      循环输入 ID,检查是否已存在
      若 ID已存在则提示重新输入,否则设置该 ID 并退出循环
     依次输入并设置学生的姓名、年龄、家庭地址
     将完整的学生对象添加到列表中,提示添加成功

    //添加学生
    public static void addStudent(ArrayList<Student> list){
    Scanner sc = new Scanner(System.in);
    Student stu = new Student();
    while (true) {
    System.out.println("请输入id:");
    String id = sc.next();
    boolean flag = contains(list,id);
    if (flag){
    //表示id已经存在,需要重新录入
    System.out.println("id已经存在,请重新录入");
    }else{
    stu.setId(id);
    break;
    }
    }

    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);
    list.add(stu);
    System.out.println("添加成功");
    }

    4.3删除功能:

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

    • id存在删除
    • id不存在,需要提示不存在,并回到初始菜单

    思路:
     接收用户输入的要删除的学生 ID
     查询该 ID 在学生列表中的索引位置
     根据索引判断操作:
      若索引有效(存在该学生),则从列表中删除该学生并提示成功
      若索引无效(不存在该学生),则提示删除失败

    //删除学生
    public static void deleteStudent(ArrayList<Student> list){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入要删除的id");
    String id = sc.next();
    //查询id在集合中的索引
    int index = getIndex(list,id);
    //对id进行判断
    //如果-1,就表示不存在,结束方法,回到初始菜单
    if(index >= 0){
    //如果大于等于0的,表示存在,直接删除
    list.remove(index);
    System.out.println("id为" + id + "的学生删除成功");
    }else{
    System.out.println("id不存在,删除失败");
    }
    }

    4.4修改功能:

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

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

    思路:
     接收用户输入的要修改的学生 ID
     查询该 ID 在学生列表中的索引位置
     根据索引判断操作:
      若索引无效(不存在该学生),提示修改失败并结束
      若索引有效(存在该学生),则依次输入修改后的姓名、年龄、家庭地址
     创建新学生对象并设置修改后的信息(保持原 ID),替换列表中对应位置的学生信息

    //修改学生
    public static void updateStudent(ArrayList<Student> list){
    Student stu = new Student();
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入要修改的id");
    String id = sc.next();
    //查询id在集合中的索引
    int index = getIndex(list,id);
    //对id进行判断
    //如果-1,就表示不存在,结束方法,回到初始菜单
    if(index >= 0){
    //如果大于等于0的,表示存在,修改
    //list.set(index,);

    System.out.println("请输入修改后的姓名");
    String name = sc.next();
    System.out.println("请输入修改后的年龄");
    int age = sc.nextInt();
    System.out.println("请输入修改后的家庭地址");
    String address = sc.next();
    stu.setId(id);
    stu.setName(name);
    stu.setAge(age);
    stu.setAddress(address);
    list.set(index,stu);//Student stu = list.get(index)可直接修改
    System.out.println("id为" + id + "的学生修改成功");
    }else{
    System.out.println("id"+id+"不存在,修改失败");
    }
    }

    4.5查询功能:

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

    • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
    • 如果有学生信息,需要输出。

    思路:
     先检查学生列表是否为空,若为空则提示用户添加后再查询并返回
     若列表有数据,先打印表头(id、姓名、年龄、家庭地址)
     遍历学生列表,依次获取每个学生对象的信息并按格式输出
      完成所有学生信息的展示

    //查询学生
    public static void queryStudent(ArrayList<Student> list){
    //没有学生信息时
    if(list.size() == 0){
    System.out.println("当前无学生信息,请添加后再查询");
    //跳出
    return;
    }
    System.out.println("id\\t\\t姓名\\t年龄\\t家庭地址");
    for (int i = 0; i < list.size(); i++) {
    Student stu = list.get(i);
    System.out.println(stu.getId() + "\\t" + stu.getName() + "\\t" + stu.getAge() + "\\t" +stu.getAddress());
    }

    }

    五、功能测试

    1.登录系统

    1.1注册功能

    在这里插入图片描述

    1.2登录功能

    在这里插入图片描述

    1.3忘记密码功能

    在这里插入图片描述

    2.学生信息管理界面

    2.1添加功能

    在这里插入图片描述

    2.2查询功能

    在这里插入图片描述

    2.3删除功能

    在这里插入图片描述

    2.4修改功能

    在这里插入图片描述

    注:为节省篇幅,一些在功能中调用的方法功能未全部列出,如若需要全部源码,请私信。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Java综合项目(一)之学生管理系统
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!