学生管理系统
学生管理系统升级版
package test;
import java.util.ArrayList;
import java.util.Objects;
import java.util.Scanner;
public class StudentManagementSystem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("欢迎来到学生管理系统");
ArrayList<UserMember> userMembers = new ArrayList<UserMember>();
Loop0 : while (true) {
System.out.println("请选择操作1登录 2注册 3忘记密码");
int select1 = sc.nextInt();
switch (select1){
case 1:
// 登录
logIn(userMembers);
break Loop0;
case 2:
// 注册
// 用户名唯一
register(userMembers);
break;
case 3:
// 忘记密码
forgetPassword(userMembers);
break;
}
}
// 创建学生系统集合
ArrayList<StudentMember> studentMembers = new ArrayList<StudentMember>();
boolean flag = true;
Loop : while (true) {
System.out.println("\"-------------欢迎来到黑马学生管理系统----------------\"\n" +
"\"1:添加学生\"\n" +
"\"2:删除学生\"\n" +
"\"3:修改学生\"\n" +
"\"4:查询学生\"\n" +
"\"5:退出\"" );
System.out.print("请输入您的选择:");
int select = sc.nextInt();
switch (select) {
case 1 ->
// 添加学生, 要求id唯一
add(studentMembers);
case 2 -> {
// 删除功能
// 需要集合和id,存在则删除,否则提示
System.out.print("请输入要删除的学生id:");
int deleteId = sc.nextInt();
delete(studentMembers, deleteId);
}
case 3 -> {
// 修改功能
// 需要要修改的学生的id和集合
System.out.print("请输入要修改的学生id:");
int modifyId = sc.nextInt();
modify(studentMembers, modifyId);
}
case 4 ->
// 查询功能
// 打印所有学生的信息
// 若没有学生信息则提示
// 有信息则打印
query(studentMembers);
case 5 -> {
// 退出
break Loop;
// System.exit(0);
}
}
}
}
// 添加学生, 要求id唯一
// 需要对象数组
// 返回对象数组
public static void add(ArrayList<StudentMember> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入添加学生的信息(id、姓名、年龄、家庭住址):");
// 创建学生对象
StudentMember student = new StudentMember();
// 判断id是否唯一
Loop2 : while (true) {
System.out.print("添加学生的id:");
int studengtId = sc.nextInt();
for (StudentMember studentMember : list) {
if (studengtId == studentMember.getId()) {
// 若有相同id则返回添加失败
System.out.println("已存在相同id,请重新添加!");
continue Loop2;
}
}
// 若没有相同的则添加
student.setId(studengtId);
break;
}
System.out.print("添加学生的姓名:");
String studentName = sc.next();
student.setName(studentName);
System.out.print("添加学生的年龄:");
int studentAge = sc.nextInt();
student.setAge(studentAge);
System.out.print("添加学生的家庭住址:");
String studentAddress = sc.next();
student.setAddress(studentAddress);
list.add(student);
}
// 删除功能
// 需要集合和id,存在则删除,否则提示
public static void delete(ArrayList<StudentMember> list, int id){
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId() == id){
// 如果存在则删除该成员
list.remove(i);
return;
}
}
// 否则提示
System.out.println("不存在该学生信息, 请重新输入!");
}
// 修改功能
// 需要要修改的学生的id和集合
public static void modify(ArrayList<StudentMember> list, int id){
Scanner sc = new Scanner(System.in);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId() == id){
// 如果存在则继续录入信息
System.out.print("修改学生的姓名:");
String studentName = sc.next();
list.get(i).setName(studentName);
System.out.print("修改学生的年龄:");
int studentAge = sc.nextInt();
list.get(i).setAge(studentAge);
System.out.print("修改学生的家庭住址:");
String studentAddress = sc.next();
list.get(i).setAddress(studentAddress);
return;
}
}
// 否则提示
System.out.println("不存在该学生信息, 请重新输入!");
}
// 查询功能
// 打印所有学生的信息
// 若没有学生信息则提示
// 有信息则打印
public static void query(ArrayList<StudentMember> list){
if (list.size() != 0){
// 有信息则打印
System.out.println("id\t" + "姓名\t" + "年龄\t" + "家庭住址");
for (StudentMember studentMember : list) {
System.out.println(studentMember.getId() + "\t" + studentMember.getName() + "\t" + studentMember.getAge() + "\t" + studentMember.getAddress());
}
}else {
System.out.println("当前无学生信息,请添加后再查询!");
}
}
// 注册账号
public static void register(ArrayList<UserMember> list){
Scanner sc = new Scanner(System.in);
UserMember userMember = new UserMember();
while (true) {
System.out.println("请输入要注册的用户名(长度3-15位,字母加数字组合):");
String username = sc.next();
// 长度太短或太长则需要重新输入
if (username.length() < 3 || username.length() > 15) {
System.out.println("用户名长度不符合要求, 请重新输入!");
continue;
}
// 如果用户名是纯数字,需要重新输入
if (strNum(username, username.length())) {
System.out.println("用户名不能是纯数字, 请重新输入!");
continue;
}
// 若都符合要求,则添加用户名
userMember.setUsername(username);
System.out.println("用户名合格");
break;
}
// 设置密码
while (true) {
System.out.print("请输入密码:");
String password1 = sc.next();
System.out.print("请确认密码:");
String password2 = sc.next();
if (Objects.equals(password1, password2)){
// 两次密码相同, 可以注册
userMember.setPassword(password1);
System.out.println("密码合格!");
break;
}else {
// 两次密码不相同,重新输入
System.out.println("两次密码不相同,请重新输入");
}
}
// 验证身份证号码
while (true) {
System.out.print("请输入身份证号码:");
String idcard = sc.next();
// 验证
// 长度必须是18
if (!LengthJudgment(idcard, 18)){
System.out.println("身份证长度错误,请重新输入!");
continue;
}
// 不能以0开头
if(firstChar(idcard, '0')){
System.out.println("身份证不能以0开头,请重新输入!");
continue;
}
if (!strNum(idcard, idcard.length()-1)){
// 如果前17位不全是数字,需要重新输入
System.out.println("身份证前17位必须是数字, 请重新输入!");
continue;
}
// 最为一位必须是数字,或是大写X或小写x
char lastnumber = idcard.charAt(idcard.length()-1);
if ((lastnumber != 'X' && lastnumber != 'x') && (lastnumber < 48 || lastnumber >57)){
System.out.println("身份证最为一位必须是数字,或是大写X或小写x, 请重新输入!");
continue;
}
// 输入正确
userMember.setIdcard(idcard);
System.out.println("身份证合格!");
break;
}
// 验证手机号码
while (true){
System.out.print("请输入手机号码:");
String phonenumber = sc.next();
// 判断手机号码长度
if (!LengthJudgment(phonenumber, 11)){
System.out.println("手机号码长度错误,请重新输入!");
continue;
}
// 不能以0开头
if(firstChar(phonenumber, '0')){
System.out.println("身份证不能以0开头,请重新输入!");
continue;
}
// 必须都是数字
if (!strNum(phonenumber, phonenumber.length())){
System.out.println("手机号码必须都是数字, 请重新输入!");
continue;
}
// 输入正确
userMember.setPhonenumber(phonenumber);
System.out.println("手机号码合格!");
break;
}
// 注册账号成功
System.out.println("注册账号成功!");
list.add(userMember);
}
// 登录账号
public static void logIn(ArrayList<UserMember> list){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("请输入用户名:");
String username = sc.next();
for (int i = 0; i < list.size(); i++) {
if (Objects.equals(username, list.get(i).getUsername())){
// 用户名存在
// 判断验证码是否正确
// 需要验证码
// 返回boolean
verificationCode();
while (true) {
System.out.print("请输入密码:");
String password = sc.next();
for (int i1 = 0; i1 < 3; i1++) {
if (Objects.equals(password, list.get(i).getPassword())){
// 若密码正确
System.out.println("密码正确,登陆成功!");
return;
}else {
System.out.println("密码错误,请重新输入!您还有" + (2-i) + "次机会");
}
}
System.out.println("密码错误,平台关闭!");
System.exit(0);
}
}
}
System.out.println("用户名未注册,请先注册!");
register(list);
}
}
// 忘记密码
public static void forgetPassword(ArrayList<UserMember> list){
Scanner sc = new Scanner(System.in);
System.out.print("请输入用户名:");
String username = sc.next();
for (int i = 0; i < list.size(); i++) {
if (Objects.equals(username, list.get(i).getUsername())){
// 用户名存在
// 判断身份证号码和手机号
System.out.println("请输入身份证号码:");
String idcard = sc.next();
System.out.println("请输入手机号码:");
String phonenumber = sc.next();
if (Objects.equals(idcard, list.get(i).getIdcard()) && Objects.equals(phonenumber, list.get(i).getPhonenumber())){
System.out.print("输入正确,请输入新的密码:");
String newpassword = sc.next();
list.get(i).setPassword(newpassword);
return;
}else {
System.out.println("账号信息不匹配,修改失败!");
System.exit(0);
}
}
}
System.out.println("用户不存在,请先注册账号!");
System.exit(0);
}
// 判断长度
// 需要字符串和规定的长度
// 返回boolean
public static boolean LengthJudgment(String str, int len){
// 长度不相等
return str.length() == len;
}
// 字符串是否以xx开头
// 需要字符串和字符
// 返回boolean
public static boolean firstChar(String str, char c){
return str.charAt(0) == c;
}
// 判断前xx位是否都是数字
// 需要字符串, 前多少位
// 返回boolean
public static boolean strNum(String str, int len){
// 前len位必须是数字
int count = 0;
for (int i = 0; i < len; i++) {
char c = str.charAt(i);
if (c >= 48 && c <= 57){
// 是数字
count++;
}
}
return count == len;
}
// 判断验证码是否正确
// 需要验证码
// 返回boolean
public static void verificationCode(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("请输入验证码(长度为5,由四个字母和一个数字组成):");
String verificationcode = sc.next();
int countnum = 0;
int countchar = 0;
if (LengthJudgment(verificationcode, 5)){
// 长度为5
for (int i = 0; i < verificationcode.length(); i++) {
char c = verificationcode.charAt(i);
if (c >= 48 && c <= 57){
// 是数字
countnum++;
} else if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90)) {
// 是字母
countchar++;
}
}
if (countchar == 4 && countnum == 1){
// 验证码正确
System.out.println("验证码输入正确!");
break;
}
}
System.out.println("验证码错误,请重新输入!");
}
}
}