================================================================================ DOKUMENTACJA PROGRAMU BIBLIOTEKA ================================================================================ Spis treści: 1. Wstęp 2. Opis plików 3. Opis klas i metod ================================================================================ 1. WSTĘP ================================================================================ Program "Biblioteka" to system do zarządzania biblioteką, napisany w języku Python zgodnie z paradygmatem programowania obiektowego (OOP). Program umożliwia zarządzanie pracownikami, czytelnikami, pozycjami bibliotecznymi oraz wypożyczeniami i rezerwacjami. Główne funkcjonalności: - Dodawanie, usuwanie i modyfikowanie pracowników - Dodawanie, usuwanie i modyfikowanie czytelników - Dodawanie różnych typów pozycji bibliotecznych - Wypożyczanie, oddawanie i rezerwacja pozycji - Kontrola wypożyczeń (kto co ma wypożyczone, zarezerwowane, przetrzymane) - Konfigurowalne limity (ile można wypożyczyć, na jak długo) - Zapis i odczyt danych do pliku JSON ================================================================================ 2. OPIS PLIKÓW ================================================================================ plik pozycje.py: - Zawiera klasy związane z pozycjami bibliotecznymi - Klasa abstrakcyjna Pozycja i jej podklasy - Kolekcja pozycji z iteratorem plik osoby.py: - Zawiera klasy Pracownik i Czytelnik - Dataclass dla przechowywania danych - Kolekcje z iteratorami - Dekorator do kontroli limitu wypożyczeń plik biblioteka.py: - Główna klasa Biblioteka łącząca wszystkie elementy - Klasa Konfiguracja do ustawiania parametrów - Metody do zapisu i odczytu JSON plik main.py: - Interfejs tekstowy (menu) dla użytkownika - Obsługa komunikacji z użytkownikiem plik generuj_dane.py: - Skrypt do generowania przykładowych danych - Tworzy 50 książek, 20 czasopism, 20 multimediów - Tworzy 50 czytelników i 15 pracowników - Zapisuje dane do osobnych plików JSON plik pozycje.json: - Przykładowe dane pozycji (100 książek, 20 czasopism, 20 multimediów) plik czytelnicy.json: - Przykładowe dane 50 czytelników plik pracownicy.json: - Przykładowe dane 15 pracowników ================================================================================ 3. OPIS KLAS I METOD ================================================================================ ------------------------------------------------------------------------------ PLIK POZYCJE.PY ------------------------------------------------------------------------------ KLASA ABSTRAKCYJNA POZYCJA (ABC) =============================== Jest to klasa bazowa dla wszystkich typów pozycji bibliotecznych. Zawiera wszystkie wspólne cechy i operacje. Atrybuty (pola) chronione (z podkreśleniem): - _tytul: str - tytuł pozycji - _kod_biblioteczny: str - unikalny kod identyfikujący pozycję - _dostepna: bool - czy pozycja jest dostępna do wypożyczenia - _wypozyczona_do: datetime lub None - data do której pozycja jest wypożyczona - _zarezerwowana_przez: str lub None - ID czytelnika który zarezerwował - _data_rezerwacji: datetime lub None - kiedy została zarezerwowana Metody: __init__(self, tytul: str, kod_biblioteczny: str) ----------------------------------------------- Konstruktor klasy. Inicjalizuje podstawowe atrybuty pozycji. Parametry: - tytul: tytuł pozycji - kod_biblioteczny: unikalny kod biblioteczny @property dostepna -> bool ------------------------- Getter (właściwość) do sprawdzania dostępności pozycji. Zwraca: True jeśli pozycja jest dostępna, False w przeciwnym razie @property wypozyczona_do -> datetime lub None -------------------------------------------- Getter zwracający datę końca wypożyczenia. Zwraca: obiekt datetime lub None @property zarezerwowana_przez -> str lub None --------------------------------------------- Getter zwracający ID czytelnika który zarezerwował pozycję. Zwraca: string z ID lub None @abstractmethod get_typ() -> str ------------------------------- Metoda abstrakcyjna - każda podklasa musi zwrócić swój typ. Zwraca: string z typem pozycji (np. "Książka", "CD") @abstractmethod get_info() -> str -------------------------------- Metoda abstrakcyjna - każda podklasa musi zwrócić szczegółowe informacje. Zwraca: string z informacjami o pozycji sprawdz_status() -> str ----------------------- Metoda konkretna (nie abstrakcyjna) - sprawdza status pozycji. Zwraca: string opisujący status ("DOSTĘPNA", "WYPOŻYCZONA", "PRZETRZYMANA", "ZAREZERWOWANA") wypozycz(self, kod_czytelnika: str, dni: int) -> bool ------------------------------------------------------ Metoda do wypożyczania pozycji. Parametry: - kod_czytelnika: string z ID czytelnika - dni: liczba dni na jaką wypożyczamy Zwraca: True jeśli wypożyczenie się powiodło, False w przeciwnym razie oddaj(self) -> bool ------------------- Metoda do oddawania pozycji. Zwraca: True jeśli oddanie się powiodło, False (np. gdy nie była wypożyczona) zarezerwuj(self, kod_czytelnika: str, dni: int) -> bool -------------------------------------------------------- Metoda do rezerwacji pozycji. Parametry: - kod_czytelnika: string z ID czytelnika - dni: liczba dni na jaką rezerwujemy Zwraca: True jeśli rezerwacja się powiodła, False w przeciwnym razie anuluj_rezerwacje(self) -> bool -------------------------------- Anuluje rezerwację pozycji. Zwraca: True jeśli anulowanie się powiodło to_dict(self) -> dict --------------------- Konwertuje obiekt do słownika (do zapisu JSON). Zwraca: słownik z danymi obiektu from_dict(cls, data: dict) -------------------------- Klasowa metoda do tworzenia obiektu ze słownika (odczyt JSON). Parametry: - data: słownik z danymi Zwraca: nowy obiekt klasy lub None PODKLASY POZYCJI: ================= KLASA KSIAZKA(Pozycja) ---------------------- Reprezentuje książkę w bibliotece. Atrybuty: - autor: str - autor książki - wydawnictwo: str - wydawnictwo - data_wydania: str - data wydania - isbn: str - numer ISBN __init__(self, tytul, autor, wydawnictwo, data_wydania, isbn, kod_biblioteczny) Konstruktor - inicjalizuje wszystkie atrybuty książki. get_typ() -> str Zwraca: "Książka" get_info() -> str Zwraca: string z tytułem, autorem, wydawnictwem i rokiem wydania to_dict() -> dict Zwraca: rozszerzony słownik z dodatkowymi polami książki from_dict(cls, data: dict) -> Ksiazka Tworzy obiekt Książka ze słownika KLASA MULTIMEDIA(Pozycja) ------------------------- Abstrakcyjna klasa bazowa dla multimediów (CD, DVD, Kasety). Atrybuty: - rodzaj: str - rodzaj multimedia (np. "CD", "DVD") __init__(self, tytul, kod_biblioteczny, rodzaj) Konstruktor @abstractmethod get_typ() -> str Metoda abstrakcyjna - każda podklasa zwraca swój typ KLASA CD(Multimedia) -------------------- Reprezentuje płytę CD. Atrybuty: - wykonawca: str - wykonawca/nazwa zespołu - rok: int - rok wydania __init__(self, tytul, wykonawca, rok, kod_biblioteczny) Konstruktor get_typ() -> str Zwraca: "CD" get_info() -> str Zwraca: string z tytułem, wykonawcą i rokiem KLASA DVD(Multimedia) --------------------- Reprezentuje płytę DVD. Atrybuty: - rezyser: str - reżyser - rok: int - rok wydania __init__(self, tytul, rezyser, rok, kod_biblioteczny) Konstruktor get_typ() -> str Zwraca: "DVD" get_info() -> str Zwraca: string z tytułem, reżyserem i rokiem KLASA KASETA(Multimedia) ------------------------ Reprezentuje kasetę magnetofonową. Atrybuty: - wykonawca: str - rok: int __init__(self, tytul, wykonawca, rok, kod_biblioteczny) Konstruktor get_typ() -> str Zwraca: "Kaseta" get_info() -> str Zwraca: string z tytułem, wykonawcą i rokiem KLASA CZASOPISMO(Pozycja) ------------------------- Abstrakcyjna klasa bazowa dla czasopism. Atrybuty: - okres: str - okres wydawania (np. "dziennik", "tygodnik") __init__(self, tytul, kod_biblioteczny, okres) Konstruktor @abstractmethod get_typ() -> str Metoda abstrakcyjna KLASA DZIENNIK(Czasopismo) -------------------------- Reprezentuje dziennik. Atrybuty: - data_wydania: str - data wydania gazety __init__(self, tytul, kod_biblioteczny, data_wydania) Konstruktor get_typ() -> str Zwraca: "Dziennik" get_info() -> str Zwraca: string z tytułem i datą wydania KLASA TYGODNIK(Czasopismo) -------------------------- Reprezentuje tygodnik. Atrybuty: - numer: int - numer wydania - rok: int - rok wydania __init__(self, tytul, kod_biblioteczny, numer, rok) Konstruktor get_typ() -> str Zwraca: "Tygodnik" get_info() -> str Zwraca: string z tytułem, numerem i rokiem KLASA MIESIECZNIK(Czasopismo) ----------------------------- Reprezentuje miesięcznik. Atrybuty: - numer: int - numer wydania - rok: int - rok wydania __init__(self, tytul, kod_biblioteczny, numer, rok) Konstruktor get_typ() -> str Zwraca: "Miesięcznik" get_info() -> str Zwraca: string z tytułem, numerem i rokiem KLASA GRAPLANSZOWA(Pozycja) --------------------------- Reprezentuje grę planszową. Atrybuty: - wydawca: str - wydawca gry - min_graczy: int - minimalna liczba graczy - max_graczy: int - maksymalna liczba graczy __init__(self, tytul, kod_biblioteczny, wydawca, min_graczy, max_graczy) Konstruktor get_typ() -> str Zwraca: "Gra planszowa" get_info() -> str Zwraca: string z tytułem, wydawcą i liczbą graczy KLASA ZASOBYCYFROWE(Pozycja) ---------------------------- Reprezentuje zasoby cyfrowe (e-booki, audiobooki, itp.). Atrybuty: - format: str - format zasobu (np. "PDF", "MP3") - rozmiar_mb: int - rozmiar w megabajtach __init__(self, tytul, kod_biblioteczny, format, rozmiar_mb) Konstruktor get_typ() -> str Zwraca: "Zasoby cyfrowe" get_info() -> str Zwraca: string z tytułem, formatem i rozmiarem KLASA KOLEKCJAPOZYCJI ===================== Klasa reprezentująca kolekcję pozycji z iteratorem. Metody: __init__(self) Inicjalizuje pustą kolekcję pozycji. dodaj(self, pozycja: Pozycja) ----------------------------- Dodaje pozycję do kolekcji. Parametry: - pozycja: obiekt klasy Pozycja lub podklasy usun(self, kod_biblioteczny: str) -> bool ----------------------------------------- Usuwa pozycję z kolekcji po kodzie. Parametry: - kod_biblioteczny: kod pozycji do usunięcia Zwraca: True jeśli usunięto, False jeśli nie znaleziono znajdz(self, kod_biblioteczny: str) -> Pozycja lub None ------------------------------------------------------- Znajduje pozycję po kodzie. Parametry: - kod_biblioteczny: kod do wyszukania Zwraca: obiekt Pozycja lub None __iter__(self) -------------- Iterator - zwraca kolejne elementy kolekcji. __len__(self) ------------- Zwraca liczbę elementów w kolekcji. generuj_kod(self) -> Generator ------------------------------ Generator yield - generuje kolejny kod biblioteczny. Użycie: next(kolekcja.generuj_kod()) wyszukaj_tytul(self, fraza: str) -> Generator --------------------------------------------- Generator yield - wyszukuje pozycje po tytule. Parametry: - fraza: fragment tytułu do wyszukania Zwraca: kolejne pasujące pozycje ------------------------------------------------------------------------------ PLIK OSOBY.PY ------------------------------------------------------------------------------ @dataclass KLASA PRACOWNIK ========================== Dataclass reprezentujący pracownika biblioteki. Atrybuty (pola dataclass): - imie: str - imię pracownika - nazwisko: str - nazwisko pracownika - stanowisko: str - stanowisko pracownika - data_zatrudnienia: str - data zatrudnienia - pesel: str - PESEL pracownika (domyślnie pusty) - telefon: str - numer telefonu (domyślnie pusty) - _id_pracownika: int - wewnętrzne ID (niewidoczne w repr) __post_init__(self) ------------------- Metoda wywoływana po inicjalizacji - ustawia domyślne wartości jeśli nie podano peselu lub telefonu. @property id_pracownika -> int ------------------------------ Getter zwracający ID pracownika. @property pelne_dane -> str --------------------------- Getter zwracający pełne dane (imię i nazwisko). to_dict(self) -> dict --------------------- Konwertuje pracownika do słownika. from_dict(cls, data: dict) -> Pracownik --------------------------------------- Tworzy pracownika ze słownika. KLASA KOLEKCJAPRACOWNIKOW ========================= Kolekcja pracowników z iteratorem. Metody: __init__(self) Inicjalizuje pustą kolekcję. dodaj(self, pracownik: Pracownik) -> Pracownik ----------------------------------------------- Dodaje pracownika do kolekcji, nadając mu kolejne ID. Parametry: - pracownik: obiekt Pracownik Zwraca: dodany pracownik z nadanym ID usun(self, id_pracownika: int) -> bool -------------------------------------- Usuwa pracownika po ID. Zwraca: True jeśli usunięto, False jeśli nie znaleziono znajdz(self, id_pracownika: int) -> Pracownik lub None ------------------------------------------------------- Znajduje pracownika po ID. Zwraca: obiekt Pracownik lub None znajdz_pesel(self, pesel: str) -> Pracownik lub None ----------------------------------------------------- Znajduje pracownika po numerze PESEL. Zwraca: obiekt Pracownik lub None modyfikuj(self, id_pracownika: int, **kwargs) -> bool ----------------------------------------------------- Modyfikuje atrybuty pracownika. Parametry: - id_pracownika: ID pracownika do modyfikacji - **kwargs: nazwy atrybutów i nowe wartości Zwraca: True jeśli zmodyfikowano, False jeśli nie znaleziono __iter__(self) -------------- Iterator - zwraca kolejnych pracowników. __len__(self) ------------- Zwraca liczbę pracowników. __getitem__(self, indeks: int) -> Pracownik ------------------------------------------- Dostęp do pracownika po indeksie. @dataclass KLASA CZYTELNIK ========================== Dataclass reprezentujący czytelnika biblioteki. Atrybuty (pola dataclass): - imie: str - imię czytelnika - nazwisko: str - nazwisko czytelnika - adres: str - adres - telefon: str - numer telefonu - email: str - adres email (domyślnie pusty) - _id_czytelnika: int - wewnętrzne ID - _wypozyczone: list - lista kodów wypożyczonych pozycji - _zarezerwowane: list - lista kodów zarezerwowanych pozycji @property id_czytelnika -> int ------------------------------ Getter zwracający ID czytelnika. @property pelne_dane -> str --------------------------- Getter zwracający pełne dane (imię i nazwisko). @property ilosc_wypozyczonych -> int ----------------------------------- Getter zwracający liczbę wypożyczonych pozycji. dodaj_wypozyczenie(self, kod: str) ---------------------------------- Dodaje kod pozycji do listy wypożyczonych. usun_wypozyczenie(self, kod: str) -> bool ----------------------------------------- Usuwa kod pozycji z listy wypożyczonych. Zwraca: True jeśli usunięto, False jeśli nie było na liście dodaj_rezerwacje(self, kod: str) --------------------------------- Dodaje kod pozycji do listy zarezerwowanych. usun_rezerwacje(self, kod: str) -> bool --------------------------------------- Usuwa kod pozycji z listy zarezerwowanych. Zwraca: True jeśli usunięto, False jeśli nie było na liście to_dict(self) -> dict --------------------- Konwertuje czytelnika do słownika. from_dict(cls, data: dict) -> Czytelnik --------------------------------------- Tworzy czytelnika ze słownika. KLASA KOLEKCJACZYTELNIKOW ========================= Kolekcja czytelników z iteratorem. Metody (analogiczne do KolekcjaPracownikow): - __init__, dodaj, usun, znajdz, modyfikuj, __iter__, __len__, __getitem__ DEKORATOR dekorator_limit(max_limit: int) ========================================== Dekorator sprawdzający limit wypożyczeń przed wykonaniem operacji. Parametry: - max_limit: maksymalna liczba wypożyczeń Użycie: @dekorator_limit(Konfiguracja.max_wypozyczenia) Nad metodą wypożyczania w klasie Biblioteka. ------------------------------------------------------------------------------ PLIK BIBLIOTEKA.PY ------------------------------------------------------------------------------ KLASA KONFIGURACJA ================== Klasa przechowująca ustawienia biblioteki. Atrybuty klasowe (static): - max_wypozyczenia: int - maksymalna liczba pozycji dla czytelnika (domyślnie 5) - dni_wypozyczenia: int - ile dni można trzymać wypożyczoną pozycję (domyślnie 14) - dni_rezerwacji: int - ile dni ważna jest rezerwacja (domyślnie 3) Metody klasowe (classmethod): ustaw_limit(cls, limit: int) ----------------------------- Ustawia nowy limit wypożyczeń. ustaw_dni_wypozyczenia(cls, dni: int) ------------------------------------- Ustawia nową liczbę dni wypożyczenia. ustaw_dni_rezerwacji(cls, dni: int) ----------------------------------- Ustawia nową liczbę dni rezerwacji. to_dict(cls) -> dict -------------------- Zwraca słownik z aktualnymi ustawieniami. from_dict(cls, data: dict) -------------------------- Wczytuje ustawienia ze słownika. KLASA BIBLIOTEKA ================ Główna klasa zarządzająca biblioteką. Atrybuty: - pozycje: KolekcjaPozycji - wszystkie pozycje biblioteki - pracownicy: KolekcjaPracownikow - wszyscy pracownicy - czytelnicy: KolekcjaCzytelnikow - wszyscy czytelnicy Metody zarządzania PRACOWNIKAMI: dodaj_pracownika(self, imie, nazwisko, stanowisko, data_zatrudnienia, pesel="", telefon="") -> Pracownik ---------------------------------------------------- Dodaje nowego pracownika. Parametry: imie, nazwisko, stanowisko, data (YYYY-MM-DD), opcjonalne pesel i telefon Zwraca: obiekt dodanego Pracownika usun_pracownika(self, id_pracownika: int) -> bool ------------------------------------------------- Usuwa pracownika po ID. Zwraca: True jeśli usunięto modyfikuj_pracownika(self, id_pracownika: int, **kwargs) -> bool ---------------------------------------------------------------- Modyfikuje dane pracownika. Parametry: ID i słownik z nowymi wartościami (np. imie="NoweImie") Zwraca: True jeśli zmodyfikowano Metody zarządzania CZYTELNIKAMI: dodaj_czytelnika(self, imie, nazwisko, adres, telefon, email="") -> Czytelnik ----------------------------------------------------------------------------- Dodaje nowego czytelnika. Parametry: imie, nazwisko, adres, telefon, opcjonalny email Zwraca: obiekt dodanego Czytelnika usun_czytelnika(self, id_czytelnika: int) -> bool ------------------------------------------------- Usuwa czytelnika po ID (tylko jeśli nie ma wypożyczeń i rezerwacji). Zwraca: True jeśli usunięto modyfikuj_czytelnika(self, id_czytelnika: int, **kwargs) -> bool ----------------------------------------------------------------- Modyfikuje dane czytelnika. Metody zarządzania POZYCJAMI: dodaj_ksiazke(self, tytul, autor, wydawnictwo, data_wydania, isbn, kod_biblioteczny) -> Ksiazka --------------------------------------------- Dodaje nową książkę. dodaj_cd(self, tytul, wykonawca, rok, kod_biblioteczny) -> CD -------------------------------------------------------------- Dodaje nową płytę CD. dodaj_dvd(self, tytul, rezyser, rok, kod_biblioteczny) -> DVD --------------------------------------------------------------- Dodaje nową płytę DVD. dodaj_kasete(self, tytul, wykonawca, rok, kod_biblioteczny) -> Kaseta ---------------------------------------------------------------------- Dodaje nową kasetę. dodaj_dziennik(self, tytul, kod_biblioteczny, data_wydania) -> Dziennik ----------------------------------------------------------------------- Dodaje nowy dziennik. dodaj_tygodnik(self, tytul, kod_biblioteczny, numer, rok) -> Tygodnik --------------------------------------------------------------------- Dodaje nowy tygodnik. dodaj_miesiecznik(self, tytul, kod_biblioteczny, numer, rok) -> Miesiecznik --------------------------------------------------------------------------- Dodaje nowy miesięcznik. dodaj_gre_planszowa(self, tytul, kod_biblioteczny, wydawca, min_graczy, max_graczy) -> GraPlanszowa ------------------------------------------------- Dodaje nową grę planszową. dodaj_zasoby_cyfrowe(self, tytul, kod_biblioteczny, format, rozmiar_mb) -> ZasobyCyfrowe ------------------------------------ Dodaje nowe zasoby cyfrowe. usun_pozycje(self, kod_biblioteczny: str) -> bool -------------------------------------------------- Usuwa pozycję (tylko jeśli jest dostępna). Zwraca: True jeśli usunięto Metody WYPOŻYCZEŃ I REZERWACJI: wypozycz(self, czytelnik: Czytelnik, kod_biblioteczny: str) -> str ------------------------------------------------------------------ Wypożycza pozycję czytelnikowi. Parametry: obiekt Czytelnik, kod pozycji Zwraca: string z informacją o wyniku (OK lub Błąd) Dekorator: sprawdza czy czytelnik nie przekroczył limitu wypożyczeń oddaj(self, kod_biblioteczny: str) -> str ------------------------------------------ Oddaje wypożyczoną pozycję. Parametry: kod pozycji Zwraca: string z informacją o wyniku zarezerwuj(self, id_czytelnika: int, kod_biblioteczny: str) -> str ------------------------------------------------------------------ Rezerwuje pozycję dla czytelnika. Parametry: ID czytelnika, kod pozycji Zwraca: string z informacją o wyniku anuluj_rezerwacje(self, id_czytelnika: int, kod_biblioteczny: str) -> str ---------------------------------------------- Anuluje rezerwację pozycji. Parametry: ID czytelnika, kod pozycji Zwraca: string z informacją o wyniku kontrola_wypozyczen(self) -> dict --------------------------------- Sprawdza kto ma jakie pozycje wypożyczone, zarezerwowane i przetrzymane. Zwraca: słownik z trzema listami: - 'wypozyczone': pozycje aktualnie wypożyczone - 'zarezerwowane': pozycje zarezerwowane - 'pl': pozycje przetrzymane (po terminie) Metody PLIKÓW (JSON): zapisz_json(self, nazwa_pliku: str = "biblioteka.json") -> str --------------------------------------------------------------- Zapisuje cały stan biblioteki do pliku JSON. Parametry: nazwa pliku (domyślnie "biblioteka.json") Zwraca: string z potwierdzeniem wczytaj_json(self, nazwa_pliku: str = "biblioteka.json") -> str ---------------------------------------------------------------- Wczytuje stan biblioteki z pliku JSON. Parametry: nazwa pliku Zwraca: string z informacją o wyniku INNE METODY: generuj_raport(self) -> str --------------------------- Generuje tekstowy raport z danymi biblioteki. Zwraca: string z sformatowanym raportem METODY ZAPISU I ODCZYTU ODRĘBNYCH PLIKÓW: ========================================== zapisz_pozycje(self, nazwa_pliku: str = "pozycje.json") -> str -------------------------------------------------------------- Zapisuje wyłącznie pozycje do osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "pozycje.json") Zwraca: string z potwierdzeniem i liczbą zapisanych pozycji wczytaj_pozycje(self, nazwa_pliku: str = "pozycje.json") -> str ----------------------------------------------------------------- Wczytuje pozycje z osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "pozycje.json") Zwraca: string z potwierdzeniem i liczbą wczytanych pozycji zapisz_czytelnikow(self, nazwa_pliku: str = "czytelnicy.json") -> str ---------------------------------------------------------------------- Zapisuje wyłącznie czytelników do osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "czytelnicy.json") Zwraca: string z potwierdzeniem i liczbą zapisanych czytelników wczytaj_czytelnikow(self, nazwa_pliku: str = "czytelnicy.json") -> str ----------------------------------------------------------------------- Wczytuje czytelników z osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "czytelnicy.json") Zwraca: string z potwierdzeniem i liczbą wczytanych czytelników zapisz_pracownikow(self, nazwa_pliku: str = "pracownicy.json") -> str ----------------------------------------------------------------------- Zapisuje wyłącznie pracowników do osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "pracownicy.json") Zwraca: string z potwierdzeniem i liczbą zapisanych pracowników wczytaj_pracownikow(self, nazwa_pliku: str = "pracownicy.json") -> str ----------------------------------------------------------------------- Wczytuje pracowników z osobnego pliku JSON. Parametry: - nazwa_pliku: nazwa pliku (domyślnie "pracownicy.json") Zwraca: string z potwierdzeniem i liczbą wczytanych pracowników ------------------------------------------------------------------------------ PLIK MAIN.PY ------------------------------------------------------------------------------ Plik main.py zawiera interfejs tekstowy (menu) dla użytkownika. Nie zawiera klas - tylko funkcje obsługujące menu. Funkcje menu: menu_pracownicy(biblioteka: Biblioteka) ---------------------------------------- Wyświetla menu zarządzania pracownikami: - Dodaj pracownika - Usuń pracownika - Modyfikuj pracownika - Lista pracowników menu_czytelnicy(biblioteka: Biblioteka) --------------------------------------- Wyświetla menu zarządzania czytelnikami: - Dodaj czytelnika - Usuń czytelnika - Modyfikuj czytelnika - Lista czytelników menu_pozycje(biblioteka: Biblioteka) ------------------------------------ Wyświetla menu zarządzania pozycjami: - Dodaj książkę - Dodaj CD/DVD/kasete - Dodaj czasopismo (dziennik/tygodnik/miesięcznik) - Dodaj grę planszową - Dodaj zasoby cyfrowe - Usuń pozycję - Lista pozycji menu_wypozyczenia(biblioteka: Biblioteka) ----------------------------------------- Wyświetla menu operacji: - Wypożycz pozycję - Oddaj pozycję - Zarezerwuj pozycję - Anuluj rezerwację - Kontrola wypożyczeń menu_konfiguracja() ------------------- Wyświetla menu konfiguracji: - Zmień limit wypożyczeń - Zmień długość wypożyczenia - Zmień długość rezerwacji menu_pliki(biblioteka: Biblioteka) ----------------------------------- Wyświetla menu plików: - Zapisz do JSON - Wczytaj z JSON main() ------ Główna funkcja uruchamiająca program. Wyświetla menu główne i obsługuje wybory użytkownika w pętli aż do wybrania opcji wyjścia (0). ================================================================================ KONIEC DOKUMENTACJI ================================================================================