目录
StudentManagementPro-系统的整合以及登录模块的实现(升级点)
前言
- 为了巩固目前掌握的知识,我从黑马程序员经典的基础练习题中选出了【创建一个简单的学生管理系统(升级版)】来进行练习和讲解。
- 在简单学生管理系统的基础上,新系统增加了用户的注册和登录功能。这个项目的实现涉及以往学习的绝大部分内容(近乎所有),能极大促进我们的代码书写能力和编程逻辑能力,让我们对Java语言有更进一步的认知。
- 本文代码内含丰富全面的注释,可以仔细阅读与琢磨。
- 本文的源代码以及需求文档会上传至平台,可以到文章顶部找资料压缩包。
该项目涉及的知识点
知识点清单 |
---|
Java基础语法(输入输出与随机数等),JVM运行原理,JDK,Idea工具的使用 |
关键字、变量、数据类型(基本数据类型、引用数据类型) |
运算符和表达式 |
流程控制语句(for、while、switch、if) |
数组以及数组算法 |
方法的构造 |
面向对象编程(类和对象),封装思想 |
String字符串类型(工具:StringBuilder) |
集合ArrayList |
项目准备
- JDK (本文采用JDK17)
- 编程工具Idea (本文采用Idea2023.3.7版本)
- 需求文档 (下文)
JDK
参考下文,我在前面的文章里面做了详细的操作(本文采用JDK17)JDK下载与安装https://blog.csdn.net/q251932440/article/details/141369145?spm=1001.2014.3001.5502
编程工具Idea
(本文采用Idea2023.3.7版本)
需求文档-升级部分(参考黑马程序员)
升级前需求文档参考上一篇文章
学生管理系统书写https://blog.csdn.net/q251932440/article/details/142070845?spm=1001.2014.3001.5501
学生管理系统升级版
需求
- 为学生管理系统书写一个登陆、注册、忘记密码的功能。
- 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析
登录界面
System.out.println("欢迎来到学生管理系统"); System.out.println("请选择操作1登录 2注册 3忘记密码");用户类
属性:用户名、密码、身份证号码、手机号码
注册功能
- 用户名需要满足以下要求:
- 验证要求:
- 用户名唯一
- 用户名长度必须在3~15位之间
- 只能是字母加数字的组合,但是不能是纯数字
- 密码键盘输入两次,两次一致才可以进行注册。
- 身份证号码需要验证。
- 验证要求:
- 长度为18位
- 不能以0为开头
- 前17位,必须都是数字
- 最为一位可以是数字,也可以是大写X或小写x
- 手机号验证。
- 验证要求:
- 长度为11位
- 不能以0为开头
- 必须都是数字
登录功能
- 键盘录入用户名
- 键盘录入密码
- 键盘录入验证码
- 验证要求:
- 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
- 判断验证码是否正确,如不正确,重新输入
- 再判断用户名和密码是否正确,有3次机会
忘记密码
- 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
- 键盘录入身份证号码和手机号码
- 判断当前用户的身份证号码和手机号码是否一致:
- 如果一致,则提示输入密码,进行修改。
- 如果不一致,则提示:账号信息不匹配,修改失败。
验证码规则
- 长度为5
- 由4位大写或者小写字母和1位数字组成,同一个字母可重复
- 数字可以出现在任意位置
- 比如:aQa1K
需求分析
参照上述需求文档,绘制一份需求分析,这是一个非常重要的环节。以下是本人绘制的需求分析图,把学生管理系统的登录模块分成了登陆方法、注册方法以及忘记密码方法三个核心部分。在系统内,分成了增、删、改、查四个核心部分
编码
新建项目-StudentManagement
- 打开idea,新建一个java项目StudentManagement,并在项目内创建如下结构
- Student类
- User类
- SystemCore:实现系统增删改查的核心功能
- StudentManagementPro:系统的整合以及登录模块的实现
Student类
- 创建学生类描述学生属性
- id
- 姓名
- 年龄
- 家庭住址
- 实现代码:
public class Student { private String id; private String name; private int age; private String address; //全参构造 public Student(String id, String name, int age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } //无参构造 public Student() { } //getter and setter 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; } }
User类
- 创建用户类描述用户属性
- 用户名
- 密码
- 身份证号码
- 手机号码
- 实现代码:
public class User { //定义成员变量 private String username; private String password; private String personId; private String phone; public User() { } //全参构造 public User(String username, String password, String personId, String phone) { this.username = username; this.password = password; this.personId = personId; this.phone = phone; } //无参构造 public String getUsername() { return username; } //getter and setter 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 getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
核心方法类SystemCore的实现
- 实现系统增删改查的核心功能
该类的实现在前文有详细描述,可以参考如下链接:学生管理系统书写https://blog.csdn.net/q251932440/article/details/142070845?spm=1001.2014.3001.5501
需要注意的是:前文为了测试核心功能,将此类写了main方法,在升级的版本中,我们只把其作为一个核心方法类,所以我们将main方法改为 startSystem()
- 实现代码:
import java.util.ArrayList; import java.util.Scanner; public class SystemCore { public static void startSystem() { //创建一个集合放置Student类型的数据 ArrayList<Student> list = new ArrayList<>(); //创建Scanner类,为下方选择流程的输入操作服务 Scanner sc = new Scanner(System.in); //循环操作 while (true){ System.out.println("-------欢迎进入Joe学生管理系统-------"); System.out.println("1:添加学生信息"); System.out.println("2:删除学生信息"); System.out.println("3:修改学生信息"); System.out.println("4:查询所有学生信息"); System.out.println("5:退出"); System.out.println("请输入您的选择:"); //输入选择 String chose = sc.next(); //选择流程(->格式自带break;) switch (chose){ case "1" -> addStudent(list); //添加学生信息 case "2" -> deleteStudent(list); //删除学生信息 case "3" -> updateStudent(list); //修改学生信息 case "4" -> selectStudent(list); //查询所有学生信息 case "5" -> { //退出系统 System.out.println("##### 退出 #####"); System.exit(0); } default -> System.out.println("没有这个选项!"); } } } //添加方法:对键盘录入的学生信息进行添加,要求id唯一 //需求:list //返回?void public static void addStudent(ArrayList<Student> list){ //打印提示信息 System.out.println("##### 添加学生信息 #####"); //创建Scanner类键入学生信息 Scanner sc = new Scanner(System.in); //判断唯一性:如果id已经存在则需要重新输入一个新的id //循环直到输入一个在集合中不存在的id String id = null; //在循环外创建String,不然循环结束后,在循环中创建的String字符串会消失!!! while (true){ //输入id System.out.println("输入id:"); id = sc.next(); //判断id唯一性