基于JAVA的学生管理系统升级版

一. 需求

  1. 登录系统需求

需求:

为学生管理系统书写一个登陆、注册、忘记密码的功能。

只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
用户类:

属性:用户名、密码、身份证号码、手机号码

注册功能:

1,用户名需要满足以下要求:

验证要求:

用户名唯一

用户名长度必须在3~15位之间

只能是字母加数字的组合,但是不能是纯数字

2,密码键盘输入两次,两次一致才可以进行注册。

3,身份证号码需要验证。

验证要求:

长度为18位

不能以0为开头

前17位,必须都是数字

最为一位可以是数字,也可以是大写X或小写x

4,手机号验证。

验证要求:

长度为11位

不能以0为开头

必须都是数字

登录功能:

1,键盘录入用户名

2,键盘录入密码

3,键盘录入验证码

验证要求:

用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

判断验证码是否正确,如不正确,重新输入

再判断用户名和密码是否正确,有3次机会

忘记密码:

1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

2,键盘录入身份证号码和手机号码

3,判断当前用户的身份证号码和手机号码是否一致,

如果一致,则提示输入密码,进行修改。

如果不一致,则提示:账号信息不匹配,修改失败。

验证码规则:

长度为5

由4位大写或者小写字母和1位数字组成,同一个字母可重复

数字可以出现在任意位置

比如:

aQa1K

  1. 学生管理系统需求

学生管理系统

需求:

采取控制台的方式去书写学生管理系统。

分析:

初始菜单:
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:

属性:id、姓名、年龄、家庭住址

添加功能:

键盘录入每一个学生信息并添加,需要满足以下要求:

  • id唯一

删除功能:

键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除

  • id不存在,需要提示不存在,并回到初始菜单

修改功能:

键盘录入要修改的学生id,需要满足以下要求

  • id存在,继续录入其他信息

  • id不存在,需要提示不存在,并回到初始菜单

查询功能:

打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询

  • 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)

id			姓名		年龄		家庭住址
heima001	张三		23		 南京
heima002	李四		24		 北京
heima003	王五		25		 广州
heima004	赵六	 	26		 深圳

二. 登录系统的代码实现

  1. 通用代码

因为编程过程中需要大量遍历list进行查询操作,所以我们可以把这一部分进行模块化。

通过这个代码的返回值与0的大小关系,我们可以知道用户名是否存在

    //查询索引
    public static  int findIndex(ArrayList<User> list , String name){
        for (int i = 0; i < list.size(); i++) {
            if(name.equals(list.get(i).getName())){
                return i;
            }
        }
        return -1;


    }

}
  1. 主函数编写

这里主要是框架,实现功能的代码放到方法中,这部分要先写,这样才可以理清思路

 public static void main(String[] args) {

        ArrayList<User> appList = new ArrayList<>();

        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录 2注册 3忘记密码");

            String choose = sc.next();
            switch(choose){
                case "1" -> logIn(appList);
                case "2" -> signIn(appList);
                case "3" -> forgetPassword(appList);
                default -> {
                    System.out.println("所选项不合法,请重新选择");
                    break;
                }
            }

        }
  1. User类

public class User {
    private String name;
    private String password;
    private String PIN;
    private String phoneNumber;


    public User() {
    }

    public User(String name, String password, String PIN, String phoneNumber) {
        this.name = name;
        this.password = password;
        this.PIN = PIN;
        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 PIN
     */
    public String getPIN() {
        return PIN;
    }

    /**
     * 设置
     * @param PIN
     */
    public void setPIN(String PIN) {
        this.PIN = PIN;
    }

    /**
     * 获取
     * @return phoneNumber
     */
    public String getPhoneNumber() {
        return phoneNumber;
    }

    /**
     * 设置
     * @param phoneNumber
     */
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }


}
  1. 注册

主体框架

//注册
    public static void signIn( ArrayList<User> appList){
        System.out.println("注册");
        Scanner sc = new Scanner(System.in);

        while(true){
            //输入用户名
            System.out.println("请输入用户名:");
            String name = sc.next();
             if(!nameCheck(name, appList)){
                 continue;
             }

            //输入密码
            System.out.println("请输入密码:");
            String passWord1 = sc.next();
            System.out.println("请再次输入密码:");
            String passWord2 = sc.next();
            if(!passwordCheck(passWord1,passWord2)){
                System.out.println("输入的两次密码不相同,请重新输入");
                continue;
            }

            //输入身份证
            System.out.println("请输入身份证:");
            String PIN = sc.next();
            if(!PINCheck(PIN)){
                continue;
            }
            //输入电话号码
            System.out.println("请输入电话号码:");
            String phoneNumber = sc.next();
            if(!phoneNumberCheck(phoneNumber)){
                continue;
            }
            User u = new User(name,passWord1,PIN,phoneNumber);
            appList.add(u);
            break;
        }
    }

用户名验证

//用户名验证
    public static boolean nameCheck(String name,  ArrayList<User> appList){
        int index = findIndex(appList, name);
        if(index >= 0){
            System.out.println("用户名已经存在,请重新输入");
            return false;
        }else{
            if(name.length() <= 3 || name.length() >= 15){
                System.out.println("用户名长度错误,请重新输入");
                return false;
            }else{
                if(!nameCheck(name)){
                    System.out.println("用户名应该由字母和数字组成,请重新输入");
                    return false;
                }
            }
        }
        return true;

    }
判断用户名是否是数字加字母
 //判断用户名是否是数字加字母
    public static boolean nameCheck(String name){
        char a = '0';
        int numberCount = 0;
        int letterCount = 0;

        for (int i = 0; i < name.length(); i++) {
            a = name.charAt(i);
            if(a >= '0' && a <= '9'){
                numberCount++;
            }else if((a >= 'A' && a <= 'Z') || (a >= 'a' && a <= 'z')){
                    letterCount++;
                }else{
                return false;
            }
        }

        if(numberCount > 0 && letterCount > 0){
            return true;
        }
        return false;
    }

