Java面向对象练习-员工管理系统(对象数组存储)

本系统主要练习到的相关内容:
1、 流程控制语句
2、 类、对象
3、 封装、继承、多态
4、 方法的重载、重写
5、 访问修饰符
6、 static

需求说明:
员工信息的基本情况
---------------------------普通员工-----------------------------
属性:员工编号、员工姓名、员工职务、请假天数、基本工资
普通员工工资:
在基本工资的基础上增加10%的工作餐,50%的岗位补助,200元住房补助
基本工资+基本工资0.1+基本工资0.5+200
-----------------------------经理--------------------------------
属性:员工编号、员工姓名、员工职务、请假天数、基本工资
经理工资:
在基本工资的基础上增加20%的工作餐,50%的岗位补助,500元住房补助
基本工资+基本工资0.2+基本工资0.5+500
-------------------------------董事--------------------------------
属性:员工编号、员工姓名、员工职务、请假天数、基本工资
董事工资:
在基本工资的基础上增加8%的工作餐,30%的岗位补助,2000元住房补助,3000元投资补助
基本工资+基本工资0.08+基本工资0.3+2000+3000
--------------------------------其他---------------------------------
工资扣除部分,所有员工都一样
无请假,基本工资全发,有请假,扣除每天平均工资 * 请假天数

大体设计思路:
这里写图片描述
父级类:员工 Employee.java 定义员工工资算法
子类:
1普通员工 CommonEmployee.java
2经理 Manager.java,
3董事 Director.java

实现后界面如图:
这里写图片描述
父类子类的编写没什么问题,注意尽量做好封装,属性最好用private修饰。
**注意:**仅做功能演示,编写时注意异常判断,避免空指针及数组越界错误

以下贴出代码:
首先是父类Employee

//父类 员工类
public class Employee {
    /*工号*/
    String ID;
    /*姓名*/
    String name;
    /*职位*/
    String position;
    /*假期*/
    int holiday;
    /*薪水*/
    double salary;

    //空构造函数
    public Employee(){}

    //含参数构造函数
    public Employee(String ID, String name, String position, int holiday, double salary) {
        this.ID = ID;
        this.name = name;
        this.position = position;
        this.holiday = holiday;
        this.salary = salary;
    }

    //工资计算方法
    public void sumSalary(){}

    //员工信息显示
    public void display(){
        System.out.println("ID:"+ID+",姓名:"+name+",职位:"+position+",请假天数:"+holiday+",工资:"+salary);
    }
}   

新建三个子类CommonEmployee.java;Manager.java;Diretor.java;
代码分别如下:

//普通员工,继承员工类后重写工资计算方法
public class CommonEmployee extends Employee{
    //无参构造函数
    public CommonEmployee() {
    }
    //创建有参数构造方法
    public CommonEmployee(String ID, String name, String position, int holiday, double salary) {
        //调用父类构造器
        super(ID, name, position, holiday, salary);
    }
    @Override
    public void sumSalary(){
        super.salary=super.salary+super.salary*0.1+super.salary*0.5+200-super.holiday*(super.salary/30);
    }
}

//经理,继承员工类后重写工资计算方法
public class Manager extends Employee{
    //无参构造函数
    public Manager() {
    }
    //创建有参数构造方法
    public Manager(String ID, String name, String position, int holiday, double salary) {
        //调用父类构造器
        super(ID, name, position, holiday, salary);
    }
    @Override
    public void sumSalary(){
        super.salary=super.salary+super.salary*0.2+super.salary*0.5+200-super.holiday*(super.salary/30);
    }
}

//董事,继承员工类后重写工资计算方法
public class Director extends Employee{
    //无参构造函数
    public Director() {
    }
    //创建有参数构造方法
    public Director(String ID, String name, String position, int holiday, double salary) {
        //调用父类构造器
        super(ID, name, position, holiday, salary);
    }
    @Override
    public void sumSalary(){
        super.salary=super.salary+super.salary*0.08+super.salary*0.3+2000+3000-super.holiday*(super.salary/30);
    }
}

新建测试类Test
这里实现增删改查

public class Test {
    //控制台输入
    static Scanner sc = new Scanner(System.in);
    //员工缓存数组,存储员工信息,指定最大存储100个
    static Employee[] em = new Employee[100];

