2022-07-20 第二组 程梓杭 Java(6)

今日学习内容:类,对象,方法的练习实例:简易员工管理系统

image

思路:大概的循环思路如上,剩下的就是对各个方法的设计。

注册不可以账号相同,但是可以密码相同。注册失败可以继续注册,也可以返回循环开始。
登录需要循环查询已有账号密码是否同时相同,是则结束循环并进入下一层,否则返回外层循环的开始。
退出可以强制系统退出,也可以结束外层循环然后让系统自然结束。
异常输入值处理用default,返回外层循环开始。

可以在建立类存放方法,定义一个员工数组的信息查询方法。循环查询输入的员工工号是否有匹配信息,返回循环查询的结果为循环执行次数(自然结束则为循环结束条件,非自然结束说明查询到了目标。)

未循环代码(循环只需要添加while,设置Boolean flag,用flag控制各个循环的结束即可):
import java.sql.SQLOutput;
import java.util.Scanner;
public class Demo {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        UserManager userManager = new UserManager();
        EmployeeManager employeeManager = new EmployeeManager();


        main:for (;;){
            User[] users = userManager.getUsers();
            System.out.println("请选择功能:1、注册  2、登录 3、查询账户");
            String flag = sc.next();
            u:for(;;){
                switch (flag) {
                    case "1":
                        System.out.println("请输入账号:");
                        String username = sc.next();
                        for (User user : users) {
                            if(user != null){
//                                if(username == user.getUsername()){
                                if(username.equals( user.getUsername())){
                                    System.out.println("用户名不能重复,请重新输入!");
                                    continue u;
                                }
                            }
                        }
                        System.out.println("请输入密码:");
                        String password = sc.next();
                        String info = userManager.register(username, password);
                        System.out.println(info);

                        continue main;
                    case "2":
                        System.out.println("请输入账号:");
                        String username1 = sc.next();
                        System.out.println("请输入密码:");
                        String password1 = sc.next();

                        boolean b = userManager.login(username1, password1);
                        if(b){
                            // 进入到员工管理
                            Employee[] employees = employeeManager.getEmployees();
                            System.out.println("登录成功!");
                            e:for(;;){
                                System.out.println("请选择功能:1.添加员工  2.查询员工  3.修改员工  4.删除员工");
                                String selection = sc.next();
                                switch (selection) {
                                    case "1":
                                        System.out.println("请输入员工姓名:");
                                        String name = sc.next();
                                        String s = employeeManager.addEmp(name);
                                        System.out.println(s);
                                        continue e;
                                    case "2":
                                        System.out.println("请选择功能:1.根据id查询  2.查询所有");
                                        String s2 = sc.next();
                                        switch (s2) {
                                            case "1":
                                                System.out.println("请输入id:");
                                                int id = sc.nextInt();
                                                Employee empById = employeeManager.getEmpById(id);
                                                if(empById != null){
                                                    System.out.println("你要找的" + id + "号员工信息为:" + empById.getName());
                                                }else {
                                                    System.out.println("你要找的" + id + "号员工不存在!");
                                                }
                                                continue e;
                                            case "2":
                                                for (Employee employee : employees) {
                                                    if ( employee != null ) {
                                                        System.out.println(employee.getId() + "," + employee.getName());
                                                    }
                                                }
                                        }
                                                continue e;
                                    case "3":
                                        System.out.println("请输入你要修改的员工工号:");
                                        int id =sc.nextInt();
                                        Employee emp = employeeManager.getEmpById(id);
                                        if(emp != null){
                                            System.out.println("你要修改的"+id+"号员工信息为:"+emp.getName());
                                            System.out.println("请输入你要修改的员工信息:");
                                            name = sc.next();
                                            emp.setName(name);
                                            System.out.println("已将该员工信息修改为"+emp.getName());
                                        }
                                        else System.out.println("你要修改的员工的员工号不存在");
                                        continue e;
                                    case "4":
                                        System.out.println("请输入需要删除的id:");
                                         int id1 = sc.nextInt();
                                         emp = employeeManager.getEmpById(id1);
                                        if(emp != null){
                                            System.out.println("你要删除的"+id1+"号员工信息为:"+emp.getName());
                                            int i;
                                            for (i = 0; i < employees.length; i++) {
                                                if ( employees[i] != emp ) {
                                                    continue ;
                                                }
                                                for (; i < employees.length - 1; i++) {
                                                    employees[i] = employees[i + 1];
                                                }
                                                System.out.println("员工已删除。");
                                                break;
                                            }
                                            if(i == employees.length){
                                                System.out.println("你要删除的员工的员工号不存在");
                                            }
                                        }
                                        else System.out.println("你要删除的员工的员工号不存在");
                                    }
                                    continue e;
                                }
                        }else {
                            continue main;
                        }
                }
            }
        }
    }
}
public class User {

    private String username;
    private String password;

    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 User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
}
public class Employee {

    private int id;
    private String name;

    public Employee() {
    }

    public Employee(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Employee[] select(Employee [] employees){

        return employees;
    }
}
public class UserManager {

    // User类型的数组
    // User类型的数中保存的就是一个个的User对象
    private User [] users = new User[10];
    private int index = 1;

    public UserManager() {
        users[0] = new User("admin","123456");
    }

    public String register(String username, String password){
        // 保存账号密码,保存的是User对象
        // 构建User对象
        User user = new User(username,password);
        users[index] = user;

        index ++;
//        this.index = this.index + 1;

        return "注册成功,账号:" + username + ",密码:" + password;
    }

    public boolean login(String username,String password) {

        boolean b = false;
        for (User u : users) {
            if(u != null){
                if(u.getUsername().equals(username) && u.getPassword().equals(password)) {
                    b = true;
                    break;
                }
            }
        }
        return b;

    }

    public User[] getUsers() {
        return users;
    }

    public void setUsers(User[] users) {
        this.users = users;
    }


}
public class EmployeeManager {

    private Employee [] employees = new Employee[10];
    private int index = 0;

    private int id = 1001;

    public Employee getEmpById(int id){
        Employee emp = null;
        for (Employee employee : employees) {
            if(employee != null){
                if(id == employee.getId()) {
                    emp = employee;
                }
            }
        }
        return emp;
    }

    public String addEmp(String name){
        Employee employee = new Employee(id,name);
        employees[index] = employee;
        index ++;
        return "添加成功,工号:" + (id++) + ",姓名:" + name;
    }

    public Employee[] getEmployees() {
        return employees;
    }

    public void setEmployees(Employee[] employees) {
        this.employees = employees;
    }
}

思考:

  • 当编程过程过长时,面向过程繁琐且易错,面向对象设计属性与操作方法的确能大大减轻程序员的压力。
  • 各种各样的{}嵌套会让人眼花缭乱,用图形描绘简易的层级关系或能有所帮助。
  • 死循环的合理利用可以让程序“活起来”,但是需要记得设计好退出死循环的路径。
  • 当方法内操作结果无法传递到主方法或其他地方定义的对象时,需要合理利用方法返回值。
  • 对象数组和对象名似是而非时,可以拿笔记下各种的含义。(看的我头晕了。)
posted @ 2022-07-20 22:42  不觉已入梦  阅读(26)  评论(0编辑  收藏  举报