需求
采取控制台的方式去书写学生管理系统。
### 分析:
#### 初始菜单:
```java
"-------------欢迎来到学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
```
#### 学生类:
属性:id、姓名、年龄、家庭住址
#### 添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
* id唯一
#### 删除功能:
键盘录入要删除的学生id,需要满足以下要求:
* id存在删除
* id不存在,需要提示不存在,并回到初始菜单
#### 修改功能:
键盘录入要修改的学生id,需要满足以下要求
* id存在,继续录入其他信息
* id不存在,需要提示不存在,并回到初始菜单
#### 查询功能:
打印所有的学生信息,需要满足以下要求
* 如果没有学生信息,提示:当前无学生信息,请添加后再查询
* 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
```java
id 姓名 年龄 家庭住址
001 张三 23 南京
002 李四 24 北京
003 王五 25 广州
004 赵六 26 深圳
```
学生类
package StudentManagementSystem;
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 void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
}
学生管理系统
package StudentManagementSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void main() {
{
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);
case "2" -> deleteStudent(list);
case "3" -> updateStudent(list);
case "4" -> queryStudent(list);
case "5" -> {
System.out.println("退出");
// break loop;
System.exit(0);
}
default -> {
System.out.println("输入错误!请重新输入");
break;
}
}
}
}
}
//添加学生
public static void addStudent(ArrayList<Student> list) {
System.out.println("添加学生");
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) {
System.out.println("id已存在,请重新录入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);
}
//删除学生
public static void deleteStudent(ArrayList<Student> list) {
System.out.println("删除学生");
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生的Id");
String id = sc.next();
boolean flag = contains(list, id);
if (flag) {
int index = getIndex(list, id);
list.remove(index);
System.out.println("id为:" + id + "的学生,已为您删除!");
} else {
System.out.println("id不存在,删除失败!");
}
}
//修改学生
public static void updateStudent(ArrayList<Student> list) {
System.out.println("修改学生");
Scanner sc = new Scanner(System.in);
int index = 0;//初始化索引
while (true){
System.out.println("请输入要修改的学生的id");
String id = sc.next();
index = getIndex(list, id);//通过getIndex方法获取到id所对应的学生对象的索引
if (index == -1){
System.out.println("id为"+id+"的学生不存在,请重新输入id");
}else {
break;
}
}
//创建学生对象
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("学生信息修改成功!");
}
//查询学生
public static void queryStudent(ArrayList<Student> list) {
System.out.println("查询学生");
//判断集合是否为空
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());
}
}
//判断id在集合中是否存在
public static boolean contains(ArrayList<Student> list, String id) {
//循环遍历得到集合中的每一个学生对象
//通过学生对象获取id,并进行判断,存在返回true,不存在返回false
/* for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if (sid.equals(id)) {
return true;
}
}
return false;*/
return getIndex(list, id) >= 0;
}
//通过id获取索引
public static int getIndex(ArrayList<Student> list, String id) {
//循环遍历得到集合中的每一个学生对象
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
//通过学生对象获取id
String sid = stu.getId();
//进行判断
if (sid.equals(id)) {
//存在就返回索引
return i;
}
}
//不存在就返回-1(java中不存在-1索引)
return -1;
}
}
升级
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
### 分析:
#### 登录界面:
```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
用户类
package StudentManagementSystem;
public class User {
private String username;
private String password;
private String id;
private String phonenumber;
public User() {
}
public User(String username, String password, String id, String phonenumber) {
this.username = username;
this.password = password;
this.id = id;
this.phonenumber = phonenumber;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return phone
*/
public String getPhonenumber() {
return phonenumber;
}
/**
* 设置
* @param phonenumber
*/
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
}
APP(登陆、注册、忘记密码)
package StudentManagementSystem;
import com.sun.source.tree.ReturnTree;
import java.lang.management.BufferPoolMXBean;
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<>();
while (true) {
System.out.println("-------------欢迎来到学生管理系统----------------");
System.out.println("1.登录 ");
System.out.println("2.注册 ");
System.out.println("3.忘记密码");
System.out.println("4.退出");
System.out.println("请输入您的选择:");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose) {
case "1" -> login(list);//登录
case "2" -> enroll(list);//注册
case "3" -> forgotPassword(list);//忘记密码
case "4" -> {
System.out.println("退出");
// break loop;
System.exit(0);
}
default -> {
System.out.println("输入错误!请重新输入");
break;
}
}
}
}
//登录
private static void login(ArrayList<User> list) {
System.out.println("登录");
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
boolean flag = contains(list, username);
if (!flag) {
System.out.println("用户名未注册,请先注册");
return;
}
for (int i = 0; i < 3; i++) {
System.out.println("请输入密码");
String password = sc.next();
String rightverify = getVerify();
System.out.println("请输入验证码");
String verify = sc.next();
boolean pwd = checkPassword(list, username, password);
if (pwd && verify.equalsIgnoreCase(rightverify)) {
break;
}
System.out.println("您输入的密码或验证码有误");
if (i == 2) {
System.out.println("错误次数太多");
return;
}
}
System.out.println("登录成功!!!");
StudentSystem.main();
}
//注册
private static void enroll(ArrayList<User> list) {
System.out.println("注册");
Scanner sc = new Scanner(System.in);
User user = new User();
while (true) {
System.out.println("请输入您的用户名:");
String username = sc.next();
boolean flag = contains(list, username);
System.out.println(flag);
boolean flag1 = checkUsername(username);
System.out.println(flag1);
if (!flag && flag1) {
user.setUsername(username);
break;
} else {
System.out.println("用户名已存在,或不合法,请重新输入");
}
}
while (true) {
System.out.println("请输入您的密码:");
String password = sc.next();
System.out.println(password);
System.out.println("请确认您的密码:");
String againpassword = sc.next();
System.out.println(againpassword);
if (password.equals(againpassword)) {
user.setPassword(password);
break;
} else {
System.out.println("俩次密码不一致,请重新输入密码");
}
}
while (true) {
System.out.println("请输入您的身份证号:");
String id = sc.next();
boolean flag = checkId(id);
if (flag) {
user.setId(id);
break;
} else {
System.out.println("您输入的身份证号不合法,请重新输入");
}
}
while (true) {
System.out.println("请输入您的手机号:");
String phonenumber = sc.next();
boolean flag = checkPhonenumber(phonenumber);
if (flag) {
user.setPhonenumber(phonenumber);
break;
} else {
System.out.println("您输入的手机号不合法,请重新输入");
}
}
list.add(user);
System.out.println("注册成功");
}
//忘记密码
private static void forgotPassword(ArrayList<User> list) {
System.out.println("忘记密码");
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
boolean flag = contains(list, username);
if (!flag) {
System.out.println("用户名未注册,请先注册");
return;
}
for (int i = 1; i <= 3; i++) {
System.out.println("请输入手机号");
String phonenumber = sc.next();
System.out.println("请输入身份证号");
String id = sc.next();
boolean b = checkIdPhonenumber(list, username, id, phonenumber);
if (b) {
break;
} else if (i == 3) {
System.out.println("错误次数太多");
return;
} else {
System.out.println("手机号或身份证号错误,请重新输入,您还有" + i + "次机会");
}
}
System.out.println("输入密码");
String newpwd = sc.next();
User user = list.get(getIndex(list, username));
user.setPassword(newpwd);
}
//检查用户名在集合中是否存在
private static boolean contains(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String name = user.getUsername();
if (name.equals(username)) {
return true;
}
}
return false;
}
//检查用户名是否合法
private static boolean checkUsername(String username) {
int length = username.length();
if (length < 3 || length > 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++;
}
}
if (count < 0) {
return false;
}
return true;
}
//检查身份证号是否合法
private static boolean checkId(String id) {
int length = id.length();
if (length != 18) {
return false;
}
char fist = id.charAt(0);
if (fist == '0') {
return false;
}
for (int i = 0; i < id.length() - 2; i++) {
char c = id.charAt(i);
if (!(c >= '0' && c <= '9')) {
return false;
}
}
char last = id.charAt(id.length() - 1);
if (!(last >= '0' && last <= '9') || (last == 'X') || (last == 'x')) {
return false;
}
return true;
}
//检查手机号是否合法
private static boolean checkPhonenumber(String phonenumber) {
int length = phonenumber.length();
if (length != 11) {
return false;
}
char fist = phonenumber.charAt(0);
if (fist == '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;
}
//通过username获取索引
private static int getIndex(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String temp = user.getUsername();
if (temp.equals(username)) {
//存在就返回索引
return i;
}
}
//不存在就返回-1(java中不存在-1索引)
return -1;
}
//随机验证码
private static String getVerify() {
char[] arr1 = new char[52];
for (int i = 0; i < arr1.length; i++) {
if (i <= 25) {
arr1[i] = (char) (97 + i);
} else {
arr1[i] = (char) (65 + i - 26);
}
}
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int randomIndex = random.nextInt(arr1.length);
sb.append(arr1[randomIndex]);
}
int number = random.nextInt(10);
sb.append(number);
String verify = sb.toString();
char[] arr = verify.toCharArray();
for (int i = 0; i < arr.length; i++) {
int randomIndex = random.nextInt(arr.length);
char temp = arr[i];
arr[i] = arr[randomIndex];
arr[randomIndex] = temp;
}
String result = new String(arr);
System.out.println(result);
return result;
}
//验证密码是否正确
private static boolean checkPassword(ArrayList<User> list, String username, String password) {
int index = getIndex(list, username);
User user = list.get(index);
String pwd = user.getPassword();
if (password.equals(pwd)) {
return true;
}
return false;
}
//验证手机号和身份证号是否正确
private static boolean checkIdPhonenumber(ArrayList<User> list, String username, String id, String phonenumber) {
int index = getIndex(list, username);
User user = list.get(index);
String rightid = user.getId();
String rightPhonenumber = user.getPhonenumber();
if (id.equals(rightid) && phonenumber.equals(rightPhonenumber)) {
return true;
}
return false;
}
}