Board logo

標題: C# 7 609 員工差假介面設計 [打印本頁]

作者: may    時間: 2024-1-8 22:56     標題: C# 7 609 員工差假介面設計

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

1. 題目說明:
請新增一個主控台應用程式,加入C:\ANS.CSF\CS06資料夾中的CSD06.cs進行編寫。依下列題意進行作答:定義經理及店員員工基本資料類別及請假介面,輸入判斷條件,讀取檔案,計算並輸出其總請假時數,使輸出值符合題意要求。檔案名稱請另存新檔為CSA06.cs,儲存於C:\ANS.CSF\CS06資料夾,再進行評分。
請使用正斜線(/)作為檔案路徑的分隔符號。

2. 設計說明:
專案已內含名為staff類別,類別內含name、leavehours,分別代表姓名及請假累計時數,Manager類別已繼承staff類別,並提供部分程式。
請建立一新介面,名稱為ILeave,內含一個方法,名稱為takeLeave,傳入一個int型態的參數,代表請假時數。修改Manager類別實作ILeave,並完成takeLeave,將請假時數累計至leavehours。
建立一個名為Worker的類別,繼承staff及實作ILeave介面,完成建構子與takeLeave方法。
*提示:Worker不是leader,isleader不為true。
在Main()方法中撰寫程式,輸入資料,代表時數下限,如輸入【2】,表示只統計大於等於2小時的請假時數。
讀取專案所附的read.txt,內含7位員工共計29筆請假記錄。
格式:姓名,身份(m:Manager, w:Worker),請假日期,請假時數。
如:john,m,1/2,6。意義為john,身份Manager,在1月2日請假6小時。
由檔案中讀取資料並依照身份別建立對應物件,加入至相對的List,如:mgers為Manager的List、wors為Worker的List。如果該筆記錄之請假時數小於步驟4輸入之請假時數下限,則無須加總,其餘依照姓名累加。
*提示:建立對應物件時請使用chkManager與chkWorker,已提供於原始程式。
分別輸出Manager及Worker的請假總時數,輸出格式如【Manager47hr/Worker75hr】。
若輸入不在指定範圍的資料,請輸出【error】。

3. 輸入輸出:
輸入說明
正整數

輸出說明
Manager及Worker請假時數,中間以一個半形/分隔(輸出最後一行後不自動換行)

範例輸入1
2
範例輸出1
Manager43hr/Worker75hr

範例輸入2
4
範例輸出2
Manager33hr/Worker68hr

範例輸入3
abc
範例輸出3
error

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

  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. using System.Threading;
  8. namespace CSA06
  9. {
  10.     class CSA06
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             try
  15.             {
  16.                 string str = Console.ReadLine();

  17.                 int hh = Convert.ToInt32(str.ToString());
  18.                 if (hh < 1)
  19.                 {
  20.                     throw new ArgumentException();
  21.                 }
  22.                 List<Manager> mgers = new List<Manager>();
  23.                 List<Worker> wors = new List<Worker>();

  24.                 //TODO
  25.                 string[] records = System.IO.File.ReadAllLines("read.txt");
  26.                 string[] tokens;
  27.                 string name;
  28.                 char level;
  29.                 int hours;
  30.                 staff staff;

  31.                 foreach (string record in records)
  32.                 {
  33.                     tokens = record.Split(',');
  34.                     name = tokens[0];
  35.                     level = tokens[1][0];
  36.                     hours = int.Parse(tokens[3]);
  37.                     if (hours < hh)
  38.                     {
  39.                         continue;
  40.                     }

  41.                     if (level == 'm')
  42.                     {
  43.                         staff = chkManager(mgers, tokens);
  44.                     }
  45.                     else
  46.                     {
  47.                         staff = chkWorker(wors, tokens);
  48.                     }
  49.                     staff.takeLeave(hours);
  50.                 }

  51.                 int ml = 0, wl = 0;
  52.                 foreach (Manager m in mgers)
  53.                 {
  54.                     ml += m.leavehours;
  55.                 }
  56.                 foreach (Worker w in wors)
  57.                 {
  58.                     wl += w.leavehours;
  59.                 }
  60.                 Console.Write("Manager{0}hr/Worker{1}hr", ml, wl);

  61.             }
  62.             catch
  63.             {
  64.                 Console.Write("error");
  65.             }
  66.             Console.ReadKey();
  67.         }
  68.         private static Manager chkManager(List<Manager> ms, string[] data)
  69.         {
  70.             foreach (Manager m in ms)
  71.             {
  72.                 if (m.name == data[0].ToString())
  73.                 {
  74.                     return m;
  75.                 }
  76.             }
  77.             Manager newm = new Manager(data[0].ToString());
  78.             ms.Add(newm);
  79.             return newm;
  80.         }
  81.         private static Worker chkWorker(List<Worker> ss, string[] data)
  82.         {
  83.             foreach (Worker s in ss)
  84.             {
  85.                 if (s.name == data[0].ToString())
  86.                 {
  87.                     return s;
  88.                 }
  89.             }
  90.             Worker news = new Worker(data[0].ToString());
  91.             ss.Add(news);
  92.             return news;
  93.         }
  94.     }



  95.     public abstract class staff : ILeave
  96.     {
  97.         public string name = "";
  98.         public bool isleader = false;
  99.         public int leavehours = 0;

  100.         public abstract void takeLeave(int leavehours);
  101.     }

  102.     public class Manager : staff
  103.     {
  104.         public Manager(string n)
  105.         {
  106.             this.name = n;
  107.             this.isleader = true;
  108.         }

  109.         // TODO  --leavehours
  110.         public override void takeLeave(int leavehours)
  111.         {
  112.             this.leavehours += leavehours;
  113.         }
  114.     }
  115.     // TODO --interface ILeave
  116.     interface ILeave
  117.     {
  118.         void takeLeave(int leavehours);
  119.     }

  120.     // TODO --class Worker
  121.     public class Worker : staff
  122.     {
  123.         public Worker(string name)
  124.         {
  125.             this.name = name;
  126.             this.isleader = false;
  127.         }

  128.         public override void takeLeave(int leavehours)
  129.         {
  130.             this.leavehours += leavehours;
  131.         }
  132.     }
  133. }
複製代碼





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