??? ?采取控制台的方式去书写学生管理系统。
```java
"-------------欢迎来到学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
```
??? ?属性:id、姓名、年龄、家庭住址
??? ?键盘录入每一个学生信息并添加,需要满足以下要求:
* id唯一
??? ?键盘录入要删除的学生id,需要满足以下要求:
* id存在删除
* id不存在,需要提示不存在,并回到初始菜单
??? ?键盘录入要修改的学生id,需要满足以下要求
* id存在,继续录入其他信息
* id不存在,需要提示不存在,并回到初始菜单
??? ?打印所有的学生信息,需要满足以下要求
* 如果没有学生信息,提示:当前无学生信息,请添加后再查询
* 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
```java
id?? ??? ??? ?姓名?? ??? ?年龄?? ??? ?家庭住址
001?? ?张三?? ??? ?23?? ??? ? 南京
002?? ?李四?? ??? ?24?? ??? ? 北京
```
??? ?为学生管理系统书写一个登陆、注册、忘记密码的功能。
??? ?只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
```java
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
```
??? ?属性:用户名、密码、身份证号码、手机号码
??? ??? ?验证要求:
??? ??? ??? ?用户名唯一
??? ??? ??? ?用户名长度必须在3~15位之间?
??? ??? ??? ?只能是字母加数字的组合,但是不能是纯数字
??? ??? ?验证要求:
??? ??? ??? ?长度为18位
??? ??? ??? ?不能以0为开头
??? ??? ??? ?前17位,必须都是数字
??? ??? ??? ?最为一位可以是数字,也可以是大写X或小写x
??? ??? ?验证要求:
??? ??? ??? ?长度为11位
??? ??? ??? ?不能以0为开头
??? ??? ??? ?必须都是数字
验证要求:
??? ??? ?用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
??? ??? ?判断验证码是否正确,如不正确,重新输入
??? ??? ?再判断用户名和密码是否正确,有3次机会
??? ??? ??? ?如果一致,则提示输入密码,进行修改。
??? ??? ??? ?如果不一致,则提示:账号信息不匹配,修改失败。
??? ?长度为5
??? ?由4位大写或者小写字母和1位数字组成,同一个字母可重复
??? ?数字可以出现在任意位置
比如:aQa1K
package studentmangemnet;
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;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
}
}
package studentmangemnet;
public class User {
private String name;
private String password;
private String idNumber;
private String phoneNumber;
public User() {
}
public User(String name, String password, String idNumber, String phoneNumber) {
this.name = name;
this.password = password;
this.idNumber = idNumber;
this.phoneNumber = phoneNumber;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return idNumber
*/
public String getIdNumber() {
return idNumber;
}
/**
* 设置
* @param idNumber
*/
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
/**
* 获取
* @return phoneNumber
*/
public String getPhoneNumber() {
return phoneNumber;
}
/**
* 设置
* @param phoneNumber
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() {
return "User{name = " + name + ", password = " + password + ", idNumber = " + idNumber + ", phoneNumber = " + phoneNumber + "}";
}
}
package studentmangemnet;
/*
学生信息管理系统
*/
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void method() {
ArrayList<Student> list = new ArrayList<>();
boolean flag = true;
while (flag) {
switch (menu()) {
case 1 -> addStu(list);
case 2 -> deleteStu(list);
case 3 -> alterStu(list);
case 4 -> soutStu(list);
case 5 -> {
flag = false;
System.out.println("成功退出");
}
default -> System.out.println("请输入正确的序号!");
}
}
}
//主菜单方法
public static int menu() {
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);
return sc.nextInt();
}
//添加学生方法
public static void addStu(ArrayList<Student> list) {
System.out.println("请输入相关学生信息");
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生id:");
String id = sc.next();
if (!idIsonly(id, list)) {
System.out.println("该学生已经存在!即将退回到菜单!");
return;
}
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
System.out.println("请输入学生家庭住址:");
String address = sc.next();
Student stu = new Student(id, name, age, address);
list.add(stu);
System.out.println("添加成功!即将退回到菜单!");
}
//判断id是否唯一方法
public static boolean idIsonly(String id, ArrayList<Student> list) {
for (int i = 0; i < list.size(); i++) {
if (id.equals(list.get(i).getId()))
return false;
}
return true;
}
//删除学生信息方法
public static void deleteStu(ArrayList<Student> list) {
System.out.println("请输入需要删除的学生id:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
if (idIsonly(id, list)) {
System.out.println("该学生不存在!即将退回到菜单!");
return;
}
for (int i = 0; i < list.size(); i++) {
if (id.equals(list.get(i).getId())) {
list.remove(i);
System.out.println("删除成功!即将退回到菜单!");
return;
}
}
}
//修改学生信息方法
public static void alterStu(ArrayList<Student> list) {
System.out.println("请输入需要修改的学生id:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
if (idIsonly(id, list)) {
System.out.println("该学生不存在!即将退回到菜单!");
return;
}
System.out.println("请输入新的学生信息");
System.out.println("请输入新的学生姓名:");
String name = sc.next();
System.out.println("请输入新的学生年龄:");
int age = sc.nextInt();
System.out.println("请输入新的学生家庭住址:");
String address = sc.next();
for (int i = 0; i < list.size(); i++) {
if (id.equals(list.get(i).getId())) {
list.get(i).setName(name);
list.get(i).setAge(age);
list.get(i).setAddress(address);
System.out.println("修改成功!即将退回到菜单!");
return;
}
}
}
//查询学生信息方法
public static void soutStu(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询!");
System.out.println("即将退回到主菜单");
return;
}
System.out.println("id" + '\t' + "姓名" + '\t' + "年龄" + '\t' + "家庭住址");
Student stu = new Student();
for (int i = 0; i < list.size(); i++) {
stu = list.get(i);
System.out.println(stu.getId() + '\t' + stu.getName() + '\t' + stu.getAge() + '\t' + stu.getAddress());
}
}
}
package studentmangemnet;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class LogIn {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
boolean flag = true;
while (flag) {
switch (menu()) {
case 1 -> logIn(list);
case 2 -> register(list);
case 3 -> lossPassword(list);
case 4 -> {
flag = false;
return;
}
}
}
}
//主菜单
public static int menu() {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作 1登录 2注册 3忘记密码 4退出");
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
//登录函数
public static void logIn(ArrayList<User> list) {
System.out.println("请输入用户名:");
Scanner sc = new Scanner(System.in);
String name = sc.next();
//判断用户名是否存在,如果不存在则提示先注册,并直接结束方法
if (!nameIsExist(name, list)) {
System.out.println("用户名未注册,请先注册!");
System.out.println("即将退回到初始界面!");
return;
}
System.out.println("请输入密码:");
String password = sc.next();
String str, newStr;
//进行验证码匹配(忽略大小写),验证码输入错误则会重新生生成
while (true) {
str = getIdCode();
System.out.println("请输入验证码(不区分大小写):" + str);
newStr = sc.next();
if (str.equalsIgnoreCase(newStr))
break;
else System.out.println("验证码错误!请重新输入!");
}
//判断用户名和密码是否正确,三次机会
int i = 2;
for (; i > 0; i--) {
if (passwordIsTure(name, password, list)) {
i++;
break;
} else {
System.out.println("密码错误!请重新输入!你还有" + i + "次机会!");
password = sc.next();
while (true) {
str = getIdCode();
System.out.println("请输入验证码:" + str);
newStr = sc.next();
if (str.equalsIgnoreCase(newStr))
break;
else System.out.println("验证码错误!请重新输入!");
}
}
}
if (i == 0) {
System.out.println("很抱歉次数已经用完!即将退出系统!");
System.exit(0);
} else {
System.out.println("登录成功!");
Test t = new Test();
t.method();
}
}
//判断用户名密码是匹配方法
public static boolean passwordIsTure(String name, String password, ArrayList<User> list) {
for (int i = 0; i < list.size(); i++) {
if (name.equals(list.get(i).getName())) {
if (password.equals(list.get(i).getPassword()))
return true;
else return false;
}
}
return false;
}
//用户名是否存在方法
public static boolean nameIsExist(String name, ArrayList<User> list) {
for (int i = 0; i < list.size(); i++) {
if (name.equals(list.get(i).getName()))
return true;
}
return false;
}
//生成验证码函数
public static String getIdCode() {
char[] arr = new char[5];
Random r = new Random();
for (int i = 0; i < 4; i++) {
//循环产生4次
//随机产生一个在65-90,97-122之间的数字
//可利用循环产生65-122之间随机数,如果在91-96直接则舍弃重新生成
int x = r.nextInt(58) + 65; //random产生0-57,加上65后就是65-122
while (x >= 91 && x <= 96) {
x = r.nextInt(58) + 65;
}
arr[i] = (char) x; //将随机字母拼接进入验证码容器
}
arr[4] = (char) (r.nextInt(10) + 48);
return new String(arr);
}
//用户注册方法
public static void register(ArrayList<User> list) {
System.out.println("请输入用户名(长度必须在3~15位之间,字母加数字的组合,但是不能是纯数字):");
Scanner sc = new Scanner(System.in);
String name;
while (true) {
name = sc.next();
if (nameIsTrue(name, list))
break;
else System.out.println("用户名格式不对或重复!请重新输入:");
}
String password, password1;
while (true) {
System.out.println("请输入密码:");
password = sc.next();
System.out.println("请再次输入确认密码:");
password1 = sc.next();
if (password.equals(password1))
break;
else System.out.println("两次输入不相同,请重新输入!");
}
String idNumber;
while (true) {
System.out.println("请输入身份证号:");
idNumber = sc.next();
if (idNumberIsTrue(idNumber))
break;
else System.out.println("身份证格式错误!请重新输入!");
}
String phoneNumber;
while (true) {
System.out.println("请输入手机号:");
phoneNumber = sc.next();
if (phoneNumberIsTrue(phoneNumber))
break;
else System.out.println("手机号格式错误!请重新输入!");
}
User user = new User(name, password, idNumber, phoneNumber);
list.add(user);
System.out.println("注册成功!");
}
//用户名验证方法
/* 用户名唯一
用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
*/
public static boolean nameIsTrue(String name, ArrayList<User> list) {
if (name.length() < 3 || name.length() > 15)
return false;
if (nameIsExist(name, list))
return false;
int charNum = 0;
for (int i = 0; i < name.length(); i++) {
char x = name.charAt(i);
if ((x >= '0' && x <= '9') || (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z')) {
if ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'))
charNum++;
} else return false;
}
if (charNum == 0) return false;
return true;
}
//身份证号验证方法
public static boolean idNumberIsTrue(String idNumber) {
if (idNumber.length() != 18)
return false;
if (idNumber.charAt(0) == 0)
return false;
for (int i = 0; i < 17; i++) {
if (idNumber.charAt(i) < '0' || idNumber.charAt(i) > '9')
return false;
}
char x = idNumber.charAt(17);
if ((x < '0' || x > '9') && x != 'x' && x != 'X')
return false;
return true;
}
//手机号验证方法
public static boolean phoneNumberIsTrue(String phoneNumber) {
if (phoneNumber.length() != 11)
return false;
if (phoneNumber.charAt(0) == 0)
return false;
for (int i = 0; i < 11; i++) {
if (phoneNumber.charAt(i) <= '0' || phoneNumber.charAt(i) >= '9')
return false;
}
return true;
}
//忘记密码方法
public static void lossPassword(ArrayList<User> list) {
System.out.println("请输入用户名");
Scanner sc = new Scanner(System.in);
String name = sc.next();
if (!nameIsExist(name, list)) {
System.out.println("未注册!");
return;
}
String idNumber;
while (true) {
System.out.println("请输入身份证号:");
idNumber = sc.next();
if (idNumberIsTrue(idNumber))
break;
else System.out.println("身份证格式错误!请重新输入!");
}
String phoneNumber;
while (true) {
System.out.println("请输入手机号:");
phoneNumber = sc.next();
if (phoneNumberIsTrue(phoneNumber))
break;
else System.out.println("手机号格式错误!请重新输入!");
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getIdNumber().equals(idNumber) && list.get(i).getPhoneNumber().equals(phoneNumber)) {
String password, password1;
while (true) {
System.out.println("请输入新密码:");
password = sc.next();
System.out.println("请再次输入确认密码:");
password1 = sc.next();
if (password.equals(password1))
break;
else System.out.println("两次输入不相同,请重新输入!");
}
list.get(i).setPassword(password);
System.out.println("修改成功!");
return;
} else {
System.out.println("账号信息不匹配,修改失败!");
return;
}
}
}
}
代码部分为原创
整个项目可以作为课程设计题目
前文的需求功能已全部实现
将上面四个类全部放在一个包里面即可成功运行
写代码不易,多点赞收藏!