Java项目:学生管理系统
- 一、学生管理系统基础版
- 需求
- 1. 初始菜单
- 2. 学生类:
- 3. 添加功能:
- 4. 删除功能:
- 5. 修改功能:
- 6. 查询功能:
- 代码
- 1. 学生类
- 2. 测试类
- 输出结果
- a. 添加
- b. 删除
- c. 修改
- d. 查询
- e. 退出
- 二、学生管理系统升级版
- 需求:
- 1. 登录界面:
- 2. 用户类:
- 3. 注册功能:
- 4. 登录功能:
- 5. 忘记密码:
- 6. 验证码规则:
- 代码
- 1. 学生类
- 2. 用户类
- 3. 学生管理系统类
- 4. App入口
- 输出结果
- a. 注册
- b. 登录
- c. 忘记密码
- d. 退出
一、学生管理系统基础版
需求
采取控制台的方式去书写学生管理系统。
1. 初始菜单
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
2. 学生类:
属性:id、姓名、年龄、家庭住址
3. 添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
- id唯一
4. 删除功能:
键盘录入要删除的学生id,需要满足以下要求:
- id存在删除
- id不存在,需要提示不存在,并回到初始菜单
5. 修改功能:
键盘录入要修改的学生id,需要满足以下要求
- id存在,继续录入其他信息
- id不存在,需要提示不存在,并回到初始菜单
6. 查询功能:
打印所有的学生信息,需要满足以下要求
- 如果没有学生信息,提示:当前无学生信息,请添加后再查询
- 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
代码
1. 学生类
package day11;
public class Student {
private String id;
private String name;
private int age;
private String position;
public Student() {
}
public Student(String id, String name, int age, String position) {
this.id = id;
this.name = name;
this.age = age;
this.position = position;
}
/**
* 获取
* @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 position
*/
public String getPosition() {
return position;
}
/**
* 设置
* @param position
*/
public void setPosition(String position) {
this.position = position;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", position = " + position + "}";
}
}
2. 测试类
package day11;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
Scanner sc = new Scanner(System.in);
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.print("请输入您的选择: ");
String choose = sc.next();
switch (choose) {
case "1":
addStudent(students);
break;
case "2":
deleteStudent(students);
break;
case "3":
updateStudent(students);
break;
case "4":
queryStudent(students);
break;
case "5":
System.out.println("谢谢光临");
System.exit(0);
default:
System.out.println("没有这个选项");
break;
}
}
}
public static void addStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
Student newStu = new Student();
// 判断id是否存在
String id = null;
while (true) {
System.out.println("请输入学生ID");
id = sc.next();
boolean flag = contains(students, id);
if (flag) {
System.out.println("id已存在,请重新输入");
} else {
newStu.setId(id);
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.next();
newStu.setName(name);
System.out.println("请输入学生年龄");
int age = sc.nextInt();
newStu.setAge(age);
System.out.println("请输入学生家庭住址");
String position = sc.next();
newStu.setPosition(position);
students.add(newStu);
System.out.println("学生信息添加成功");
}
public static void deleteStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的id");
String id = sc.next();
int index = getIndex(students, id);
if (index >= 0) {
students.remove(index);
System.out.println("id为" + id + "的学生删除成功");
} else {
System.out.println("要删除的id:" + id + "不存在,请重新输入");
}
}
public static void updateStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的id");
String id = sc.next();
int index = getIndex(students, id);
if (index == -1) {
System.out.println("要修改的id:" + id + "不存在,请重新输入");
return;
}
Student stu = students.get(index);
System.out.println("请输入要修改的学生姓名");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入要修改的学生年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入要修改的学生家庭住址");
String newPosition = sc.next();
stu.setPosition(newPosition);
System.out.println("学生信息修改成功");
}
public static void queryStudent(ArrayList<Student> students) {
if (students.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}
System.out.println("id\t\t姓名\t年龄\t家庭地址");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).getId() + "\t" + students.get(i).getName() + "\t" + students.get(i).getAge() + "\t" + students.get(i).getPosition());
}
}
/**
* 判断id是否存在
*
* @param students 学生集合
* @param id 学生id
* @return true为存在,false为不存在
*/
public static boolean contains(ArrayList<Student> students, String id) {
return getIndex(students, id) >= 0;
}
/**
* 通过id获得索引
*
* @param students 学生集合
* @param id 学生id
* @return 存在则返回索引值,不存在返回-1
*/
public static int getIndex(ArrayList<Student> students, String id) {
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
String sid = student.getId();
if (sid.equals(id)) {
return i;
}
}
return -1;
}
}
输出结果
a. 添加
b. 删除
c. 修改
d. 查询
e. 退出
二、学生管理系统升级版
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
1. 登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
2. 用户类:
属性:用户名、密码、身份证号码、手机号码
3. 注册功能:
-
用户名需要满足以下要求:
- 用户名唯一
- 用户名长度必须在3~15位之间
- 只能是字母加数字的组合,但是不能是纯数字
-
密码键盘输入两次,两次一致才可以进行注册。
-
身份证号码需要满足以下要求:
- 长度为18位
- 不能以0为开头
- 前17位,必须都是数字
- 最为一位可以是数字,也可以是大写X或小写x
-
手机号需要满足以下要求:
- 长度为11位
- 不能以0为开头
- 必须都是数字
4. 登录功能:
- 键盘录入用户名
- 键盘录入密码
- 键盘录入验证码
- 验证要求:
- 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
- 判断验证码是否正确,如不正确,重新输入
- 再判断用户名和密码是否正确,有3次机会
5. 忘记密码:
- 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
- 键盘录入身份证号码和手机号码
- 判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改。如果不一致,则提示:账号信息不匹配,修改失败。
6. 验证码规则:
- 长度为5
- 由4位大写或者小写字母和1位数字组成,同一个字母可重复
- 数字可以出现在任意位置。比如:aQa1K。
代码
1. 学生类
package day11;
public class Student {
private String id;
private String name;
private int age;
private String position;
public Student() {
}
public Student(String id, String name, int age, String position) {
this.id = id;
this.name = name;
this.age = age;
this.position = position;
}
/**
* 获取
* @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 position
*/
public String getPosition() {
return position;
}
/**
* 设置
* @param position
*/
public void setPosition(String position) {
this.position = position;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", position = " + position + "}";
}
}
2. 用户类
package day11;
public class User {
private String username;
private String pd;
private String userId;
private String phoneNumber;
public User() {
}
public User(String username, String pd, String userId, String phoneNumber) {
this.username = username;
this.pd = pd;
this.userId = userId;
this.phoneNumber = phoneNumber;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return pd
*/
public String getPd() {
return pd;
}
/**
* 设置
* @param pd
*/
public void setPd(String pd) {
this.pd = pd;
}
/**
* 获取
* @return userId
*/
public String getUserId() {
return userId;
}
/**
* 设置
* @param userId
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
* 获取
* @return phoneNumber
*/
public String getPhoneNumber() {
return phoneNumber;
}
/**
* 设置
* @param phoneNumber
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() {
return "User{username = " + username + ", pd = " + pd + ", userId = " + userId + ", phoneNumber = " + phoneNumber + "}";
}
}
3. 学生管理系统类
package day11;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void startStudentSystem() {
ArrayList<Student> students = new ArrayList<>();
Scanner sc = new Scanner(System.in);
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.print("请输入您的选择: ");
String choose = sc.next();
switch (choose) {
case "1":
addStudent(students);
break;
case "2":
deleteStudent(students);
break;
case "3":
updateStudent(students);
break;
case "4":
queryStudent(students);
break;
case "5":
System.out.println("谢谢光临");
break loop;
// System.exit(0);
default:
System.out.println("没有这个选项");
break;
}
}
}
public static void addStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
Student newStu = new Student();
// 判断id是否存在
String id = null;
while (true) {
System.out.println("请输入学生ID");
id = sc.next();
boolean flag = contains(students, id);
if (flag) {
System.out.println("id已存在,请重新输入");
} else {
newStu.setId(id);
break;
}
}
System.out.println("请输入学生姓名");
String name = sc.next();
newStu.setName(name);
System.out.println("请输入学生年龄");
int age = sc.nextInt();
newStu.setAge(age);
System.out.println("请输入学生家庭住址");
String position = sc.next();
newStu.setPosition(position);
students.add(newStu);
System.out.println("学生信息添加成功");
}
public static void deleteStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的id");
String id = sc.next();
int index = getIndex(students, id);
if (index >= 0) {
students.remove(index);
System.out.println("id为" + id + "的学生删除成功");
} else {
System.out.println("要删除的id:" + id + "不存在,请重新输入");
}
}
public static void updateStudent(ArrayList<Student> students) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的id");
String id = sc.next();
int index = getIndex(students, id);
if (index == -1) {
System.out.println("要修改的id:" + id + "不存在,请重新输入");
return;
}
Student stu = students.get(index);
System.out.println("请输入要修改的学生姓名");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入要修改的学生年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入要修改的学生家庭住址");
String newPosition = sc.next();
stu.setPosition(newPosition);
System.out.println("学生信息修改成功");
}
public static void queryStudent(ArrayList<Student> students) {
if (students.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}
System.out.println("id\t\t姓名\t年龄\t家庭地址");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i).getId() + "\t" + students.get(i).getName() + "\t" + students.get(i).getAge() + "\t" + students.get(i).getPosition());
}
}
/**
* 判断id是否存在
*
* @param students 学生集合
* @param id 学生id
* @return true为存在,false为不存在
*/
public static boolean contains(ArrayList<Student> students, String id) {
return getIndex(students, id) >= 0;
}
/**
* 通过id获得索引
*
* @param students 学生集合
* @param id 学生id
* @return 存在则返回索引值,不存在返回-1
*/
public static int getIndex(ArrayList<Student> students, String id) {
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
String sid = student.getId();
if (sid.equals(id)) {
return i;
}
}
return -1;
}
}
4. App入口
package day11;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<User> users = new ArrayList<>();
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作 1、登录 2、注册 3、忘记密码 按其他键退出");
String choose = sc.next();
switch (choose) {
case "1":
login(users);
break;
case "2":
register(users);
break;
case "3":
forgetPd(users);
break;
default:
System.out.println("谢谢使用,再见");
System.exit(0);
break;
}
}
}
/**
* 忘记密码
*
* @param users 用户集合
*/
private static void forgetPd(ArrayList<User> users) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
// 判断用户名是否注册
boolean flag = contains(users, username);
if (!flag) {
System.out.println("当前用户" + username + "未注册,请先注册");
}
System.out.println("请输入身份证号码");
String userId = sc.next();
System.out.println("请输入手机号码");
String phoneNumber = sc.next();
int index = findIndex(users, username);
User user = users.get(index);
if (!(user.getUserId().equalsIgnoreCase(userId) && user.getPhoneNumber().equals(phoneNumber))) {
System.out.println("身份证号码或手机号码输入有误,不能修改密码");
return;
}
String pd;
while (true) {
System.out.println("请输入新的密码");
pd = sc.next();
System.out.println("请再次输入新的密码");
String againPd = sc.next();
if (pd.equals(againPd)) {
System.out.println("两次密码一致");
break;
} else {
System.out.println("两次密码不一致,请重新输入");
}
}
user.setPd(pd);
System.out.println("密码修改成功");
}
/**
* 查找用户名在用户集合中的索引值
*
* @param users 用户集合
* @param username 用户名
* @return 存在返回索引值,不存在返回-1
*/
private static int findIndex(ArrayList<User> users, String username) {
for (int i = 0; i < users.size(); i++) {
User user = users.get(i);
if (user.getUsername().equals(username)) {
return i;
}
}
return -1;
}
/**
* 注册方法
*
* @param users 用户集合
*/
private static void register(ArrayList<User> users) {
Scanner sc = new Scanner(System.in);
String username;
String pd;
String userId;
String phoneNumber;
// 键盘录入用户名
while (true) {
System.out.println("请输入用户名");
username = sc.next();
// 验证用户名
boolean usernameFlag = checkUsername(username);
if (!usernameFlag) {
// 格式不满足,重新输入
System.out.println("用户名格式不满足条件,需要重新输入");
continue;
}
// 验证唯一性
boolean uniqueUsername = contains(users, username);
if (uniqueUsername) {
System.out.println("用户名" + username + "已存在,请重新输入");
} else {
System.out.println("用户名" + username + "可用");
break;
}
}
// 键盘录入密码
while (true) {
System.out.println("请输入要注册的密码");
pd = sc.next();
System.out.println("请再次输入要注册的密码");
String againPd = sc.next();
if (pd.equals(againPd)) {
System.out.println("两次密码输入一致,继续录入其他数据");
break;
} else {
System.out.println("两次密码输入不一致,请重新输入");
}
}
// 键盘录入身份证号码
while (true) {
System.out.println("请输入身份证号");
userId = sc.next();
boolean userIdFlag = checkUserId(userId);
if (userIdFlag) {
System.out.println("身份证号码格式满足要求");
break;
} else {
System.out.println("身份证号码格式有误,请重新输入");
}
}
// 键盘录入手机号码
while (true) {
System.out.println("请输入手机号码");
phoneNumber = sc.next();
boolean phoneNumberFlag = checkPhoneNumber(phoneNumber);
if (phoneNumberFlag) {
System.out.println("手机号码格式正确");
break;
} else {
System.out.println("手机号码输入有误,请重新输入");
}
}
User newUser = new User(username, pd, userId, phoneNumber);
users.add(newUser);
System.out.println(username + "注册成功");
}
/**
* 验证手机号格式
*
* @param phoneNumber 手机号
* @return 符合规范返回true,否则返回false
*/
private static boolean checkPhoneNumber(String phoneNumber) {
if (phoneNumber.length() != 11) {
return false;
}
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;
}
/**
* 验证身份证号码格式
*
* @param userId 身份证号码
* @return 符合规范返回true,否则返回false
*/
private static boolean checkUserId(String userId) {
if (userId.length() != 18) {
return false;
}
if (userId.startsWith("0")) {
return false;
}
// 前17位必须是数字
for (int i = 0; i < userId.length() - 1; i++) {
char c = userId.charAt(i);
if (!(c >= '0' && c <= '9')) {
return false;
}
}
// 最后一位
char endChar = userId.charAt(userId.length() - 1);
return (endChar >= '0' && endChar <= '9') || (endChar == 'x') || (endChar == 'X');
}
/**
* 查询用户名是否存在
*
* @param users 用户集合
* @param username 用户名
* @return 存在返回true,不存在返回false
*/
private static boolean contains(ArrayList<User> users, String username) {
return findIndex(users, username) >= 0;
}
/**
* 验证用户名格式
*
* @param username 用户名
* @return 符合规范返回true,否则返回false
*/
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 charCount = 0;
int numCount = 0;
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
charCount++;
}
if (c >= '0' && c <= '9') {
numCount++;
}
}
// 只能是数字+字母
if ((charCount + numCount) != username.length()) {
return false;
}
// 不能是纯数字
return numCount != username.length();
}
/**
* 登录方法
*
* @param users 用户集合
*/
private static void login(ArrayList<User> users) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
boolean usernameFlag = contains(users, username);
if (!usernameFlag) {
System.out.println("用户名" + username + "未注册,请先注册再登录");
return;
}
// 只有3次机会
for (int i = 0; true; i++) {
System.out.println("请输入密码");
String pd = sc.next();
while (true) {
String rightCode = getCode();
System.out.println("当前验证码为:" + rightCode);
System.out.println("请输入验证码");
String code = sc.next();
if (code.equalsIgnoreCase(rightCode)) {
System.out.println("验证码正确");
break;
} else {
System.out.println("验证码错误");
}
}
User userInfo = new User(username, pd, null, null);
boolean checkUserInfo = checkUserInfo(users, userInfo);
if (checkUserInfo) {
System.out.println("登录成功,可以使用学生管理系统");
StudentSystem ss = new StudentSystem();
ss.startStudentSystem();
break;
} else {
if (i == 2) {
System.out.println("当前账号" + username + "被锁定");
return;
} else {
System.out.println("登录失败,用户名或密码错误,还剩下" + (2 - i) + "次机会");
}
}
}
}
/**
* 验证账号密码是否匹配
*
* @param users 用户集合
* @param userInfo 用户信息
* @return 匹配返回true,不匹配返回false
*/
private static boolean checkUserInfo(ArrayList<User> users, User userInfo) {
for (User user : users) {
if (user.getUsername().equals(userInfo.getUsername()) && user.getPd().equals(userInfo.getPd())) {
return true;
}
}
return false;
}
/**
* 获取验证码
*
* @return 验证码
*/
public static String getCode() {
ArrayList<Character> charList = new ArrayList<>();
char[] chars = new char[5];
Random random = new Random();
for (int i = 0; i < 26; i++) {
charList.add((char) ('a' + i));
charList.add((char) ('A' + i));
}
for (int i = 0; i < 5; i++) {
int index = random.nextInt(charList.size());
chars[i] = charList.get(index);
}
chars[random.nextInt(chars.length)] = (char) (random.nextInt(10) + 48);
return new String(chars);
}
}