密码验证

 //密码验证
    public static boolean passwordCheck(String password1 , String password2){
        if(password1.equals(password2)){
            return true;
        }
        return false;

    }

身份证验证

 //身份证验证
    public static boolean PINCheck(String PIN){
        if(PIN.length() == 18 ){
            if(PIN.charAt(0) != '0'){
                if(PINNumberCheck(PIN)){
                    return true;
                }else{
                    System.out.println("身份证号码前17位,必须都是数字 ,最为一位可以是数字,也可以是大写X或小写x");
                }
            }else{
                System.out.println("身份证号码不能以0开头");
            }
        }else{
            System.out.println("身份证号码应为18位");
        }
        return false;
    }
判断身份证前17是否是数字,最后一位是否是数字或x或X
 //判断身份证前17是否是数字,最后一位是否是数字或x或X
    public static boolean PINNumberCheck(String PIN){
        for (int i = 0; i < PIN.length(); i++) {
            char a = PIN.charAt(i);
            if(a < '0' || a > '9'){
                if(i == 17){
                    if(a == 'x' || a == 'X'){
                        break;
                    }
                }
                return false;
            }
        }
        return true;
    }

电话号码验证

//电话号码验证
    public static boolean phoneNumberCheck(String phoneNumber){
        if(phoneNumber.length() != 11){
            System.out.println("电话号码应为11位,请重新输入");
            return false;
        }else if(phoneNumber.charAt(0) == '0'){
            System.out.println("电话号码第一位不能是0,请重新输入");
            return false;
        }else if(!NumberCheck(phoneNumber)){
            System.out.println("电话号码必须全是数字,请重新输入");
            return false;
        }
        return true;
    }
判断是否全是数字
//判断是否全是数字
    public static boolean NumberCheck(String phoneNumber){
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c = phoneNumber.charAt(i);
            if(c < '0' || c >'9'){
                return false;
            }
        }
        return true;
    }
  1. 登录

产生验证码

(1) 先将1~9放在一个数组中,在将大小写放在另一个数组中。

(2)在随机产生索引,将四个字母放前面,最后放数字。

(3)最后将最后一个数字与任意一个字母或数组换位置

//产生验证码
    public static String produceCheckNumber(){

        int[] num = {1,2,3,4,5,6,7,8,9,0};
        char[] letter = new char[52];
        //将大小写字母添加到数组里
        for (int i = 0; i < letter.length; i++) {
            if(i <= 25){
                letter[i] = (char)(i + 65);
            }else{
                letter[i] = (char)(i + 71);
            }
        }

         Random r = new Random();
         int count = 4;
        StringBuilder sb = new StringBuilder();
         while(count > 0){
             int n = r.nextInt(51);
             char c = letter[n];
             sb.append(c);
             count--;
         }
         int n = r.nextInt(10);
         sb.append(num[n]);
        String s = sb.toString();

        //让数值与任意一位交换
        char[] chars = s.toCharArray();
        n = r.nextInt(5);
        char t = 0;
        t = chars[n];
        chars[n] = chars[4];
        chars[4] = t;

        return new String(chars);


    }

登录主方法

//登录
    public static void logIn(ArrayList<User> appList){
        System.out.println("登录");
        int count = 0;
        Scanner sc = new Scanner(System.in);

        //输入用户名
        System.out.println("请输入用户名");
        String name = sc.next();
        int index = findIndex(appList, name);
        if(index < 0){
            System.out.println("用户名未注册,请先注册");
            return;
        }
        User u = appList.get(index);

        //输入密码
        System.out.println("请输入密码");
        String password = sc.next();




        //输入验证码
        while(true){
            String s = produceCheckNumber();
            System.out.println("验证码为" + s);
            System.out.println("请输入验证码");
            String checkNumber = sc.next();
            if(!s.equals(checkNumber)){
                System.out.println("验证码错误,请重新输入");
            }else{
                break;
            }
        }
        //判断密码是否正确
        while(count < 3){
            if(count != 0){
                password = sc.next();
            }
            if(!u.getPassword().equals(password)){
                System.out.println("密码或用户名错误请重新输入");
                count++;
                System.out.println("还剩" + (3-count) + "次机会");
                if(count == 3){
                    System.out.println("输入任意值返回开始页面");
                    sc.next();
                }
            }else{
                System.out.println("密码正确");
                studentSystem.startStudentSystem();
                break;
            }

        }

    }
  1. 忘记密码

//忘记密码
    public static void forgetPassword(ArrayList<User> appList){
        Scanner sc = new Scanner(System.in);
        System.out.println("忘记密码");
        System.out.println("请输入用户名");
        String name = sc.next();
        //判断用户名是否存在
        int index = findIndex(appList, name);
        if(index < 0){
            System.out.println("用户名不存在");
            return;
        }
        User u = appList.get(index);
        System.out.println("请输入身份证号码");
        String PIN = sc.next();
        System.out.println("请输入电话号码");
        String phoneNumber = sc.next();
        if(PIN.equals(u.getPIN()) && phoneNumber.equals(u.getPhoneNumber())){
            System.out.println("请输入新密码");
            String passWord = sc.next();
            u.setPassword(passWord);
            System.out.println("修改密码成功");
        }else {
            System.out.println("用户信息不正确,修改密码错误");
        }
    }

三. 学生管理系统的代码实现

这个之前就已经分享过了,大家可以去看一下这一条博客

http://t.csdn.cn/b3lOV

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值