首页 > 其他分享 >25.text--学生管理系统

25.text--学生管理系统

时间:2023-04-12 11:03:09浏览次数:39  
标签:25 String -- text list System println id out

学生管理系统

一、登录界面

1.需求文档

需求:为学生管理系统书写一个登陆、注册、忘记密码的功能
     只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作

分析:登录界面:“欢迎来到学生管理系统!”
            “请选择操作1.登录,2.注册,3.忘记密码”
            
     用户类:属性有,用户名、密码、身份证号码、手机号码
     注册功能:1.用户名需要满足以下要求:1.用户名唯一
                                   2.用户名长度必须在3~15位之间
                                   3.只能是字母加数字的组合,但是不能是纯数字
             2.密码键盘输入两次,两次一致才可以进行注册
             3.身份证号码需要满足以下要求:1.长度为18位
                                      2.不能为0开头
                                      3.前17位,必须都是数字
                                      4.最后一位可以是数字,也可以是大写X或者小写x
             4.手机号需要满足以下要求:1.长度为11位
                                   2.不能为0开头
                                   3.必须都是数字 
     登录功能:1.键盘录入用户名
             2.键盘录入密码
             3.键盘录入验证码
             4.验证要求:用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
                       判断验证码是否正确,如不正确,重新输入
                       再判断用户名和密码是否正确,有3次机会
     忘记密码:1.键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
             2.键盘录入身份证号码和手机号码
             3.判断当前用户的身份证号码和手机号码是否一致,如果一致,则提示输入密码,进行修改,
               如果不一致,则提示:账号信息不匹配,修改失败  
     验证码规则:长度为5,由4位大写或者小写字母和1位数字组成,同一个字母可重复,数字可以出现在任意位置               

2.JavaBean

public class User {
    private String name;
    private String password;
    private String ID;
    private String phoneNum;

    public User() {
    }

