Programowanie obiektowe sem. II, lato 2014/2015 Zadania semestralne Założenia wspólne dla wszystkich tematów W programie muszą być zastosowane następujące techniki i technologie obiektowe: 1. kapsułkowanie, 2. dziedziczenie, 3. polimorfizm, 4. strumienie (w zakresie podstawowym). Ponadto musi pojawić się korzystanie z plików zarówno jako bazy danych (odczyt i zapis rekordów) jak i raportów (zapis do pliku tekstowego w postaci gotowej do wysłania do wydruku z nagłówkiem, kolumnami danych i stopką). Interfejs użytkownika powinien być ograniczony do okna konsoli i trybu tekstowego. Program powinien zawierać mechanizmy kontroli poprawności wprowadzanych danych.
Zadanie 1 Napisz program do zarządzania bazą danych pracowników. W programie mogą znaleźć się pracownicy szeregowi oraz kierownicy. Każdy pracownik szeregowy reprezentowany jest przez rekord zawierający jego numer identyfikacyjny, numer identyfikacyjny jego kierownika, imię, nazwisko, wynagrodzenie podstawowe i wiek. Każdy kierownik reprezentowany jest przez rekord zawierający jego numer identyfikacyjny, liczbę pracowników, imię, nazwisko, wynagrodzenie podstawowe i wiek. Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie nowego pracownika do bazy (przy dodawaniu program automatycznie sprawdza, czy podany numer identyfikacyjny nie został już wykorzystany numery rekordów powinny być niepowtarzalne). 2. Usuwanie z bazy pracownika o wskazanym numerze identyfikacyjnym, przy kasowaniu kierownika należy zmodyfikować nowego przełożonego dla pracowników (można przyjąć, że wszyscy przechodzą do jednego). 3. Modyfikacja danych pracowników zapisanych w bazie. 4. Sortowanie pracowników pod względem wieku (sortowanie dowolne). 5. Drukowanie pełnej listy pracowników w oknie konsoli. 6. Drukowanie całego zespołu pracowników podanego kierownika.
Zadanie 2 Napisz program do zarządzania bazą danych o komputerach w firmie. Baza danych powinna rozróżniać komputery stacjonarne (desktop) i komputery przenośne (laptop). Każdy desktop reprezentowany jest przez rekord zawierający jego dane: wymiary (wysokość, szerokość, długość), numer identyfikacyjny, typ procesora, zegar procesora, oraz nazwę rozpoznawaną w sieci. Każdy laptop reprezentowany jest przez rekord zawierający jego dane: waga, numer identyfikacyjny, typ procesora, zegar procesora, oraz nazwę rozpoznawaną w sieci. Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie nowego komputera do listy (przy dodawaniu program automatycznie sprawdza, czy podany numer identyfikacyjny nie został już wykorzystany numery rekordów powinny być niepowtarzalne). 2. Usuwanie z bazy komputera o wskazanym numerze identyfikacyjnym. 3. Sortowanie listy komputerów pod względem ich numeru ID (sortowanie dowolne) 4. Modyfikacja danych o komputerze. 5. Drukowanie listy komputerów o typie procesora podanym przez użytkownika. 6. Sprawdzanie czy istnieje komputer o nazwie podanej przez użytkownika. 7. Drukowanie pełnej listy komputerów.
Zadanie 3 Napisz program do zarządzania bazą danych o fakturach. Program obsługuję podstawowe faktury, oraz faktury korygujące. Każda faktura podstawowa reprezentowana jest przez rekord zawierający jej dane: numer identyfikacyjny, numer faktury, termin wystawienia w formacie rrrr.mm.dd, ID klienta oraz kwota. Każda faktura korygująca reprezentowana jest przez rekord zawierający jej dane: numer identyfikacyjny, numer faktury, numer faktury której dotyczy korekta, termin wystawienia w formacie rrrr.mm.dd, ID klienta oraz kwota. Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie faktur do listy faktur (przy dodawaniu program automatycznie sprawdza, czy podany numer identyfikacyjny nie został już wykorzystany numery rekordów powinny być niepowtarzalne). 2. Usuwanie faktury z listy faktur (poprzez wskazanie jej numeru identyfikacyjnego lub numeru faktury). 3. Sortowanie wg ID klienta (sortowanie dowolne) 4. Raportowanie wysyłanie pełnej listy faktur zapisanych w bazie do pliku tekstowego, sformatowanego tak, aby kolejne pola rekordu (z pominięciem pola numer identyfikacyjny ) znajdowały się w jednym wierszu w kolejnych kolumnach raportu (szerokość kolumn dowolna), a w ostatniej linijce zapisana była suma wartości faktur umieszczonych w raporcie. 5. Drukowanie listy faktur o kwocie większej niż wartość podana przez użytkownika. 6. Drukowanie listy faktur o kwocie mniejszej niż wartość podana przez użytkownika.
Zadanie 4 Napisz program do zarządzania bazą danych o książkach. Program jest w stanie rozpoznać lektury szkolne i pozostałe książki. Każda lektura reprezentowana jest przez rekord zawierający jej dane: numer identyfikacyjny, dla której klasy jest to lektura, tytuł, nazwisko autora oraz znacznik. Każda pozostała książka reprezentowana jest przez rekord zawierający jej dane: numer identyfikacyjny, tytuł, nazwisko autora oraz znacznik. Znacznik to wartość true/false określająca czy dany egzemplarz jest wypożyczony (false) czy też dostępny w bibliotece (true). Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie książek do listy (przy dodawaniu program automatycznie sprawdza, czy podany numer identyfikacyjny nie został już wykorzystany numery rekordów powinny być niepowtarzalne). 2. Usuwanie książek z listy. 3. Ustawianie książkom znacznika wypożyczona/dostępna użytkownik podaje numer identyfikacyjny a system znajduje dana książkę i pyta o jej nowa wartość znacznika. 4. Sortowanie książek wg nazwiska autora (sortowanie dowolne). 5. Drukowanie do pliku tekstowego listy książek wypożyczonych. 6. Drukowanie do pliku tekstowego pełnej listy książek.
Zadanie 5 Napisz program do zarządzania bazą danych o wychodzących połączeniach telefonicznych za dany okres czasu (tzw. billingiem). System rozróżnia połączenia na telefony stacjonarne oraz komórkowe. Każde połączenie na telefony stacjonarne reprezentowane są przez rekord zawierający jego dane: numer identyfikacyjny, miasto docelowe, dzień i godzina rozmowy w formacie rrrr.mm.dd,gg:mm, czas trwania rozmowy (w sekundach), numer wybieranego numeru. Każde połączenie na telefony komórkowe reprezentowane są przez rekord zawierający jego dane: numer identyfikacyjny, docelowa sieć komórkowa, dzień i godzina rozmowy w formacie rrrr.mm.dd,gg:mm, czas trwania rozmowy (w sekundach), numer wybieranego numeru. Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Importowanie bilingu z pliku tekstowego (format pliku dowolny). 2. Sortowanie bilingu pod względem czasu trwania rozmowy (sortowanie dowolne). 3. Sortowanie bilingu pod względem wybieranego numeru (sortowanie dowolne). 4. Drukowanie do pliku posortowanych list połączeń każde połączenie w jednym wierszu, kolejne pola rekordu w kolejnych kolumnach. 5. Obliczanie sumy czasów wszystkich połączeń dla poszczególnych numerów (tj. jeżeli w ciągu miesiąca do danego numeru dzwoniono kilka razy, to należy obliczyć sumę czasów tych połączeń) i drukowanie do pliku raportu z sumami czasów dla poszczególnych numerów.
Zadanie 6 Napisz program do zarządzania bazą danych o połączeniach kolejowych - odjazdach dla pewnej stacji kolejowej. Program rozpoznaje połączenia kolejowe osobowe i towarowe. Każde połączenie osobowe reprezentowane jest przez rekord zawierający jego dane: numer identyfikacyjny, nazwa stacji docelowej, godzina odjazdu w formacie gg:mm, klasa pociągu (Express, pośpieszny, zwykły). Każde połączenie towarowe reprezentowane jest przez rekord zawierający jego dane: numer identyfikacyjny, nazwa stacji docelowej, godzina odjazdu w formacie gg:mm, typ przewożonego ładunku (węgiel, samochody osobowe, benzyna). Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie nowych połączeń do rozkładu jazdy (przy dodawaniu program automatycznie sprawdza, czy podany numer identyfikacyjny nie został już wykorzystany numery rekordów powinny być niepowtarzalne). 2. Usuwanie istniejących połączeń z rozkładu. 3. Sortowanie listy połączeń pod względem godziny odjazdu (godzinę odjazdu należy traktować jako string ). 4. Drukowanie do pliku tekstowego całego rozkładu jazdy w każdym wierszu jedno połączenie, kolejne pola rekordu w kolejnych kolumnach. 5. Wyszukiwanie połączenia osobowego najbliższego godzinie odjazdu podanej przez użytkownika (tzn. pierwszego połączenia, które jest realizowane po godzinie podanej przez użytkownika). 6. Drukowanie do pliku listy połączeń pociągami tylko jednego typu podanego przez użytkownika, np. tylko pociągi pośpieszne, lub tylko przeworzące węgiel) w każdym wierszu jedno połączenie, kolejne pola rekordu w kolejnych kolumnach.
Zadanie 7 Napisz program do zarządzania bazą danych o wynikach studentów i pracowników z danego przedmiotu. Każdy student reprezentowany jest przez rekord zawierający jego dane: numer indeksu, nazwisko i ocenę końcową(2;3;3,5;4;4,5;5). Każdy pracownik reprezentowany jest przez rekord zawierający jego dane: nr umowy, nazwisko i ocenę z ankiety (liczba rzeczywista z zakresu [0,5]).Program powinien komunikować się z użytkownikiem w oknie konsoli i powinien udostępniać mu następujące opcje: 1. Dodawanie nowych studentów i pracowników do listy (przy dodawaniu program automatycznie sprawdza, czy podany numer indeksu/umowy nie został już wykorzystany numery indeksów/umów powinny być niepowtarzalne) bez wystawiania im oceny. Numer indeksu jest 5 cyfrowy zawsze, numer umowy 7 cyfrowy zawsze. 2. Usuwanie studentów i pracowników z listy. 3. Wpisywanie oceny wybranemu studentowi i pracownikowi użytkownik podaje numer indeksu/numer umowy, wtedy program daje możliwość wprowadzenia oceny, 4. Sortowanie studentów pod względem uzyskanych ocen rosnąco, tj. od najgorszych ocen do najlepszych (sortowanie dowolne), przy czym studenci bez ocen powinni znaleźć się na końcu. 5. Sortowanie pracowników pod względem uzyskanych ocen rosnąco, tj. od najgorszych ocen do najlepszych (sortowanie dowolne), przy czym pracownicy bez ocen powinni znaleźć się na końcu. 6. Drukowanie listy studentów i pracowników, wraz z ich ocenami do pliku - w każdym wierszu dane jednego studenta/pracownika, kolejne pola rekordu w kolejnych kolumnach, 7. Obliczanie liczby studentów, którzy otrzymali kolejne wartości ocen (tj. ilu studentów otrzymało 5, ilu 4,5, ilu 4, itd.) i wydrukowanie tych liczb w oknie konsoli. 8. Drukowanie do pliku listy studentów, którzy otrzymali określoną ocenę (również tych, którzy jeszcze nie mają żadnej), przy czym użytkownik najpierw podaje ocenę, a następnie tworzony jest plik - w każdym wierszu dane jednego studenta, kolejne pola rekordu w kolejnych kolumnach.