学生管理系统升级

需求:

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

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

分析:

登录界面:

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

用户类;

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

注册功能:

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

验证要求:

用户名唯一,用户名长度必须在3-15位之间,只能是字母加数字的组合,但是不能是纯数字

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

3.身份号码需要验证:

验证要求:

长度18位,不能0开头,前17位必须是数字,最后一位可以是数字也可以是x/X

4.手机号验证:

长度为11位,不能以0开头,必须都是数字

登录功能:

1.键盘录入用户名

2.键盘录入密码

3.键盘录入验证码

验证要求:

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

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

在判断用户名和密码时候正确,有三次机会

忘记密码:

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

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

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

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

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

验证码规则:

长度为5

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

代码

package stdentSystem;
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;
    }
}
package stdentSystem;
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 stdentSystem;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
    public static void startStudentSystem() {
        ArrayList 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 sc=new Scanner(System.in);
            String choose=sc.next();
            switch (choose){
                case"1" :addStudent(list);break;
                case"2" :delStudent(list);break;
                case"3" :updateStudent(list);break;
                case"4" :queryStudent(list);break;
                case"5" :{
                    System.out.println("退出");
                    break loop;
                   // System.exit(0);停止虚拟机运行
                }
                default:
                    System.out.println("没有这个选项");
            }
        }
    }
    //添加学生
    public static void addStudent(ArrayList list){
      //利用空参构造先创建学生对象
        Student s=new Student();
        Scanner sc=new Scanner(System.in);
        String id= null;
        while (true) {
            System.out.println("请输入学生id");
            id = sc.next();
            boolean flag = contains(list, id);
            if(flag){
    //表示id已经存在,需要重新录入
                System.out.println("id已经存在,请重新录入");
            }else{
//表示id不存在
s.setId(id);
break;
            }
        }

        System.out.println("请输入学生的姓名");
        String name=sc.next();
        s.setName(name);
        System.out.println("请输入学生的年龄");
       int age= sc.nextInt();
       s.setAge(age);
        System.out.println("请输入学生的家庭住址");
        String address=sc.next();
        s.setAddress(address);
       // Student s=new Student(id,name,age,address);
   //把学生对象添加到集合当中
        list.add(s);
        //提示一下用户
        System.out.println("学生信息添加成功");
    }
    //删除学生
    public static void delStudent(ArrayList list){
      Scanner sc=new Scanner(System.in);
        System.out.println("请输入要删除的id");
        String id=sc.next();
       //查询id在集合中的索引
        int index=getIndex(list,id);
        //对index进行判断
        //如果-1,就表示不存在,结束方法,返回初始菜单
        if(index>=0){
            //如果大于等于0,表示存在,直接删除
            list.remove(index);
            System.out.println("id为:"+id+"的学生删除成功");
        }else{
            System.out.println("id不存在,删除失败");
        }
    }
    //修改学生
    public static void updateStudent(ArrayList list){
       Scanner sc=new Scanner(System.in);
        System.out.println("请输入要修改学生的id");
        String id=sc.next();
        int index = getIndex(list, id);
        if(index==-1){
            System.out.println("要修改的id"+id+"不存在,请重新输入");
        return;
        }
        //当代码执行到这里表示当前id存在
        //获取要修改的对象
        Student stu=list.get(index);
        //输入其他的信息并修改
        System.out.println("请输入要修改的学生姓名");
        String newName= sc.next();
        stu.setName(newName);
        System.out.println("请输入要修改的学生的年龄");
        int newAge=sc.nextInt();
        stu.setAge(newAge);
        System.out.println("请输入要修改的学生的家庭地址");
        String newAddress=sc.next();
        stu.setAddress(newAddress);
        System.out.println("学生信息修改成功");
    }
    //查询学生
    public static void queryStudent(ArrayList 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.getAge()+"\t"+stu.getAddress());
        }
    }
//判断id在集合中是否存在
   public static boolean contains(ArrayList list,String id){
     //循环遍历集合得到每一个学生对象
     //拿到学生对象后,获取id进行判断
       //存在,true,不存在false
      /* for (int i = 0; i < list.size(); i++) {
         Student stu=  list.get(i);
         String sid=stu.getId();
         if(sid.equals(id)){
             return  true;
         }
       }
return false;*/
     return   getIndex(list,id)>=0;
   }