    public User(String name, String password, String ID, String phoneNum) {
        this.name = name;
        this.password = password;
        this.ID = ID;
        this.phoneNum = phoneNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

3.测试类

public class UserTest {
    public static void main(String[] args) {
        //创建集合
        ArrayList<User> list = new ArrayList<>();

        while (true) {
            System.out.println("-------------欢迎来到学生管理系统登录界面!-------------");
            System.out.println("请选择操作:1.登录,2.注册,3.忘记密码,4.退出");

            //键盘录入选择
            Scanner s = new Scanner(System.in);
            String choose = s.next();
            switch (choose){
                case "1":
                    login(list);
                    break;
                case "2":
                    register(list);
                    break;
                case "3":
                    forgetPW(list);
                    break;
                case "4":
                    System.out.println("退出!");
                    return;
                default:
                    System.out.println("没有这个选项!");
                    break;
            }
        }
    }

    //登录功能
    private static void login(ArrayList<User> list){
        Scanner s = new Scanner(System.in);
        //------------------------------1.键盘录入用户名并验证-----------------------------
        System.out.println("请输入用户名:");
        String username = s.next();
        //判断集合中是否为空,若为空直接提示未注册
        if(list.size() == 0){
            System.out.println("用户名未注册,请先注册!");
        }
        //验证是否在集合中存在,即是否注册
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if(!(username.equals(user.getName()))){
                //不存在,直接结束方法
                System.out.println("用户名未注册,请先注册!");
                return;
            }else{
                //存在,继续录入和判断验证码和密码
        //------------------------------2.键盘录入密码并验证,键盘录入验证码并验证------------------------------
                String password = user.getPassword();
                for (int i1 = 0; i1 < 3; i1++) {
                    boolean flag = matchLogin(password);
                    if(flag){
                        System.out.println("登录成功!");
                        StudentTest ss = new StudentTest();
                        ss.startStudentSystem();
                        break;
                    }else{
                        System.out.println("你还有" + (2-i1) + "次机会!");
                    }
                }
            }
        }
    }

    //注册功能
    private static void register(ArrayList<User> list){
        User user = new User();
        Scanner s = new Scanner(System.in);
        //------------------------------1.用户名验证------------------------------
        while (true) {
            //键盘录入用户名username
            System.out.println("请输入用户名:");
            String username = s.next();
            //判断长度是否符合要求 3~15
            if(username.length() >= 3 && username.length() <= 15){
                //判断username的格式是否正确
                boolean flag = adequateName(username);
                if(flag){
                    //调用方法进行判断唯一性
                    int index = getIndex(list, username);
                    if(index == -1){
                        //-1代表不存在,可以存入
                        System.out.println("用户名输入成功!");
                        user.setName(username);
                        break;
                    }else{
                        //不等于-1代表已存在,不能存入,需要重新输入
                        System.out.println("用户名已存在,请重新输入!");
                    }
                }else{
                    System.out.println("用户名输入错误,请重新输入!");
                }

            }else{
                System.out.println("用户名长度有误,请重新输入!");
            }
        }

        //------------------------------2.密码验证------------------------------
        System.out.println("接下来进行密码校验!");
        while (true) {
            System.out.println("请输入密码:");
            String firstPW = s.next();
            System.out.println("请再次输入密码:");
            String secondPW = s.next();
            if(secondPW.equals(firstPW)){
                user.setPassword(firstPW);
                System.out.println("密码设置成功!");
                break;
            }else{
                System.out.println("第二次输入的密码与第一次不一致,请重新输入!");
            }
        }

        //------------------------------3.身份证验证------------------------------
        System.out.println("请进行身份证校验!");
        while (true) {
            System.out.println("请输入身份证:");
            String userID = s.next();
            boolean flag = adequateID(userID);
            if(flag){
                user.setID(userID);
                System.out.println("身份证验证成功!");
                break;
            }else {
                System.out.println("身份证格式有误,请重新输入!");
            }
        }

        //------------------------------4.手机号验证------------------------------
        System.out.println("进行手机号码验证!");
        while (true) {
            System.out.println("请输入手机号码:");
            String userPhone = s.next();
            boolean flag = adequatePhoneNum(userPhone);
            if(flag){
                user.setPhoneNum(userPhone);
                System.out.println("手机号验证成功!");
                break;
            }else {
                System.out.println("手机号格式有误,请重新输入!");
            }
        }

        //------------------------------所有验证完成后,存入集合中------------------------------
        System.out.println("注册成功!");
        list.add(user);
    }

    //忘记密码功能
    private static void forgetPW(ArrayList<User> list){
        Scanner s = new Scanner(System.in);
        //------------------------------1.键盘录入用户名并验证-----------------------------
        System.out.println("请输入用户名:");
        String username = s.next();
        //判断集合中是否为空,若为空直接提示未注册
        if(list.size() == 0){
            System.out.println("用户名未注册,请先注册!");
        }
        //验证是否在集合中存在,即是否注册
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (!(username.equals(user.getName()))) {
                //不存在,直接结束方法
                System.out.println("用户名未注册,请先注册!");
                return;
            } else {
                //存在,调用方法判断身份证号码、手机号码
        //------------------------------2.键盘录入密码并验证,键盘录入验证码并验证------------------------------
                for (int i1 = 0; i1 < 3; i1++) {
                    boolean flag = matchForgetPW(user);
                    if(flag){
                        //返回true,即可修改密码
                        System.out.println("请输入新的密码:");
                        String novelPW = s.next();
                        user.setPassword(novelPW);
                        System.out.println("修改成功!");
                        break;
                    }else{
                        //返回false,即提示错误
                        System.out.println("账号信息不匹配,修改失败!");
                        System.out.println("你还有" + (2-i1) + "次机会!");
                    }
                }
            }
        }
    }

