嘻嘻!又来更新博客啦!我会在代码中做详细注释给大家。这里先说下这第一种方法的思路:主题思路,是创建一个二维数组用来存数。如:a[?][5],因为二维数组的第二维是固定的5个数,所以可以确定。第一维可以根据大家要存多少数来自行决定!然后根据这个二维数组对数据进行增删改查。
package 员工管理系统;
public abstract class Employee { //创建员工父类
String ID;
String name;
String position;
int holiday;
int salary;
abstract double sumSalary(int salary,int holiday);//因为每个不同岗位的员工的工资结算方法不同,所以定义为抽象方法,自然员工父类也变成抽象类
//abstract double display();
}
package 员工管理系统;
public class CommonEmployee extends Employee { //创建普通员工类,里面实现普通员工的工资结算方法
@Override
double sumSalary(int salary, int holiday) {
// TODO Auto-generated method stub
return (salary+salary*0.1+salary*0.5+200)-(salary+salary*0.1+salary*0.5+200)/30*holiday;
}
}
package 员工管理系统;
public class Director extends Employee {// <pre name="code" class="java">创建经理员工类,里面实现普通员工的工资结算方法
@Overridedouble sumSalary(int salary, int holiday) {// TODO Auto-generated method stubreturn (salary+salary*0.08+salary*0.3+2000+3000)-(salary+salary*0.08+salary*0.3+2000+3000)/30*holiday;}}
package 员工管理系统;
public class Manager extends Employee {//<pre name="code" class="java">创建董事长员工类,里面实现普通员工的工资结算方法
@Overridedouble sumSalary(int salary, int holiday) {// TODO Auto-generated method stubreturn (salary+salary*0.2+salary*0.5+500)-(salary+salary*0.2+salary*0.5+500)/30*holiday;}}
package 员工管理系统;
import java.util.Scanner;
public class TestEmd {
public static void main(String[] args) {
// TODO Auto-generated method stub
CommonEmployee common=new CommonEmployee();//先得到各个员工类的对象,下面好进行操作
Manager manager=new Manager();
Director director=new Director();
//Fun fun=new Fun();
String a[][]=new String[10][5]; //这里就是我定义的二维数组,用来存放数值
String b[][]=new String[10][5];
int arr[]=new int[2];
int k=-1;
double o=0;
String q[]={"编号:","姓名:","职务:","请假天数:","工资:"};
d:for(int s=1;s>0;){
p:while(true){
int v=0;
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);
int s0=sc.nextInt();
switch(s0){ //这里判断我用的是switch方法,不过本人还是喜欢用if判断,各人习惯不同吧。
case 1:k++;
arr=add(a,k);
for(int i=0;i<=k;i++){
// int x=(Integer.parseInt(b[i][4].trim()));
// int x = Integer.valueOf(b[i][4]).intValue();
//int x1=(Integer.parseInt(b[i][3]));
if(a[i][2].equals("普通员工")){
o=common.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
if(a[i][2].equals("经理")){
o=manager.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
if(a[i][2].equals("董事长")){
o=director.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
a[i][4]=" "+o;
}
System.out.println("增加数据成功");
//for(int i=0;i<=k;i++){
for(int j=0;j<5;j++){
System.out.print(q[j]+a[k][j]+" ");
//}
}
break p;
case 2: v=delete(q, a, k);
if(v==0)
System.out.println("无信息");
else
k--;
break p;
case 3: v=amend(q, a,k);
/*arr=add(a,k);
for(int i=0;i<=k;i++){
if(a[i][2].equals("普通员工")){
o=common.sumSalary(arr[0],arr[1]); 这里就是把输入的基本工资,通过调用各个对象特有的工资结算方法,来算出然后覆盖到原先基本工资suo
o=Math.round(o);
}
if(a[i][2].equals("经理")){
o=manager.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
if(a[i][2].equals("董事长")){
o=director.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
a[i][4]=" "+o;
}
System.out.println("修改成功");*/
if(v==0)
System.out.println("没有找到匹配项");//这里也是设计一个变量的形式,来判断输出是否有信息
break p;
case 4:inquire(q, a, k);
break p;
case 0:System.out.println("退出系统");
break d;
}
}
System.out.println();
}
}
public static int[] add(String a[][],int t){ //实现增加方法
int arr[]=new int[2];
System.out.println("请输入员工编号");
Scanner sc1=new Scanner(System.in);
String s1=sc1.next();
System.out.println("请输入员工姓名");
String s2=sc1.next();
System.out.println("请输入员工职务(普通员工,经理,董事长)");
String s3=sc1.next();
System.out.println("请输入员工请假天数");
int s4=sc1.nextInt();
System.out.println("请输入员工基本工资");
int s5=sc1.nextInt();
String s6=""+s5;
String s7=""+s4;
arr[0]=s5;
arr[1]=s4;
{
a[t][0]=s1; //我前面是把k传给了t,初值为-1,所以我在调用前k++了,大家可以翻上去看看哦。
a[t][1]=s2; //这里就实现a[0][?]赋值
a[t][2]=s3;
a[t][3]=s7;
a[t][4]=s6;
}
return arr;
}
public static int delete(String p[],String a[][],int t){
int v=0;
System.out.println("请输入要删除的员工姓名");
Scanner sc1 = new Scanner(System.in);
String name = sc1.next();
int i; //因为我在函数中for循环太多次,不好判断是否满足if条件,所以这里设个变量,来记录,如果变量的值改变,说明是数组中是有我要删除的值,否则就可以待会在main中输出无要删除的信息。
for(i=0;i<=t;i++){
if(a[i][1].equals(name)){ /要删除的话,我要先查找里面是否有要删除的元素,所以这里做了个if判断
for(int r=0;r<5;r++){
System.out.print(p[r]+a[i][r]+" ");
}
for(int i1=0;i1<=t;i1++){
for(int j=0;j<5;j++){
if(i1==i&&i<t){
v++;
a[i1][j]=a[i1+1][j];//这里是删除的核心代码,数组删除就是要把该位删除,后面下标往前移一位。这里我先判断下,要删除的元素,是否是数组中的最后一个元素,如果是的话,就可以直接删除,不需要后面的进行移位,否则进行删除再移位。
a[i1+1][j]=null;
}
if(i1==i&&i==t)
v++;
a[i][j]=null;
}
}
System.out.println("删除成功");
break;
}
//if(!(a[i][1].equals(name))){
// break;
//}
}
//System.out.println();
return v;
}
public static int amend(String p[],String a[][],int t){ //这里是实现修改,我偷了下懒,修改直接调用的删除,增加方法,来达到修改的目的!这难道就是传说中的懒人的智慧吗?哈哈哈
int m=0;
CommonEmployee common=new CommonEmployee();
Manager manager=new Manager();
Director director=new Director();
System.out.println("请输入要修改的姓名");
Scanner sc2 = new Scanner(System.in);
String name1 = sc2.next();
int i;
for(i=0;i<=t;i++){
if(a[i][1].equals(name1)){
for(int r=0;r<5;r++){
System.out.print(p[r]+a[i][r]+" ");
}
for(int i1=0;i1<=t;i1++){
for(int j=0;j<5;j++){
if(i1==i&&i<t){
/*for(int i2=0;i2<=i1;i2++){
a[i2][]
}*/
m++;
a[i1][j]=a[i1+1][j];
a[i1+1][j]=null;
}
if(i1==i&&i==t)
m++;
a[i][j]=null;
//b[i1][j]=a[i1][j];
//System.out.println("删除成功");
}
}
System.out.println();
System.out.println("请重新输入信息");
double o=0;
int arr[]=new int[2];
add(a,t);
m++;
for(int i1=0;i1<=t;i1++){
if(a[i][2].equals("普通员工")){
o=common.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
if(a[i][2].equals("经理")){
o=manager.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
if(a[i][2].equals("董事长")){
o=director.sumSalary(arr[0],arr[1]);
o=Math.round(o);
}
a[i][4]=" "+o;
}
System.out.println("修改成功");
}
}
//System.out.println("修改成功");
return m;
}
public static void inquire(String p[],String a[][],int t){ //查询很简单,可以全部遍历一遍,全部输出查询,也可以像我这样,先取得要查询的name
int y=0; // 然后和a[?][1]进行比较,因为第二维的下标1的位置就是存的保存后的各个数据的name
System.out.println("请输入要查询的名字");
Scanner sc3 = new Scanner(System.in);
String name1 = sc3.next();
for(int i=0;i<=t;i++){
if(a[i][1].equals(name1)){
for(int r=0;r<5;r++){
y++;
System.out.print(p[r]+a[i][r]+" ");
}
System.out.println();
}
}
if(y==0){
System.out.println("无信息");
}
}
}