//通过id获取索引的方法
public static int getIndex(ArrayList list,String id ){
   //遍历集合
    for (int i = 0; i < list.size(); i++) {
    //得到每一个学生对象
        Student stu=  list.get(i);
       //得到每一个学生对象的id
        String sid = stu.getId();
        //拿着集合中的学生id跟要查询的Id进行比较
        if(sid.equals(id)){
            //如果一样,那么就返回索引
            return i;
        }
    }
    //当循环结束之后还没找到,就表示不存在,返回-1
    return -1;
}
}
package stdentSystem;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
//程序的主界面
public class App {
    public static void main(String[] args) {
        ArrayList list =new ArrayList<>();
        Scanner sc=new Scanner(System.in);
      loop:  while (true) {
            System.out.println("欢迎来到学生管理系统");
            System.out.println("请选择操作1登录2注册3忘记密码4退出");
            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("谢谢使用,再见");
                    break loop;}
                default:
                    System.out.println("没有这个选项");
            }
        }

    }

    private static void forgetPassword(ArrayList 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();
       // User userInfo=new User(null,null,personID,phoneNumber);
//比较用户对象中的手机号码和身份证号码是否相同
        //需要把用户对象先获取出来
        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 againPassword=sc.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 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 login(ArrayList 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 result = checkUserInfo(list, userInfo);
            if (result) {
                System.out.println("登录成功,可以开始使用学生管理系统了");
          //创建对象调用方法,启动学生管理系统
               StudentSystem ss=new StudentSystem() ;
               ss.startStudentSystem();
           break;
            } else {
                System.out.println("登录失败,用户名或密码错误");
                if(i==2){
                    System.out.println("当前账号"+username+"被锁定,请联系客服:*****");
                //当前账号锁定之后,直接结束方法即可
                    return;
                }else{
                    System.out.println("用户名或密码错误,还剩下"+(2-i)+"次机会");
                }
            }
        }
    }
    private static boolean checkUserInfo(ArrayList list,User userInfo) {
   //遍历集合判断用户是否存在,如果不存在登录失败
        for (int i = 0; i < list.size(); i++) {
            User user=list.get(i);
            if(user.getUsername().equals(userInfo.getUsername())&&user.getPassword().equals(userInfo.getPassword())){
                return  true;
            }
        }
        return  false;
    }

    private static void register(ArrayList list){
       // System.out.println("注册");
        //把用户信息添加到集合当中
        //用户名、密码、身份证号码、手机号码放到用户对象中
        //把用户对象添加到集合当中
        //1.键盘录入用户名
        Scanner sc=new Scanner(System.in);
        String username;
        while (true) {
            System.out.println("请输入用户名");
            username=sc.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("用户名"+username+"可用");
                break;
            }
        }
        //2键盘录入密码
        String password;
        while (true) {
            System.out.println("请输入要注册的密码");
            password=sc.next();
            System.out.println("请再次输入要注册的密码");
            String againPassword=sc.next();
            if(!(password.equals(againPassword))){
                System.out.println("两次密码不一致,请重新输入");
            continue;
            }else{
                System.out.println("两次密码一致,继续录入其他信息");
            break;
            }
        }
        //3.键盘录入身份证号码
        String personID;
        while (true) {
            System.out.println("请输入身份证号码");
          personID =sc.next();
            boolean flag=checkPersonID(personID);
            if(flag){
                System.out.println("身份证号码满足要求");
                break;
            }else {
                System.out.println("身份证号码格式有误,请重新输入");
           continue;
            }
        }
        //4.键盘录入手机号码
        String phoneNumber;
        while (true) {
            System.out.println("请输入手机号码");
           phoneNumber=sc.next();
            boolean flag= checkPhoneNumber(phoneNumber);
            if(flag){
                System.out.println("手机号码格式正确");
                break;
            }else {
                System.out.println("手机号码格式有误,请重新输入");
            continue;
            }
        }
        //用户名、密码、身份证号码、手机号码放到用户对象中
        User u=new User(username,password,personID,phoneNumber);
        //把用户对象添加到集合当中
        list.add(u);
        System.out.println("注册成功");
        printList(list);
    }

    private static void printList(ArrayList list) {
        for (int i = 0; i < list.size(); i++) {
           User u= list.get(i);
            System.out.println(u.getUsername()+","+u.getPassword()+","
            +u.getPersonID()+","+u.getPhoneNumber());
        }
    }

    private static boolean checkPhoneNumber(String phoneNumber) {
    if(phoneNumber.length()!=11){
        return false;
    }
    boolean b=phoneNumber.startsWith("0");
    if(b){
        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 personID) {
        if(personID.length()!=18){
            return false;
        }
       boolean flag= personID.startsWith("0");
        if(flag){
            //如果以0开头,返回false
            return false;
        }
        for (int i = 0; i < personID.length()-1; i++) {
            char c=personID.charAt(i);
            if(!(c>='0'&&c<'9')){
                return false;
            }
        }
        char endChar=personID.charAt(personID.length()-1);
        if((endChar>='0'&&endChar<='9')||(endChar=='X')||(endChar=='x')){
return true;
        }else{
            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 boolean contains(ArrayList list,String username){
    for (int i = 0; i < list.size(); i++) {
        User user=list.get(i);
        String rightUsername=user.getUsername();
        if(rightUsername.equals(username)){
            return  true;
        }
    }
        return false;
}
//生成一个验证码
private static String getCode(){
//1.创建一个集合添加所有的大写和小写字母
    ArrayList 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();
    //2.随机抽取四个字符
    for (int i = 0; i < 4; i++) {
        //获取随机索引
       int index= r.nextInt(list.size());
       //利用随机索引获取随机的字符
        char c=list.get(index);
//把随机字符添加到sb中
        sb.append(c);
    }
    //3.把一个随机数字添加到末尾
   int number= r.nextInt(10);
    sb.append(number);
    //4.如果我们要修改字符串中的内容,先把字符串变成字符数组,在数组中修改,然后创建一个新的字符
    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);
}
}

你可能感兴趣的:(java,开发语言)