目录

一、学生管理系统:

1.创建学生对象Student的javabean类:

2.创建出学生管理系统 StudentSystem类:

1.addStudent方法:添加学生

2.ifOne方法,用来判断我们输入的学生id是否唯一(如果存在学生就不用再添加此学生):

3.queryStudent方法,把我们表中的所有学生显示出来

4.getIndex()如果想修改或者删除特定的学生,先获取要获取学生的索引

5.deletStudent()删除指定学生:

6.updateStudent()修改指定学生

二、注册系统

1.首先创建出User的javabean类

2.注册功能

 2.contains()检查用户名是否存在:

 2.登录功能

1.验证码生成的实现,getcode()

2.checkUserInfo()检查学生的信息是否正确

3.忘记密码功能


 

一、学生管理系统:

1.创建学生对象Student的javabean类:

public class Student {
        private String name;
        private int id;
        private String sex;
        private String adress;


        public Student() {
        }

        public Student(String name, int id, String sex, String adress) {
            this.name = name;
            this.id = id;
            this.sex = sex;
            this.adress = adress;
        }

        /**
         * 获取
         * @return name
         */
        public String getName() {
            return name;
        }

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

        /**
         * 获取
         * @return id
         */
        public int getId() {
            return id;
        }

        /**
         * 设置
         * @param id
         */
        public void setId(int id) {
            this.id = id;
        }

        /**
         * 获取
         * @return sex
         */
        public String getSex() {
            return sex;
        }

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

        /**
         * 获取
         * @return adress
         */
        public String getAdress() {
            return adress;
        }

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

        public String toString() {
            return "Student{name = " + name + ", id = " + id + ", sex = " + sex + ", adress = " + adress + "}";
        }
    }

2.创建出学生管理系统 StudentSystem类:

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public  void StartSystem() {
        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);
                    break;
                case "2":
                    deleteStudent(list);
                    break;
                case "3":
                    updateStudent(list);
                    break;
                case "4":
                    queryStudent(list);
                    break;
                case "5": {
                    System.out.println("退出");
                    System.exit(0);
                    break;
                }
                default:
                    System.out.println("没有这个选项");
            }
        }
    }

此处还是使用最基础的switch-case进行不同功能的选择,并且此处的储存学生对象的容器选择用Arraylist容器进行书写,此处也可以用Student[]数组进行储存Student的对象!! 

1.addStudent方法:添加学生

public static void addStudent(ArrayList<Student> list){//此处传入我们所创建出来的容器list
    Student s = new Student();
    Scanner sc = new Scanner(System.in);

    System.out.println("请输入学生的id");
    int id = 0;
    while(true) {
        id = sc.nextInt();
        boolean flag = ifOne(list, id);//学生对象是否唯一,用ifOne()方法进行判断
        if (flag) {
            System.out.println("id已经存在请重新录入");
        }else{
            s.setId(id);
            break;
        }
    }

    System.out.println("请输入学生的姓名");
    String name = sc.next();
    s.setName(name);

    System.out.println("请输入学生的性别");
    String sex = sc.next();
    s.setSex(sex);

    System.out.println("请输入学生的家庭住址");
    String adress = sc.next();
    s.setAdress(adress);

    list.add(s);
    System.out.println("添加成功");

}

2.ifOne方法,用来判断我们输入的学生id是否唯一(如果存在学生就不用再添加此学生):

public static boolean ifOne(ArrayList<Student> list,int id){
    for (int i = 0; i < list.size(); i++) {
        Student s = list.get(i);
        int sid = s.getId();
        if(sid==id){
            return true;
        }
    }
    return false;

}

3.queryStudent方法,把我们表中的所有学生显示出来

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.getSex()+"\t"+stu.getAdress());
    }
}

4.getIndex()如果想修改或者删除特定的学生,先获取要获取学生的索引

 public static int getIndex(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            int sid = stu.getId();
            if (sid==id) {
                return i;
            }
        }
        return -1;
    }
}

这里我们通过id来获取我们所需要要的索引

5.deletStudent()删除指定学生:

