实现登录与设计功能的模块设计

分析:

1.首先封装一个对象,用来封装用户的信息,要设计两种构造器来分开用户和管理员的信息。

2.设计注册功能,实现把注册的用户存入文件内,要注意注册的用户是否与已注册的用户存在UID重复的问题。

3.设计登录功能,登录要实现登录成功后实现用户界面和管理员界面。

功能实现:

封装对象:

public class User implements Serializable {
    //成员变量
    private String UID;//用户编号
    private int password;//密码
    private String name;//姓名
    private int age;//年龄
    private String gender;//性别
    private String telNumber;//电话
    private String schoolName;//院系
    private String date;//注册日期
    private UserAccount userAccount;//普通账户信息
    //构造方法
    //管理账户注册
    public User(String UID, int password, String name, int age, String gender, String telNumber, String schoolName, String date) {
        this.UID = UID;
        this.password = password;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.telNumber = telNumber;
        this.schoolName = schoolName;
        this.date = date;
    }
    //普通用户注册
    public User(String UID, int password, String name, int age, String gender, String telNumber, String schoolName, String date, UserAccount userAccount) {
        this.UID = UID;
        this.password = password;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.telNumber = telNumber;
        this.schoolName = schoolName;
        this.date = date;
        this.userAccount = userAccount;
    }
    //get/set方法
    public String getUID() {
        return UID;
    }

    public void setUID(String UID) {
        this.UID = UID;
    }

    public int getPassword() {
        return password;
    }

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

    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 getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getTelNumber() {
        return telNumber;
    }

    public void setTelNumber(String telNumber) {
        this.telNumber = telNumber;
    }

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public UserAccount getUserAccount() {
        return userAccount;
    }

    public void setUserAccount(UserAccount userAccount) {
        this.userAccount = userAccount;
    }

    @Override
    public String toString() {
        return "User{" +
                "UID='" + UID + '\'' +
                ", password=" + password +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", telNumber='" + telNumber + '\'' +
                ", schoolName='" + schoolName + '\'' +
                ", date='" + date + '\'' +
                ", userAccount=" + userAccount +
                '}';
    }
}
public class UserAccount implements Serializable {
    //成员变量
    private String ACID;//账户编号
    private int credit_rating;//信用等级
    private int balance;//余额
    //构造器
    public UserAccount(String ACID, int credit_rating, int balance) {
        this.ACID = ACID;
        this.credit_rating = credit_rating;
        this.balance = balance;
    }

    public String getACID() {
        return ACID;
    }

    public void setACID(String ACID) {
        this.ACID = ACID;
    }

    public int getCredit_rating() {
        return credit_rating;
    }

    public void setCredit_rating(int credit_rating) {
        this.credit_rating = credit_rating;
    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
    }
}

注册功能:

//注册功能
    public void register() throws IOException, ClassNotFoundException {
        //获取已经存在的用户
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("Job\\src\\SaveFile\\UserList.txt"));
        ArrayList<User> arr = (ArrayList<User>) in.readObject();
        in.close();//释放登入资源
        //旗帜
        label:
        while (true) {
            System.out.println("请输入你的学号/教师编号:");//输入学号或者教师编号
            System.out.println("请按以下格式书写(不得超过10位):");
            System.out.println("学号:student+xxx");
            System.out.println("教师编号:teacher+xxx");
            System.out.print("请输入:");
            String UID = TSUtility.readKeyBoard(10, false);
            for (User u : arr) {
                if (u.getUID().equals(UID)) {
                    System.out.println("你输入的学号或者教师编号已经存在");
                    System.out.println();
                    continue label;//返回从新输出学号或者教师编号
                }
            }
            StringBuilder U = new StringBuilder();//输入的学号的前半段
            StringBuilder A = new StringBuilder();//输入学号的后半段
            boolean isFlag = false;//做旗帜
            boolean isStudent = false;//普通用户旗帜
            boolean isTeacher = false;//管理用户旗帜
            //正则表达式
            String regex = "\\w{10}";
            Pattern pat = Pattern.compile(regex);
            Matcher mat = pat.matcher(UID);
            if (mat.matches()) {//使用正则表达式
                //记录学号前半段
                for (int x = 0; x < 7; x++) {
                    U = U.append(UID.charAt(x));
                }
                //记录学号后半段
                for (int x = 7; x < 10; x++) {
                    A = A.append(UID.charAt(x));
                }
            }
            //把UID和ACID转为String
            String num = U.toString();
            String ACID = A.toString();
            //判断输入的学号或者教师编号是否符合格式
            if (num.equals("student")) {//判断是普通用户
                isFlag = true;
                isStudent = true;//开启学生旗帜
            } else if (num.equals("teacher")) {//判断是管理用户
                isFlag = true;
                isTeacher = true;//开启老师旗帜
            } else {
                System.out.println("你输入的学号/教师编号不对");
                System.out.println();
                continue label;//返回从新输入学号或者教师编号
            }
            if (isFlag) {
                System.out.print("请输入密码(密码不超过6位):");//密码
                int password = TSUtility.readstock();
                System.out.print("请输入你的名字:");//姓名
                String name = TSUtility.readKeyBoard(4, false);
                System.out.print("请输入你的年龄:");//年龄
                int age = TSUtility.readstock();
                System.out.print("请输入你的性别:");//性别
                String gender = TSUtility.readKeyBoard(2, false);
                System.out.print("请输入你的电话:");//电话
                String telNumber = TSUtility.readKeyBoard(11, false);
                System.out.print("请输入你的院系:");//院系
                String schoolName = TSUtility.readKeyBoard(20, false);
                SimpleDateFormat sim = new SimpleDateFormat("yyyy--MM--dd");//使用SimpleDateFormat,同时给定个格式
                Date d = new Date();//创建一个Date对象,该Date对象是创建时的事件
                String date = sim.format(d);//记录存入的日期
                if (isStudent) {//如果是普通用户
                    //创建普通用户
                    User commonUser = new User(UID, password, name, age, gender, telNumber, schoolName, date, new UserAccount(ACID, 6, 0));
                    arr.add(commonUser);//添加到集合中
                    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Job\\src\\SaveFile\\UserList.txt"));
                    out.writeObject(arr);//把集合写入文件
                    out.close();//释放资源
                    System.out.println("注册成功");
                    return;
                }
                if (isTeacher) {//如果是管理用户
                    //创建管理用户
                    User administrator = new User(UID, password, name, age, gender, telNumber, schoolName, date);
                    arr.add(administrator);//添加到集合中
                    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Job\\src\\SaveFile\\UserList.txt"));
                    out.writeObject(arr);//把集合写入文件
                    out.close();//释放资源
                    System.out.println("注册成功");
                    return;
                }
            }
        }
    }

