员工管理系统java版
作者:李广亮 发布时间:2022-05-04 23:33:18
标签:java,员工管理系统
员工管理系统要求如下:
通过面向对象的编程思想,实现员工信息的增删改查,存储结构为数组。限定数组长度为100。
实现页面:
添加员工
查找员工
修改员工
删除员工、退出
工程目录结构:
1.Employee基类
/**
* @author 李广亮
*
*/
public class Employee {
/**
* 成员属性:ID、姓名、职务、请假天数、基本工资
*/
private String ID;
private String name;
private String job;
private int holiday;
private double salary;
/**
* 计算工资
*/
public double sunSalary(double salary, int holiday) {
return salary - (salary/30) * holiday;
}
/**
* get和set方法
*/
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public int getHoliday() {
return holiday;
}
public void setHoliday(int holiday) {
this.holiday = holiday;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
/**
* toString()方法
*/
public String toString() {
return "编号:" + ID + ", 姓名:" + name + ", 职务" + job
+ ", 请假天数:" + holiday + ", 工资:" + salary;
}
}
2.普通员工类CommonEmployee
public class CommonEmployee extends Employee {
/**
* 普通员工工资
* 在基本工资的基础上增加10%的工作餐,50%的岗位补助,200元住房补助
* @param 工资
* @param 请假天数
*/
@Override
public double sunSalary(double salary, int holiday) {
double sum = salary + salary*0.1 + salary*0.5 + 200;
return sum - sum/30 * holiday;
}
}
3.经理ManagerEmployee
public class ManagerEmployee extends Employee {
/**
* 经理工资
* 在基本工资的基础上增加20%的工作餐,50%的岗位补助,500元住房补助
* @param 工资
* @param 请假天数
*/
@Override
public double sunSalary(double salary, int holiday) {
double sum = salary + salary*0.2 + salary*0.5 + 500;
return sum - sum/30 * holiday;
}
}
4.懂事DirectorEmployee
public class ManagerEmployee extends Employee {
/**
* 经理工资
* 在基本工资的基础上增加20%的工作餐,50%的岗位补助,500元住房补助
* @param 工资
* @param 请假天数
*/
@Override
public double sunSalary(double salary, int holiday) {
double sum = salary + salary*0.2 + salary*0.5 + 500;
return sum - sum/30 * holiday;
}
}
5.业务逻辑类TestEMD
/**
* @author 李广亮
*
*/
public class TestEMD {
/**
* len代表数组的当前下标
*/
static int len = -1;
static Employee[] emp = new Employee[100];
static Scanner sc = new Scanner(System.in);
/**
* 增加新雇员
*/
public void addEmployee() {
Employee em = null;
System.out.println("---增加员工---");
System.out.print("请输入员工编号:");
String id = sc.next();
System.out.print("请输入员工姓名:");
String name = sc.next();
System.out.print("请输入员工职务(员工、经理、懂事):");
String job = sc.next();
System.out.print("请输入员工请假天数:");
int holiday = sc.nextInt();
System.out.print("请输入员工基本工资:");
double salary = sc.nextDouble();
//在此作一下逻辑判断,根据job的不同,创建不同的Employee子类
if(job.equals("员工")) {
em = new CommonEmployee();
} else if(job.equals("经理")) {
em = new ManagerEmployee();
} else if(job.equals("懂事")) {
em = new DirectorEmployee();
} else {
System.out.println("输入不正确!");
}
em.setID(id);
em.setName(name);
em.setJob(job);
em.setHoliday(holiday);
em.setSalary(salary);
//len先加1后使用,变为emp[0]
emp[++len] = em;
printEmployee(emp[len]);
System.out.println("添加成功!");
}
/**
* 删除员工
*/
public void deleteEmployee() {
System.out.println("------删除员工------");
System.out.println("---请输入员工姓名:---");
//设置一个boolean类型的flg标志,若查找不到则为false
boolean flg = false;
String name = sc.next();
for(int i=0; i<=len; i++) {
//若查找成功,则把emp[i]数组后面的指针往前移一位,覆盖掉当前的指向对象
if(emp[i].getName().equals(name)) {
printEmployee(emp[i]);
for(int j=i; j<=len; j++) {
emp[j] = emp[j+1];
}
//前移后,最后一位置空,len--
emp[len] = null;
len--;
System.out.println("删除成功!");
flg = true;
break;
}
}
if(!flg) {
System.out.println("查无此人,请重新输入:");
deleteEmployee();
}
}
/**
* 修改雇员信息
* @param args
* @return
*/
public void updateEmployee() {
System.out.println("------修改员工------");
System.out.println("---请输入员工姓名:---");
//设置一个boolean类型的flg标志,若查找不到则为false
boolean flg = false;
String name = sc.next();
for(int i=0; i<=len; i++) {
if(emp[i].getName().equals(name)) {
printEmployee(emp[i]);
System.out.println("---请按照提示输入修改信息---");
System.out.print("请输入员工编号:");
emp[i].setID(sc.next());
System.out.print("请输入员工姓名:");
emp[i].setName(sc.next());
System.out.print("请输入员工职务(员工、经理、懂事):");
emp[i].setJob(sc.next());
System.out.print("请输入员工请假天数:");
emp[i].setHoliday(sc.nextInt());
System.out.print("请输入员工基本工资:");
emp[i].setSalary(sc.nextDouble());
//修改完成后打印一下
printEmployee(emp[i]);
System.out.println("修改成功!");
flg = true;
break;
}
}
if(!flg) {
System.out.println("查无此人,请重新输入:");
updateEmployee();
}
}
/**
* 根据姓名查找雇员信息
* @param args
*/
public void findEmployee() {
System.out.println("------查找员工------");
System.out.println("---请输入员工姓名:---");
//设置一个boolean类型的flg标志,若查找不到则为false
boolean flg = false;
String name = sc.next();
for( int i=0; i<=len; i++) {
if(emp[i].getName().equals(name)) {
printEmployee(emp[i]);
System.out.println("查找成功!");
flg = true;
break;
}
}
if(!flg) {
System.out.println("查无此人,请重新输入:");
findEmployee();
}
}
/**
* 打印雇员信息
* @param args
*/
public void printEmployee(Employee em) {
System.out.print(" 编号: " + em.getID());
System.out.print(" 姓名: " + em.getName());
System.out.print(" 职务: " + em.getJob());
System.out.print(" 请假天数 : " + em.getHoliday());
//参数:1.基本工资 2.请假天数
double sum = em.sunSalary(em.getSalary(), em.getHoliday());
System.out.println(" 工资:" + sum);
}
public static void main(String[] args) {
TestEMD te = new TestEMD();
//开始界面
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("|----------------|");
//业务选择
label : while(true) {
System.out.println("请选择业务:");
int select = sc.nextInt();
switch (select) {
case 1: //添加新雇员
te.addEmployee();
break;
case 2: //删除雇员
te.deleteEmployee();
break;
case 3: //修改雇员信息
te.updateEmployee();
break;
case 4: //根据姓名查找雇员信息
te.findEmployee();
break;
case 0: //退出
System.out.println("退出成功!");
break label;
default:
System.out.println("您输入的数字不正确!");
break;
}
}
}
}
来源:http://blog.csdn.net/liguangliang_bzu/article/details/48198339


猜你喜欢
- 在使用C#进行相关编程的时候,有时候我们需要获取系统相关的进程信息。那么在C#中如何获取系统的所有进程那?下面请跟小编一起来操作。1、首先新
- 昨天使用mybatis-plus。使用自动填充后发现了两个问题。一个是填充数据为null,一个是当使用了mybatis-plus的乐观锁,自
- package tao.cs;import java.io.IOException;import org.ksoap2.SoapEnvelo
- engine的实现结构elasticsearch对于索引中的数据操作如读写get等接口都封装在engine中,同时engine还封装了索引的
- 本文实例为大家分享了Unity3D实现攻击范围检测的具体代码,供大家参考,具体内容如下一、扇形攻击范围检测using UnityEngine
- 前言为什么用动静态库我们在实际开发中,经常要使用别人已经实现好的功能,这是为了开发效率和鲁棒性(健壮性);因为那些功能都是顶尖的工程师已经写
- 首先,我们需要增加用户对该脚本的执行权限,即 String cmdstring = "chmod a+x test.sh
- 本文实例讲述了Java Swing组件编程之JTable表格用法。分享给大家供大家参考,具体如下:表格是GUI编程中使用较多,但也是最麻烦的
- 参考链接亲测试以下版本成功激活附激活教程。idea下载链接(对应版本号下载):https://www.jetbrains.com/idea/
- 1.动态绑定机制java的动态绑定机制非常重要实例A我们来看一个实例:阅读上面的代码,请说明下面的程序将输出什么结果:程序将会输出40和30
- /*冒泡排序:双层循环1.外层循环:控制排序轮数,排序数组长度减1(最后一次循环只剩下一个元素,不需要比较,同时数组已完成排序。2.内层循环
- 本文实例讲述了C#实现获取鼠标句柄的方法,分享给大家供大家参考。具体实现方法如下:一、调用user32.dll(1)引用using Syst
- 一、利用word生成一个文档转成pdf说明:转换成pdf格式二、Abobe Acrobat DC图解利用Abobe Acrobat DC打开
- 目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.Regular
- 添加maven依赖<?xml version="1.0" encoding="UTF-8"?&
- JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写法如下:// 方法一:函数声明function foo()
- String的字符串是不可变的,StringBuffer和StringBuilder是可变的String:是字符常量,适用于少量的字符串操作
- 先准备好一个新闻实体类package com.zb.fragmentbestpractice/** * title:表示新闻的实体类 * c
- 这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表。循环下载。下
- 前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据