    //操作入口
    public static void opt() {
        System.out.println("----     工资管理系统                  ----");
        System.out.println("-------------------------------");
        System.out.println("---        1     增加                        ---");
        System.out.println("---        2     删除                        ---");
        System.out.println("---        3     修改                        ---");
        System.out.println("---        4     查询                        ---");
        System.out.println("---        0     退出                        ---");
        System.out.println("-------------------------------");
        System.out.println("请输入你要选择的操作:");
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        switch (s) {
            case "1":
                addEmployee();
                break;
            case "2":
                delEmployee();
                break;
            case "3":
                updateEmployee();
                break;
            case "4":
                queryEmployee();
                break;
            case "0":
                System.out.println("谢谢使用");
                break;
            default:
                System.out.println("指令错误请重新输入!");
                opt();
                break;
        }
    }

    //添加员工
    public static void addEmployee() {
        System.out.println("------增加员工------");
        System.out.println("请输入相关信息:");
        System.out.print("ID:");
        String id = sc.next();
        System.out.print("姓名:");
        String name = sc.next();
        System.out.print("职务:");
        String position = sc.next();
        System.out.print("请假天数:");
        int holiday = sc.nextInt();
        System.out.print("基本工资:");
        double salary = sc.nextDouble();
        Employee a = null;
        //根据输入职工类型,新建不同实例
        switch (position) {
            case "普通员工":
                a = new CommonEmployee(id, name, position, holiday, salary);
                break;
            case "经理":
                a = new Manager(id,name,position,holiday,salary);
                break;
            case "董事长":
                a = new Director(id,name,position,holiday,salary);
                break;
        }
        //若员工类实例话成功
        if (a != null) {
            //计算该员工工资
            a.sumSalary();
            //将员工信息保存至数组中
            for (int i = 0; i < 100; i++) {
                if (em[i] == null) {
                    em[i] = a;
                    System.out.println("添加成功!");
                    em[i].display();
                    break;
                } else {
                    continue;
                }
            }
        }else{
            System.out.println("不存在此职务,请重新输入!");
            addEmployee();
        }
        opt();
    }

    //删除员工
    public static void delEmployee() {
        System.out.println("----------删除员工---------");
        System.out.println("请输入员工姓名:");
        String n = sc.next();
        for (int i = 0; i < 100; i++) {
            if (em[i] != null) {
                if (em[i].name.equals(n)) {
                    System.out.println("你要删除的是:" + em[i].toString());
                    System.out.println("你确定要删除吗?\n [Y]确定,[N]取消");
                    String s = sc.next();
                    if (s.equals("y")) {
                        em[i] = null;
                        System.out.println("删除成功!");
                        opt();
                    } else if (s.equals("n")) {
                        opt();
                    } else {
                        System.out.println("输入指令不正确,请重新输入!");
                        delEmployee();
                    }
                } else {
                    if (i != 99) {
                        continue;
                    } else {
                        System.out.println("你输入的账号不存在!请重新输入!");
                        delEmployee();
                    }

                }
            } else {
                if (i != 99) {
                    continue;
                } else {
                    System.out.println("你输入的账号不存在!请重新输入!");
                    delEmployee();
                }
            }
        }
    }

    public static void updateEmployee() {
        System.out.println("--------------修改员工资料-------------");
        System.out.println("请输入你要修改的姓名:");
        String s = sc.next();
        out: for (int i = 0; i < 100; i++) {
            if (em[i] != null) {
                if (em[i].name.equals(s)) {
                    System.out.println("你要修改的是:");
                    em[i].display();
                    System.out.println("请重新输入相关信息:");
                    System.out.print("ID:");
                    String id = sc.next();
                    System.out.print("姓名:");
                    String name = sc.next();
                    System.out.print("职务:");
                    String position = sc.next();
                    System.out.print("请假天数:");
                    int holiday = sc.nextInt();
                    System.out.print("基本工资:");
                    double salary = sc.nextDouble();
                    //若em[i]的职位与输入一致,仅修改
                    if (em[i].position.equals(position)) {
                        em[i].ID = id;
                        em[i].name = name;
                        em[i].position = position;
                        em[i].holiday = holiday;
                        em[i].salary = salary;
                        em[i].sumSalary();
                        System.out.println("修改成功!");
                        em[i].display();
                    } else {
                        Employee a = null;
                        switch (position) {
                            case "普通员工":
                                a = new CommonEmployee(id,name,position,holiday,salary);
                                break;
                            case "经理":
                                a = new Manager(id,name,position,holiday,salary);
                                break;
                            case "董事长":
                                a = new Director(id,name,position,holiday,salary);
                                break;
                            default:
                                System.out.println("不存在此职务,请重新输入!");
                                addEmployee();
                                break;
                        }
                        //保存至数组
                        if (a != null) {
                            a.sumSalary();
                            for (int j = 0; j < 100; j++) {
                                if (em[j] == null) {
                                    em[j] = a;
                                    System.out.println("修改成功!");
                                    em[j].display();
                                    break;
                                } else {
                                    continue;
                                }
                            }
                        }
                    }
                    opt();
                } else {
                    if (i != 99) {
                        continue out;
                    } else {
                        System.out.println("你输入的员工不存在!请重新输入!");
                        opt();
                    }
                }
            } else {
                if (i != 99) {
                    continue out;
                } else {
                    System.out.println("你输入的员工不存在!请重新输入!");
                    opt();
                }
            }
        }
    }