public static void deleteStudent(ArrayList<Student> list){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入您要删除的学生的id");
    int id = sc.nextInt();
    int index = getIndex(list,id);//我们通过getIndex方法来获取所需要删除的下标
    //直接删除:remove
    list.remove(index);
}

6.updateStudent()修改指定学生

public static void updateStudent(ArrayList<Student> list){
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入您要修改的学生的id");
    int id = sc.nextInt();
    //再次获取下标
    int index = getIndex(list,id);
    //开始修改学生的信息
    System.out.println("请输入学生姓名");
    list.get(index).setName(sc.next());
    System.out.println("请输入学生id");
    list.get(index).setId(sc.nextInt());
    System.out.println("请输入学生性别");
    list.get(index).setSex(sc.next());
    System.out.println("请输入学生地址");
    list.get(index).setAdress(sc.next());

    System.out.println("修改成功");
}

学生管理系统制作完毕,接下来可以制作管理系统的登录系统。如果只需要学生管理系统,可以把 StudentSystem类中的的startSystem方法改成main方法,可以直接运行学生管理系统。

二、注册系统

1.首先创建出User的javabean类

package StudentManagerSys;

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;
    }

    /**
     * 获取
     * @return userName
     */
    public String getUserName() {
        return userName;
    }

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

    /**
     * 获取
     * @return passWord
     */
    public String getPassWord() {
        return passWord;
    }

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

    /**
     * 获取
     * @return personId
     */
    public String getPersonId() {
        return personId;
    }

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

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

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

    public String toString() {
        return "User{userName = " + userName + ", passWord = " + passWord + ", personId = " + personId + ", phoneNumber = " + phoneNumber + "}";
    }
}

2.注册功能

注册所需要的具体要求:

1.用户名有以下要求:
  验证要求:
    用户名唯一。
    用户名长度必须在3-15位之间。
    只能是字母加数字的组合,不能是纯数字。
2.键盘输入两次,两次一致可以注册。
3.身份证号码需要验证。
     验证要求:
    长度为18位。
    不能以0开头。
    前17位必须是数字。
    最后一位可以是数字也可以是大写X或小写x
4.手机号验证:
    验证要求:
        长度为11位
        不能以0开头
        必须是纯数字

private static void register(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);

        String username;
        while (true) {
            System.out.println("请输入用户名");
            username = sc.next();
//        用户名唯一。
//        用户名长度必须在3-15位之间。
//        只能是字母加数字的组合,不能是纯数字。
            boolean flag = checkUsername (username);
            if(!flag) {
                System.out.println("用户名格式不满足请重新输入");
                continue;
            }

            //校验用户名是否唯一
            boolean flag1 = contains(list,username);
            if(flag1){
                System.out.println("用户名"+username+"重复,请重新输入");
                continue;
            }else
                break;
        }
        //键盘录入密码
        //两次输入的密码一致可成功注册
        String password;
        while (true) {
            System.out.println("请输入要注册的密码");
            password = sc.next();
            System.out.println("请再输入一遍您的密码");
            String aginPassword = sc.next();
            if(!password.equals(aginPassword)){
                System.out.println("两次密码输入不一致,请重新输入");
                continue;
            }else{
                System.out.println("两次密码一致,继续录入");
                break;
            }
        }
        //键盘录入身份证号码
//        长度为18位。
//        不能以0开头。
//        前17位必须是数字。
//        最后一位可以是数字也可以是大写X或小写x
        String personId;
        while (true) {
            System.out.println("请输入身份证号码");
            personId = sc.next();
            boolean flag2 = checkPersonId(personId);
            if(flag2){
                System.out.println("身份证号码满足要求");
                break;
            }else{
                System.out.println("请重新输入");
                continue;
            }
        }

        //键盘录入手机号码
//        验证要求:
//        长度为11位
//        不能以0开头
//        必须是纯数字
        String phoneNumber;
        while (true) {
            System.out.println("请输入手机号码");
            phoneNumber = sc.next();
            boolean flag3 = checkPhonenumber(phoneNumber);
            if(flag3){
                System.out.println("手机号满足要求");
                break;
            }else{
                System.out.println("不满足要求,请重新输入");
                continue;
            }
        }

        User u = new User(username,password,personId,phoneNumber);
        list.add(u);
        System.out.println("注册成功");
    }

