本系统主要练习到的相关内容:
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();
}
}
点个赞再走呗小伙👨🦳