Okej pierwsze co mi się rzuca w oko to tendencja do pisania nadmiarowego kodu w konstruktorze, masz stworzoną klasę użytkownika fajnie jest stworzyć tam bazowy konstruktor do którego będziesz wracać. Pozwoliłem sobie wykonać skrócony przykład by zademonstrować jak to może wyglądać.
using System;
namespace ConsoleApp1
{
public abstract class Uzytkownik
{
public static int NextId { get; set; }
public int uzytkownikId { get; set; }
//public uzytkownikTypOpcje uzytkownikTyp { get; set; }
public string Login { get; set; }
public string Haslo { get; set; }
public string Imie { get; set; }
public string Nazwisko { get; set; }
public Uzytkownik(int ID, string login, string haslo, string imie, string nazwisko)
{
uzytkownikId = ID;
Login = login;
Haslo = haslo;
Imie = imie;
Nazwisko = nazwisko;
}
}
public class Nauczyciel : Uzytkownik
{
public Nauczyciel(int ID = 0, string login = "Nauczyciel", string haslo = "Nauczyciel", string imie = "Bogdan", string Nazwisko = "Bajek") : base (ID,login,haslo,imie,Nazwisko)
{
}
}
class Program
{
static void Main(string[] args)
{
Nauczyciel a = new Nauczyciel();
Console.WriteLine(a.Haslo);
Console.ReadLine();
}
}
}
Druga strasznie namieszałeś, bo piszesz informacje po angielsku a masz cały kod po Polsku aż nie wiadomo czy szukać w kodzie nazw zmiennych po angielsku czy po Polsku... Uznam że to są te po Polsku.
Co do "Dodaj ocenę", warto pamiętać że klasy są to zmienne referencyjne, a w dodatku możesz dodać w parametrze argumentu takie słowo klucz jak "ref", nie widzę sensu zwracać dziennika, skoro możesz na dzienniku po prostu pracować jako referencji, w ten sposób unikniesz zbędnego zwracania dziennika. Wydaje mi się że właśnie jako że klasa to sama w sobie referencja nawet "ref" nie trzeba dodawać, ale warto wytestować czasem coś mi w głowie nie działa dobrze.
Szczerze to wszystko masz napisane zagmatwanie i ciężko mi się połapać o co Ci chodziło, a myślałeś może żeby do Nauczyciela nie wysyłać dziennika a ucznia? Uczeń niech będzie przypisany do danego dziennika, a dziennik niech ma funkcje "dodaj ocenę". Dziennik sam w sobie jest troche nielogiczny, posiada on ID ucznia? ale przecież tam jest tak na serio "stos" uczniów ponumerowany i usegregowany alfabetycznie.
Kolejna sprawa że przy konstruktorze ucznia, czemu każdy uczeń ma swój własny nowy dziennik, to nie jest logiczne. Dziennik powinien należeć raczej do "klasy (takiej w szkole kilku osobowej minimum)".
W momencie parsowania tak jak w linijce 79, warto dodać operator ??, dla zabezpieczenia przed błędami, w momencie kiedy lewa strona będzie przyjmowała wartość null, to nie wyskoczy Ci błąd.