1.checkUsername():检查用户名是否符合要求

private static boolean checkUsername(String username) {
        int length = username.length();
        if(length<3||length>15){
            return false;
        }
        //只能是字母加数字的组合,不能是纯数字
        //循环得到每一个字符,如果有一个不是字母或者数字,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 cnt = 0;
        for (int i = 0; i <length; i++) {
            char c = username.charAt(i);
            if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
                cnt++;
                break;
            }
        }
        return cnt>0;
    }

 2.contains()检查用户名是否存在:

private static boolean contains(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getUserName().equals(username)){
                return true;
            }
        }
        return false;
    }

3.checkPersonId()检查身份证号是否符合要求:

private static boolean checkPersonId(String personId) {
        int length = personId.length();
        //不是0开头,并且18位
        if(length!=18||personId.charAt(0)==0){
            return false;
        }
        //判断前十七位
        for (int i = 0; i < personId.length()-1; i++) {
            if(!(personId.charAt(i)>='0'&&personId.charAt(i)<='9'))
            {
                return false;
            }
        }

        if(!((personId.charAt(length-1)>='0'&&personId.charAt(length-1)<='9')||(personId.charAt(length-1)=='X'||personId.charAt(length-1)=='x')))
        {
            return false;
        }

        return true;

    }

4.checkPhoneNumber()检查手机号是否符合要求:

 private static boolean checkPhonenumber(String phoneNumber) {
        int length = phoneNumber.length();
        //不是0开头,并且18位
        if(length!=11||phoneNumber.charAt(0)==0){
            return false;
        }

        for (int i = 0; i < phoneNumber.length(); i++) {
            if(!(phoneNumber.charAt(i)>='0'&&phoneNumber.charAt(i)<='9'))
            {
                return false;
            }
        }

        return true;
    }

 2.登录功能

1.键盘录入用户名
    2.键盘录入密码
    3.键盘录入验证码
    验证要求
    用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
    判断验证码是否正确,如果不正确,请重新输入。
    再判断用户名和密码是否正确,有3次机会
    忘记密码
    1.键盘录入用户名,判断当前用户名是否存在,如果不存在,直接结束,提示:未注册
    2.键盘录入身份证号码和手机号码
    3.判断当前用户的身份证号码和手机号码是否一致。
        如果一致,提示输入密码,进行修改
        如果不一致,账号信息不匹配,修改失败
    验证码规则:
        长度为5
        由4位大写或者小写字母和1位数字组成,同一个字母可重复。
        数字可以出现在任何位置
     比如
        aQa1k1

private 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);
                System.out.println("请输入验证码");
                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 flag1 = checkUserInfo(list, userInfo);
            if (flag1) {
                System.out.println("登录成功,可以开始使用学生管理系统");
                StudentSystem ss = new StudentSystem();
                ss.StartSystem();

            } else {
                if(i==2) {
                    System.out.println("当前账号"+username+"被锁定,请联系客服人员");
                    return;
                }else{
                    System.out.println("用户名或密码错误,还剩下"+(2-i)+"次机会");
                }
            }
        }
    }

 总共有三次登陆的机会,机会用完退出程序:用for循环控制。

切记不能把getcode重复使用,这样会与前面的rightCode不一致,导致验证码无论如何都是错误的,写成上方的形式

while (true) {
    String rightcode = getCode();
    System.out.println("当前正确的验证码为" + getCode());
    System.out.println("请输入验证码");
    String code = sc.next();

    if (code.equalsIgnoreCase(rightcode)) {
        System.out.println("验证码正确");
        break;
    } else {

        System.out.println("验证码错误");
        continue;
    }
}

1.验证码生成的实现,getcode()

 private static String getCode(){
        ArrayList<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));//小写
            list.add((char)('A'+i));//大写
        }

        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(list.size());
            char c = list.get(index);
            sb.append(c);
        }
        int number = r.nextInt(10);
        sb.append(number);
        char[] arr = sb.toString().toCharArray();
        int randomIndex = r.nextInt(arr.length);
        char temp = arr[randomIndex];
        arr[randomIndex] = arr[arr.length-1];
        arr[arr.length-1] = temp;

        return new String(arr);
    }
}

先用Arraylist容器把所有的字母大小写存入list中,再通过StringBuilder将字母重新排序,单独的数字在进行交换,最后获得验证码字符串。

2.checkUserInfo()检查学生的信息是否正确

 private static boolean checkUserInfo(ArrayList<User> list,User userInfo) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getUserName().equals(userInfo.getUserName())&&list.get(i).getPassWord().equals(userInfo.getPassWord())){
                return true;
            }
        }
        return false;
    }

登录成功就可以创建StudentSystem对象,调用startSystem方法,启动学生管理系统了!!

3.忘记密码功能

三、忘记密码
    1.键盘录入用户名,判断当前用户名是否存在,如果不存在,直接结束方法,并提示未注册。
    2.键盘录入身份证号和手机号码
    3.判断当前用户的身份证号和手机号是否一致。
        如果一致,提示输入密码,进行修改
        如果不一致,提示:账号信息不匹配,修改失败

private 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;
        }
        //所有的数据验证成功,直接修改
        String passWord;
        while (true) {
            System.out.println("请输入新的密码");
            passWord =sc.next();
            System.out.println("请重新输入一遍");
            String aginPassword = sc.next();
            if(passWord.equals(aginPassword)){
                System.out.println("两次密码输入一致");
                break;
            }else{
                System.out.println("输入不一致");
                continue;
            }
        }
        user.setPassWord(passWord);
        System.out.println("密码修改成功!");
    }

完整的代码:

Student类javabean类:

package StudentManagerSys;

public class Student {
        private String name;
        private int id;
        private String sex;
        private String adress;


        public Student() {
        }

        public Student(String name, int id, String sex, String adress) {
            this.name = name;
            this.id = id;
            this.sex = sex;
            this.adress = adress;
        }

        /**
         * 获取
         * @return name
         */
        public String getName() {
            return name;
        }

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

        /**
         * 获取
         * @return id
         */
        public int getId() {
            return id;
        }

        /**
         * 设置
         * @param id
         */
        public void setId(int id) {
            this.id = id;
        }

        /**
         * 获取
         * @return sex
         */
        public String getSex() {
            return sex;
        }

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

        /**
         * 获取
         * @return adress
         */
        public String getAdress() {
            return adress;
        }

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

        public String toString() {
            return "Student{name = " + name + ", id = " + id + ", sex = " + sex + ", adress = " + adress + "}";
        }
    }

User类的javabean类:

