==== 1. Projekt konceptualny ==== **1.1 Sformułowanie zadania projektowego** System biblioteki publicznej ma na celu ułatwienie dostępu do informacji na temat posiadanych przez bibliotekę zasobów jakimi są książki. Za pośrednictwem strony internetowej czytelnik nie będzie mógł wypożyczyć książki, cały czas będzie musiał zgłosić się po nią osobiście. Zarejestrowany czytelnik dzięki takiemu systemowi dowie się czy egzemplarz danej książki jest aktualnie na stanie czy został wypożyczony i kiedy najwcześniej będzie z powrotem w bibliotece. Czytelnik otrzymuje również możliwość terminowej rezerwacji książki, tak aby w swoim wolnym czasie bez obaw udać się tylko po odbiór i nie zostać odesłanym z kwitkiem. Internetowy dostęp do biblioteki umożliwia dodatkowo użytkownikom wgląd w dokonane rezerwacje i wypożyczenia, oraz w archiwum wypożyczeń. Ułatwia to kontrolę nad terminami zwrotów wypożyczonych pozycji. Aby uzyskać dostęp do wszystkich udogodnień czytelnik musi przejść proces rejestracji. Tym sposobem biblioteka gromadzi potrzebne dane osobowe oraz kontaktowe w celu kontaktowania się z czytelnikami nie dotrzymującymi terminów zwrotu książek. Udzielenie ostrzeżenie użytkownikowi zwracającemu książkę po terminie, blokady po przekroczeniu maksymalnej liczby rezerwacji/wypożyczeń, oraz system informujący czytelników o mijających terminach poprzez kontakt na podany podczas rejestracji adres email to operacje wykonywane automatycznie w ramach pracy systemu. System taki nie zastąpi jednak człowieka w pracy. Cały czas w bibliotece potrzebna będzie osoba która wyda czytelnikowi książkę. Same książki również muszą być do bazy wprowadzane gdyż zbiory biblioteki nieustannie ulegają zmianom. Pracownik biblioteki kontroluje poprawność danych za pomocą możliwości ich edycji, zarówno w przypadku książek jak i czytelników. Fizycznie oceniając stan książki ma możliwość wycofania jej z ogólnodostępnych danych tak aby nie były zwracane jako wynik wyszukiwania żądanej pozycji. **1.2 Analiza stanu wyjściowego** Oprogramowanie biblioteki jest popularnym tematem. Na rynku istnieje wiele rozwiązań, umożliwiających przeglądanie w trybie online zbiorów bibliotek, natomiast zbiory elektroniczne są jeszcze bardzo ograniczone. Niewiele bibliotek posiadających znaczne zbiory, posiada możliwość zarezerwowania książki poprzez stronę internetową. Nasza biblioteka internetowa ma za zadanie ułatwić czytelnikowi rezerwację książki oraz kontrolę swoich wypożyczeń z dowolnego miejsca z dostępem do internetu. **1.3 Analiza wymagań użytkownika** 1. Gość * przeszukiwanie zbiorów bibliotecznych * możliwość rejestracji 2. Konto zarejestrowanego użytkownika (czytelnika) * rejestracja użytkownika poprzez stronę internetową (wypełnienie danych teleadresowych) * możliwość zalogowania się do systemu * możliwośc rezerwacji książek * przeglądanie własnego konta w bibliotece, w tym dokonanych wypożyczeń oraz rezerwacji * możliwość aktualizacji danych * powiadomienie o mijającym terminie oddania książki * przeszukiwanie zbiorów bibliotecznych 3. Konto pracownika biblioteki * administracja zasobami (dodawanie, usuwanie, edycja pozycji) * administracja kontami użytkowników (blokada kont, rezerwacje , wypożyczenia) * nakładanie kar pieniężnych 4. Konto administratora * administracja zasobami * administracja kontami użytkowników * administracja kontami pracowników **1.4 Określenie scenariuszy użycia** __1. Rejestracja użytkownika w systemie__ a. Użytkownik na głównej stronie wybiera link "zarejestruj się" b. Następuje przekierowanie do strony z formularzem rejestracyjnym c. Użytkownik wypełnia formularz danymi, adres e-mail, hasło, imię, nazwisko, adres zamieszkania, telefon oraz pesel d. Następuje walidacja formularza i. W przypadku kiedy któreś z pól jest puste, bądź telefon lub pesel są za długie lub krótkie następuje wyświetlenie informacji o błędzie ii. W przypadku kiedy formularz został poprawnie wypełniony następuje przejście dalej e. Konto użytkownika zostaje założone __2. Logowanie użytkownika do systemu__ a. Niezalogowany użytkownik na dowolnej stronie do której ma dostęp posiada wyświetlony formularz logowania b. Użytkownik wypełnia formularz adresem e-mail oraz hasłem c. Następuje weryfikacja danych i. W przypadku kiedy podano błędny e-mail lub hasło następuje wyświetlenie informacji o błędzie autentykacji i przekierowanie na stronę z formularzem do logowania ii. W przypadku kiedy dane są poprawne następuje zalogowanie użytkownika do systemu i przekierowanie na stronę główną __3. Przeglądanie konta użytkownika__ a. Zalogowany użytkownik znajduje się na stronie głównej i wybiera link "zobacz swój profil" b. Użytkownik zostaje przekierowany na stronę wyświetlającą jego aktualne dane c. Wyświetlone zostają również rezerwację użytkownika oraz aktualne wypożyczenia __4. Edycja konta użytkownika__ a. Zalogowany użytkownik znajduje się na stronie głównej i wybiera link "zobacz swój profil" b. Następuje przekierowanie na stronę wyświetlająca dane użytkownika c. Użytkownik klika na przycisk "edytuj" d. Następuje przekierowanie do strony z formularzem e. Użytkownik zmienia dane, adres, numer telefonu, imię lub nazwisko f. Następuje walidacja formularza i. W przypadku gdy któreś z pól jest puste zostaje wyświetlony komunikat o błędnym wypełnieniu formularza ii. W przypadku gdy dane są poprawne następuje aktualizacja danych i przekierowanie do strony wyświetlającej profil użytkownika __5. Powiadomienie o mijającej dacie zwrotu książki__ a. System codziennie o godzinie 3.00 sprawdza czy istnieją wypożyczenia, których data zwrotu kończy się za 2 dni. i. W przypadku braku takich wypożyczeń nic się nie dzieje ii. W przypadku gdy istnieją takie wypożyczenia, zostaje wysłana informacja do danych użytkownikó poprzez wiadomość e-mail __6. Dodanie nowej pozycji do zbiorów biblioteki__ a. Zalogowany pracownik biblioteki znajduje się na stronie głównej i wybiera link "administracja książkami" b. Następuje przekierowanie do strony z panelem administracyjnym, gdzie znajduje się m. in. formularz do dodawania nowych książek c. Pracownik biblioteki wypełnia dane, tytuł książki, autorów, ISBN, ilość kopii oraz rok publikacji d. Następuje walidacja formularza i. W przypadku gdy któreś z pól jest puste bądź podano ujemną ilość kopii lub ISBN nie składający się z cyfr zostaje wyświetlony komunikat o błędzie ii. W przypadku gdy dane są poprawne następuje przejście dalej e. Książka zostaje dodana do zbiorów biblioteki f. Pracownik biblioteki zostaje przekierowany z powrotem do panelu administracji książkami __7. Edycja/Usunięcie pozycji ze zbiorów biblioteki__ a. Zalogowany pracownik biblioteki znajduje się na stronie administracji książkami b. Wpisuje do formularza (wyszukującego książki) dane poszukiwanej książki c. Następuje przekierowanie do strony z wynikami wyszukiwania i. Pracownik biblioteki klika na przycisk "usuń" obok pozycji 1. Książka zostaje usunięta z bazy danych 2. Następuje przekierowanie do strony administracji książkami ii. Pracownik biblioteki klika na przycisk "edytuj" obok pozycji 1. Następuje przekierowanie do strony z formularzem 2. Pracownik biblioteki wprowadza dane aktualizacji książki, tytuł, ISBN, rok publikacji oraz ilość kopii 3. Następuje walidacja formularza a. W przypadku gdy któreś z pól jest puste lub ISBN nie składa się z samych cyfr lub ilość kopii jest mniejsza niż ilość wypożyczeń danej książki następuje wyświetlenie informacji o błednych danych b. W przypadku gdy dane są poprawne następuje aktualizacja danych i przekierowanie do strony administracji książkami __8. Blokowanie konta użytkownika__ a. Zalogowany pracownik biblioteki znajduje się na stronie głównej i wybiera link "administracja czytelnikami" b. Zostaje przekierowany do strony z formularzem wyszukiwania użytkowników c. Wypełnia formularz d. Następuje przekierowanie do strony z wynikami wyszukiwania e. Pracownik biblioteki klika na przycisk "zablokuj konto" obok konta użytkownika f. Konto użytkownika zostaje zablokowane g. Do użytkownika zostaje wysłana wiadomość e-mail informująca o zablokowaniu konta __9. Przeszukiwanie zbiorów bibliotecznych__ a. Niezalogowany użytkownik znajduje się na głównej stronie i wybiera link "wyszukaj książkę" b. Następuje przekierowanie do formularza wyszukiwania c. Użytkownik wpisuje dane wg. których ma nastąpić wyszukiwanie, może to być tytuł lub jego fragment, autor, rok wydania lub ISBN d. Następuje walidacja formularza i. W przypadku gdy żadne pole nie jest wypełnione następuję wyświetlenie informacji o konieczności wypełnienia przynajmniej jednego pola ii. W przypadku gdy wypełniono chociaż jedno pole następuję przekierowanie do strony z wynikami wyszukiwania __10. Zarezerwowanie książki__ a. Zalogowany użytkownik znajduje się na stronie z wynikami wyszukiwania książki i klika przycisk "zarezerwuj" b. Następuje przekierowanie do strony wyświetlającej dane książki oraz formularz do wpisania daty zgłoszenia się po odbiór książki i. W przypadku gdy aktualnie nie ma żadnego wolnego egzemplarza, zostaje wyświetlona informacja kiedy powinny pojawić się oddane egzemplarze 1. Użytkownik przekierowany jest do strony wyszukiwania książek ii. W przypadku gdy istnieją wolne egzemplarze użytkownik wypełnia formularz iii. Następuje walidacja formularza 1. W przypadku gdy data odbioru jest pusta lub użytkownik wyznaczył ją dalej niż za 7 dni zostaje wyświetlona informacja o błędzie podczas rezerwacji lub niemożliwości rezerwacji książki na dłużej niż tydzień 2. W przypadku gdy dane się zgadzają następuje przejście dalej iv. Rezerwacja zostaje zapisana w systemie v. Użytkownik przekierowywany jest do strony wyszukiwania książek __11. Unieważnienie niesfinalizowanej rezerwacji__ a. System codziennie o godzinie 3.00 sprawdza czy istnieją rezerwacje na dzień wcześniej b. W przypadku gdy istnieją takie rezerwacje zostają one anulowane c. Do użytkownika któremu anulowano rezerwację zostaje wysłana wiadomość e-mail **1.5 Identyfikacja funkcji** Podstawowe funkcje realizowane w bazie danych, to przechowywanie informacji o: * kontach użytkowników zarejestrowanych w bibliotece * kontach pracowników biblioteki * książkach znajdujących się w zbiorach biblioteki, powiązanych z autorami * autorach, powiązanych z książkami * egzemplarzach książek, powiązanych z konkretnymi pozycjami * wypożyczeniach książki, powiązanych z konkretnym egzemplarzem oraz z użytkownikiem, który wypożyczył daną książkę * rezerwacjach książki, powiązanych z egzemplarzem oraz użytkownikiem **1.6 Analiza hierarchii funkcji projektowanej aplikacji** {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:fhd.png|}} Rys 1. Diagram FHD **1.7 Budowa i analiza diagramu przepływu danych** {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:bardzogolny.png|}} Rys 2. Diagram kontekstowy {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:ogolny.png|}} Rys 3. Diagram główny {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:gosc.png|}} Rys 4. Diagram DFD dla użytkownika niezarejestrowanego {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:uzytkownik.png|}} Rys 5. Diagram DFD dla użytkownika zarejestrowanego {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:pracownik.png|}} Rys 6. Diagram DFD dla pracownika **1.8 Wybór encji(obiektów) i ich atrybutów** 1. Czytelnik * e-mail * hasło * imię * nazwisko * telefon * pesel * adres * zarezerwowane książki * wypożyczone książki 2. Pracownik biblioteki * e-mail * hasło * imię * nazwisko 3. Książka * tytuł * autorzy * ISBN * rok wydania * egzemplarze 4. Autor * nazwa * napisane książki 5. Egzemplarz książki * status wypożyczenia * książka 6. Rezerwacja książki * data rezerwacji * data odbioru książki * czytelnik książka 7. Wypożyczenie książki * czytelnik * data wypożyczenia * data planowanego zwrotu **1.9 Projektowanie powiązań(relacji) pomiędzy encjami** {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:erd.png|}} Rys 7. Diagram ERD **1.10 Projekt diagramów STD (State transition Diagram – diagram przejść między stanami)** {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:goscstd.png|}} Rys 8. Diagram STD dla użytkownika niezalogowanego {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:zalogowanystd.png|}} Rys 9. Diagram dla użytkownika zalogowanego {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:pracownikstd.png|}} Rys 10. Diagram STD dla pracownika ===== 2. PROJEKT LOGICZNY ===== **2.1. Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. W oparciu o zdefiniowany diagram ERD;** **2.1.1 Utworzenie bazy danych.** create database if not exists Library default character set = utf8; 2.1.2 Utworzenie tabel. use Library; create table book ( book_id int8 not null, isbn varchar(255), book_title varchar(255), year_of_publication int8, primary key (book_id) ); create table authors ( author_id int8 not null, author_name varchar(255), author_last_name varchar(255), primary key (author_id) ); create table reader ( reader_id int8 not null, address_apartment int4, address_building int4, address_city varchar(255), address_street varchar(255), email varchar(255) unique, first_name varchar(255), last_name varchar(255), password varchar(255), pesel varchar(255), phone_number varchar(255), role varchar(255), primary key (reader_id) ); create table library_worker ( worker_id int8 not null, email varchar(255) unique, first_name varchar(255), last_name varchar(255), password varchar(255), role varchar(255), primary key (worker_id) ); create table book_authors ( book_id int8 not null, author_id int8 not null ); create table reservedBook ( reservation_id int8 not null, book_copy_id int8, planned_reception_date timestamp, reader_id int8, reservation_date timestamp, primary key(reservation_id) ); create table BorrowedBook ( borrow_id int8 not null, book_copy_id int8, borrow_date timestamp, reader_id int8, return_date timestamp, primary key (borrow_id) ); create table BookCopy ( book_copy_id int8 not null, book_id int8, is_avaiable bool, primary key (book_copy_id) ); **2.1.3 Utworzenie kluczy obcych** alter table BookAuthors add constraint FK_Book_Author foreign key (Book_id) references Book alter table BookAuthors add constraint FK_Author_Book foreign key (Autho_id) references Author alter table ReservedBook add constraint FK_ReservedBook_BookCopy foreign key (Book_copy_id) references BookCopy alter table ReservedBook add constraint FK_ReservedBook _Reader foreign key (Reader_id) references Reader alter table BorrowedBooks add constraint FK_BorrowedBook_BookCopy foreign key (Book_copy_id) references BookCopy alter table BorrowedBooks add constraint FK_BorrowedBook _Reader foreign key (Reader_id) references Reader alter table BookCopy add constraint FK_BookCopy_Book foreign key (Book_id) references Book **2.2 Słownik danych** Book – tabela przechowująca dane o książkach * Book_id – PK , INTEGER - id ksiazki * Book_title - VARCHAR(255) , NOT NULL – tytuł książki * Isbn – VARCHAR(255) , NOT NULL – numer ISBN * Year_of_publication – INTEGER, NOT NULL – data publikacji Author – tabela przechowywujące dane o autorach * Author_id – PK ,INTEGER – id autora * Author_name – VARCHAR(255) , NOT NULL – Imie * Author_last_name – VARCHAR(255) , NOT NULL - Nazwisko Reader – tabela przechowujaca dane o użytkownikach * Reader_id – PK , INTEGER – id czytelnika * Email – VARCHAR(255) , NOT NULL , UNIQUE–unikalny adres email * Password – VARCHAR(255) , NOT NULL - hasło * First_name – VARCHAR(255) , NOT NULL - imie * Last_name – VARCHAR(255) , NOT NULL - nazwisko * Pesel - – VARCHAR(255) , NOT NULL –numer pesel * Phone_number – VARCHAR(255) – numer telefonu * Address_apartment – INTEGER – numer mieszkania * Addres_building – INTEGER , NOT NULL – numer budynku * Address_city - – VARCHAR(255) , NOT NULL - miasto * Adress_street – VARCHAR(255)– nazwa ulicy LibraryWorker – tabela przechowująca dane o pracownikach * Worker_id – PK INTEGER – id pracownika * First_name – VARCHAR(255) , NOT NULL - imie * Last_name – VARCHAR(255) , NOT NULL - nazwisko * Email – VARCHAR(255) , NOT NULL , UNIQUE - unikalny adres email * Password – VARCHAR(255) , NOT NULL - hasło BookAuthors - tabela dla relacji wiele do wielu * Author_id – FK , INTEGER - id autora * Book_id – FK, INTEGER – klucz obcy do id ksiazki ReservedBook – tabela przechowująca dane o rezerwacjach * Reserved_book_id – PK , INTEGER - id rezerwacj * Book_copy_id – FK , INTEGER - klucz obcy do id ksiazki * Reader_id – FK , INTEGER – klucz obcy do id czytelnika * Reservation_date – DATE , NOT NULL - data rezerwacji * Planned_reception_date – DATE , NOT NULL – data konca rezerwacji BorrowedBook – tabela przechowująca dane o wypożyczeniach * Borrowed_book_id – PK , INTEGER – id wypozyczenia * Book_copy_id – FK ,INTEGER – klucz obcy do id ksiazki * Borrow_date – DATE , NOT NULL – data wypożyczenia * Return_date – DATE , NOT NULL – data zwrotu * Reader_id – FK , INTEGER – klucz obcy do Id czytelnika BookCopy – tabela przechowująca dane o egzemplarzach * Book_copy_id – PK , INTEGER – id egzemplarza * Book_id – FK , INTEGER – klucz obcy do opisu ksiazki * Borrow status – VARCHAR(255),NOT NULL – status egzemplarza **2.3. Analiza zależności funkcyjnych i normalizacja tabel** 1NF Relacja jest w pierwszej postaci normalnej (1NF) wtedy i tylko wtedy gdy wszystkie atrybuty przyjmują wartości elementarne (atomiczne). Atomowość danych jest ściśle powiązana z ich typem (nazwanym i skończonym zbiorem wartości). Pierwsza postać normalna jest konieczna, aby tabelę można było nazwać relacją. Nasza baza spełnia te warunki. Wszystkie wartości w tabelach są atomowe. 2NF Relacja R jest w drugiej postaci normalnej (2NF) wtedy i tylko wtedy, gdy nie zawiera zależności częściowych, tzn. żadna zależność częściowa nie wynika logicznie ze zbioru F. Wszystkie tabele w naszej bazie posiadają klucz prosty, więc ich atrybuty zależą w całości od klucza głównego. Baza jest w 2NF. 3NF Relacja jest w trzeciej postaci normalnej tylko wtedy, gdy jest w drugiej postaci normalnej i każdy atrybut wtórny jest tylko bezpośrednio zależny od klucza głównego. Innymi słowy wymaga usunięcia wszelkich pól niezwiązanych z kluczem głównym. Z powodu, że każda tabela w naszej bazie posiada klucz prosty, jej atrybuty są w całości zależne od klucza głównego. Więc warunek postaci 3NF jest również spełniony. **2.4. Projektowanie operacji na danych** Operacje na bazie danych wykonujemy za pomocą języka HQL. Zapytania HQL reprezentowane są przez obiekty klasy org.hibernate.Query , które należy zawsze tworzyć z użyciem obiektu reprezentującego sesję. Obiekt org.hibernate.Query umożliwia przekazanie parametrów do utworzonego zapytania. Pobierz dla podanego id użytkownika wszystkie zarezerwowane książki : private final static String HQL_GET_RESERVED_BOOKS_FOR_READER = "from ReservedBook where readerId = : readerId"; Query query = session.createQuery(HQL_GET_RESERVED_BOOKS_FOR_READER); query.setLong("readerId", readerId); return query.list(); Znajdź pracownika po wskazanym adresie email : private static final String HQL_FIND_LIBRARY_WORKER_BY_EMAIL = "from LibraryWorker where email = :email"; Query query = session.createQuery(HQL_FIND_LIBRARY_WORKER_BY_EMAIL); query.setString("email", email); return (LibraryWorker) query.uniqueResult(); Pobierz egzemplarz książki po wskazanym id: private String HQL_GET_BOOK_COPY_FOR_BOOK_ID = "from BookCopy where bookId = :bookId"; Query query = session.createQuery(HQL_GET_BOOK_COPY_FOR_BOOK_ID); query.setLong("bookId", bookId); return (BookCopy) query.uniqueResult(); ===== 3. Raport końcowy ===== **3.1 Implementacja bazy danych** Wykorzystano serwer PostgreSQL 8.4. Utworzenie bazy danych zostało zautomatyzowane poprzez wykorzystanie narzędzia maven. **3.2 Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych** {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:glowna.png|}} Rys 11 Strona główna {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:rejestracja.png|}} Rys 12 Formularz rejestracyjny {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:logowanie.png|}} Rys 13 Formularz logowania {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:czytelnik-profil.png|}} Rys 14 Podgląd profilu użytkownika {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:czytelnik-profil-edycja.png|}} Rys 15 Formularz do edycji profilu użytkownika {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:czytelnik-profil-rezerwacje.png|}} Rys 16 Podgląd rezerwacji użytkownika {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:czytelnik-profil-wypozyczenia.png|}} Rys 17 Podgląd wypożyczeń użytkownika {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:ksiazka-wyszukiwanie.png|}} Rys 18 Wyszukiwanie książek {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:ksiazka-rezerwacja.png|}} Rys 19 Podgląd wybranej pozycji {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:ksiazka-dodawanie.png|}} Rys 20 Formularz do dodawania nowej pozycji {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:edycja-usuwanie-ksiazki.png|}} Rys 21 Widok książki z poziomu pracownika {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:rezerwacje.png|}} Rys 22 Ekran wypożyczenia bądz anulowania rezerwacji {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:wypozyczenia.png|}} Rys 23 Dokonywanie zwrotu z poziomu pracownika **3.3 Zdefiniowanie panelu sterowania aplikacji** Nawigacja odbywa się jak w klasycznych stronach internetowych za pomocą linków oraz przycisków. Na stronie została zastosowana technologia AJAX. Strona w zależnośći od tego, kto jest zalogowany umożliwia różne akcje. W przypadku niezalogowanego użytkownika umożliwa logowanie, rejestrację oraz przegląd książek. Zalogowany użytkownik może się wylogować, zobaczyć swoje dane w systemie, część z nich może sam edytować. Ponadto ma możliwość obejrzenia swoich rezerwacji oraz wypożyczeń zapisanych w systemie. Podczas wyszukiwania książek oraz przeglądania konkretnych pozycji użytkownik może zobaczyć ilość dostępnych egzemplarzy i ewentualnie zarezerwować jeden dla siebie. W przypadku zalogowanego pracownika biblioteki ma on możliwość dodawania, edytowania oraz usuwania książek, dokonywania wypożyczeń, przyjmowania zwrotów oraz anulowania rezerwacji. 3.4 Zdefiniowanie makropoleceń dla realizacji typowych operacji W projekcie wykorzystano framework do realizacji mapowania obiektowo-relacyjnego Hibernate z wykorzystaniem adnotacji. Większość operacji CRUD, które zostały użyte w aplikacji, zostały dostarczone poprzez Hibernate. **3.5 Uruchamianie i testowanie aplikacji** Aplikacja jest uruchamiana przy wykorzystaniu narzędzia Maven. Odpowiednio skonfigurowane pluginy uruchamiają serwer www z kontenerem servletów Jetty i uruchamiają plik .war. Strona testowana była ręcznie na środowisku lokalnym. **3.6 Wprowadzanie danych** Wprowadzenie danych testowych zostało zautomatyzowane poprzez plugin dbunit do narzędzia Maven. Przygotowano odpowiedni plik xml z którego zostały wczytane przykładowe dane do bazy danych. Część danych została wprowadzona poprzez formularze aplikacji. **3.7 Wdrażanie systemu do użytkowania** Do wdrożenia systemu potrzebny jest serwer www oraz serwer bazy danych postgres. Należy dostosować plik konfiguracyjny maven'a do adresu serwerów i za pomocą odpowiedniej komendy uruchomić kompilację oraz uruchomienie aplikacji. **3.8 Przeprowadzenie szkolenia użytkowników** Strona nie powinna przysparzać rzadnych problemów zwykłym użytkownikom internetu, dlatego nie przewidziano szkoleń. **3.9 Zapewnienie dokumentacji technicznej i użytkowej** Nie zapewniono dokumentacji ze względu na prostotę strony internetowej **3.10 Zapewnienie obsługiwania systemu po wdrożeniu** Po wdrożeniu potrzebny jest administrator systemu, który będzie dbał o robienie systematycznych backupów bazy danych oraz rozwiązywał nieoczekiwane problemy z serwerem. **3.11 Rozwijanie i modyfikowanie aplikacji** Przede wszystkim aplikacja potrzebuje szaty graficznej, najlepiej przygotowanej przez doświadczonego grafika stron internetowych. Do aplikacji można dodać wiele nowych funkcjonalności, takich jak dostęp do e-booków, bądź bardziej zaawansowane wyszukiwanie książek. Ewentualnie umieszczenie fragmentów książek na stronie i możliwość wyszukiwania pozycji po treści książki. **3.12 Opracowanie doświadczeń wynikających z realizacji projektu** Niestety nie prowadziliśmy notatek odnośnie czasu spędzonego nad poszczególnymi zadaniami. Na pewno projekt pozowlił nam na douczenie się w zakresie technologii związanych z językiem Java. Jeden z nas poznał część bibliotek od nowa, natomiast drugi podszkolił się w bardziej zaawansowanych technologicznie fragmentach kodu. Na pewno tym co nie wyszło nam tak jak planowaliśmy jest organizacja pracy, w tej kwestii potrzebujemy więcej doświadczenia. Aplikacja również nie jest idealnie dopracowana, co widać chociażby po szacie graficznej. **3.13 Wykaz literatury, załączniki** Wykorzystane technologie: * Spring * Spring MVC * Spring-Security * Hibernate * Maven * JSP * PostgreSQL * Jetty Wykorzystano dokumentację zamieszczone na stronach: * http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ * http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html * http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html * http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html_single/ * {{:pl:dydaktyka:ztb:2012:projekty:biblioteka_internetowa:projekt_library.pdf|}}