標題:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;
namespace CSA06
{
class CSA06
{
static void Main(string[] args)
{
try
{
string str = Console.ReadLine();
int hh = Convert.ToInt32(str.ToString());
if (hh < 1)
{
throw new ArgumentException();
}
List<Manager> mgers = new List<Manager>();
List<Worker> wors = new List<Worker>();
//TODO
string[] records = System.IO.File.ReadAllLines("read.txt");
string[] tokens;
string name;
char level;
int hours;
staff staff;
foreach (string record in records)
{
tokens = record.Split(',');
name = tokens[0];
level = tokens[1][0];
hours = int.Parse(tokens[3]);
if (hours < hh)
{
continue;
}
if (level == 'm')
{
staff = chkManager(mgers, tokens);
}
else
{
staff = chkWorker(wors, tokens);
}
staff.takeLeave(hours);
}
int ml = 0, wl = 0;
foreach (Manager m in mgers)
{
ml += m.leavehours;
}
foreach (Worker w in wors)
{
wl += w.leavehours;
}
Console.Write("Manager{0}hr/Worker{1}hr", ml, wl);
}
catch
{
Console.Write("error");
}
Console.ReadKey();
}
private static Manager chkManager(List<Manager> ms, string[] data)
{
foreach (Manager m in ms)
{
if (m.name == data[0].ToString())
{
return m;
}
}
Manager newm = new Manager(data[0].ToString());
ms.Add(newm);
return newm;
}
private static Worker chkWorker(List<Worker> ss, string[] data)
{
foreach (Worker s in ss)
{
if (s.name == data[0].ToString())
{
return s;
}
}
Worker news = new Worker(data[0].ToString());
ss.Add(news);
return news;
}
}
public abstract class staff : ILeave
{
public string name = "";
public bool isleader = false;
public int leavehours = 0;
public abstract void takeLeave(int leavehours);
}
public class Manager : staff
{
public Manager(string n)
{
this.name = n;
this.isleader = true;
}
// TODO --leavehours
public override void takeLeave(int leavehours)
{
this.leavehours += leavehours;
}
}
// TODO --interface ILeave
interface ILeave
{
void takeLeave(int leavehours);
}
// TODO --class Worker
public class Worker : staff
{
public Worker(string name)
{
this.name = name;
this.isleader = false;
}
public override void takeLeave(int leavehours)
{
this.leavehours += leavehours;
}
}
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2