Java作業 題目:16版.真實員工數統計


題目:16版.真實員工數統計

題干:

1、實驗要求

    本實驗要求:通過給定的員工列表,顯示工號不重復的員工信息。

    1-1. 業務介紹:

        1-1.1. 本實驗給定一組員工數據,要求將工號不重復的員工數據輸出到控制台。

                1)本實驗提供3個員工的完整數據(工號、姓名、部門、薪水)。

                2)要求通過重寫Object類的equals方法,判斷工號的重復性。

                3)要求通過重寫Object類的toString方法,輸出員工數據。

    1-2. 創建工程並配置環境:

        1-2.1. 工程名:SE_JAVA_EXP_E030。

        1-2.2. 創建包,取名:cn.campsg.java.experiment。

    1-3. 創建員工實體類及相關屬性:

        1-3.1. 限制1. 在包cn.campsg.java.experiment下創建員工實體類:Employee。

        1-3.2. 分別為Employee實體類定義如下屬性:

                1)員工工號:字符串類型。

                2)員工姓名:字符串類型。

                3)員工薪水:浮點類型。

                4)隸屬部門:字符串類型。

        1-3.3. 為Employee類中的各屬性分別創建getter和setter方法。

    1-4. 重寫equals函數:

        1-4.1. 在Employee類中,重寫父類Object的equals函數。

        1-4.2. 在equals函數中,判斷當前員工對象與傳入的員工對象之間工號是否一致。

        1-4.3. 如果一致則表示員工數據相同,返回true,否則表示數據不同,返回false。

        1-4.4. 說明1:equals函數用於判斷兩個相同類型對象的數據一致性。

        1-4.5. 說明2:雙等於(==)和equals不同,用於判斷兩個對象的地址一致性。

    1-5. 重寫toString函數:

        1-5.1. 在Employee類中,重寫父類Object的toString函數。

        1-5.2. 將Employee類中所有屬性組織成以下格式並返回:

        "工號: " + 工號 + ",姓名: " + 姓名  + ",部門: " + 部門 + ",薪水: " + 薪水

    1-6. 編寫工號判重函數:

        1-6.1. 限制1. 在包cn.campsg.java.experiment下創建主類:MainClass。

        1-6.2. 限制2. 在MainClass中,創建判重函數:isRepeat。

        1-6.3. 該函數用於判斷多個員工之間工號是否一致。

    1-7. 顯示有效員工信息:

        1-7.1. 在主入口main函數中,通過訪問isRepeat獲取工號不重復的員工數據。

        1-7.2. 通過調用員工實體的toString函數,向控制台輸出員工數據。

        1-7.3. 最后,在控制台上顯示:"本公司有效員工數: " + 不重復的員工數。

2、實現思路

    2-1. 按實驗要求創建工程並配置環境。

    2-2. 創建員工實體類及相關屬性:

        2-2.1. 在包cn.campsg.java.experiment下創建員工類:Employee。

        2-2.2. 創建成員變量屬性:

                1)員工工號:字符串類型 no。

                2)員工姓名:字符串類型 name。

                3)員工薪水:浮點類型 salary。

                4)隸屬部門:字符串類型 department。

        2-2.3. 為成員變量添加setter和getter方法。

        2-2.4. 創建Employee類的0參構造器。

        2-2.5. 創建Employee類的2參構造器,屬性初始化如下:

                1)員工工號:no = 構造體no參數。

                2)員工姓名:name = 構造體name參數。

                3)員工薪水:salary = 構造體salary參數。

                4)隸屬部門:department = 構造體department參數。

    2-3. 重寫equals函數:

        2-3.1. 在Employee內,重寫父類Object的equals方法,形式如下:

 

  + 提示

  /**

  * 判斷本對象與其他Employee對象的業務數據是否一致

  * @param o 其他Employee對象

  * @return true:業務數據一致,false:業務數據不一致

  */

  @Override

  public boolean equals(Object o) {

  }

 

  1) 重寫父類的方法,可通過Eclipse中的自動化工具實現:

  單擊右鍵,選擇Source à Override/Implement Methods

  勾選equals函數即可簡便的實現重寫父類方法

        2-3.2. 首先,判斷傳入的對象是否為空,如果為空,直接返回false。

        2-3.3. 其次,判斷傳入的對象是否是Employee類的實例,如果不是則返回false。

                1) 提示:通過 instanceof 關鍵字判斷傳入的參數是否為Employee。

        2-3.4. 結束判斷后,將傳入的對象強制類型轉換為Employee對象。

        2-3.5. 最后,判斷傳入對象的工號和當前員工對象的工號是否相同。

                1) 若不相同,則返回false。

                2) 若相同,則返回true。

 

  + 提示

  //傳入的對象不是Employee類型

  if(!(o instanceof Employee))

      return false;

 

  Employee emp = (Employee)o;

 

  //員工的工號不一致,則認定兩個員工的業務數據不一致

  if(!emp.getNo().equals(this.getNo()))

      return false;

    2-4. 重寫toString函數:

        2-4.1. 在Employee內,重寫父類Object的toString方法。

        2-4.2. 新建StringBuffer類型的對象,buffer。

                1) 技術常識:StringBuffer比String類在字符串拼接時效率更高。

        2-4.3. 利用StringBuffer類的append方法拼接員工類的屬性,如以下形式:

        "工號: " + 工號 + ",姓名: " + 姓名  + ",部門: " + 部門 + ",薪水: " + 薪水

        2-4.4. 返回拼接好的字符串:

                1)提示:通過調用buffer對象的toString方法返回拼接結果。

    2-5. 編寫工號判重函數:

        2-5.1. 在包cn.campsg.java.experiment下創建主類:MainClass。

        2-5.2. 在MainClass內定義靜態的isRepeat函數,形式如下:

 

  + 提示

  /**

  * 判斷員工工號是否重復

   * @param index 當前員工的數組索引

   * @param employees 員工測試數據數組

   * @return true:重復,false:不重復

   */

  public static boolean isRepeat(int index,Employee[] employees) {

  }

        2-5.3. 從employees數組中取出待判定員工,索引值 = index的員工對象。

        2-5.4. 利用循環判斷,待判定員工對象與數組中其他成員的工號是否一致:

                1)循環初始值:0

                2)循環邊界:員工對象數組的長度。

        2-5.5. 首先,確保待判定員工對象只能與數組中的其他成員進行工號對比:

 

  + 提示

  if(emp == employees[i])

  continue;

  1) 雙等於(==)用於判斷對象地址是否相同。

  2) 如果對象地址相同,表明待判定員工對象與數組中的成員為同一對象,無需判斷

        2-5.6. 其次,調用待判定員工對象的equals方法,判斷工號是否重復。

                1)如果工號重復,對外返回true。

                2)如果工號不重復,對外返回false。

    2-6. 顯示有效員工信息:

        2-6.1. 在入口函數main中,創建員工對象數組,形式如下:

                1)員工數組長度:3

