Java综合案例 #采取控制台方式书写简单学生管理系统(含注册登录功能)---案例分析与编码全流程详细讲解(内含详细注释)

目录


前言        

该项目涉及的知识点

项目准备 

JDK

编程工具Idea 

需求文档-升级部分(参考黑马程序员)

学生管理系统升级版

需求

分析

登录界面

用户类

注册功能

登录功能

忘记密码

验证码规则

需求分析 

编码

新建项目-StudentManagement

Student类

User类 

核心方法类SystemCore的实现 

StudentManagementPro-系统的整合以及登录模块的实现(升级点)

主要框架(main方法)

 注册方法

判断用户名的合法性

密码输入

判断身份证号的合法性

判断电话号码的合法性 

注册方法整体实现

 登录方法

生成随机验证码

判断用户名和密码是否匹配

登录方法整体实现 

忘记密码方法 

判断用户名、身份证号和手机号码是否匹配

忘记密码方法整体实现

StudentManagementPro的全部代码

结语

前言        


  • 为了巩固目前掌握的知识,我从黑马程序员经典的基础练习题中选出了【创建一个简单的学生管理系统(升级版)】来进行练习和讲解。
  • 在简单学生管理系统的基础上,新系统增加了用户的注册和登录功能。这个项目的实现涉及以往学习的绝大部分内容(近乎所有),能极大促进我们的代码书写能力和编程逻辑能力,让我们对Java语言有更进一步的认知。
  • 本文代码内含丰富全面的注释,可以仔细阅读与琢磨。
  • 本文的源代码以及需求文档会上传至平台,可以到文章顶部找资料压缩包。

该项目涉及的知识点

知识点清单
Java基础语法(输入输出与随机数等),JVM运行原理,JDK,Idea工具的使用
关键字、变量、数据类型(基本数据类型、引用数据类型)
运算符和表达式
流程控制语句(for、while、switch、if)
数组以及数组算法
方法的构造
面向对象编程(类和对象),封装思想
String字符串类型(工具:StringBuilder)
集合ArrayList

项目准备 


  • JDK                        (本文采用JDK17)
  • 编程工具Idea         (本文采用Idea2023.3.7版本)
  • 需求文档                (下文)

JDK

        参考下文,我在前面的文章里面做了详细的操作(本文采用JDK17)JDK下载与安装icon-default.png?t=O83Ahttps://blog.csdn.net/q251932440/article/details/141369145?spm=1001.2014.3001.5502

编程工具Idea 

        移步官网下载,网址:IntelliJ IDEA – the Leading Java and Kotlin IDEIntelliJ IDEA is undoubtedly the top-choice IDE for software developers. It makes Java and Kotlin development a more productive and enjoyable experience.icon-default.png?t=O83Ahttps://www.jetbrains.com/idea/

        (本文采用Idea2023.3.7版本)

需求文档-升级部分(参考黑马程序员)

        升级前需求文档参考上一篇文章

学生管理系统书写icon-default.png?t=O83Ahttps://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的实现 

  • 实现系统增删改查的核心功能

    该类的实现在前文有详细描述,可以参考如下链接:学生管理系统书写icon-default.png?t=O83Ahttps://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唯一性
     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值