在做东西之前,第一件事情永远是分析

分析什么?分析程序逻辑
主菜单有 注册、登录、查询、退出功能
在登录之后 才可以进行 修改名字、修改密码、删除用户、添加员工、修改员工等等


思维导图

mainMenu.jpg
managerMenu.png


具体思路已经放出,每次输入都要考虑是否会有错误
把所有功能模块化,让他更简单,尽量减少重复的代码

User类

public class User {
    private int username;
    private int password;
    private int uuid;

    public User() {
    }
    public User(int username, int password,int uuid) {
        this.uuid = uuid;
        this.username = username;
        this.password = password;
    }
    public int getUuid() { return uuid; }
    public void setUuid(int uuid) { this.uuid = uuid; }
    public int getUsername() {
        return username;
    }
    public void setUsername(int username) {
        this.username = username;
    }
    public int getPassword() {
        return password;
    }
    public void setPassword(int password) {
        this.password = password;
    }
}

主类

int index = 0;
static Scanner scanner = new Scanner(System.in);
static Demo demo = new Demo();
static EmployeeManager employeeManager = new EmployeeManager();

main函数

public static void main(String[] args) {
    User [] users = new User[1];
    demo.mainMenu(users);
}

mainMenu函数

public void mainMenu(User [] users) {
    System.out.println("[!] 请选择功能:\n1、注册  2、登录  \n3、查询  4、退出");
    System.out.print("[?] 请输入: ");
    String flag = scanner.next();

    switch (flag) {
        case "1":
            demo.registerUser(users);
            break;
        case "2":
            demo.userLogin(users);
            break;
        case "3":
            demo.searchUser(users);
            break;
        case "4":
            System.exit(0);
            break;
        default:
            System.out.println("[❌] 你输入了一个错误的内容,请重新输入!");
            demo.mainMenu(users);
            break;
    }
}

registerUser函数

public void registerUser(User [] users) {
    System.out.print("[!] 请输入账号:");
    int username = scanner.nextInt();

    if (demo.findUsername(users,username) ) {
        System.out.println("[❌] 用户名已经存在,请重新注册!");
        registerUser(users);
    }
    System.out.print("[!] 请输入密码:");
    int password = scanner.nextInt();
    if (users[users.length-1]!=null) {
        users=demo.increaseUsers(users);
    }
    User user = new User(username,password,index+1001);
    users[index] = user;
    System.out.println("[V] 注册成功,编号:"+users[index].getUuid()+",账号:" + users[index].getUsername()+",密码:"+users[index].getPassword());
    index++;
    while (true) {
        System.out.println("[?] 是否还要继续注册?(yes/no) 否将返回至主菜单");
        int getYes = yesOrno();
        if (getYes == 1) {
            registerUser(users);
        }
        if (getYes == 0) {
            mainMenu(users);
        }
    }
}

userLogin函数

