首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 實作檔案管理系統:基類與學生/教師衍生類完整範例

     編輯:程式設計綜合問答

需求回顧

  • 基類 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 陣列操作。
  • 真實專案建議加入資料驗證、例外處理、持久化(序列化/資料庫)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved