首页 > 其他分享 >学生管理系统

学生管理系统

时间:2024-07-03 18:31:41浏览次数:14  
标签:String 管理系统 list System 学生 println 输入 out

一、登录

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

1、欢迎页面

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

代码实现: 

    //欢迎页面
    public static void welcome(ArrayList<User> list){
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作:1登录 2注册 3忘记密码");
            //1.创建一个Scanner对象
            Scanner sc = new Scanner(System.in);
            //获取输入的信息
            System.out.println("请输入操作:");
            String operation = sc.next();
            switch (operation){
                case "1" -> login(list);
                case "2" -> register(list);
                case "3" -> forgetPassword(list);
                default -> System.out.println("请输入1-3数字中的一个!");
            }
        }
    }

2、注册功能

①变量的作用范围只在所属的大括号范围内有效。

要想在外面也有效,就要提升作用范围,可以将变量定义在大括号外面。

②如果同时要满足很多条件时怎么做?

正向考虑:即满足条件时一步步往下,但是这样有一个弊端,就是if-else可能会嵌套过深,当增加新的条件时代码不易维护。

反向考虑:即什么时候不满足条件return false;,直接结束方法的运行。 

(1)用户名

满足以下3个条件:

①用户名唯一;

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

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

对于用户名的判断:先验证格式,再验证唯一性。因为验证唯一性需要连接数据库,比较耗费资源。

对于要求3,我写的这个方法是判断是否存在大小写字母,以此来说明不是纯数字,这是因为我知道输入的时候会是字母和数字的组合,但是实际过程中是有可能会输入其他字符的,所以要加入输入的字符串只能是字母和数字的组合这个要求的实现。

    //判断用户名是否满足要求3
    public static boolean check3(String username){
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if((c > 'a') && (c < 'z')){
                return true;
            }
            if((c > 'A') && (c < 'Z')){
                return true;
            }
        }
        return false;
    }

实现验证用户名只能是字母和数字的组合的方法check31:当出现除字母和数字以外的字符时return false;遍历完所有字符都没有return false说明只有数字和字母。

   public static boolean check31(String username) {
        for (int i = 0; i < username.length(); i++) {
            //依次获取每一个字符
            char c = username.charAt(i);
            //取反说明当条件为假时return false
            //((c >= 'a') && (c <= 'z'))表示c是字符a-z之间的一个
            //而条件什么时候为假,即字符不是大小写英文字母和数字中的任意一个
            if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= '0') && (c <= '9')))) {
                return false;
            }
        return true;
    }

然后加上是否有大小写字母的的方法check32:与刚开始的实现是一样的,只不过将判断大写和小写合并到一起了。 

    //判断是否有大小写字母存在
    public static boolean check32(String username){
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if ((((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))) {
                return true;
            }
        }
        return false;
    }

Ⅰ、输入用户名的判断

①在判断用户名的长度时,可以将username.length()提取处理赋给一个变量,提高效率。

在下面这个代码中应用的正向考虑:

    //判断用户名是否合法
    public static boolean checkUsername(ArrayList<User> list, String username) {
        int length = username.length();
        if ((3 <= length) && (length <= 15)) {
            if (check31(username)) {
                if (check32(username)){
                    return true;
                }
            }
        }
        return false;
    }

这里是修改后的代码,应用了视频中的反向考虑思想: 

681a5b30466a47f7841b3adfe5f34a25.png

Ⅱ、用户名的输入 

        while (true) {
            //获取输入的用户名
            System.out.println("请输入用户名:");
            String username = sc.next();
            
            //首先验证用户名的格式
            if (checkUsername(list, username)) {
                //满足条件时进行用户唯一性的判断
                if (contains(list, username)) {
                    //将输入的用户名与用户对象进行绑定
                    user.setUsername(username);
                    break;
                } else {
                    System.out.println("输入的用户名已存在!");
                }
            } else {
                System.out.println("用户名不合法!请重新输入");
            }
        }

这里if有两层嵌套,其实还可以,但是也可以修改为反向考虑的代码,这里就不写了。

关于后面的密码、身份证号和手机号等代码的反向考虑的修改就不赘述了。 

(2)密码

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

