需求回顧
- 基類
FileRecord:編號、名稱;不可改編號;提供輸入/輸出/修改方法。
- 衍生
StudentRecord:學號、姓名、性別、年齡、3 科成績;不可改學號。
- 衍生
TeacherRecord:工號、姓名、性別、年齡、薪資;不可改工號。
- 主程式操作 10 位學生與 10 位教師資料。
完整代碼
using System;
public abstract class FileRecord {
public string Id { get; protected set; }
public string Name { get; set; }
public FileRecord(string id, string name) { Id = id; Name = name; }
public virtual void Input() {
Console.Write("編號(不可改):" + Id);
Console.Write("名稱:"); Name = Console.ReadLine();
}
public virtual void Output() {
Console.WriteLine($"編號:{Id},名稱:{Name}");
}
public virtual void Modify() {
Console.Write("新名稱:"); Name = Console.ReadLine();
}
}
public class StudentRecord : FileRecord {
public string Gender { get; set; }
public int Age { get; set; }
public int[] Scores = new int[3];
public StudentRecord(string id, string name) : base(id, name) { }
public override void Input() {
base.Input(); // 名稱
Console.Write("性別:"); Gender = Console.ReadLine();
Console.Write("年齡:"); Age = int.Parse(Console.ReadLine());
for (int i=0;i<3;i++) { Console.Write($"科目{i+1}成績:"); Scores[i]=int.Parse(Console.ReadLine()); }
}
public override void Output() {
base.Output();
Console.WriteLine($"性別:{Gender},年齡:{Age},成績:{string.Join(",", Scores)}");
}
public override void Modify() {
base.Modify(); // 名稱
Console.Write("新性別:"); Gender = Console.ReadLine();
Console.Write("新年齡:"); Age = int.Parse(Console.ReadLine());
for (int i=0;i<3;i++) { Console.Write($"新科目{i+1}成績:"); Scores[i]=int.Parse(Console.ReadLine()); }
}
}
public class TeacherRecord : FileRecord {
public string Gender { get; set; }
public int Age { get; set; }
public decimal Salary { get; set; }
public TeacherRecord(string id, string name) : base(id, name) { }
public override void Input() {
base.Input();
Console.Write("性別:"); Gender = Console.ReadLine();
Console.Write("年齡:"); Age = int.Parse(Console.ReadLine());
Console.Write("薪資:"); Salary = decimal.Parse(Console.ReadLine());
}
public override void Output() {
base.Output();
Console.WriteLine($"性別:{Gender},年齡:{Age},薪資:{Salary}");
}
public override void Modify() {
base.Modify();
Console.Write("新性別:"); Gender = Console.ReadLine();
Console.Write("新年齡:"); Age = int.Parse(Console.ReadLine());
Console.Write("新薪資:"); Salary = decimal.Parse(Console.ReadLine());
}
}
class Program {
static void Main() {
var students = new StudentRecord[10];
var teachers = new TeacherRecord[10];
for (int i=0;i<10;i++) {
students[i] = new StudentRecord($"S{i+1:00}", "");
teachers[i] = new TeacherRecord($"T{i+1:00}", "");
}
// 示範:輸入第一筆學生與教師
students[0].Input(); students[0].Output();
teachers[0].Input(); teachers[0].Output();
}
}
重點
- 基類建構子要求
id,衍生類建構子傳入固定編號,確保不可修改。
- 使用
virtual/override 實現多型,主程式可統一按 FileRecord 陣列操作。
- 真實專案建議加入資料驗證、例外處理、持久化(序列化/資料庫)。