每一步都做过测试了,创建好类与对象复制进去即可
一、对象
1.学生
public class student {
private int id;
private String name;
private int age;
private String address;
public student() {
}
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;
}
}
2.用户
public class user {
private String name;
private String password;
private String id;
private final String phone;
public user(String name, String password, String id, String phone) {
this.name = name;
this.password = password;
this.id = id;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhone() {
return phone;
}
}
二、类
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
int choose = sc.nextInt();
ArrayList<user> list = new ArrayList<>();
while (choose != 4) {
switch (choose) {
case 1 -> log(list);
case 2 -> create(list);
case 3 -> forget(list);
}
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
choose = sc.nextInt();
}
}
// 登录
@SuppressWarnings("DuplicatedCode")
public static void log(ArrayList<user> list) {
Scanner sc = new Scanner(System.in);
System.out.print("输入用户名:");
String name = sc.next();
user myUser;
boolean answer = false;
for (int i = 0; i < list.size(); i++) {
myUser = list.get(i);
if (name.equals(myUser.getName())) {
answer = true;
System.out.print("输入密码:");
String password = sc.next();
boolean passwordFlag = false;
for (i = 0; i < 2; i++) {
if (password.equals(myUser.getPassword())) {
passwordFlag = true;
String verification = identify();
System.out.println("验证码为:"+verification+",请在下方输入该验证码");
String verificationTest = sc.next();
while (!verificationTest.equals(verification)) {
verification = identify();
System.out.println("验证错误");
System.out.println("验证码为:"+verification+",请在下方输入该验证码");
verificationTest = sc.next();
}
manage();
break;
} else {
System.out.print("密码错误,请重新输入:");
password = sc.next();
}
}
if (!passwordFlag) System.out.println("错误超过3次,请稍后尝试");
break;
}
}
if (!answer) System.out.println("未注册,请先注册");
}
// 验证码
@SuppressWarnings("DuplicatedCode")
public static String identify() {
Random r = new Random();
// 大写
// (char) (r.nextInt(26)+65)
// 小写
// (char) (r.nextInt(26)+97)
// 数字
// (char) (r.nextInt(10)+48)
int number = 5;
char[] c = new char[number];
for (int i = 0; i < number - 1; i++) {
int random = r.nextInt(2);
switch (random) {
case 0 -> c[i] = (char) (r.nextInt(26)+65);
case 1 -> c[i] = (char) (r.nextInt(26)+97);
}
}
c[4] = (char) (r.nextInt(10)+48);
for (int i = 0; i < c.length; i++) {
int random = r.nextInt(c.length);
char temp = c[random];
c[random] = c[i];
c[i] = temp;
}
return new String(c);
}
// 注册
public static void create(ArrayList<user> list) {
Scanner sc = new Scanner(System.in);
user myUser;
// 设置用户名
System.out.print("请输入用户名:");
String name = sc.next();
int index = 0;
while (index <= list.size()) {
if (name.length() > 15 || name.length() < 3) {
System.out.print("用户名长度必须在3~15位之间:");
name = sc.next();
} else if (!checkName(name)) {
System.out.print("只能是字母加数字的组合,但是不能是纯数字:");
name = sc.next();
index = 0;
} else {
index++;
}
if (index >= 1) {
for (com.itheima.finaltest.user user : list) {
myUser = user;
if (name.equals(myUser.getName())) {
System.out.print("用户名必须唯一:");
name = sc.next();
index = 0;
break;
}
}
}
}
// 设置密码
boolean passConfig = false;
System.out.print("请输入密码:");
String password = sc.next();
System.out.print("请再次输入密码:");
String passwordConfig = sc.next();
while (!passConfig) {
if (password.equals(passwordConfig)) {
passConfig = true;
} else {
System.out.println("密码不一致");
System.out.print("请输入密码:");
password = sc.next();
System.out.print("请再次输入密码:");
passwordConfig = sc.next();
}
}
// 输入身份证
System.out.print("输入身份证:");
String id = sc.next();
while (!checkID(id)) {
System.out.println("身份证验证错误");
System.out.print("重新输入验证身份证:");
id = sc.next();
}
// 验证手机号
System.out.print("输入手机号:");
String phone = sc.next();
while (!checkPhone(phone)) {
System.out.println("手机号验证错误");
System.out.print("重新输入手机号:");
phone = sc.next();
}
myUser = new user(name,password,id,phone);
list.add(myUser);
}
// 验证用户名
public static boolean checkName(String name) {
boolean answer = true;
int sum = 0;
char[] c = new char[name.length()];
for (int i = 0; i < c.length; i++) {
int number = name.charAt(i);
if (number >= 48 && number <= 57) {
sum++;
}
if (number<48||(number>57&&number<65)||(number>90&&number<97)||number>122) {
answer = false;
}
}
if (sum == name.length()) answer = false;
return answer;
}
// 验证身份证
public static boolean checkID(String id) {
boolean answer = false;
if (id.length() != 18) {
return answer;
}
char[] c = new char[id.length()];
for (int i = 0; i < c.length; i++) {
c[i] = id.charAt(i);
if (c[0] == '0') return answer;
int check = c[i];
if (i < c.length - 1) {
if (check < 48 || check >57) return answer;
}
if (i == c.length - 1) {
if (check < 48 || (check >57 && check < 88) || (check > 88 && check < 120) || (check > 120)) return answer;
}
}
return !answer;
}
// 验证手机号
@SuppressWarnings("DuplicatedCode")
public static boolean checkPhone(String phone) {
boolean answer = false;
if (phone.length() != 11) {
return answer;
}
char[] c = new char[phone.length()];
for (int i = 0; i < c.length; i++) {
c[i] = phone.charAt(i);
if (c[0] == '0') return answer;
int check = c[i];
if (check < 48 || check >57) return answer;
}
return !answer;
}
// 忘记密码
@SuppressWarnings("DuplicatedCode")
public static void forget(ArrayList<user> list) {
Scanner sc = new Scanner(System.in);
System.out.print("输入用户名:");
String name = sc.next();
user myUser;
boolean answer = false;
for (int i = 0; i < list.size(); i++) {
myUser = list.get(i);
if (name.equals(myUser.getName())) {
System.out.print("输入身份证:");
String id = sc.next();
System.out.print("输入手机号:");
String phone = sc.next();
if (id.equals(myUser.getId()) && phone.equals(myUser.getPhone())) {
boolean passConfig = false;
System.out.print("请输入密码:");
String password = sc.next();
System.out.print("请再次输入密码:");
String passwordConfig = sc.next();
while (!passConfig) {
if (password.equals(passwordConfig)) {
passConfig = true;
} else {
System.out.println("密码不一致");
System.out.print("请输入密码:");
password = sc.next();
System.out.print("请再次输入密码:");
passwordConfig = sc.next();
}
}
myUser.setPassword(password);
answer = true;
list.set(i,myUser);
} else {
System.out.println("账号信息不匹配,修改失败");
answer = true;
}
break;
}
}
if (!answer) System.out.println("未注册");
}
@SuppressWarnings("DuplicatedCode")
public static void manage() {
Scanner sc = new Scanner(System.in);
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.print("请输入您的选择:");
int choose = sc.nextInt();
ArrayList<student> list = new ArrayList<>();
while (choose != 5) {
switch (choose) {
case 1 -> add(list);
case 2 -> delete(list);
case 3 -> change(list);
case 4 -> search(list);
}
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.print("请输入您的选择:");
choose = sc.nextInt();
}
}
public static void add(ArrayList<student> list) {
Scanner sc = new Scanner(System.in);
student stu = new student();
System.out.println("请输入学生的个人信息:");
System.out.print("id:");
stu.setId(sc.nextInt());
System.out.print("姓名:");
stu.setName(sc.next());
System.out.print("年龄:");
stu.setAge(sc.nextInt());
System.out.print("家庭住址:");
stu.setAddress(sc.next());
list.add(stu);
}
public static void delete(ArrayList<student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请在下方输入希望删除的id");
int deleteID = sc.nextInt();
boolean deleteIndex = false;
for (int i = 0; i < list.size(); i++) {
student stu = list.get(i);
if (deleteID == stu.getId()) {
list.remove(i);
deleteIndex = true;
break;
}
}
if (!deleteIndex) {
System.out.println("不存在该id,回到初始菜单");
}
}
@SuppressWarnings("DuplicatedCode")
public static void change(ArrayList<student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请在下方输入希望修改的id");
int changeID = sc.nextInt();
boolean changeIndex = false;
for (int i = 0; i < list.size(); i++) {
student stu = list.get(i);
if (changeID == stu.getId()) {
System.out.println("请输入希望修改的信息:");
System.out.print("修改id为:");
stu.setId(sc.nextInt());
System.out.print("修改姓名为:");
stu.setName(sc.next());
System.out.print("修改年龄为:");
stu.setAge(sc.nextInt());
System.out.print("修改家庭住址为:");
stu.setAddress(sc.next());
list.set(i,stu);
changeIndex = true;
break;
}
}
if (!changeIndex) {
System.out.println("不存在该id,回到初始菜单");
}
}
public static void search(ArrayList<student> list) {
if (list.size() != 0) {
System.out.println("id\t\t\t姓名\t\t年龄\t\t家庭住址");
for (student stu : list) {
System.out.print(stu.getId() + "\t\t\t");
System.out.print(stu.getName() + "\t\t");
System.out.print(stu.getAge() + "\t\t");
System.out.println(stu.getAddress());
}
} else System.out.println("当前无学生信息,请添加后再查询");
}
}
三、常见问题
创建集合的时候需要在得到参数后再new一次,不然每一次add都会把前一次覆盖。
在写代码时为了解决这个问题我花了不少时间,所以专门在这里提醒一下。
走过路过点个赞吧 (~ ̄▽ ̄)~