Ⅰ、密码的输入和判断

        while (true) {
            //获取输入的密码
            System.out.println("请输入密码:");
            String password1 = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            //将输入的密码与用户对象进行绑定
            if (password1.equals(password2)) {
                user.setPassword(password1);
                break;
            } else {
                System.out.println("两次输入的密码不一致!请重新输入");
            }
        }

(3)身份证号

身份证号码验证要求:

①长度为18位;

②不能以0为开头;

③前17位,必须都是数字;

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

Ⅰ、输入身份证号的判断

public static boolean checkID(String ID) {
        //获取ID的长度
        int length = ID.length();
        //判断长度是否为18
        if (length == 18) {
            //判断开头是否为0
            if (ID.charAt(0) != '0') {
                //获取最后一位
                char c1 = ID.charAt(length - 1);
                if (((c1 > '0') && (c1 < '9')) || (c1 == 'X') || (c1 == 'x')) {
                    //循环遍历前17位
                    for (int i = 0; i < length - 1; i++) {
                        char c2 = ID.charAt(i);
                        if ((c2 > '0') && (c2 < '9')) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

Ⅱ、身份证号的输入 

       while (true) {
            //获取输入的身份证号
            System.out.println("请输入身份证号:");
            String ID = sc.next();
            //将输入的密码与用户对象进行绑定
            if (checkID(ID)) {
                user.setID(ID);
                break;
            } else {
                System.out.println("输入的身份证号不合法!请重新输入");
            }
        }

(4)手机号

验证要求:

①长度为11位

②不能以0为开头

③必须都是数字

Ⅰ、输入手机号的判断

 public static boolean checkPhoneNumber(String phoneNumber) {
        //获取手机号的长度
        int length = phoneNumber.length();
        //判断长度是否为11
        if (length == 11) {
            //判断开头是否为0
            if (phoneNumber.charAt(0) != '0') {
                //循环遍历前11位
                for (int i = 0; i < length; i++) {
                    char c2 = phoneNumber.charAt(i);
                    if ((c2 > '0') && (c2 < '9')) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

对于要求②, 不仅可以使用phoneNumber.charAt(0)获取0位置的索引,还可以使用startWith方法验证是否以0开头。

Ⅱ、手机号的输入

        while (true) {
            //获取输入的手机号
            System.out.println("请输入手机号:");
            String phoneNumber = sc.next();
            //将输入的密码与用户对象进行绑定
            if (checkPhoneNumber(phoneNumber)) {
                user.setID(phoneNumber);
                break;
            } else {
                System.out.println("输入的手机号不合法!请重新输入");
            }
        }

然后将数据添加到集合中,并提示添加成功:

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

3、登录

(1)键盘录入用户名;

(2)键盘录入密码;

(3)键盘录入验证码。

验证要求:

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

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

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

验证码要求:

(1)长度为5;

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

(3)数字可以出现在任意位置。

比如:

aQa1K

(1)生成验证码

刚开始我是把把52个大小写英文字母存到数组中,一个一个打出来的,很傻。

    // 生成验证码
    public static String createCaptcha() {
        //首先把52个大小写英文字母存到数组中
        String[] s = {"A", "B", "C", "D", "E", "F", "G",
                "H", "I", "J", "K", "L", "M", "N",
                "O", "P", "Q", "R", "S", "T",
                "U", "V", "W", "X", "Y", "Z",
                "a", "b", "c", "d", "e", "f", "g",
                "h", "i", "j", "k", "l", "m", "n",
                "o", "p", "q", "r", "s", "t",
                "u", "v", "w", "x", "y", "z"};
        //创建一个sb对象用来存字符串
        StringBuilder sb = new StringBuilder();
        //随机选择数组中的字母,循环4次生成4个
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(s.length);
            sb.append(s[index]);
        }
        //生成数字
        int number = r.nextInt(10);
        //生成数字插入的位置
        int position = r.nextInt(5);
        sb.insert(position, number);
        String captcha = sb.toString();
        return captcha;
    }

利用ASCII码添加大小写英文字母,这是修改了的代码: 

    // 生成验证码
    public static String createCaptcha() {
        //创建一个sb对象用来存52个大小写英文字母
        StringBuilder sb1 = new StringBuilder();
        for (int i = 0; i < 26; i++) {
            char c1 = (char) ('a' + i);
            sb1.append(c1);
            char c2 = (char) ('A' + i);
            sb1.append(c2);
        }
        String string = sb1.toString();
        //创建一个sb对象用来存字符串
        StringBuilder sb2 = new StringBuilder();
        //随机选择数组中的字母,循环4次生成4个
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(string.length());
            sb2.append(string.charAt(index));
        }
        //生成数字
        int number = r.nextInt(10);
        //生成数字插入的位置
        int position = r.nextInt(5);
        sb2.insert(position, number);
        String captcha = sb2.toString();
        return captcha;
    }

(2)判断用户名和密码是否正确

    //判断用户名和密码是否正确
    public static boolean checkUsername_Password(ArrayList<User> list, String username, String password){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if ((username.equals(user.getUsername())) && (password.equals(user.getPassword()))){
                return true;
            }
        }
        return false;
    }

由于这个方法传递的参数比较多,提供一种封装的思想,可以将属性封装到一个对象中进行传递。

    //判断用户名和密码是否正确
    public static boolean checkUserInfo(ArrayList<User> list, User user1){
        String username = user1.getUsername();
        String password = user1.getPassword();
        for (int i = 0; i < list.size(); i++) {
            User user2 = list.get(i);
            if ((username.equals(user2.getUsername())) && (password.equals(user2.getPassword()))){
                return true;
            }
        }
        return false;
    }

 这个整个登录代码的实现:

1、首先输入用户名、密码、验证码;

2、判断用户名是否存在,不存在则提示用户名未注册,请先注册;

3、进行验证码的校验;

4、用户名和密码的判断;

    //登录
    public static void login(ArrayList<User> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            //获取输入的信息
            System.out.println("请输入用户名:");
            String username = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();
            //生成验证码
            String captcha1 = createCaptcha();
            System.out.println("生成的验证码为:" + captcha1);
            System.out.println("请输入验证码:");
            String captcha2 = sc.next();
            //将此对象的username与集合中所有对象的username进行判断
            boolean flag = contains(list, username);
            if (!flag) {
                System.out.println("用户名未注册,请先注册");
                break;
            } else {
                if (captcha1.equals(captcha2)) {
                    if (checkUername_Password(list, username, password)) {
                        System.out.println("登录成功!");
                        break;
                    } else {
                        System.out.println("用户名和密码输入错误!");
                    }
                } else {
                    System.out.println("验证码不正确!");
                }
            }
        }
    }

关于这段代码:

if (!flag) {
                System.out.println("用户名未注册,请先注册");
                break;
 }

取反说明flag为假时执行if后面的语句。 

由于嵌套的比较深,进行修改:

e153fbdf521b4deeafb405b4ccb62a40.png

可以看到减少了else语句的存在。 

4、修改密码

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

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

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

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

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

思路如下:

1、首先判断用户是否存在;

2、然后判断身份证号和手机号是否正确;

3、如果正确则修改密码。

    //忘记密码
    public static void forgetPassword(ArrayList<User> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        //获取输入的用户名
        System.out.println("请输入用户名:");
        String username = sc.next();
        boolean flag = contains(list, username);
        if (!flag) {
            System.out.println("请先注册!");
            return;
        } else {
            //获取输入的身份证号
            System.out.println("请输入身份证号:");
            String ID = sc.next();
            //获取输入的手机号
            System.out.println("请输入手机号:");
            String phoneNumber = sc.next();
            //获取当前用户对象
            int index = getIndex(list, username);
            User user = list.get(index);
            //当用户的身份证号和手机号一致时
            if ((ID.equals(user.getID())) && (phoneNumber.equals(user.getPhonenumber()))) {
                while (true) {
                    //获取输入的密码
                    System.out.println("请输入密码:");
                    String password1 = sc.next();
                    System.out.println("请再次输入密码:");
                    String password2 = sc.next();
                    //将输入的密码与用户对象进行绑定
                    if (password1.equals(password2)) {
                        user.setPassword(password1);
                        break;
                    } else {
                        System.out.println("两次输入的密码不一致!请重新输入");
                    }
                }
            } else {
                System.out.println("账号信息不匹配,修改失败!");
            }
        }

    }

这是应用反向考虑的思想修改后的代码: 

bde78cce68824d00baa25232127d5f88.png

二、增删改查

初始菜单

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

学生类

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

分析:

1、创建一个mainOrder方法

2、键盘录入用户的选择

3、用switch语句进行判断

    //初始菜单
    public static void mainOrder(ArrayList<Student> list){
        System.out.println("-------------欢迎来到黑马学生管理系统----------------\n" +
                "1:添加学生\n" +
                "2:删除学生\n" +
                "3:修改学生\n" +
                "4:查询学生\n" +
                "5:退出");
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        //获取输入的信息
        System.out.println("请输入您的选择:");
        int num = sc.nextInt();
        switch (num){
            case 1 -> add(list);
            case 2 -> remove(list);
            case 3 -> update(list);
            case 4 -> select(list);
            case 5 -> exit();
            default -> System.out.println("请输入1-5中的一个!");
        }
        //当操作完成后再次回到
        mainOrder(list);
    }

当操作完成之后再次希望再次回到操作,这里使用递归实现的,视频中是用while(true)循环实现的。

break和continue用法区别:

(1)break:跳出for或者while循环;

(2)continue:跳出第i次遍历,进行第i+1次遍历;

对于退出,有两种方法:

①使用System.exit(0);结束虚拟机的运行进行退出;

②跳出最外层循环:break loop;

break一般是跳出离得最近的循环,当有多层循环而我们想指定跳出某个循环时,可以给这个循环起一个别名,然后break 别名就可以跳出这个循环了。

代码如下:

    //初始菜单
    public static void mainOrder(ArrayList<Student> list){
        //给外层的while循环起一个别名loop
        loop:while (true) {
            System.out.println("-------------欢迎来到黑马学生管理系统----------------\n" +
                    "1:添加学生\n" +
                    "2:删除学生\n" +
                    "3:修改学生\n" +
                    "4:查询学生\n" +
                    "5:退出");
            //1.创建一个Scanner对象
            Scanner sc = new Scanner(System.in);
            //获取输入的信息
            System.out.println("请输入您的选择:");
            int num = sc.nextInt();
            switch (num){
                case 1 -> add(list);
                case 2 -> remove(list);
                case 3 -> update(list);
                case 4 -> select(list);
                case 5 -> {
                    System.out.println("已退出学生管理系统!");
                    //break loop指跳出while循环
                    //break loop;
                    System.exit(0);
                }
                default -> System.out.println("请输入1-5中的一个!");
            }
        }
    }

添加功能

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

  • id唯一

    //添加
    public static void add(ArrayList<Student> list) {

        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            //获取输入的信息
            System.out.println("请输入id:");
            String id = sc.next();
            System.out.println("请输入姓名:");
            String name = sc.next();
            System.out.println("请输入年龄:");
            int age = sc.nextInt();
            System.out.println("请输入家庭住址:");
            String address = sc.next();
            //将输入的信息与学生对象进行绑定
            Student student = new Student();
            student.setId(id);
            student.setName(name);
            student.setAge(age);
            student.setAddress(address);
            //将此对象的id与集合中所有对象的id进行判断
            boolean flag = contains(list, id);
            if (flag) {
                System.out.println("此id已存在!,请重新输入id");
            } else {
                list.add(student);
                System.out.println("添加成功!");
                break;
            }

        }
    }

查询功能

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

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

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

    //查询
    public static void select(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
        }
        else {
            System.out.println("id\t姓名\t年龄\t家庭住址");
            for (int i = 0; i < list.size(); i++) {
                Student student = list.get(i);
                System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "\t" + student.getAddress());
            }
        }
    }

删除功能

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

  • id存在删除

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

    //删除
    public static void remove(ArrayList<Student> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            //获取输入的信息
            System.out.println("请输入id:");
            String id1 = sc.next();
            //是否包含
            boolean flag = contains(list, id1);
            if (flag) {
                int index = getIndex(list,id1);
                list.remove(index);
                System.out.println("删除成功!");
                break;
            }
            else {
                System.out.println("此id不存在!,请重新输入id");
            }
        }
    }

修改功能

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

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

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

    //修改
    public static void update(ArrayList<Student> list){
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        String id1 = null;
        String id2 = null;
        while (true) {
            //获取输入的信息
            System.out.println("请输入要修改学生的id:");
            id1 = sc.next();
            System.out.println("请输入修改后学生的id:");
            id2 = sc.next();
            if(!id1.equals(id2)){
                break;
            } else {
                System.out.println("修改后的id与修改之前的重复,请重新输入!");
            }
        }
        //是否包含
        boolean flag = contains(list, id1);
        if (flag) {
            int index = getIndex(list,id1);
            Student student = list.get(index);
            student.setId(id2);
            System.out.println("修改成功!");
        }
        else {
            System.out.println("此id不存在!,请重新输入id");
        }
    }

这是完整的登录代码: 

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


public class test03 {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();
        welcome(list);

    }

    //欢迎页面
    public static void welcome(ArrayList<User> list) {
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作:1登录 2注册 3忘记密码");
            //1.创建一个Scanner对象
            Scanner sc = new Scanner(System.in);
            //获取输入的信息
            System.out.println("请输入操作:");
            String operation = sc.next();
            switch (operation) {
                case "1" -> login(list);
                case "2" -> register(list);
                case "3" -> forgetPassword(list);
                default -> System.out.println("请输入1-3数字中的一个!");
            }
        }
    }

    //注册
    public static void register(ArrayList<User> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        User user = new User();
        while (true) {
            //获取输入的用户名
            System.out.println("请输入用户名:");
            String username = sc.next();

            //首先验证用户名的格式
            if (checkUsername(list, username)) {
                //满足条件时进行用户唯一性的判断
                if (!contains(list, username)) {
                    //将输入的用户名与用户对象进行绑定
                    user.setUsername(username);
                    break;
                } else {
                    System.out.println("输入的用户名已存在!");
                }
            } else {
                System.out.println("用户名不合法!请重新输入");
            }
        }
        while (true) {
            //获取输入的密码
            System.out.println("请输入密码:");
            String password1 = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            //将输入的密码与用户对象进行绑定
            if (password1.equals(password2)) {
                user.setPassword(password1);
                break;
            } else {
                System.out.println("两次输入的密码不一致!请重新输入");
            }
        }
        while (true) {
            //获取输入的身份证号
            System.out.println("请输入身份证号:");
            String ID = sc.next();
            //将输入的密码与用户对象进行绑定
            if (checkID(ID)) {
                user.setID(ID);
                break;
            } else {
                System.out.println("输入的身份证号不合法!请重新输入");
            }
        }
        while (true) {
            //获取输入的手机号
            System.out.println("请输入手机号:");
            String phoneNumber = sc.next();
            //将输入的密码与用户对象进行绑定
            if (checkPhoneNumber(phoneNumber)) {
                user.setPhonenumber(phoneNumber);
                break;
            } else {
                System.out.println("输入的手机号不合法!请重新输入");
            }
        }
        list.add(user);
        System.out.println("添加成功!");

    }

    //登录
    public static void login(ArrayList<User> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {

            //获取输入的信息
            //输入可以从用户名开始
            //这里我希望在信息输入完成之后再进行判断
            System.out.println("请输入用户名:");
            String username = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();
            //生成验证码
            String captcha1 = createCaptcha();
            System.out.println("生成的验证码为:" + captcha1);
            System.out.println("请输入验证码:");
            String captcha2 = sc.next();

            // 先验证验证码,再进行用户名和密码的判断
            // 1、验证码只给一次的验证机会
            if (!(captcha1.equalsIgnoreCase(captcha2))){
                System.out.println("验证码不正确!");
                continue;
            }
            //走到这里说明没有结束这次循环,也就是验证码验证正确
            //2、然后将此对象的username与集合中所有对象的username进行判断
            boolean flag = contains(list, username);
            // 不存在
            if (!flag) {
                System.out.println("用户名未注册,请先注册");
                break;
            }
            // 走到这一步说明用户名存在
            // 将username和password封装到对象中进行传递
            User user = new User(username, password, null, null);
            // 检查用户名和密码是否正确
            if (checkUserInfo(list, user)) {
                System.out.println("登录成功!");
                Test02.studentSystem();
                break;
            } else {
                System.out.println("用户名和密码输入错误!");
            }
        }
    }

    //忘记密码
    public static void forgetPassword(ArrayList<User> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        //获取输入的用户名
        System.out.println("请输入用户名:");
        String username = sc.next();
        boolean flag = contains(list, username);
        if (!flag) {
            System.out.println("请先注册!");
            return;
        }
        //获取输入的身份证号
        System.out.println("请输入身份证号:");
        String ID = sc.next();
        //获取输入的手机号
        System.out.println("请输入手机号:");
        String phoneNumber = sc.next();
        //获取当前用户对象
        int index = getIndex(list, username);
        User user = list.get(index);
        //当用户的身份证号和手机号不一致时
        if (!((ID.equals(user.getID())) && (phoneNumber.equals(user.getPhonenumber())))) {
            System.out.println("账号信息不匹配,修改失败!");
            //通过return结束方法
            return;
        }
        //走到这一步说明用户的身份证号和手机号一致
        while (true) {
            //获取输入的密码
            System.out.println("请输入新的密码:");
            String password1 = sc.next();
            System.out.println("请再次输入密码:");
            String password2 = sc.next();
            //将输入的密码与用户对象进行绑定
            if (password1.equals(password2)) {
                user.setPassword(password1);
                break;
            } else {
                System.out.println("两次输入的密码不一致!请重新输入");
            }
        }
    }


    //根据username判断此用户是否存在
    public static boolean contains(ArrayList<User> list, String username) {
        return getIndex(list, username) >= 0;
    }

    //返回id的索引
    public static int getIndex(ArrayList<User> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            if (username.equals(user.getUsername())) {
                return i;
            }
        }
        return -1;
    }

    //判断用户名是否合法
    public static boolean checkUsername(ArrayList<User> list, String username) {
        int length = username.length();
        if ((3 > length) || (length > 15)) {
            return false;
        }
        if (!check31(username)) {
            return false;
        }
        if (!check32(username)) {
            return false;
        }
        return true;
    }

    //检查是否是数字和字母的组合
    public static boolean check31(String username) {
        for (int i = 0; i < username.length(); i++) {
            //依次获取每一个字符
            char c = username.charAt(i);
            //((c >= 'a') && (c <= 'z'))表示c是字符a-z之间的一个
            if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) || ((c >= '0') && (c <= '9')))) {
                return false;
            }
        }
        return true;
    }

    //判断是否有大小写字母存在
    public static boolean check32(String username) {
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if ((((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')))) {
                return true;
            }
        }
        return false;
    }

    public static boolean checkID(String ID) {
        //获取ID的长度
        int length = ID.length();
        //判断长度是否为18
        if (length == 18) {
            //判断开头是否为0
            if (ID.charAt(0) != '0') {
                //获取最后一位
                char c1 = ID.charAt(length - 1);
                if (((c1 > '0') && (c1 < '9')) || (c1 == 'X') || (c1 == 'x')) {
                    //循环遍历前17位
                    for (int i = 0; i < length - 1; i++) {
                        char c2 = ID.charAt(i);
                        if ((c2 > '0') && (c2 < '9')) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

    public static boolean checkPhoneNumber(String phoneNumber) {
        //获取手机号的长度
        int length = phoneNumber.length();
        //判断长度是否为11
        if (length == 11) {
            //判断开头是否为0
            if (phoneNumber.charAt(0) != '0') {
                //循环遍历前11位
                for (int i = 0; i < length; i++) {
                    char c2 = phoneNumber.charAt(i);
                    if ((c2 > '0') && (c2 < '9')) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // 生成验证码
    public static String createCaptcha() {
        //创建一个sb对象用来存52个大小写英文字母
        StringBuilder sb1 = new StringBuilder();
        for (int i = 0; i < 26; i++) {
            char c1 = (char) ('a' + i);
            sb1.append(c1);
            char c2 = (char) ('A' + i);
            sb1.append(c2);
        }
        String string = sb1.toString();
        //创建一个sb对象用来存字符串
        StringBuilder sb2 = new StringBuilder();
        //随机选择数组中的字母,循环4次生成4个
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(string.length());
            sb2.append(string.charAt(index));
        }
        //生成数字
        int number = r.nextInt(10);
        //生成数字插入的位置
        int position = r.nextInt(5);
        sb2.insert(position, number);
        String captcha = sb2.toString();
        return captcha;
    }

    //判断用户名和密码是否正确
    public static boolean checkUserInfo(ArrayList<User> list, User user1) {
        String username = user1.getUsername();
        String password = user1.getPassword();
        for (int i = 0; i < list.size(); i++) {
            User user2 = list.get(i);
            if ((username.equals(user2.getUsername())) && (password.equals(user2.getPassword()))) {
                return true;
            }
        }
        return false;
    }
}

这是完整的增删改查代码: 

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

public class Test02 {
    public static void studentSystem() {
        //创建一个容器
        ArrayList<Student> list = new ArrayList<>();
        mainOrder(list);
    }
    //当这些操作成功的时候希望可以给出提示

    //添加
    public static void add(ArrayList<Student> list) {

        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            //获取输入的信息
            System.out.println("请输入id:");
            String id = sc.next();
            System.out.println("请输入姓名:");
            String name = sc.next();
            System.out.println("请输入年龄:");
            int age = sc.nextInt();
            System.out.println("请输入家庭住址:");
            String address = sc.next();
            //将输入的信息与学生对象进行绑定
            Student student = new Student();
            student.setId(id);
            student.setName(name);
            student.setAge(age);
            student.setAddress(address);
            //将此对象的id与集合中所有对象的id进行判断
            boolean flag = contains(list, id);
            if (flag) {
                System.out.println("此id已存在!,请重新输入id");
            } else {
                list.add(student);
                System.out.println("添加成功!");
                break;
            }

        }
    }


    //删除
    public static void remove(ArrayList<Student> list) {
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        while (true) {
            //获取输入的信息
            System.out.println("请输入id:");
            String id1 = sc.next();
            //是否包含
            boolean flag = contains(list, id1);
            if (flag) {
                int index = getIndex(list,id1);
                list.remove(index);
                System.out.println("删除成功!");
                break;
            }
            else {
                System.out.println("此id不存在!,请重新输入id");
            }
        }
    }

    //修改
    public static void update(ArrayList<Student> list){
        //1.创建一个Scanner对象
        Scanner sc = new Scanner(System.in);
        String id1 = null;
        String id2 = null;
        while (true) {
            //获取输入的信息
            System.out.println("请输入要修改学生的id:");
            id1 = sc.next();
            System.out.println("请输入修改后学生的id:");
            id2 = sc.next();
            if(!id1.equals(id2)){
                break;
            } else {
                System.out.println("修改后的id与修改之前的重复,请重新输入!");
            }
        }
        //是否包含
        boolean flag = contains(list, id1);
        if (flag) {
            int index = getIndex(list,id1);
            Student student = list.get(index);
            student.setId(id2);
            System.out.println("修改成功!");
        }
        else {
            System.out.println("此id不存在!,请重新输入id");
        }
    }

    //查询
    public static void select(ArrayList<Student> list){
        if(list.size() == 0){
            System.out.println("当前无学生信息,请添加后再查询");
        }
        else {
            System.out.println("id\t姓名\t年龄\t家庭住址");
            for (int i = 0; i < list.size(); i++) {
                Student student = list.get(i);
                System.out.println(student.getId() + "\t" + student.getName() + "\t" + student.getAge() + "\t" + student.getAddress());
            }
        }
    }

    //根据id判断容器是否包含
    public static boolean contains(ArrayList<Student> list, String id) {
        return getIndex(list,id) >= 0;
    }
    //返回id的索引
    public static int getIndex(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            if (id.equals(s.getId())) {
                return i;
            }
        }
        return -1;
    }
    //初始菜单
    public static void mainOrder(ArrayList<Student> list){
        //给外层的while循环起一个别名loop
        loop:while (true) {
            System.out.println("-------------欢迎来到黑马学生管理系统----------------\n" +
                    "1:添加学生\n" +
                    "2:删除学生\n" +
                    "3:修改学生\n" +
                    "4:查询学生\n" +
                    "5:退出");
            //1.创建一个Scanner对象
            Scanner sc = new Scanner(System.in);
            //获取输入的信息
            System.out.println("请输入您的选择:");
            int num = sc.nextInt();
            switch (num){
                case 1 -> add(list);
                case 2 -> remove(list);
                case 3 -> update(list);
                case 4 -> select(list);
                case 5 -> {
                    System.out.println("已退出学生管理系统!");
                    //break loop指跳出while循环
                    //break loop;
                    System.exit(0);
                }
                default -> System.out.println("请输入1-5中的一个!");
            }
        }
    }
}

 经过上述功能的实现,有一点感悟:

1、首先是数据的永久化存储是放到数据库中的,例如MySQL;

2、取出数据库中的数据之后要封装到对象中,这就用到了之后的框架,例如Mybatis。

 

标签:String,管理系统,list,System,学生,println,输入,out
From: https://blog.csdn.net/m0_46977298/article/details/140088803

相关文章

  • springboot实验报告管理系统-计算机毕业设计源码10596
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 系统功能分......
  • springboot实验报告管理系统-计算机毕业设计源码10596
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.5修改信息流程2.2.6删除信息流程2.3 系统功能分......
  • django西餐厅管理系统-计算机毕业设计源码10873
    摘要在现代餐饮行业中,高效的管理系统对于西餐厅的成功运营至关重要。为了满足西餐厅日益增长的管理需求,设计并实现了一款基于Python的西餐厅管理系统。Python作为一种简洁而易读的编程语言,具有广泛的应用领域,包括Web开发。结合Django这一强大的Web框架,我们可以快速构建......
  • Java计算机毕业设计任你行汽车租赁管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们出行需求的日益多样化,汽车租赁行业迎来了前所未有的发展机遇。然而,传统的汽车租赁管理方式往往依赖于人工操作,存在效率低......
  • 基于Java+Vue的智慧园区管理系统:创新园区运营模式,构建全方位企业服务体系(代码分享)
     前言:智慧园区管理系统是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划等。......
  • 若依管理系统-免验证接口实现
    1修改配置文件1.1application.yml增加test:true开发取消验证#项目相关配置ruoyi:#名称name:RuoYi#版本version:3.8.7#版权年份copyrightYear:2024#文件路径示例(Windows配置D:/ruoyi/uploadPath,Linux配置/home/ruoyi/uploadPath)profile......
  • 计算机毕业设计Thinkphp/Laravel高校学生管理系统m4dtg+vue
    Laravel非常的简洁并且是开源的,Laravel是一个具有表现力、优雅语法的Web应用程序框架.Laravel是构建现代全栈Web应用程序的最佳选择.开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpstudy/wamp/xammp等技术路线如下:1.后......
  • 基于Java的宠物领养管理系统
    目录        一、系统简介1.需求分析2 .编程环境与工具二、系统总体设计1.系统的功能模块图2.系统架构3.系统部署和测试步骤4.各功能模块简介(1)主页:(2)宠物知识:(3)领养中心:(4)团队博客:(5)团队展示:(6)注册/登录:三、主要业......
  • 仓库货物管理系统
    摘要随着信息技术的迅猛发展,大数据已经成为推动各行各业变革的重要力量。特别是在物流仓储领域,大数据技术的应用不仅能够显著提升仓库货物管理的效率,还能够优化库存管理、减少成本、提高客户满意度。因此,基于大数据的仓库货物管理系统的设计与实现成为了当前研究的热点和......
  • 超级无敌巨好用裂墙推荐的大学生AI工具!!!
    ​时间过的好快,马上又到了一年一度的毕业季了。大学生活是丰富多彩的,同时大学的学业也是非常重要的。对于大学生来说最后的毕业答辩是非常重要的,关乎到能不能顺利毕业,想到自己为了答辩PPT熬的夜,掉的头发,真的深有感触。虽然答辩PPT很有难度,但是随着时代的发展,各种AI工具的诞生......