Menu
Coddy logo textTech

Powtórka — dane studentów

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 35 z 70.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system ewidencji uczniów, który łączy wszystkie techniki enkapsulacji poznane w tym rozdziale. Utworzysz bezpieczny system, w którym dane uczniów są odpowiednio chronione, oceny są weryfikowane, a niektóre informacje pozostają niezmienne po utworzeniu.

Rozmieścisz kod w dwóch plikach:

  • Student.cs: Utwórz klasę Student w przestrzeni nazw Records, która demonstruje prawidłową enkapsulację. Twoja klasa ucznia powinna mieć:
    • Pole readonly Name (string), które jest publicznie dostępne, ale można je ustawić wyłącznie podczas konstruowania obiektu
    • Prywatne pole readonly przechowujące identyfikator ucznia (string) — nie powinno być bezpośrednio dostępne z zewnątrz
    • Prywatną listę do przechowywania ocen (liczb całkowitych)
    • Publiczną właściwość tylko do odczytu Average, która oblicza i zwraca średnią wszystkich ocen lub 0, jeśli nie ma żadnych ocen
    • Publiczną metodę AddGrade(int grade), która akceptuje tylko oceny z przedziału od 0 do 100 (włącznie) — nieprawidłowe oceny powinny być po cichu ignorowane
    • Publiczną metodę GetGradeCount(), która zwraca liczbę zapisanych prawidłowych ocen
    • Publiczną metodę GetStudentInfo(), która zwraca ciąg znaków w formacie "{Name} (ID: {last 4 characters of student ID})" — zauważ, że udostępniasz tylko zamaskowaną wersję identyfikatora!
    Konstruktor powinien przyjmować kolejno imię i identyfikator ucznia.
  • Program.cs: W pliku głównym utwórz ucznia i dodaj kilka ocen, aby zademonstrować działanie enkapsulacji. Pokażesz, że prawidłowe oceny są akceptowane, nieprawidłowe odrzucane, a średnia obliczana poprawnie.

Otrzymasz pięć danych wejściowych:

  • Imię i nazwisko ucznia
  • Identyfikator ucznia (co najmniej 4 znaki)
  • Pierwsza dodawana ocena (liczba całkowita)
  • Druga dodawana ocena (liczba całkowita, może być nieprawidłowa, np. -5 lub 150)
  • Trzecia dodawana ocena (liczba całkowita)

Wyświetl wynik w tym formacie:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

Na przykład, jeśli danymi wejściowymi są Emma Wilson, STU12345, 85, 150 i 90, wynik powinien być następujący:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

Zauważ, że nieprawidłowa ocena 150 została po cichu odrzucona, więc zapisano tylko dwie oceny. Identyfikator ucznia jest chroniony — kod zewnętrzny nigdy nie może zobaczyć pełnego identyfikatora, a jedynie jego zamaskowaną wersję za pośrednictwem GetStudentInfo(). Imię i nazwisko można odczytać, ale nie można go zmienić. Tak właśnie współdziałają techniki enkapsulacji, tworząc solidną i dobrze chronioną klasę!

Spróbuj swoich sił

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // Odczytaj dane wejściowe
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: Utwórz obiekt Student z wartościami name i studentId

        // TODO: Dodaj wszystkie trzy oceny za pomocą metody AddGrade

        // TODO: Wyświetl wynik w wymaganym formacie:
        // {wynik GetStudentInfo()}
        // Grades recorded: {GetGradeCount()}
        // Średnia: {Average}
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online