You are on page 1of 13

Wydział Informatyki

Programowanie

Projekt semestralny

Autor projektu: Kuba Honbrechts


Kierunek studiów: Informatyka
Rok akademicki: 2020/2021
Prowadzący:
dr inż. Mykhailo Fedorov

Szczecin 2021
System biblioteczny
Cel : Program przy użyciu, którego pracownik może świadczyć
usługi biblioteczne ( na dla konsumenta (klienta).

Reguła biznesowa: Biblioteka powinna na bieżąca sprawdzać


stan magazynowy(ilość książek) jakie może udostępnić klientom, w
razie potrzeby usuwać lub dodawać nowe książki.

Ograniczenia biznesowe: Możliwość dodania książek,


zależy od funduszów danej placówki. Ilość czytelników zależy od
popularności danej księgarni.

Dokumentacja

1. Na początku program wyświetla podstawowe informacje.


2. Domyślnie stworzono dane logowania umożliwiając zalogowanie się do systemu.
Program pobiera informacje z pliku „Logowanie.txt” gdzie został umieszczony
domyślny login i hasło. Użytkownik ma do wyboru dwie opcje, może się albo
zalogować albo wyjść z programu.

3. Logowanie. Program wymaga wpisania loginu i hasła użytkownika by odblokować


dostęp do systemu.
4. Po wpisaniu prawidłowo danych logowania zostanie wyświetlony stosowny
komunikat.

5. Jeżeli login lub hasło zostanie wpisane niepoprawnie użytkownik zostanie o tym
powiadomiony. Liczbę prób logowania w przypadku podania nieprawidłowych danych
ustalono na 3.

Po ich wykorzystaniu zostaje wyświetlony komunikat i powrót do menu logowania.

6. Menu pracownika, które zostaje wyświetlone pracownikowi:


Użytkownik poprzez wybranie odpowiedniej litery [a-k z,q] wybiera akcje którą chce
wykonać.

7. W kolejnym kroku jeżeli użytkownik postanowi utworzyć książkę i dodać ją do czytelni


to musi podać tytuł, autora, rok wydania i ilość stron książki.
8. Jeżeli użytkownik poprawnie poda wszystkie dane to książka zostanie dodana do
biblioteki z przydzielonym automatycznie odpowiednim ID i program wyświetli ile
książek aktualnie znajduje się w czytelni.

9. Pracownik może wyświetlić wszystkie książki, które znajdują się aktualnie w czytelni.

10. Pracownik może zmodyfikować książkę znajdującą się w bazie czytelni


11. Pracownik może usunąć daną książkę z czytelni podając jej ID, o czym informuje
stosowny komunikat.
12. Pracownik może dodać czytelnika do systemu podając jego imię i nazwisko w celu
identyfikacji.

13. Pracownik może wyświetlić wszystkich czytelników i ilość wypożyczonych przez nich
książek.

14. Każdy z czytelników, którzy są uprawnieni(są zarejestrowani w czytelni) może


wypożyczyć książkę, która jest dostępna w czytelni. Poprzez podanie ID Czytelnika i
ID książki, którą chce wypożyczyć następuje rejestracja wypożyczenia książki w
systemie.
15. Możliwa jest zmiana hasła użytkownika jeżeli zajdzie taka potrzeba z wykorzystaniem
odpowiedniej funkcji. Po zalogowaniu wystarczy wybrać stosowną opcje i wpisać
nowe hasło. Hasło zostanie zmienione i nowe dane logowania zostaną zapisane do
pliku.

Po zmianie hasła program zapyta czy użytkownik chciałbym zalogować się ponownie.

1. Program Biblioteka
Program przechowuje dane o książkach i czytelnikach w bibliotece.
Umożliwia:
-dodawanie nowych książek, czytelników
-kasowania książek, czytelników
-modyfikację danych książek, czytelników
-wyświetlanie listy czytelników oraz książek
-zmianę hasła
-wyjście z programu

Ponadto program kontroluje wprowadzane dane.

2. Sposób przechowywania danych


W programie zdefiniowane są 2 struktury:
-CZYTELNIK zawierająca pola: imie, nazwisko, id, liczba wypozyczonych ksiazek,
tablica zawierajaca id wypozyczonych ksiazek.
-KSIAZKA zawierająca pola: tytuł, autor, liczba stron, rok wydania, id, liczba
wypożyczających dana książkę czytelników, tablica zawierająca id wypożyczających.

Dane przechowywane są w tablicach struktur o stałym rozmiarze.

3. Funkcje
-Funkcje czytelnika:

int dodaj_czytelnika(CZYTELNIK czytelnicy[], int * liczba_czytelnikow, int * m_id)


Funkcja dodająca czytelnika do tablicy struktur czytelnicy. Sprawdza, czy w
bazie nie ma już maksymalnej liczby czytelników. W takim przypadku zwraca 0.
Jeśli nie, pobiera od użytkownika imię i nazwisko (kontrolując poprawność
danych). Przydziela nowemu rekordowi wartość maksymalnego indeksu.
Po pomyślnym pobraniu danych zwiększa liczbę czytelników oraz
maksymalny indeks o 1 oraz zwraca 1.

int modyfikuj_czytelnika(CZYTELNIK czytelnicy[], int liczba_czytelnikow);


Funkcja modyfikująca dane czytelnika w tablicy struktur. Sprawdza, czy w
bazie jest chociaż jeden czytelnik. Jeśli nie ma, zwraca 0.
W przeciwnym przypadku pobiera od użytkownika id, sprawdza poprawność i
znajduje indeks, pod którym czytelnik o danym id jest zapisany w tablicy.
Po pomyślnym pobraniu nowych danych od użytkownika zwraca 1.

int usun_czytelnika(CZYTELNIK czytelnicy[], KSIAZKA ksiazki[], int *


liczba_czytelnikow);
Funkcja usuwająca czytelnika oraz usuwająca jego id z rekordów książek,
które miał wypożyczone.
Rozpoczyna od sprawdzenia, czy w bazie jest chociaż jeden czytelnik. Jeśli
nie, zwraca 0.
W przeciwnym przypadku pobiera id, sprawdza poprawność i znajduje indeks,
pod którym czytelnik o danym id jest zapisany w tablicy.
Zamienia rekord danego czytelnika z rekordem znajdującym się pod ostatnim
zapisanym indeksem w tablicy oraz zmniejsza liczbe czytelnikow o 1. Po pomyslnej zamianie
zwraca 1.
int znajdz_czytelnika_po_id(CZYTELNIK czytelnicy[], int liczba_czytelnikow, int id);
Funkcja znajduje indeks, pod ktorym czytelnik o danym ID znajduje sie w
tablicy.

void wyswietl_ksiazki_czytelnika(CZYTELNIK czytelnicy[], KSIAZKA ksiazki[], int


liczba_czytelnikow, int liczba_ksiazek);
Funkcja sprawdza, czy w bazie jest chociaz jeden czytelnik. Jesli nie,
wyswietla odpowiedni komunikat.
Jesli tak, pobiera id od uzytkownika, sprawdza jego poprawność, i znajduje
indeks, pod którym czytelnik o danym ID jest zapisany w tablicy.
Następnie wyświetla wszystkie książki wypożyczone przez danego czytelnika.

-Funkcje książek:

int dodaj_ksiazke(KSIAZKA ksiazki[], int * liczba_ksiazek, int * m_id)


Funkcja dodająca ksiazke do tablicy struktur ksiazki. Sprawdza, czy w bazie
nie ma już maksymalnej liczby ksiazek. W takim przypadku zwraca 0.
Jeśli nie, pobiera od użytkownika tytuł, autora, liczbe stron i rok wydania
(kontrolując poprawność danych). Przydziela nowemu rekordowi wartość maksymalnego
indeksu.
Po pomyślnym pobraniu danych zwiększa liczbę książek oraz maksymalny
indeks o 1 oraz zwraca 1.

int modyfikuj_ksiazke(KSIAZKA ksiazki[], int liczba_ksiazek)


Funkcja modyfikująca dane książki w tablicy struktur. Sprawdza, czy w bazie
jest chociaż jedna książka. Jeśli nie ma, zwraca 0.
W przeciwnym przypadku pobiera od użytkownika id, sprawdza poprawność i
znajduje indeks, pod którym książka o danym id jest zapisana w tablicy.
Po pomyślnym pobraniu nowych danych od użytkownika zwraca 1.

int usun_ksiazke(KSIAZKA ksiazki[], CZYTELNIK czytelnicy[], int * liczba_ksiazek, int


liczba_czytelnikow)
Funkcja usuwająca książkę. Usuwa id książki z rekordów czytelników, którzy
ją wypożyczyli.
Rozpoczyna od sprawdzenia, czy w bazie jest chociaż jedna książka. Jeśli nie,
zwraca 0.
W przeciwnym przypadku pobiera id, sprawdza poprawność i znajduje indeks,
pod którym książka o danym id jest zapisana w tablicy.
Zamienia rekord danej książki z rekordem znajdującym się pod ostatnim
zapisanym indeksem w tablicy oraz zmniejsza liczbe książek o 1. Po pomyslnej zamianie
zwraca 1.

int znajdz_ksiazke_po_id(KSIAZKA ksiazki[], int liczba_ksiazek, int id)


Funkcja znajdująca indeks pod którym zapisana jest książka o danym id w
tablicy.
int wypozycz_ksiazke(CZYTELNIK czytelnicy[], KSIAZKA ksiazki[], int
liczba_czytelnikow, int liczba_ksiazek); //Zwraca 0 jesli uzytkownik ma za duza liczbe
wypozyczen, -1 jesli ksiazke wypozyczylo zbyt wiele uzytkownikow
Funkcja rozpoczyna od sprawdzenia, czy w bazie jest przynajmniej jedna
ksiazka i jeden czytelnik. Jesli nie ma, zwraca -2.
W przeciwnym przypadku wczytuje ID czytelnika, sprawdza jego poprawnosc,
oraz znajduje indeks, pod ktorym jest zapisany czytelnik o danym ID.
Jezeli czytelnik ma juz wypozyczona maksymalna liczbe ksiazek, zwraca 0.
W przeciwnym przypadku wczytuje ID ksiazki, sprawdza jego poprawnosc,
oraz znajduje indeks, pod ktorym jest zapisana ksiazka o danym ID.
Jezeli czytelnik wypozyczyl juz te dana ksiazke, zwraca -3.
W przeciwnym przypadku dopisuje do rekordu czytelnikow id ksiazki oraz id
czytelnika do rekordu ksiazki i zwraca 1.

-Funkcje pomocnicze:
int wczytaj(char slowo[], int maks_rozmiar);
Funkcja pobiera od czytelnika kolejne znaki i zapisuje je w tablicy slowo.
Po przekroczeniu maksymalnej ilosci znakow (maks_rozmiar) ignoruje
wszystkie kolejne wprowadzone.
Na ostatnie miejsce wpisuje '0' oraz zwraca dlugosc wczytanego slowa.

void usun_z_tablicy(int tablica[], int* ilosc_elementow, int element);


Funkcja iteruje po przekazanej tablicy i usuwa wartość równą podanemu
elementowi.
Zmniejsza ilosc elementow o 1. (Zalozenie: elementy w tablicy sie nie
powtarzaja!)

int czyZaalokowana (int tablica[], int rozmiar, int element);


Funkcja iteruje po tablicy i sprawdza, czy znajduje się w niej wartość równa
podanemu elementowi.
Jeśli tak, zwraca „jest”. W przeciwnym przypadku zwraca NULL.

void wczytaj_liczbe(int * id, int min, int max);


Funkcja wczytuje liczbę i zapisuje pod przekazanym adresem.
Sprawdza, czy wartość jest odpowiedniego typu oraz czy mieści się w
podanym zakresie. (min<=liczba<max)

void wczytaj_ID_czytelnika (CZYTELNIK czytelnicy[], int * id, int liczba_czytelnikow);


Funkcja wczytuje liczbę i zapisuje pod przekazanym adresem.
Sprawdza, czy wartość jest odpowiedniego typu a następnie szuka indeksu,
pod którym zapisany jest czytelnik o danym id.
Jeśli indeks nie został znaleziony, oznacza to, że id zostało źle podane i
pobiera od użytkownika nową wartość.

void wczytaj_ID_ksiazki (KSIAZKA ksiazki[], int * id, int liczba_ksiazek);


Funkcja wczytuje liczbę i zapisuje pod przekazanym adresem.
Sprawdza, czy wartość jest odpowiedniego typu a następnie szuka indeksu,
pod którym zapisana jest książka o danym id.
Jeśli indeks nie został znaleziony, oznacza to, że id zostało źle podane i
pobiera od użytkownika nową wartość.

void show_instruction();
Pokazuje menu startowe.

-Funkcje wyświetlające:
void wyswietl_czytelnicy(CZYTELNIK czytelnicy[], int liczba_czytelnikow);
void wyswietl_czytelnicy_skrot(CZYTELNIK czytelnicy[], int
liczba_czytelnikow);
void wyswietl_ksiazki(KSIAZKA ksiazki[], CZYTELNIK czytelnicy[], int
liczba_ksiazek);
void wyswietl_ksiazki_skrot(KSIAZKA ksiazki[], int liczba_ksiazek)h

You might also like