Dataniedziela, 9 sierpnia 2026 Czas07:28:54
← Programowanie konsolowe (C#)

Lekcja 19. Projekt końcowy — system wypożyczalni w konsoli

Trudny / egzaminacyjny

Po co się tego uczymy?

Pojedyncze umiejętności — klasa, dziedziczenie, wyjątek — to jedno. Prawdziwa wartość pojawia się dopiero wtedy, gdy złożysz je w jeden, spójny, DZIAŁAJĄCY program — dokładnie tak, jak wygląda zadanie praktyczne na egzaminie INF.04 i jak wygląda prawdziwa praca programisty.

Teoria

To podsumowanie całego działu — zbudujesz KOMPLETNY, działający system wypożyczalni w konsoli, łącząc wszystkie 17 poprzednich lekcji w jeden spójny projekt: klasy i obiekty, hermetyzację, konstruktory, dziedziczenie, polimorfizm, klasy abstrakcyjne, wyjątki, kolekcje generyczne i (opcjonalnie) jeden z poznanych wzorców projektowych.

Wymagane elementy projektu:
1. Klasa abstrakcyjna Produkt (pola: Tytul, CzyWypozyczony; metoda abstrakcyjna OplataZaDzien()).
2. Co najmniej dwie klasy pochodne, np. Film i Konsola, każda z własną implementacją OplataZaDzien().
3. Klasa Wypozyczalnia przechowująca List<Produkt> (Lekcja 8 + 16), z metodami: Wypozycz(Produkt p) (rzuca wyjątek, jeśli produkt jest już wypożyczony — Lekcja 16), Zwroc(Produkt p), WyswietlDostepne() (wypisuje tylko produkty z CzyWypozyczony == false).
4. Obsługa błędów przez try-catch przy próbie wypożyczenia niedostępnego produktu.
5. Menu tekstowe w pętli (Lekcja 7) pozwalające użytkownikowi wybrać akcję (wypożycz/zwróć/pokaż dostępne/zakończ) przez instrukcję switch (Lekcja 5).

To dokładnie ten poziom złożoności, jakiego można się spodziewać w rozbudowanym zadaniu praktycznym z programowania obiektowego na egzaminie INF.04.

Schemat

              Produkt (klasa abstrakcyjna)
              - Tytul, CzyWypozyczony
              - abstract OplataZaDzien()
                    /              
                   /                
              Film                Konsola
        OplataZaDzien()=2zł   OplataZaDzien()=15zł

Wypozyczalnia
- List<Produkt> produkty
- Wypozycz(produkt), Zwroc(produkt), WyswietlDostepne()

Przykład z życia

To dokładnie taki projekt, jaki mógłbyś zobaczyć jako zadanie na egzaminie INF.04 w części praktycznej — aplikacja konsolowa z hierarchią klas, kolekcją obiektów i menu sterowanym przez użytkownika.

Ćwiczenie samodzielne

Zanim zaczniesz kodować, narysuj na kartce diagram klas (podobny do diagramu w tej lekcji) z dokładnymi polami i metodami każdej klasy Twojego projektu.

Zadania do pracy własnej

  1. Zbuduj same klasy: Produkt (abstrakcyjna) i dwie klasy pochodne, bez jeszcze klasy Wypozyczalnia — na razie tylko utwórz kilka obiektów w Main() i wypisz ich dane oraz opłaty za dzień.

  2. Dodaj klasę Wypozyczalnia z listą produktów i metodami Wypozycz/Zwroc/WyswietlDostepne, ale jeszcze bez obsługi wyjątków ani menu — testuj wywołania bezpośrednio w kodzie Main().

  3. Zbuduj CAŁY system zgodnie ze specyfikacją z tej lekcji: hierarchia klas, wyjątek przy próbie wypożyczenia zajętego produktu, oraz pętla z menu tekstowym (switch) pozwalająca użytkownikowi wielokrotnie wypożyczać, zwracać i przeglądać dostępne produkty, aż wybierze opcję "Zakończ".

Typowe błędy

Największy błąd na tym etapie to próba napisania wszystkiego naraz — buduj projekt DOKŁADNIE w kolejności z listy wymaganych elementów, testując każdy fragment osobno, zanim przejdziesz do kolejnego (dokładnie tak, jak w zadaniach łatwym/średnim/trudnym powyżej). Drugi błąd: kopiowanie fragmentów kodu z poprzednich lekcji bez zastanowienia, czy dokładnie pasują do nowego kontekstu — wróć do konkretnej lekcji, jeśli czegoś nie pamiętasz, zamiast zgadywać. Trzeci: pominięcie obsługi wyjątków "bo to tylko projekt szkolny" — to właśnie umiejętność łączenia obsługi błędów z resztą logiki biznesowej jest tym, co odróżnia solidny projekt od prowizorki.

Nawiązanie do egzaminu zawodowego

Ten projekt w komplecie odpowiada strukturze zadania praktycznego z części obiektowej egzaminu INF.04 — aplikacja konsolowa wykorzystująca hierarchię klas, kolekcje, obsługę wyjątków i interakcję z użytkownikiem. To najlepsze możliwe przygotowanie do tej części egzaminu, jakie może dać ten dział, i naturalny pomost do aplikacji okienkowych WPF, gdzie te same klasy i wzorce znajdziesz ponownie, tylko z graficznym interfejsem zamiast tekstowego menu.