    public static void queryEmployee() {
        System.out.println("--------------所有员工信息---------------");
        for (int i = 0; i < 100; i++) {
            if (em[i] != null) {
                em[i].display();
            }
        }
        opt();
    }

    public static void main(String[] args) {
    	//操作入口
        Test.opt();
    }
}

点个赞再走呗小伙👨‍🦳

  • 35
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的,以下是一个简单的学生系统示例: ```java public class StudentSystem { private Student[] students; // 一维数组存储学生对象 private int numOfStudents; // 学生数量 public StudentSystem(int size) { students = new Student[size]; numOfStudents = 0; } public void addStudent(Student student) { if (numOfStudents < students.length) { students[numOfStudents] = student; numOfStudents++; } else { System.out.println("学生数量已达上限,无法添加!"); } } public void removeStudent(int index) { if (index < 0 || index >= numOfStudents) { System.out.println("无法删除该学生,索引越界!"); } else { for (int i = index; i < numOfStudents - 1; i++) { students[i] = students[i + 1]; } numOfStudents--; } } public void displayStudents() { for (int i = 0; i < numOfStudents; i++) { System.out.println("学生" + (i + 1) + "信息:"); System.out.println(students[i]); } } } ``` 上述代码中,我们定义了一个 `StudentSystem` 类,其中包含一个一维数组 `students` 存储学生对象,以及一个整型变量 `numOfStudents` 记录学生数量。我们通过构造方法 `public StudentSystem(int size)` 初始化数组大小,再通过 `public void addStudent(Student student)` 方法向数组中添加学生对象,通过 `public void removeStudent(int index)` 方法删除指定索引的学生对象,通过 `public void displayStudents()` 方法打印所有学生的信息。 接下来,我们还需要定义一个 `Student` 类来存储每个学生的信息: ```java public class Student { private String name; // 姓名 private int age; // 年龄 private String gender; // 性别 private String id; // 学号 public Student(String name, int age, String gender, String id) { this.name = name; this.age = age; this.gender = gender; this.id = id; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } public String getId() { return id; } public String toString() { return "姓名:" + name + "\n年龄:" + age + "\n性别:" + gender + "\n学号:" + id + "\n"; } } ``` 上述代码中,我们定义了一个 `Student` 类,其中包含四个私有属性 `name`、`age`、`gender`、`id` 分别存储学生的姓名、年龄、性别和学号。通过构造方法 `public Student(String name, int age, String gender, String id)` 初始化这些属性值,以及通过 getter 方法 `public String getName()、public int getAge()、public String getGender()、public String getId()` 获取属性值。最后,我们重写了 `toString()` 方法,用于打印学生对象的信息。 下面是一个简单的测试程序: ```java public class TestStudentSystem { public static void main(String[] args) { StudentSystem system = new StudentSystem(3); // 创建学生系统对象,最多存储三个学生 system.addStudent(new Student("张三", 20, "男", "001")); system.addStudent(new Student("李四", 21, "女", "002")); system.addStudent(new Student("王五", 22, "男", "003")); system.displayStudents(); // 打印所有学生信息 system.removeStudent(1); // 删除索引为1的学生 system.displayStudents(); // 再次打印所有学生信息 } } ``` 上述程序首先创建了一个 `StudentSystem` 对象,最多存储三个学生。接着,我们通过 `addStudent(new Student("张三", 20, "男", "001"))` 方法向学生系统中添加了三个学生对象。然后,我们通过 `displayStudents()` 方法打印了所有学生的信息。接着,我们通过 `removeStudent(1)` 方法删除了索引为1的学生对象,最后再次通过 `displayStudents()` 方法打印了所有学生的信息,可以看到索引为1的学生已被删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值