編號

no屬性

name屬性

Salary屬性

Department屬性

1

1001

張一

5000.0f

銷售部

2

1002

王二

6500.0f

銷售部

3

1001

Alan

15000.0f

研發部

 

  + 提示

  Employee[] employees = new Employee[3];

  employees[0] = new Employee("1001","張一","銷售部",5000.0f);

        2-6.2. 利用for循環遍歷員工數組,顯示工號不重復的員工信息:

                1)循環初始值:0

                2)循環邊界:員工對象數組的長度。

        2-6.3. 調用isRepeat,判斷數組中的每個成員與其他數組成員的工號是否有重復:

                1)isRepeat方法的1參,循環變量。

                2)isRepeat方法的2參,員工數組。

        2-6.4. 打印工號不重復的員工信息:

                1)如果isRepeat返回false,表示該員工在數組中無重復信息。

                2)通過調用員工實體的toString函數,向控制台輸出員工數據。

                注意:通過控制台輸出語句輸出員工信息時,toString會被自動調用。

        2-6.5. 打印有效員工數:

                1)在判重循環外定義計數變量:count。

                2)在判重循環內,如果isRepeat返回false,則count加1。

                3)循環結束后,向控制台輸出:"本公司有效員工數: "  + count。

 

package cn.campsg.java.experiment;

public class Employee {//2 2.1
    String no;
    String name;
    float salary;
    String department;//2 2.2
    public String getNo() {    return no;}
    public void setNo(String no) {this.no = no;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public float getSalary() {return salary;}
    public void setSalary(float salary) {this.salary = salary;}
    public String getDepartment() {    return department;}
    public void setDepartment(String department) {    this.department = department;}//2 2/3
    
    public Employee() {    }//2-2.4無參構造
    public Employee(String no,String name,    String department,float salary) {
        this.no = no;
        this.name = name;
        this.salary = salary;
        this.department = department;
    }//2-2.5 4參構造器
    //重寫equals
    @Override
    public boolean equals(Object obj) {
        //首先,判斷傳入的對象是否為空,如果為空,直接返回false。
        if(obj == null) {
            return false;
        }
        if(!(obj instanceof Employee))
              return false;
          Employee emp = (Employee)obj;
          //員工的工號不一致,則認定兩個員工的業務數據不一致
          if(!emp.getNo().equals(this.getNo()))
              return false;
            return true;
    }
    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer("工號");
        buffer.append(no);
        buffer.append(",姓名");
        buffer.append(name);
        buffer.append(",部門");
        buffer.append(department);
        buffer.append(",薪水");
        buffer.append(salary);
        return buffer.toString();
    }
    
    
    
}
Employee
 1 package cn.campsg.java.experiment;
 2 
 3 public class MainClass {
 4     public static boolean isRepeat(int index,Employee[] employees) {
 5         Employee emp = employees[index];
 6         for(int i = 0;i < employees.length; ++i) {
 7             if(emp == employees[i]) {
 8                 continue;
 9             }
10             if(emp.equals(employees[i]) == true) {
11                 return true;
12             }
13         }
14         return false;
15     }
16     public static void main(String argv[]) {
17         Employee[] employees = new Employee[3];
18         employees[0] = new Employee("1001","張一","銷售部",5000.0f);
19         employees[1] = new Employee("1002","王二","銷售部",6500.0f);
20         employees[2] = new Employee("1001","Alan","研發部",15000.0f);
21     
22         int count = 0;
23         
24         for(int i=0;i<employees.length;++i){
25             
26             if(isRepeat(i,employees)==false)
27             {
28                 count++;
29                 System.out.println(employees[i].toString());
30             }
31     }
32     System.out.println("本公司有效員工數: "  + count);
33 }
34 }
MainClass

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM