三种方法:一个简易的员工管理系统(一)

本文介绍了一个员工管理系统,包括员工类的设计、工资结算方法和数据管理功能。详细解释了如何使用抽象方法、类继承以及二维数组来实现员工信息的存储和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嘻嘻!又来更新博客啦!我会在代码中做详细注释给大家。这里先说下这第一种方法的思路:主题思路,是创建一个二维数组用来存数。如: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("无信息");
		}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值