package StudentManagerSys;

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;
    }

    /**
     * 获取
     * @return userName
     */
    public String getUserName() {
        return userName;
    }

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

    /**
     * 获取
     * @return passWord
     */
    public String getPassWord() {
        return passWord;
    }

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

    /**
     * 获取
     * @return personId
     */
    public String getPersonId() {
        return personId;
    }

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

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

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

    public String toString() {
        return "User{userName = " + userName + ", passWord = " + passWord + ", personId = " + personId + ", phoneNumber = " + phoneNumber + "}";
    }
}
StudentSystem类:
package StudentManagerSys;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentSystem {
    public  void StartSystem() {
        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);
                    break;
                case "2":
                    deleteStudent(list);
                    break;
                case "3":
                    updateStudent(list);
                    break;
                case "4":
                    queryStudent(list);
                    break;
                case "5": {
                    System.out.println("退出");
                    System.exit(0);
                    break;
                }
                default:
                    System.out.println("没有这个选项");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list){
        Student s = new Student();
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入学生的id");
        int id = 0;
        while(true) {
            id = sc.nextInt();
            boolean flag = ifOne(list, id);
            if (flag) {
                System.out.println("id已经存在请重新录入");
            }else{
                s.setId(id);
                break;
            }
        }

        System.out.println("请输入学生的姓名");
        String name = sc.next();
        s.setName(name);

        System.out.println("请输入学生的性别");
        String sex = sc.next();
        s.setSex(sex);

        System.out.println("请输入学生的家庭住址");
        String adress = sc.next();
        s.setAdress(adress);

        list.add(s);
        System.out.println("添加成功");

    }

    public static void deleteStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要删除的学生的id");
        int id = sc.nextInt();
        int index = getIndex(list,id);//我们通过getIndex方法来获取所需要删除的下标
        //直接删除:remove
        list.remove(index);

        System.out.println("删除成功");
    }

    public static void updateStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您要修改的学生的id");
        int id = sc.nextInt();
        //再次获取下标
        int index = getIndex(list,id);
        //开始修改学生的信息
        System.out.println("请输入学生姓名");
        list.get(index).setName(sc.next());
        System.out.println("请输入学生id");
        list.get(index).setId(sc.nextInt());
        System.out.println("请输入学生性别");
        list.get(index).setSex(sc.next());
        System.out.println("请输入学生地址");
        list.get(index).setAdress(sc.next());

        System.out.println("修改成功");
    }

    //查询学生
    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.getSex()+"\t"+stu.getAdress());
        }


    }

    public static boolean ifOne(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            int sid = s.getId();
            if(sid==id){
                return true;
            }
        }
        return false;

    }

    public static int getIndex(ArrayList<Student> list,int id){
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            int sid = stu.getId();
            if (sid==id) {
                return i;
            }
        }
        return -1;
    }
}

App类:

