Board logo

標題: C# 7 604 薪資總計 [打印本頁]

作者: may    時間: 2024-1-8 22:49     標題: C# 7 604 薪資總計

TQC+ 物件導向程式語言
最新一次更新時間:2024-01-05 17:49:38

1. 題目說明:
請新增一個主控台應用程式,加入C:\ANS.CSF\CS06資料夾中的CSD06.cs進行編寫。依下列題意進行作答:計算兼職及全職薪資總計,使輸出值符合題意要求。檔案名稱請另存新檔為CSA06.cs,儲存於C:\ANS.CSF\CS06資料夾,再進行評分。
請使用正斜線(/)作為檔案路徑的分隔符號。

2. 設計說明:
專案已內含名為clerk的抽象類別,類別內含name,rate及hours等屬性,分別代表姓名,每小時標準工資及小時數,salary方法功能是計算薪資。
專案已繼承及實作clerk類別,建立PartTime及FullTime,代表兼職及全職店員,兼職員工的薪資計算公式是「每小時標準工資 × 工作時數」;全職員工的薪資計算公式是「8 × 每小時標準工資+ ((工作時數- 8) × 每小時標準工資 × 0.9)」。
請在clerk抽象類別新增isManager屬性,型態為bool,表示是否為店長,若是店長則isManager屬性值為true。
請更改FullTime類別的salary方法,若是店長,基本薪資計算方式同全職員工,再將其計算的基本薪資乘以1.2倍,薪資計算公式是「(8 × 每小時標準工資+ ((工作時數- 8) × 每小時標準工資 × 0.9)) × 1.2」。
在主程式中建立程式,讀取專案提供的read.txt,共七位員工資料,三個欄位分別代表:全、兼職或店長(m為店長f為全職p為兼職)、姓名及工時數。再接收使用者輸入以單一個半形空格隔開的兩個數字,分別代表兼職及全職的每小時標準工資,逐一計算每人薪資(salary方法),再予以加總。
輸出格式為【PartTime:{兼職工資},FullTime:{全職工資},Salary:{薪資總計}】,將所計算的資料代入輸出字串,輸出字串中無任何空格;如:【PartTime:150,FullTime:200,Salary:208872】。
* 提示:{名稱}用來表示該名稱的變數,如:{兼職工資}=200。
若輸入不在指定範圍的資料,請輸出【error】。

3. 輸入輸出:
輸入說明
兼職每小時工資、全職每小時工資

輸出說明
薪資總計(輸出最後一行後不自動換行)

範例輸入1
150 200
範例輸出1
PartTime:150,FullTime:200,Salary:208872

範例輸入2
200 250
範例輸出2
PartTime:200,FullTime:250,Salary:266590

範例輸入3
120 100 90
範例輸出3
error

4. 評分項目:
(1) 符合設計說明輸出正確格式        配分20
作者: may    時間: 2024-1-9 09:51

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace CSA06
  8. {
  9.     class CSA06
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             try
  14.             {
  15.                 string[] tokens = Console.ReadLine().Split();
  16.                 if (tokens.Length != 2)
  17.                 {
  18.                     throw new ArgumentException();
  19.                 }
  20.                 int pRate = int.Parse(tokens[0]);
  21.                 int fRate = int.Parse(tokens[1]);
  22.                 double salaryTotal = calculateTotalSalary(pRate, fRate);
  23.                 Console.Write("PartTime:{0},FullTime:{1},Salary:{2}",
  24.                     pRate, fRate, salaryTotal);
  25.             }
  26.             catch
  27.             {
  28.                 Console.Write("error");
  29.             }
  30.             Console.ReadKey();
  31.         }

  32.         static double calculateTotalSalary(int pRate, int fRate)
  33.         {
  34.             string[] lines = System.IO.File.ReadAllLines("read.txt");
  35.             string[] tokens;
  36.             char workType;
  37.             string name;
  38.             int hours;
  39.             clerk clerk = null;
  40.             double salaryTotal = 0;

  41.             foreach (string line in lines)
  42.             {
  43.                 tokens = line.Split(',');
  44.                 workType = tokens[0][0];
  45.                 name = tokens[1];
  46.                 hours = int.Parse(tokens[2]);
  47.                 switch (workType)
  48.                 {
  49.                     case 'm':
  50.                         clerk = new FullTime(name, fRate, hours);
  51.                         clerk.isManager = true;
  52.                         break;
  53.                     case 'f':
  54.                         clerk = new FullTime(name, fRate, hours);
  55.                         clerk.isManager = false;
  56.                         break;
  57.                     case 'p':
  58.                         clerk = new PartTime(name, pRate, hours);
  59.                         break;
  60.                 }
  61.                 salaryTotal += clerk.salary();
  62.                 //Console.WriteLine("{0} => {1}", line, clerk.salary());
  63.             }
  64.             return salaryTotal;
  65.         }
  66.     }

  67.     abstract class clerk
  68.     {
  69.         public String name = "";
  70.         public int rate = 0;
  71.         public int hours = 0;
  72.         public bool isManager = false;

  73.         public clerk(String n, int r, int t)
  74.         {
  75.             name = n;
  76.             rate = r;
  77.             hours = t;
  78.         }
  79.         public abstract double salary();
  80.     }
  81.     class PartTime : clerk
  82.     {
  83.         public PartTime(String n, int r, int t) : base(n, r, t)
  84.         {

  85.         }

  86.         public override double salary()
  87.         {
  88.             return hours * rate;
  89.         }

  90.     }
  91.     class FullTime : clerk
  92.     {
  93.         public FullTime(String n, int r, int t) : base(n, r, t)
  94.         {

  95.         }

  96.         public override double salary()
  97.         {
  98.             double salary = 8 * rate + ((hours - 8) * rate * 0.9);
  99.             if (this.isManager)
  100.             {
  101.                 salary *= 1.2;
  102.             }
  103.             return salary;
  104.         }

  105.     }
  106. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://seed.istak.org.tw/) Powered by Discuz! 7.2