    //判断方法,判断在集合中是否存在,若存在则返回索引,不存在则返回-1
    private static int getIndex(ArrayList<User> list, String username){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String name = user.getName();
            if(name.equals(username)){
                return i;
            }
        }
        return -1;
    }

    //功能方法,判断注册时username是否符合要求
    private static boolean adequateName(String username) { //adequate 满足要求的
        int count = 0;
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            //计算字母个数
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                count++;
            }
            if ( !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) ) {
                //如果有一个字符不在字母和数字中,那么当前用户名不符合要求,返回false
                return false;
            }
        }
        //在for循环判断个数,以保证每个字符都在格式要求内
        if (count >= 1) {
            //至少存在一个字母,返回true
            return true;
        }else {
            //不存在至少一个字母,返回false
            return false;
        }
    }

    //功能方法,验证身份证号码,若通过验证则返回true,若不符合其中任何一项要求,则返回false
    private static boolean adequateID(String userID){
        //要求长度为18位
        if(userID.length() != 18){
            return false;
        }
        //不能以0为开头
        if(userID.startsWith("0")){
            return false;
        }
        //前17位必须都是数字
        for (int i = 0; i < userID.length()-1; i++) {
            char c = userID.charAt(i);
            if(!(c >= '0' && c <= '9')){
                return false;
            }
        }
        //最后一位可以是数字也可以是大写X或小写x
        char c = userID.charAt(17);
        if( !((c >= '0' && c <= '9') || c == 'X' || c == 'x') ){
            return false;
        }
        //当代码走到这里,证明符合要求
        return true;
    }

    //功能方法,验证手机号码,若通过验证则返回true,若不符合其中任何一项要求,则返回false
    private static boolean adequatePhoneNum(String userPhoneNum){
        //要求长度为11位
        if(userPhoneNum.length() != 11){
            return false;
        }
        //不能以0为开头
        if(userPhoneNum.startsWith("0")){
            return false;
        }
        //必须都是数字
        for (int i = 0; i < userPhoneNum.length(); i++) {
            char c = userPhoneNum.charAt(i);
            if(!(c >= '0' && c <= '9')){
                return false;
            }
        }
        //当代码走到这里,证明符合要求
        return true;
    }

    //功能方法,验证键盘录入的验证码和密码是否正确匹配
    private static boolean matchLogin(String password){
        Scanner s = new Scanner(System.in);
        //先录入密码进行验证
        System.out.println("请输入密码:");
        String userPW = s.next();
        if(userPW.equals(password)){
            System.out.println("密码验证成功!");
        }else{
            System.out.println("密码输入有误,请重新输入!");
            return false;
        }
        //再录入验证码进行验证
        String randomNums = getRandomNums();
        System.out.println("验证码是" + randomNums);
        System.out.println("请输入验证码:");
        String userRandomNums = s.next();
        if(userRandomNums.equals(randomNums)){
            System.out.println("验证码验证成功!");
        }else{
            System.out.println("验证码输入有误,请重新输入!");
            return false;
        }
        return true;
    }

    //功能方法,验证键盘录入的身份证号码和手机号码是否正确匹配
    private static boolean matchForgetPW(User user){
        Scanner s = new Scanner(System.in);
        System.out.println("请输入身份证号码:");
        String userID = s.next();
        if( !(userID.equals(user.getID())) ){
            //不匹配直接返回false
            System.out.println("身份证号码输入有误,请重新输入!");
            return false;
        }
        System.out.println("请输入手机号码:");
        String userPhoneNums = s.next();
        if( !(userPhoneNums.equals(user.getPhoneNum())) ){
            //不匹配直接返回false
            System.out.println("手机号码输入有误,请重新输入!");
            return false;
        }
        return true;
    }

    //生成验证码
    private static String getRandomNums(){
        Random r = new Random();
        StringBuilder sb = new StringBuilder();
        //创建一个含有大小写字母的字符集合
        ArrayList<Character> list = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));
            list.add((char)('A' + i));
        }
        //在含有大小写的字符数组中随机抽取五个并添加到字符串中
        for (int i = 0; i < 5; i++) {
            int index = r.nextInt(list.size());
            sb.append(list.get(index));
        }
        //获取一个随机数字,并转变为字符串形式
        int randomNum = r.nextInt(10);
        String str = randomNum + "";
        //在已生成的全部是字母的字符串中,通过随机索引,替换一个字母为数字
        int randomIndex = r.nextInt(5);
        String result = sb.replace(randomIndex, randomIndex+1, str).toString();
        return result;
    }

}

二、系统界面

1.需求文档

需求:采用控制台的方式去书写学生管理系统
分析:初始菜单:------------------欢迎来到学生管理系统------------------
             1.添加学生
             2.删除学生
             3.修改学生
             4.查询学生
             5.退出
             请输入您的选择:
学生类:属性有,id、姓名、年龄、家庭住址
添加功能:键盘录入每一个学生信息并添加,需要满足以下要求:
        > id唯一
删除功能:键盘录入要删除的学生id,需要满足以下要求:
        > id存在删除
        > id不存在,需要提示不存在,并回到初始菜单
修改功能:键盘录入要修改的学生id,需要满足以下要求:
        > id存在,继续录入其他信息
        > id不存在,需要提示不存在,并回到初始菜单
查询功能:打印所有的学生信息,需要满足以下要求
        > 如果没有学生信息,提示:当前无学生信息,请添加后再查询
        > 如果有学生信息,需要按照以下格式输出
        id         姓名       年龄       家庭住址
        heima001   张三        23         南京
        heima002   李四        24         北京
        heima003   王五        25         广州

2.JavaBean

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

3.测试类

放的是我自己写的,比较有成就感

public class StudentTest {
    public static void startStudentSystem() {
        //实现键盘录入
        Scanner s = new Scanner(System.in);

        //将用户输入的数据存入集合中
        ArrayList<Student> list = new ArrayList<>();

        //4.用循环包裹,增加可用性
        while (true) {
            //1.先把初始菜单打印出来
            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("请输入您的选择:");

            //2.实现键盘录入选择
            String choose = s.next();

            //3.根据用户输入,选择方法
            switch (choose){
                //加入break以防穿透
                case "1":
                    addStudent(list);
                    break;
                case "2":
                    deleteStudent(list);
                    break;
                case "3":
                    upsetStudent(list);
                    break;
                case "4":
                    searchStudent(list);
                    break;
                case "5":
                    System.out.println("退出!");
                    return;
                default:
                    System.out.println("没有这个选项!");
            }
        }

        //5.查询功能要求比较简单,先完成查询方法
        //6.查询功能需要和添加功能共同测试,故接着完成添加功能
        //7.完成删除功能
        //8.完成修改功能

    }

    //添加功能
    public static void addStudent(ArrayList<Student> list){
        //键盘录入,实例化类
        Scanner s = new Scanner(System.in);
        Student stu = new Student();

        //输入学生的各项信息
        while (true) {
            //调用方法进行唯一性的判断,包裹循环,若存在则重新输入
            System.out.println("请输入学生的id:");
            String id = s.next();
            int index = getIndex(list,id);
            if(index >= 0){
                System.out.println("id已存在,请重新输入!");
            }else{
                stu.setId(id);
                //正确输入后,结束循环
                break;
            }
        }

        System.out.println("请输入学生的姓名:");
        stu.setName(s.next());
        System.out.println("请输入学生的年龄:");
        stu.setAge(s.nextInt());
        System.out.println("请输入学生的家庭住址:");
        stu.setAddress(s.next());

        //将学生信息存放在集合中
        list.add(stu);

        //提示成功添加
        System.out.println("学生信息添加成功!");

    }

    //删除功能
    public static void deleteStudent(ArrayList<Student> list){
        //键盘录入要删除的学生id
        Scanner s = new Scanner(System.in);
        System.out.println("请输入要删除的学生id:");
        String id = s.next();

        //调用判断方法,判断在集合中是否存在,若存在,根据索引删除
        int index = getIndex(list,id);
        if(index == -1){
            //无索引,即不存在,提示错误
            System.out.println("当前学生id不存在!");
            //返回初始菜单
            return;
        }else{
            //存在,执行删除操作
            list.remove(index);
            System.out.println("id为:" + id + "删除成功!");
        }
    }

    //修改功能
    public static void upsetStudent(ArrayList<Student> list){
        //键盘录入要修改的学生id
        Scanner s = new Scanner(System.in);
        System.out.println("请输入要修改的学生id:");
        String id = s.next();

        //调用判断方法,判断在集合中是否存在,若存在,根据索引修改
        int index = getIndex(list,id);
        if(index == -1){
            System.out.println("当前学生id不存在!");
            return;
        }else{
            Student stu = list.get(index);
            System.out.println("请输入修改后的姓名:");
            stu.setName(s.next());
            System.out.println("请输入修改后的年龄:");
            stu.setAge(s.nextInt());
            System.out.println("请输入修改后的家庭住址:");
            stu.setAddress(s.next());
        }
        System.out.println("修改成功!");
    }

    //查询功能
    public static void searchStudent(ArrayList<Student> list){
        //先进行判断是否为空
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询!");
            return;
        }
        //集合证明不为空,进行遍历
        System.out.println("id\t\t姓名\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());
        }
    }

    //判断id在集合中是否存在,存在则返回索引,不存在则返回-1
    public static int getIndex(ArrayList<Student> list, String id){
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            Student stu = list.get(i);
            String sid = stu.getId();
            if(id.equals(sid)){
                //已存在,返回索引
                return i;
            }
        }
        //遍历集合后,无匹配项,即不存在,返回-1
        return -1;
    }
}

标签:25,String,--,text,list,System,println,id,out
From: https://www.cnblogs.com/Zz1001/p/17309052.html

相关文章

  • UEFI 基础教程 - 运行第一个APP HelloWorld
    一、代码编写1.在Kunlun/KunlunBdsPkg/Application下新建HelloWorld文件夹命令:mkdir HelloWorld2.新建.c文件命令:vimHelloworld.c 3.新建.inf文件命令:vimHelloworld.infBASE_NAME=  这里为编译后生成efi文件的文件名 4、将写好的inf文件放到编译的dsc文件中......
  • 24.text--解释单词
    解释单词给定一个字符串s,由若干单词组成,单词前后用一些空格字符隔开返回字符串中最后一个单词的长度单词是指仅指由字母组成、不包含任何空格字符的最大子字符串示例1:输入s="HelloWorld",输出:5解释:最后一个单词是"World",长度为5示例2:输入s="flymetothemoon",输出:4......
  • 23.text--生成验证码
    生成验证码内容:可以是小写字母,也可以是大写字母,还可以是数字规则:长度为5,内容是四位字母,一位数字,其中数字只有1位,但是可以出现在任意位置publicstaticvoidmain(String[]args){//创建含有大小写字母的数组char[]letterArr=newchar[52];//小写字母在ASC......
  • 22.text--调整字符串
    调整字符串给定两个字符串,A和BA的旋转操作就是将A最左边的字符移动到最右边例如:若A="abcde",在移动一次之后结果就是"bcdea"如果在若干次调整操作之后,A能变成B,那么返回True如果不能匹配成功,则返回falsepublicstaticvoidmain(String[]args){StringA="abcde";......
  • PAT Basic 1088. 三人行
    PATBasic1088.三人行1.题目描述:子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是2位正整数;把甲的能力值的2个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的X倍;乙的能力值是丙的Y倍。......
  • nop指令多字节占位
    在动态调试过程中,有时候要给一个地址进行nop.(nop代表无意义指令,可以被cpu执行.执行之后不会影响寄存器,堆栈,以及寄存器)nop的机器码是0x90而在后面的调试器中,针对nop指令又作了"升级"以前想要nop五个字节.那就要写五个字节.现在有种新的方式(通过逆向的来.发现的多了......
  • Python爬虫之循环爬取多个网页
    之前的文中介绍了如何获取给定网址的网页信息,并解析其中的内容。本篇将更进一步,根据给定网址获取并解析给定网址及其相关联网址中的内容。要实现这些功能,我们需要解决以下问题:1、如何持续不断的获取url,并读取相关内容。2、如何判断网址是否已经读取过。文中用到的代码均已上传......
  • nodejs连接mysql数据库
      https://www.cnblogs.com/hechunfeng/p/17308654.html这个是安装数据库   1.我们先建一个表和插入一下字段,这些都是自己弄的    2.安装npminstallmysqlconst{createPool}=require('mysql');constpool=createPool({host:"localhost",......
  • 3、Markdown 换行语法
    Markdown换行语法在一行的末尾添加两个或多个空格,然后按回车键,即可创建一个换行(<br>)。Markdown语法HTML预览效果Thisisthefirstline.Andthisisthesecondline.<p>Thisisthefirstline.<br>Andthisisthesecondline.</p>Thisisthefirstline......
  • 结对编程——四则运算
    目录一、实验目的二、实验方法三、实验内容四、实验代码五、实验结果六、实验心得 一、实验目的体验结对编程,两人合力完成一个编程(队友2152231)。二、实验方法两人使用一台机器,使用VisualStudio2019进行编程,一个人输入代码,而另一个人审查他输入的每一行代码,在进行角......