public void userLogin(User [] users) {
    System.out.print("[?] 请输入你要登录的账号: ");
    int username = scanner.nextInt();
    if (!demo.findUsername(users,username)) {
        System.out.println("[❌] 没有找到该账号,可能你的输入存在问题!");
        while (true) {
            System.out.println("[?] 是否还要继续登录?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                userLogin(users);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }
    System.out.print("[?] 请输入账号的密码: ");
    int password = scanner.nextInt();
    if (!verifyPassword(users,username,password)) {
        System.out.println("[❌] 登录失败!密码错误!请重新登录你的账号!(将返回至登录账号界面)");
        userLogin(users);
    }
    System.out.println("[!] 登录成功!");
    demo.loginSuccessMenu(users,findUsernameInUsers(users,username));
}

findUsername函数

public boolean findUsername(User [] users,int username) {
        for (User u : users) {
            if (u != null) {
                if (u.getUsername() == username) {
                    return true;
                }
            }
        }
        return false;
    }

findUsernameInusers

public User findUsernameInUsers(User [] users,int username) {
        for (User u : users) {
            if (u != null) {
                if (u.getUsername() == username) {
                    return u;
                }
            }
        }
        return null;
    }

increaseUsers函数

public User[] increaseUsers(User [] u) {
        User [] tempUsers = new User[u.length+1];
        for (int i = 0; i < u.length; i++) {
            tempUsers[i]=u[i];
        }
        return tempUsers;
    }

loginSuccessMenu函数

public void loginSuccessMenu(User [] users,User user) {
        System.out.println("[!] "+user.getUsername()+" 欢迎你,请选择功能:\n1、修改名字  2、修改密码  \n3、删除账号  4、添加员工  ");
        System.out.println("5、删除员工  6、修改员工  \n7、查询员工  8、返回主菜单");
        System.out.print("[?] 请输入: ");
        String flag = scanner.next();

        switch (flag) {
            case "1":
                demo.changeUsername(users,user);
                break;
            case "2":
                demo.changePassword(users,user);
            case "3":
                System.out.println("[!] 此操作将会彻底删除你的账户!");
                while (true) {
                    System.out.println("[?] 你真的要删除账户吗?(yes/no) 否将返回至上一级菜单");
                    int getYes = yesOrno();
                    if (getYes == 1) {
                        demo.deleteUser(users,user);
                    }
                    if (getYes == 0) {
                        loginSuccessMenu(users,user);
                    }
                }
            case "4":
                employeeManager.addEmployee();
                loginSuccessMenu(users,user);
            case "5":
                employeeManager.deleteEmploy();
                loginSuccessMenu(users,user);
            case "6":
                employeeManager.changeEmployee();
                loginSuccessMenu(users,user);
            case "7":
                employeeManager.searchEmploy();
                loginSuccessMenu(users,user);
            case "8":
                mainMenu(users);
            default:
                System.out.println("[❌] 输入错误,请重新选择!");
                loginSuccessMenu(users,user);
        }
    }

searchUser函数

public void searchUser(User [] users) {
        System.out.println("[!] 请输入你要查询的账户,将会返回是否存在!");
        System.out.print("[?] 请输入: ");
        int username = scanner.nextInt();
        boolean isFound = findUsername(users,username);
        if ( !isFound ) {
            System.out.println("[❌] 账户没有找到!请检查是否输入正确!");
            while (true) {
                System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单");
                int getYes = yesOrno();
                if (getYes == 1) {
                    searchUser(users);
                }
                if (getYes == 0) {
                    mainMenu(users);
                }
            }
        }
        User u = findUsernameInUsers(users,username);
        System.out.println("[V] 找到账户:"+username+",编号:"+u.getUuid());
        while (true) {
            System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                searchUser(users);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }

yesOrno函数

public int yesOrno() {
    System.out.print("[!] 请输入: ");
    String flag = scanner.next();
    switch (flag) {
        case "yes":
            return 1;
        case "no":
            return 0;
        default:
            System.out.println("[❌] 你输入了一个错误的内容,请重新输入!");
            return -1;
    }
}

VerifyPassword函数

public boolean verifyPassword(User [] users,int username,int password) {
    for (User u : users) {
        if (u != null) {
            if (u.getUsername() == username && u.getPassword() == password) {
                return true;
            }
        }
    }
    return false;
}

changeUsername函数

public void changeUsername(User [] users,User user) {
    System.out.print("[?] 请输入你要修改成的名字: ");
    int backUsername = user.getUsername();
    user.setUsername(scanner.nextInt());
    System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() +" (原账号: "+backUsername+")"+ ",密码:" + user.getPassword());
    while (true) {
        System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单");
        int getYes = yesOrno();
        if (getYes == 1) {
            loginSuccessMenu(users,user);
        }
        if (getYes == 0) {
            mainMenu(users);
        }
    }
}

changePassword函数

public void changePassword(User [] users,User user) {
    System.out.print("[?] 请输入你要修改成的密码: ");
    int backPassword = user.getPassword();
    user.setPassword(scanner.nextInt());
    System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() + ",密码:" + user.getPassword()+" (原密码: "+backPassword+")");
    while (true) {
        System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单");
        int getYes = yesOrno();
        if (getYes == 1) {
            loginSuccessMenu(users,user);
        }
        if (getYes == 0) {
            mainMenu(users);
        }
    }
}

deleteUser函数

public void deleteUser(User [] users,User user) {
    int index = users.length;
    for (int i = 0; i < users.length; i++) {
        if (users[i] == user) {
            users[i] = null;
            index = i;
        }
    }
    while (index < users.length-1) {
        users[index] = users[index+1];
        index++;
    }
    if (users.length != 1) {
        User [] tempUsers = new User[users.length-1];
        for (int i = 0; i < users.length-1; i++) {
            tempUsers[i]=users[i];
        }
        users = tempUsers;
        System.out.println("[!] 删除成功,自动返回至主菜单!");
        mainMenu(users);
    }
}

全部代码

主类代码

public class Demo {

    int index = 0;
    static Scanner scanner = new Scanner(System.in);
    static Demo demo = new Demo();
    static EmployeeManager employeeManager = new EmployeeManager();

    public User[] increaseUsers(User [] u) {
        User [] tempUsers = new User[u.length+1];
        for (int i = 0; i < u.length; i++) {
            tempUsers[i]=u[i];
        }
        return tempUsers;
    }

    public boolean findUsername(User [] users,int username) {
        for (User u : users) {
            if (u != null) {
                if (u.getUsername() == username) {
                    return true;
                }
            }
        }
        return false;
    }

    public User findUsernameInUsers(User [] users,int username) {
        for (User u : users) {
            if (u != null) {
                if (u.getUsername() == username) {
                    return u;
                }
            }
        }
        return null;
    }

    public void registerUser(User [] users) {
        System.out.print("[!] 请输入账号:");
        int username = scanner.nextInt();

        if (demo.findUsername(users,username) ) {
            System.out.println("[❌] 用户名已经存在,请重新注册!");
            registerUser(users);
        }
        System.out.print("[!] 请输入密码:");
        int password = scanner.nextInt();
        if (users[users.length-1]!=null) {
            users=demo.increaseUsers(users);
        }
        User user = new User(username,password,index+1001);
        users[index] = user;
        System.out.println("[V] 注册成功,编号:"+users[index].getUuid()+",账号:" + users[index].getUsername()+",密码:"+users[index].getPassword());
        index++;
        while (true) {
            System.out.println("[?] 是否还要继续注册?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                registerUser(users);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }

    public boolean verifyPassword(User [] users,int username,int password) {
        for (User u : users) {
            if (u != null) {
                if (u.getUsername() == username && u.getPassword() == password) {
                    return true;
                }
            }
        }
        return false;
    }

    public int yesOrno() {
        System.out.print("[!] 请输入: ");
        String flag = scanner.next();
        switch (flag) {
            case "yes":
                return 1;
            case "no":
                return 0;
            default:
                System.out.println("[❌] 你输入了一个错误的内容,请重新输入!");
                return -1;
        }
    }

    public void userLogin(User [] users) {
        System.out.print("[?] 请输入你要登录的账号: ");
        int username = scanner.nextInt();
        if (!demo.findUsername(users,username)) {
            System.out.println("[❌] 没有找到该账号,可能你的输入存在问题!");
            while (true) {
                System.out.println("[?] 是否还要继续登录?(yes/no) 否将返回至主菜单");
                int getYes = yesOrno();
                if (getYes == 1) {
                    userLogin(users);
                }
                if (getYes == 0) {
                    mainMenu(users);
                }
            }
        }
        System.out.print("[?] 请输入账号的密码: ");
        int password = scanner.nextInt();
        if (!verifyPassword(users,username,password)) {
            System.out.println("[❌] 登录失败!密码错误!请重新登录你的账号!(将返回至登录账号界面)");
            userLogin(users);
        }
        System.out.println("[!] 登录成功!");
        demo.loginSuccessMenu(users,findUsernameInUsers(users,username));
    }

    public void changeUsername(User [] users,User user) {
        System.out.print("[?] 请输入你要修改成的名字: ");
        int backUsername = user.getUsername();
        user.setUsername(scanner.nextInt());
        System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() +" (原账号: "+backUsername+")"+ ",密码:" + user.getPassword());
        while (true) {
            System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                loginSuccessMenu(users,user);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }

    public void changePassword(User [] users,User user) {
        System.out.print("[?] 请输入你要修改成的密码: ");
        int backPassword = user.getPassword();
        user.setPassword(scanner.nextInt());
        System.out.println("[!] 修改成功!编号:" + user.getUuid() + ",账号:" + user.getUsername() + ",密码:" + user.getPassword()+" (原密码: "+backPassword+")");
        while (true) {
            System.out.println("[?] 是否还要继续修改?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                loginSuccessMenu(users,user);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }

    public void deleteUser(User [] users,User user) {
        int index = users.length;
        for (int i = 0; i < users.length; i++) {
            if (users[i] == user) {
                users[i] = null;
                index = i;
            }
        }
        while (index < users.length-1) {
            users[index] = users[index+1];
            index++;
        }
        if (users.length != 1) {
            User [] tempUsers = new User[users.length-1];
            for (int i = 0; i < users.length-1; i++) {
                tempUsers[i]=users[i];
            }
            users = tempUsers;
            System.out.println("[!] 删除成功,自动返回至主菜单!");
            mainMenu(users);
        }
    }

    public void loginSuccessMenu(User [] users,User user) {
        System.out.println("[!] "+user.getUsername()+" 欢迎你,请选择功能:\n1、修改名字  2、修改密码  \n3、删除账号  4、添加员工  ");
        System.out.println("5、删除员工  6、修改员工  \n7、查询员工  8、返回主菜单");
        System.out.print("[?] 请输入: ");
        String flag = scanner.next();

        switch (flag) {
            case "1":
                demo.changeUsername(users,user);
                break;
            case "2":
                demo.changePassword(users,user);
            case "3":
                System.out.println("[!] 此操作将会彻底删除你的账户!");
                while (true) {
                    System.out.println("[?] 你真的要删除账户吗?(yes/no) 否将返回至上一级菜单");
                    int getYes = yesOrno();
                    if (getYes == 1) {
                        demo.deleteUser(users,user);
                    }
                    if (getYes == 0) {
                        loginSuccessMenu(users,user);
                    }
                }
            case "4":
                employeeManager.addEmployee();
                loginSuccessMenu(users,user);
            case "5":
                employeeManager.deleteEmploy();
                loginSuccessMenu(users,user);
            case "6":
                employeeManager.changeEmployee();
                loginSuccessMenu(users,user);
            case "7":
                employeeManager.searchEmploy();
                loginSuccessMenu(users,user);
            case "8":
                mainMenu(users);
            default:
                System.out.println("[❌] 输入错误,请重新选择!");
                loginSuccessMenu(users,user);
        }
    }

    public void searchUser(User [] users) {
        System.out.println("[!] 请输入你要查询的账户,将会返回是否存在!");
        System.out.print("[?] 请输入: ");
        int username = scanner.nextInt();
        boolean isFound = findUsername(users,username);
        if ( !isFound ) {
            System.out.println("[❌] 账户没有找到!请检查是否输入正确!");
            while (true) {
                System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单");
                int getYes = yesOrno();
                if (getYes == 1) {
                    searchUser(users);
                }
                if (getYes == 0) {
                    mainMenu(users);
                }
            }
        }
        User u = findUsernameInUsers(users,username);
        System.out.println("[V] 找到账户:"+username+",编号:"+u.getUuid());
        while (true) {
            System.out.println("[?] 是否还要继续查询?(yes/no) 否将返回至主菜单");
            int getYes = yesOrno();
            if (getYes == 1) {
                searchUser(users);
            }
            if (getYes == 0) {
                mainMenu(users);
            }
        }
    }

    public void mainMenu(User [] users) {
        System.out.println("[!] 请选择功能:\n1、注册  2、登录  \n3、查询  4、退出");
        System.out.print("[?] 请输入: ");
        String flag = scanner.next();

        switch (flag) {
            case "1":
                demo.registerUser(users);
                break;
            case "2":
                demo.userLogin(users);
                break;
            case "3":
                demo.searchUser(users);
                break;
            case "4":
                System.exit(0);
                break;
            default:
                System.out.println("[❌] 你输入了一个错误的内容,请重新输入!");
                demo.mainMenu(users);
                break;
        }
    }

    public static void main(String[] args) {
        User [] users = new User[1];
        demo.mainMenu(users);
    }
}

总结

通过思维导图,将所有要做的事情提前规划
功能的实现,在修改、删除上,都需要使用查询,所以可以将查询单拿出来
在注册时,也要查询一遍是否有同样的名字出现,如果出现了则需要换一个名字注册
所以在查询的功能上,可以定义为Boolean类型,true代表查询到了,false则代表没有

在进行删除操作的时候,要注意一件事情,删除数据后,要将该位置之后的所有位置前移
同时,我也做了数组自减的方法,删除一条数据后,也会将数组的长度自减
注册的时候会自增

主类里面定义的yesOrno是用来判断你到底输入了yes还是no,还是其他内容
因为我制作了在功能完毕后,提示是否还要继续的操作
我将登录的验证做成了一个单独的模块,即verifyPassword,如果账号和密码相匹配
则返回值为true,反之则为false

最后修改:2023 年 01 月 09 日
如果觉得我的文章对你有用,请随意赞赏