登录功能:

//登录功能
    public ActiveUser landing() throws IOException, ClassNotFoundException {
        //获取已经存在的用户
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("Job\\src\\SaveFile\\UserList.txt"));
        ArrayList<User> arr = (ArrayList<User>) in.readObject();
        in.close();//释放登入资源
        System.out.print("请输入学号或者教师编号:");
        String UID = TSUtility.readKeyBoard(10, false);
        System.out.print("请输入密码:");
        int password = TSUtility.readstock();
        boolean isTrue = false;//判断是否与文件中的账户密码匹配
        for (User u : arr) {//遍历从文件中取到的账户信息
            if (u.getUID().equals(UID)) {//账号正确
                if (u.getPassword() == password) {//密码正确
                    isTrue = true;  //旗帜变为true
                }
            }
        }
        if (isTrue) {//匹配
            StringBuilder A = new StringBuilder();//学号或者教师编号的格式
            for (int x = 0; x < 7; x++) {
                A = A.append(UID.charAt(x));//拼接得到对应的格式
            }
            String name = A.toString();//转为String
            if (name.equals("student")) {//如果是普通用户
                //读入用户列表数据
                ObjectInputStream loginIn = new ObjectInputStream(new FileInputStream("Job\\src\\SaveFile\\UserList.txt"));
                ArrayList<User> arr1 = (ArrayList<User>) loginIn.readObject();//存放用户列表
                in.close();//释放资源
                int index = 0;对应用户列表中的索引
                int credit_rating = 0;//信用系数
                String credit = "";//信用等级
                for (int x = 0; x < arr1.size(); x++) {
                    if (arr1.get(x).getUID().equals(UID)) {//找到对应的用户
                        index = x;//记录对应用户列表中的索引
                        credit_rating = arr1.get(x).getUserAccount().getCredit_rating();//对应用户列表中当前用户的信用系数
                        if (credit_rating >= 0 && credit_rating < 3) {//极差系数
                            credit = "极差";
                        } else if (credit_rating >= 3 && credit_rating < 6) {//较差系数
                            credit = "较差";
                        } else if (credit_rating >= 6 && credit_rating < 9) {//良好系数
                            credit = "良好";
                        } else if (credit_rating >= 9 && credit_rating < 12) {//优秀系数
                            credit = "优秀";
                        } else {//极优系数
                            credit = "极优";
                        }
                        break;
                    }
                }
                ActiveUser activeUser = new ActiveUser(arr1.get(index),index,credit);
                return activeUser;
            } else {//如果是管理员
                //读入用户列表数据
                ObjectInputStream loginIn = new ObjectInputStream(new FileInputStream("Job\\src\\SaveFile\\UserList.txt"));
                ArrayList<User> arr1 = (ArrayList<User>) loginIn.readObject();//存放用户列表
                in.close();//释放资源
                int index = 0;//对应数组索引
                for (int x = 0; x < arr1.size(); x++) {//找到对应的管理员用户
                    if (arr1.get(x).getUID().equals(UID)) {
                        index = x;//记录对应用户列表中的索引
                    }
                }
                ActiveUser activeUser = new ActiveUser(arr1.get(index),index);
                return activeUser;
            }
        } else {//不匹配
            return null;
        }
    }