自学Java第7Day

到今天面向对象的基础已学完,接下来开始学习进阶


学习产出:

学生管理系统升级版

需求:

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

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

分析:

登录界面:
欢迎来到学生管理系统
请选择操作:1、登录 2、注册 3、忘记密码
用户类:

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

注册功能:

        1.用户需要满足以下要求:

                验证要求:

                        用户名唯一

                        用户名长度必须再3-15位之间

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

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

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

                验证要求:

                        长度为18位

                        不能以0开头

                        前17位,必须都是数字

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

        4.手机号码验证。

                验证要求:

                        长度为11位

                        不能以0开头

                        必须都是数字

登录功能:

        1.键盘录入用户名

        2.键盘录入密码

        3.键盘录入验证码

验证要求:

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

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

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

忘记密码:

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

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

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

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

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

验证码规则:

        长度为5

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

        数字可以出现再任意位置

代码如下:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        ArrayList<User> list=new ArrayList<>();
        while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作:1、登录 2、注册 3、忘记密码");
            String choose=scan.next();
            switch (choose){
                case "1"-> login(list);
                case "2"-> register(list);
                case "3"-> forgetPassword(list);
                case "4"-> {
                    System.out.println("谢谢你的使用");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项!!");
            }
        }
    }
    //修改密码
    private static void forgetPassword(ArrayList<User> list) {
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username= scan.next();
        boolean flag=contains(list,username);
        if(!flag){
            System.out.println("当前用户"+username+"不存在!!!");
            return;
        }
        System.out.println("请输入身份证号码:");
        String personID= scan.next();
        System.out.println("请输入手机号码:");
        String phoneNumber= scan.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= scan.next();
            System.out.println("请再次输入新的密码:");
            String againPassword=scan.next();
            if(password.equals(againPassword)){
                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 user=list.get(i);
            if(user.getUsername().equals(username)){
                return i;
            }
        }
        return -1;
    }

    //注册
    private static void register(ArrayList<User> list){
        Scanner scan=new Scanner(System.in);
        String username;
        String password;
        String personID;
        String phoneNumber;
        //输入用户名
        while (true) {
            System.out.println("请输入用户名");
            username= scan.next();
            boolean flag1=checkUsername(username);
            if(!flag1){
                System.out.println("用户名格式不正确!");
                continue;
            }
            boolean flag2=contains(list,username);
            if(flag2){
                System.out.println("用户名"+username+"重名!!");
            }else {
                System.out.println("用户名可用!!");
                break;
            }
        }
        //键盘输入密码
        while (true) {
            System.out.println("请输入密码:");
            password=scan.next();
            System.out.println("请再输入密码:");
            String againpassword=scan.next();
            if(!password.equals(againpassword)){
                System.out.println("两次密码不一致,请重新输入!");
                continue;
            }else {
                System.out.println("两次密码一致!");
                break;
            }
        }
        //键盘录入身份证号码
        while (true) {
            System.out.println("请输入身份证号码");
            personID= scan.next();
            boolean flag3=checkPersonID(personID);
            if (flag3){
                System.out.println("身份证号码格式正确");
                break;
            }else {
                System.out.println("身份证号码格式不正确");
                continue;
            }
        }
        //键盘录入手机号码
        while (true) {
            System.out.println("请输入电话号码!!");
            phoneNumber= scan.next();
            boolean flag4=checkPhoneNumber(phoneNumber);
            if(flag4){
                System.out.println("手机号码格式正确!");
                break;
            }else {
                System.out.println("手机号码格式不正确!");
                continue;
            }
        }
        User user=new User(username,password,personID,phoneNumber);
        list.add(user);
        System.out.println("注册成功!!!");
        printList(list);
    }

    //遍历
    private static void printList(ArrayList<User> list) {
        for (int i = 0; i < list.size(); i++) {
            User user=list.get(i);
            System.out.println(user.getUsername()+", "+user.getPassword()+", "+user.getPersonID()+", "+user.getPhoneNumber());
        }
    }
    //验证手机号的正确性
    private static boolean checkPhoneNumber(String phoneNumber) {
        if(phoneNumber.length()!=11){
            return false;
        }
        if(phoneNumber.startsWith("0")){
            return false;
        }
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c=phoneNumber.charAt(i);
            if(!(c>='0'&&c<='9')){
                return false;
            }
        }
        return true;
    }

    //验证身份证号码的正确性
    private static boolean checkPersonID( String persinID) {
        if(persinID.length()!=18){
            return false;
        }
        if(persinID.startsWith("0")){
            return false;
        }
        for (int i = 0; i < persinID.length()-1; i++) {
            char c=persinID.charAt(i);
            if(!(c>='0'&&c<='9')){
                return false;
            }
        }
        char c=persinID.charAt(persinID.length()-1);
        if((c=='x')||(c=='X')||(c>='0'&&c<='9')){
            return true;
        }else {
            return false;
        }
    }
    //查找是否有重名
    private static boolean contains(ArrayList<User> list, String username) {
        //查找是否有重名
        for (int i = 0; i < list.size(); i++) {
            User u=list.get(i);
            String rightUsername=u.getUsername();
            if(rightUsername.equals(username)){
                return true;
            }
        }
        return false;
    }
    //用户名规则
    private static boolean checkUsername(String username) {
        int len=username.length();
        if(len<3||len>15){
            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 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++;
                break;
            }
        }
        return count>0;
    }

    //登录
    private static void login(ArrayList<User> list) {
        Scanner scan=new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名:");
            String username= scan.next();
            //判断用户名是否存在
            boolean flag=contains(list,username);
            if(!flag){
                System.out.println("用户名"+username+"未注册!");
                return;
            }
            System.out.println("请输入密码");
            String password=scan.next();

            while (true) {
                String rightCode=getCode();
                System.out.println("验证码为:"+rightCode);
                System.out.println("请输入验证码:");
                String code= scan.next();
                if(code.equalsIgnoreCase(rightCode)){
                    System.out.println("验证码正确!");
                    break;
                }else {
                    System.out.println("验证码错误!");
                    continue;
                }
            }
            //验证用户名密码是否正确
            //封装思想的利用
            User useInfo=new User(username,password,null,null);
            boolean result=checkuserInfo(list,useInfo);
            if(result){
                System.out.println("用户名密码正确,登录成功!!!");
                //创建对象调用方法,启用学生管理系统
                StudentSystem ss=new StudentSystem();
                ss.startStudentSystem();
                break;
            }else {
                System.out.println("用户名或密码不正确,登录失败!!!");
                if(i==2){
                    System.out.println("当前账号"+username+"被锁定,请联系全聚德一级码师:xxxx-xxxxxxx");
                    return;
                }else{
                    System.out.println("还剩下"+(2-i)+"次机会!!");
                }
            }
        }

    }

    //用户名和密码校验
    private static boolean checkuserInfo(ArrayList<User> list, User useInfo) {
        for (int i = 0; i < list.size(); i++) {
            User user=list.get(i);
            if(user.getUsername().equals(useInfo.getUsername())&&user.getPassword().equals(useInfo.getPassword())){
                return true;
            }
        }
        return false;
    }

    //生成验证码
    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 random=new Random();
        for (int i = 0; i < 4; i++) {
            int index= random.nextInt(list.size());
            char c=list.get(index);
            sb.append(c);
        }
        //把一个随机数字添加到末尾
        int number=random.nextInt(10);
        sb.append(number);
        char[] arr=sb.toString().toCharArray();
        //拿最后一个索引,跟随机索引进行交换
        int randomIndex= random.nextInt(arr.length);
        char temp=arr[randomIndex];
        arr[randomIndex]=arr[arr.length-1];
        arr[arr.length-1]=temp;
        return new String(arr);
    }
}
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;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

    public String getPersonID() {
        return personID;
    }

    public void setPersonID(String personID) {
        this.personID = personID;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

 

package StudentSystem1;

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

public class StudentSystem {
    public static void startStudentSystem() {
        ArrayList<Student> list=new ArrayList<>();
        loop: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 scan=new Scanner(System.in);
            String choose= scan.next();
            switch (choose){
                case "1"-> addStudent(list);
                case "2"-> deleteStudent(list);
                case "3"-> updeteStudent(list);
                case "4"-> queryStudent(list);
                case "5"-> {
                    System.out.println("5:退出");
                    break loop;
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }
    //添加
    public static void addStudent(ArrayList<Student> list){
        Scanner scan=new Scanner(System.in);
        String id= null;
        while (true) {
            System.out.println("请输入学生的ID:");
            id = scan.next();
            boolean flag=contains(list,id);
            if(flag){
                System.out.println("id已经存在");
            }else {
                break;
            }
        }
        System.out.println("请输入学生的姓名:");
        String name= scan.next();
        System.out.println("请输入学生的年龄:");
        int age=scan.nextInt();
        System.out.println("请输入学生的家庭住址:");
        String address=scan.next();
        Student stu=new Student(id,name,age,address);
        list.add(stu);
        System.out.println("添加成功!");
    }
    //删除
    public static void deleteStudent(ArrayList<Student> list){
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要删除的id");
        String id=scan.next();
        int index=getIndex(list,id);
        if(index>=0){
            list.remove(index);
            System.out.println("id为"+id+"已删除!");
        }else {
            System.out.println("查无此人!");
        }

    }
    //修改
    public static void updeteStudent(ArrayList<Student> list){
        Scanner scan=new Scanner(System.in);
        System.out.println("请输入要修改的id");
        String id= scan.next();
        int index=getIndex(list,id);
        if(index==-1){
            System.out.println("要修改的id不存在!");
            return;
        }
        Student stu=list.get(index);
        System.out.println("请输入要修改的学生的姓名:");
        String newname= scan.next();
        stu.setName(newname);
        System.out.println("请输入要修改的学生的年龄:");
        int newage=scan.nextInt();
        stu.setAge(newage);
        System.out.println("请输入要修改的学生的家庭住址:");
        String newaddress=scan.next();
        stu.setAddress(newaddress);
        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家庭住址");
        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唯一
    public static boolean contains(ArrayList<Student> list,String id){
        /*for (int i = 0; i < list.size(); i++) {
            Student stu=list.get(i);
            String uid=stu.getId();
            if(uid.equals(id)){
                return true;
            }
        }
        return false;*/
        return getIndex(list,id)>=0;
    }
    //通过id获取索引
    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(sid.equals(id)){
                return i;
            }
        }
        return -1;
    }
}

 

package StudentSystem1;

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

运行结果:

欢迎来到学生管理系统
请选择操作:1、登录 2、注册 3、忘记密码
2
请输入用户名
zhangsan
用户名可用!!
请输入密码:
zs123456
请再输入密码:
zs123456
两次密码一致!
请输入身份证号码
342423202407150001
身份证号码格式正确
请输入电话号码!!
12345678912
手机号码格式正确!
注册成功!!!
zhangsan, zs123456, 342423202407150001, 12345678912
欢迎来到学生管理系统
请选择操作:1、登录 2、注册 3、忘记密码
1
请输入用户名:
zhangsan
请输入密码
zs123456
验证码为:ct0bS
请输入验证码:
ct0bs
验证码正确!
用户名密码正确,登录成功!!!
--------------欢迎来到学生管理系统----------------
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出
请输入您的选择:
5
5:退出
欢迎来到学生管理系统
请选择操作:1、登录 2、注册 3、忘记密码
3
请输入用户名:
zhangsan
请输入身份证号码:
342423202407150001
请输入手机号码:
12345678912
请输入新的密码:
zs1234567
请再次输入新的密码:
zs1234567
两次密码输入一致!
密码修改成功!
欢迎来到学生管理系统
请选择操作:1、登录 2、注册 3、忘记密码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值