学生管理系统--项目演示

    • 学生管理系统
      • 需求
      • 思路
      • 代码演示
        • 学生类
        • 主界面
    • 学生管理系统(升级)
      • 需求
      • 思路

学生管理系统

需求

  • 1.添加学生
  • 2.删除学生
  • 3.修改学生
  • 4.查看所有学生
  • 5.退出

请输入你的选择

思路

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

代码演示

学生类

public class Student {private String id; private String name;private int age;private String address;//省略构造函数和成员方法
}

主界面

import java.util.ArrayList;
import java.util.Scanner;public class StudentManager {public static void main(String[] args) {//创建学生对象,用于存储学生数据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);String choose = sc.next();switch (choose) {case "1":addStudent(list);break;case "2":deleteStudent(list);break;case "3":updataStudent(list);break;case "4":quaryStudent(list);break;case "5":System.out.println("谢谢使用");//break; 不能跳出while循环,只能跳出当前switch//方法1:跳出loop(外面的while)循环//break loop;//方法2:直接JVM退出System.exit(0);default:System.out.println("你输入的选项序号有误,请重新输入");break;}}}//-----------------------------------------------------------------------public static void addStudent(ArrayList<Student> list) {Student s = new Student();Scanner sc = new Scanner(System.in);String id;while (true) {System.out.println("请输入学生学号: ");id = sc.next();boolean flag = isUsed(list, id);if (flag) {System.out.println("你输入的学号已经被使用,请重新输入");} else {s.setId(id);break;}}System.out.println("请输入学生姓名: ");String name = sc.next();s.setName(name);System.out.println("请输入学生年龄: ");int age = sc.nextInt();s.setAge(age);System.out.println("请输入学生居住地: ");String address = sc.next();s.setAddress(address);list.add(s);System.out.println("添加成功");}//-----------------------------------------------------------------------public static int getIndex(ArrayList<Student> list, String id) {for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);String sid = stu.getId();if (sid.equals(id)) {return i;}}return -1;}//-----------------------------------------------------------------------public static boolean isUsed(ArrayList<Student> list, String id) {return getIndex(list, id) >= 0;}//-----------------------------------------------------------------------public static void quaryStudent(ArrayList<Student> list) {//先判断集合中是否有数据if (list.size() == 0) {System.out.println("当前无学生信息,请先添加后再查询");return;}//打印表头信息System.out.println("学号" + " \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());}}//-----------------------------------------------------------------------public static void deleteStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);System.out.println("请输入你要删除的学生学号: ");String id = sc.next();int index = getIndex(list, id);if (index == -1) {System.out.println("id: " + id + "不存在,删除失败,请重新输入");} else {list.remove(index);System.out.println("id为: " + id + "的学生信息删除成功");}}//-----------------------------------------------------------------------public static void updataStudent(ArrayList<Student> list) {Scanner sc = new Scanner(System.in);System.out.println("输入你要修改的学生学号: ");String id = sc.next();int index = getIndex(list, id);if (index == -1) {System.out.println("id: " + id + "不存在,请重新输入");return;}Student stu = list.get(index);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);System.out.println("学生信息修改成功");}
}

学生管理系统(升级)

需求

  • 为学生管理系统书写一个登陆、注册、忘记密码的功能
  • 只有用户登录成功后,才能进入到学生管理系统中进行增删查改操作

思路

登陆界面:

	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位数字组成,同一字母可重复
  • 数字可以出现在任意位置

比如:aQ3av

//为了app中调用,将main方法改成startStudentSystem
public class StudentSystem {public static void startStudentSystem() {//其他不变}
}
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class App {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忘记密码  4退出");System.out.println("输入你的选择:");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);break;default:System.out.println("没有这个选项");break;}}}//-----------------------------------------------------------------------private static void register(ArrayList<User> list) {Scanner sc = new Scanner(System.in);User u = new User();//1.键盘录入用户名while (true) {System.out.println("请输入用户名");String username = sc.next();//开发时,先验证格式是否正确,再验证是否唯一//因为在以后所有的数据都是存在数据库中的,如果我们要校验,需要使用到网络资源// -->将需要联网的操作放到最后,先在本地进行格式校验boolean flag1 = checkUsername(username);//格式校验:用户名长度必须在3~15位之间,只能是字母加数字的组合if (!flag1) {System.out.println("用户名格式不满足条件,请重新输入");continue;}//用户名唯一boolean flag2 = contains(list, username);if (flag2) {System.out.println("用户名" + username + "已存在,无法注册,需要重新输入");} else {System.out.println("用户名" + username + "可用");u.setUsername(username);break;}}//2.键盘录入密码while (true) {System.out.println("请输入要注册的密码:");String password1 = sc.next();System.out.println("请再次输入要注册的密码:");String password2 = sc.next();if (!password1.equals(password2)) {System.out.println("两次密码输入不一致,请重新输入");continue;} else {System.out.println("两次密码一致,继续录入其他数据");u.setPassword(password1);break;}}//3.键盘录入身份证号码while (true) {System.out.println("请输入身份证号码");String personID = sc.next();boolean flag3 = checkPersonID(personID);if (flag3) {System.out.println("身份证号码满足要求");u.setPersonID(personID);break;} else {System.out.println("身份证号码格式有误,请重新输入");// continue;}}//4.键盘录入手机号码while (true) {System.out.println("请输入手机号码");String phoneNumber = sc.next();boolean flag4 = checkPhoneNumber(phoneNumber);if (flag4) {System.out.println("手机号码满足要求");u.setPhoneNumber(phoneNumber);break;} else {System.out.println("手机号码格式有误,请重新输入");//continue;}}list.add(u);System.out.println("注册成功");printList(list);}//-----------------------------------------------------------------------private static void printList(ArrayList<User> list) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);System.out.println(user.getUsername() + "," + user.getPassword() + "," + user.getPersonID() + "," + user.getPhoneNumber());}}//-----------------------------------------------------------------------private static boolean checkUsername(String username) {//用户名长度必须在3~15位之间int len = username.length();if (len < 3 || len > 15) {return false;}//只能是字母加数字的组合for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);if (!((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++) {char c = username.charAt(i);if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {count++;//有一个满足就可以break,eg:a123241break;}}return count > 0;}//-----------------------------------------------------------------------private static boolean contains(ArrayList<User> list, String username) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);String rightUsername = user.getUsername();if (rightUsername.equals(username)) {return true;}}return false;}//-----------------------------------------------------------------------private static boolean checkPersonID(String personID) {//长度为18if (personID.length() != 18) {return false;}//不能以0开头//char c = personID.charAt(0);if (personID.startsWith("0")) {return false;}//前17为必须都是数字for (int i = 0; i < personID.length() - 1; i++) {char c = personID.charAt(i);if (!(c >= '0' && c <= '9')) {return false;}}//最后一位可以是数字,也可以是大写X或小写xchar endChar = personID.charAt(personID.length() - 1);if (!(endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X')) {return false;}return true;}//-----------------------------------------------------------------------private static boolean checkPhoneNumber(String phoneNumber) {//长度为11if (phoneNumber.length() != 11) {return false;}//不能以0开头if (phoneNumber.startsWith("0")) {return false;}//必须都是数字for (int i = 0; i < phoneNumber.length(); i++) {char c = phoneNumber.charAt(i);if (!(c >= '0' && c <= '9')) {return false;}}return true;}//-----------------------------------------------------------------------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();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);System.out.println("请输入验证码");String code = sc.next();if (rightCode.equalsIgnoreCase(code)) {System.out.println("验证码正确");break;} else {System.out.println("验证码错误");continue;}}//封装的思想:我们把一些零散的数据(用户名和密码),封装成一个对象//调用方法时不需要那么多参数,只需要传入对象即可User useInfo = new User(username, password, null, null);boolean result = checkUserInfo(list, useInfo);if (result) {System.out.println("登陆成功,可以开始使用学生管理系统");//创建对象,调用方法,启动学生管理系统StudentSystem ss = new StudentSystem();ss.startStudentSystem();break;} else {if (i == 2) {System.out.println("当前账户" + username + "被锁定,请联系朵朵客服:XXX-XXXXX");return;} else {System.out.println("登陆失败,用户名或密码错误,还剩下 " + (2 - i) + " 次机会");}}}}//-----------------------------------------------------------------------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));}StringBuilder sb = new StringBuilder();Random r = new Random();for (int i = 0; i < 4; i++) {int index = r.nextInt(list.size());char c = list.get(index);sb.append(c);}int number = r.nextInt(10);sb.append(number);char[] arr = sb.toString().toCharArray();int randomIndex = r.nextInt(arr.length);char temp = arr[randomIndex];arr[randomIndex] = arr[arr.length - 1];arr[arr.length - 1] = temp;return new String(arr);}//-----------------------------------------------------------------------private static boolean checkUserInfo(ArrayList<User> list, User useInfo) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getUsername().equals(useInfo.getUsername()) && user.getPassword().equals(useInfo.getPassword())) {return true;}}return false;}//-----------------------------------------------------------------------private 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 password2 = sc.next();if (password.equals(password2)) {System.out.println("两次密码输入一致");user.setPassword(password);System.out.println("密码修改成功!");break;} else {System.out.println("两次密码输入不一致,请重新输入");continue;}}}//-----------------------------------------------------------------------private static int findIndex(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;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部