package StudentManagerSys;

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> list = new ArrayList<>();
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择:1登录 2.注册 3.忘记密码");
            String choose = sc.next();
            switch(choose){
                case "1":
                    login(list);
                    break;
                case "2":
                    register(list);
                    break;
                case "3":
                    forgetpassword(list);
                    break;
                case "4": {
                    System.out.println("感谢使用");
                    System.exit(0);
                }
                default:
                    System.out.println("没有此选项");
                    break;

            }
        }
    }

    private 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;
        }
        //所有的数据验证成功,直接修改
        String passWord;
        while (true) {
            System.out.println("请输入新的密码");
            passWord =sc.next();
            System.out.println("请重新输入一遍");
            String aginPassword = sc.next();
            if(passWord.equals(aginPassword)){
                System.out.println("两次密码输入一致");
                break;
            }else{
                System.out.println("输入不一致");
                continue;
            }
        }
        user.setPassWord(passWord);
        System.out.println("密码修改成功!");
    }

    private static int findIndex(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            User u = list.get(i);
            if(u.getUserName().equals(username)){
                return i;
            }
        }
        return -1;
    }

    private static void register(ArrayList<User> list) {
        Scanner sc = new Scanner(System.in);

        String username;
        while (true) {
            System.out.println("请输入用户名");
            username = sc.next();
//        用户名唯一。
//        用户名长度必须在3-15位之间。
//        只能是字母加数字的组合,不能是纯数字。
            boolean flag = checkUsername (username);
            if(!flag) {
                System.out.println("用户名格式不满足请重新输入");
                continue;
            }

            //校验用户名是否唯一
            boolean flag1 = contains(list,username);
            if(flag1){
                System.out.println("用户名"+username+"重复,请重新输入");
                continue;
            }else
                break;
        }
        //键盘录入密码
        //两次输入的密码一致可成功注册
        String password;
        while (true) {
            System.out.println("请输入要注册的密码");
            password = sc.next();
            System.out.println("请再输入一遍您的密码");
            String aginPassword = sc.next();
            if(!password.equals(aginPassword)){
                System.out.println("两次密码输入不一致,请重新输入");
                continue;
            }else{
                System.out.println("两次密码一致,继续录入");
                break;
            }
        }
        //键盘录入身份证号码
//        长度为18位。
//        不能以0开头。
//        前17位必须是数字。
//        最后一位可以是数字也可以是大写X或小写x
        String personId;
        while (true) {
            System.out.println("请输入身份证号码");
            personId = sc.next();
            boolean flag2 = checkPersonId(personId);
            if(flag2){
                System.out.println("身份证号码满足要求");
                break;
            }else{
                System.out.println("请重新输入");
                continue;
            }
        }

        //键盘录入手机号码
//        验证要求:
//        长度为11位
//        不能以0开头
//        必须是纯数字
        String phoneNumber;
        while (true) {
            System.out.println("请输入手机号码");
            phoneNumber = sc.next();
            boolean flag3 = checkPhonenumber(phoneNumber);
            if(flag3){
                System.out.println("手机号满足要求");
                break;
            }else{
                System.out.println("不满足要求,请重新输入");
                continue;
            }
        }

        User u = new User(username,password,personId,phoneNumber);
        list.add(u);
        System.out.println("注册成功");
    }

    private static boolean checkPhonenumber(String phoneNumber) {
        int length = phoneNumber.length();
        //不是0开头,并且18位
        if(length!=11||phoneNumber.charAt(0)==0){
            return false;
        }

        for (int i = 0; i < phoneNumber.length(); i++) {
            if(!(phoneNumber.charAt(i)>='0'&&phoneNumber.charAt(i)<='9'))
            {
                return false;
            }
        }

        return true;
    }

    private static boolean checkPersonId(String personId) {
        int length = personId.length();
        //不是0开头,并且18位
        if(length!=18||personId.charAt(0)==0){
            return false;
        }
        //判断前十七位
        for (int i = 0; i < personId.length()-1; i++) {
            if(!(personId.charAt(i)>='0'&&personId.charAt(i)<='9'))
            {
                return false;
            }
        }

        if(!((personId.charAt(length-1)>='0'&&personId.charAt(length-1)<='9')||(personId.charAt(length-1)=='X'||personId.charAt(length-1)=='x')))
        {
            return false;
        }

        return true;

    }

    private static boolean contains(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getUserName().equals(username)){
                return true;
            }
        }
        return false;
    }

    //判断用户名是否符合要求
    private static boolean checkUsername(String username) {
        int length = username.length();
        if(length<3||length>15){
            return false;
        }
        //只能是字母加数字的组合,不能是纯数字
        //循环得到每一个字符,如果有一个不是字母或者数字,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 cnt = 0;
        for (int i = 0; i <length; i++) {
            char c = username.charAt(i);
            if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
                cnt++;
                break;
            }
        }
        return cnt>0;
    }

    private 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);
                System.out.println("请输入验证码");
                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 flag1 = checkUserInfo(list, userInfo);
            if (flag1) {
                System.out.println("登录成功,可以开始使用学生管理系统");
                StudentSystem ss = new StudentSystem();
                ss.StartSystem();

            } else {
                if(i==2) {
                    System.out.println("当前账号"+username+"被锁定,请联系客服人员");
                    return;
                }else{
                    System.out.println("用户名或密码错误,还剩下"+(2-i)+"次机会");
                }
            }
        }
    }

    private static boolean checkUserInfo(ArrayList<User> list,User userInfo) {
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).getUserName().equals(userInfo.getUserName())&&list.get(i).getPassWord().equals(userInfo.getPassWord())){
                return true;
            }
        }
        return false;
    }

    //生成一个验证码
//    验证码规则:
//    长度为5
//    由4位大写或者小写字母和1位数字组成,同一个字母可重复。
//    数字可以出现在任何位置
    private static String getCode(){
        ArrayList<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));//小写
            list.add((char)('A'+i));//大写
        }

        StringBuilder sb = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(list.size());
            char c = list.get(index);
            sb.append(c);
        }
        int number = r.nextInt(10);
        sb.append(number);
        char[] arr = sb.toString().toCharArray();
        int randomIndex = r.nextInt(arr.length);
        char temp = arr[randomIndex];
        arr[randomIndex] = arr[arr.length-1];
        arr[arr.length-1] = temp;

        return new String(arr);
    }
}

有帮助的话,大家可以点个赞鼓励一下,这也是我的第一个博客

                                        

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