前言:本次项目是对多天以来Java学习的总结,项目主体包含两部分,分别是学生登录界面以及学生信息管理界面,使用ArrayList集合对数据进行存储。总体包含Student和User两个JavaBean类和两个界面测试类
一、双界面展示
二、JavaBean类
学生类:
- 成员变量:id、姓名、年龄、家庭住址。
- 构造方法:无参构造和带四个参数的构造。
- 成员方法:每个成员变量对应给出get/set方法。
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 String getId() {
return id;
}
public void setId(String 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;
}
}
用户类:
- 属性:用户名、密码、身份证号码、手机号码
- 构造方法:无参构造和带四个参数的构造。
- 成员方法:每个成员变量对应给出get/set方法。
public class User {
private String username;
private String password;
private String personId;
private String phoneNumber;
public User(){
}
public User(String username, String password, String personId, String phoneNumber) {
this.username = username;
this.password = password;
this.personId = personId;
this.phoneNumber = phoneNumber;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
三、学生登录界面
需求:
- 为学生管理系统书写一个登陆、注册、忘记密码的功能。
- 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
3.1 main()方法
思路:
使用sout语句完成对登录界面的构建。
使用Scanner对象输入操作选项。
使用switch语句完成操作的选择。
使用循环反复操作。
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
while(true){
System.out.println("欢迎来到学生管理登录系统");
System.out.println("请选择1.登录 2.注册 3.忘记密码 4.关闭");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch(choose){
case "1" -> login(list);
case "2" -> register(list);
case "3" -> forgetPassword(list);
case "4" -> {
System.out.println("谢谢使用,再见");
System.exit(0);
}
default -> System.out.println("选项错误,请重新输入");
}
}
}
3.2注册功能register()方法
需求:
思路:
创建用户对象和扫描器,用于接收用户输入并存储用户信息
分步骤验证并获取用户信息:
验证用户名格式及唯一性,直到输入符合要求
验证两次输入密码的一致性,直到输入一致
验证身份证格式,直到输入符合要求
验证手机号格式,直到输入符合要求
所有信息验证通过后,提示注册成功
将新用户添加到用户列表中
public static void register(ArrayList<User> list){
User u = new User();
Scanner sc = new Scanner(System.in);
//判断用户名
while (true) {
System.out.println("请输入用户名");
String username = sc.next();
//先判断合法,在判断唯一
boolean flag = checkUserName(username);
if(!flag){
System.out.println("格式不满足条件,请重新输入");
continue;
}
boolean flag2 = contains(list, username);
if(flag2){
//用户名已存在,重新输入
System.out.println("用户名" + username + "已存在,请重新输入");
}else {
System.out.println("用户名" + username + "输入成功" );
u.setUsername(username);
break;
}
}
//判断密码
while (true){
System.out.println("请输入密码");
String password1 = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
boolean flag = checkPassword(password1,password2);
if(!flag){
System.out.println("密码不一致,请重新输入");
}else {
u.setPassword(password1);
System.out.println("密码一致,输入其他数据");
break;
}
}
//判断身份证
while (true){
System.out.println("请输入身份证");
String personId = sc.next();
boolean flag = checkPersonId(personId);
if(flag){
System.out.println("身份证号码满足要求");
u.setPersonId(personId);
break;
}else {
System.out.println("身份证格式错误,请重新输入");
}
}
//判断手机号
while (true){
System.out.println("请输入手机号");
String phoneNumber = sc.next();
boolean flag = checkPhoneNumber(phoneNumber);
if(flag){
System.out.println("手机格式正确");
u.setPhoneNumber(phoneNumber);
break;
}else {
System.out.println("手机号格式错误,请重新输入");
}
}
System.out.println("注册成功!");
list.add(u);
//遍历集合
printList(list);
}
3.3登录功能login()方法
需求:
- 键盘录入用户名、密码、验证码
- 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
- 判断验证码是否正确,如不正确,重新输入
- 再判断用户名和密码是否正确,有3次机会
思路:
最多提供 3 次登录机会,通过 for 循环控制
每次登录流程:
输入用户名,检查是否已注册,未注册则直接返回
输入密码后,生成并验证验证码(忽略大小写),直到输入正确
将用户名和密码封装成 User 对象,验证与列表中存储的信息是否匹配
验证通过则提示登录成功,启动学生管理系统
验证失败则提示错误,若 3 次都失败则锁定账号并返回,否则显示剩余尝试次数
//登录功能
public static void login(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名");
String username = sc.next();
//判断用户名是否存在
boolean flag = contains(list,username);
if (!flag){
System.out.println("用户名" + username + "未注册,请先注册再登录");
return;
}
System.out.println("请输入密码");
String password = sc.next();
while (true) {
String rightCode = getCode();
System.out.println("请输入验证码(" + rightCode + ")");
String Code = sc.next();
//忽略大小写
if (Code.equalsIgnoreCase(rightCode)){
System.out.println("验证码正确");
break;
}else{
System.out.println("验证码错误");
continue;
}
}
//验证用户名和密码
//定义一个方法验证用户名和密码是否正确
//封装思想的应用:
//可以把一些零散的数据,封装成一个对象
//以后传递参数的时候,只要传递一个整体就可以了,不需要管这些零散的数据
User userInfo = new User(username,password,null,null);
boolean result = checkUserInfo(list,userInfo);
if (result){
System.out.println("登录成功,可以开始使用学生管理系统");
//创建对象调用方法,启动学生管理系统
StudentSystem ss = new StudentSystem();
ss.startStudentSystem();
break;
}else {
System.out.println("登录失败,用户名或密码错误");
if (i == 2){
System.out.println("当前账号" + username + "被锁定");
return;
}else{
System.out.println("用户名或密码错误,还剩下" + (2–i) + "次机会");
}
}
}
}
3.4忘记密码功能forgetPassword()方法
需求:
- 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
- 键盘录入身份证号码和手机号码
- 判断当前用户的身份证号码和手机号码是否一致, 如果一致,则提示输入密码,进行修改。 如果不一致,则提示:账号信息不匹配,修改失败。
思路:
输入用户名,检查是否已注册,未注册则直接返回
验证身份:输入身份证号和手机号,与该用户注册时的信息比对
信息验证通过后,进入密码修改流程:
输入新密码并再次确认
两次输入一致则更新密码,否则重新输入
密码修改成功后给出提示
//忘记密码
public static void forgetPassword(ArrayList<User> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String username = sc.next();
boolean flag = contains(list,username);
if (!flag){
System.out.println("当前用户" + username + "未注册,请先注册");
return;
}
//键盘录入身份证和手机号
System.out.println("请输入身份证号码");
String personId = sc.next();
System.out.println("请输入手机号");
String phoneNumber = sc.next();
//需要把用户对象通过索引先获取出来
int index = findIndex(list,username);
User user = list.get(index);
//比较用户对象中的手机号码和身份证是否相同
if (!(user.getPersonId().equalsIgnoreCase(personId) && user.getPhoneNumber().equals(phoneNumber))){
System.out.println("身份证或手机输入有误,不能修改");
return;
}
//当代码执行到这里,表示所有的数据全部验证成功,可以修改
while (true) {
System.out.println("请输入新的密码");
String password = sc.next();
System.out.println("请再次输入新的密码");
String againPassword = sc.next();
boolean result = checkPassword(password,againPassword);
if (result){
System.out.println("输入一致");
user.setPassword(password);
break;
}else {
System.out.println("两次密码输入不一致,请重新输入");
continue;
}
}
System.out.println("密码修改成功");
}
四、学生管理系统界面
需求:
- 采取控制台的方式去书写学生管理系统。
4.1 startStudentSystem()方法
思路:
使用sout语句完成对登录界面的构建。
使用Scanner对象输入操作选项。
使用switch语句完成操作的选择。
使用循环反复操作。
public static void startStudentSystem() {
ArrayList<Student> 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("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();
System.exit(0);
}
default -> System.out.println("没有这个选项");
}
}
}
4.2 添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
- id唯一
思路:
创建学生对象和扫描器,用于存储学生信息和接收输入
验证并设置学生 ID:
循环输入 ID,检查是否已存在
若 ID已存在则提示重新输入,否则设置该 ID 并退出循环
依次输入并设置学生的姓名、年龄、家庭地址
将完整的学生对象添加到列表中,提示添加成功
//添加学生
public static void addStudent(ArrayList<Student> list){
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){
//表示id已经存在,需要重新录入
System.out.println("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);
System.out.println("添加成功");
}
4.3删除功能:
键盘录入要删除的学生id,需要满足以下要求:
- id存在删除
- id不存在,需要提示不存在,并回到初始菜单
思路:
接收用户输入的要删除的学生 ID
查询该 ID 在学生列表中的索引位置
根据索引判断操作:
若索引有效(存在该学生),则从列表中删除该学生并提示成功
若索引无效(不存在该学生),则提示删除失败
//删除学生
public static void deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的id");
String id = sc.next();
//查询id在集合中的索引
int index = getIndex(list,id);
//对id进行判断
//如果-1,就表示不存在,结束方法,回到初始菜单
if(index >= 0){
//如果大于等于0的,表示存在,直接删除
list.remove(index);
System.out.println("id为" + id + "的学生删除成功");
}else{
System.out.println("id不存在,删除失败");
}
}
4.4修改功能:
键盘录入要修改的学生id,需要满足以下要求
- id存在,继续录入其他信息
- id不存在,需要提示不存在,并回到初始菜单
思路:
接收用户输入的要修改的学生 ID
查询该 ID 在学生列表中的索引位置
根据索引判断操作:
若索引无效(不存在该学生),提示修改失败并结束
若索引有效(存在该学生),则依次输入修改后的姓名、年龄、家庭地址
创建新学生对象并设置修改后的信息(保持原 ID),替换列表中对应位置的学生信息
//修改学生
public static void updateStudent(ArrayList<Student> list){
Student stu = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的id");
String id = sc.next();
//查询id在集合中的索引
int index = getIndex(list,id);
//对id进行判断
//如果-1,就表示不存在,结束方法,回到初始菜单
if(index >= 0){
//如果大于等于0的,表示存在,修改
//list.set(index,);
System.out.println("请输入修改后的姓名");
String name = sc.next();
System.out.println("请输入修改后的年龄");
int age = sc.nextInt();
System.out.println("请输入修改后的家庭地址");
String address = sc.next();
stu.setId(id);
stu.setName(name);
stu.setAge(age);
stu.setAddress(address);
list.set(index,stu);//Student stu = list.get(index)可直接修改
System.out.println("id为" + id + "的学生修改成功");
}else{
System.out.println("id"+id+"不存在,修改失败");
}
}
4.5查询功能:
打印所有的学生信息,需要满足以下要求
- 如果没有学生信息,提示:当前无学生信息,请添加后再查询
- 如果有学生信息,需要输出。
思路:
先检查学生列表是否为空,若为空则提示用户添加后再查询并返回
若列表有数据,先打印表头(id、姓名、年龄、家庭地址)
遍历学生列表,依次获取每个学生对象的信息并按格式输出
完成所有学生信息的展示
//查询学生
public static void queryStudent(ArrayList<Student> list){
//没有学生信息时
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());
}
}
五、功能测试
1.登录系统
1.1注册功能
1.2登录功能
1.3忘记密码功能
2.学生信息管理界面
2.1添加功能
2.2查询功能
2.3删除功能
2.4修改功能
注:为节省篇幅,一些在功能中调用的方法功能未全部列出,如若需要全部源码,请私信。
评论前必须登录!
注册