Revision: 1.2
Date: 2008/03/30 10:02:47
R
EVISION
C
HANGELOG
Contents
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
Zadanie I (termin oddania: 29/30 marca 2008)
. . . . . . . . . . . . . . . . . . . . . . .
4
Serwis samochodowy: budowa klas (zadanie podstawowe: 10 pkt)
. . . . . . . .
4
Zadanie II (termin oddania: 29/30 marca 2008)
. . . . . . . . . . . . . . . . . . . . . .
7
adzenie listy płac (zadanie podstawowe: 10 pkt)
. . . . . . . . . . . . . .
7
. . . . . . . . . . . . . . . . . . . .
8
Zadanie III (termin oddania: 12/13 kwietnia 2008)
. . . . . . . . . . . . . . . . . . . .
9
Salon sprzeda˙zy i komis (zadanie podstawowe: 10 pkt)
. . . . . . . . . . . . . .
9
Kontrola realizacji procesu sprzeda˙zy samochodu u˙zywanego (zadanie dodatkowe:
10 pkt)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Zadanie IV (termin oddania: 12/13 kwietnia 2008)
. . . . . . . . . . . . . . . . . . . .
11
Symulacja dnia pracy warsztatu samochodowego (zadanie podstawowe: 20 pkt)
.
11
aca bardziej zło˙zony zestaw reguł (zadanie dodatkowe:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
Zadanie V (termin oddania: 26/27 kwietnia 2008)
. . . . . . . . . . . . . . . . . . . . .
12
Trwało´s´c danych w oparciu o szeregowalno´s´c (zadanie podstawowe: 10 pkt)
. .
12
Utrwalanie stanu w postaci pliku tekstowego o okre´slonej składni (zadanie do-
datkowe: 25 pkt)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Zadanie VI (termin oddania: 26/27 kwietnia 2008)
. . . . . . . . . . . . . . . . . . . .
14
Posortowane kolekcje (zadanie podstawowe: 10 pkt)
. . . . . . . . . . . . . . .
14
Mapy oraz kolekcje posortowane wzgl˛edem alternatywnych kryteriów (zadanie
rozszerzone: 15 pkt)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
Alternatywne sortowanie kolekcji (10 pkt)
. . . . . . . . . . . . . . .
14
Zadanie VII (termin oddania: 17/18 maja 2008)
. . . . . . . . . . . . . . . . . . . . . .
15
c
E
DGAR
G
ŁOWACKI
CONTENTS
2
acy si˛e wykres kołowy (zadanie podstawowe: 10 pkt)
. . . . . . . . . .
15
Legenda wykresu oraz statystyka symulacji (zadania rozszerzone: 25 pkt)
. . . .
16
. . . . . . . . . . . . . . . . . . . . . . . .
16
Statystyka symulacji pracy warsztatu (10 pkt)
. . . . . . . . . . . . .
16
Zadanie VIII (termin oddania: 17/18 maja 2008)
. . . . . . . . . . . . . . . . . . . . . .
17
Wielobarwne prymitywy (figury) geometryczne (zadanie podstawowe: 10 pkt)
.
17
ace si˛e prymitywy graficzne, układanka (zadania rozszerzone: 20 pkt)
. .
18
ace si˛e prymitywy graficzne (10 pkt)
. . . . . . . . . . . . . .
18
. . . . . . . . . . . . . . . . . . . . . . . . . . .
18
Zadanie IX (termin oddania: 31 maja/1 czerwca 2008)
. . . . . . . . . . . . . . . . . .
19
ace si˛e przyciski (zadanie podstawowe: 10 pkt)
. . . . . . . . . . . . . .
19
Walidacja danych wprowadzanych przez u˙zytkownika (zadanie rozszerozne: 20
pkt)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.10 Zadanie X (termin oddania: 14/15 czerwca 2008)
. . . . . . . . . . . . . . . . . . . . .
21
2.10.1 Panel z zakładkami umo˙zliwiaj ˛
adanie ró˙zne rodzaje rekordów (zadanie
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.10.2 Utrwalanie zaznaczonego fragmentu panelu oraz paskki narz˛edzi (zadanie rozsz-
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.10.2.1 Zapis zaznaczonego fragmentu panelu głównego aplikacji w pliku (15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.10.2.2 Paski narz˛edziowe (10 pkt)
. . . . . . . . . . . . . . . . . . . . . . .
22
2.11 Zadanie XI (termin oddania: 28/29 czerwca 2008)
. . . . . . . . . . . . . . . . . . . . .
23
azane listy pojazdów i ich wła´scicieli (30 pts)
. . . . . . . . . .
23
c
E
DGAR
G
ŁOWACKI
3
1
Wprowadzenie
1.1
Zasady oceny
1. Rozwi ˛
azanie ka˙zdego zadania podstawowego dostarczone przed upływem terminu oddania b˛edzie
oceniane na maksymalnie 10 punktów;
2. Maksymalna liczba punktów mo˙zliwa do uzyskania za wykonanie zadania dodatkowego b˛edzie
zale˙zna od stopnia trudno´sci konkretnego zadania;
3. Z chwil ˛
a rozpocz˛ecia pierwszego tygodnia po terminie oddania (tj. we wtorek) maksymalna
liczba punktów mo˙zliwa do uzyskania za wykonanie zadania (zarówno podstawowego, jak i do-
datkowego) zostanie pomniejszona o 10%. Po upływie ka˙zdego kolejnego tygodnia (licz ˛
ac od
terminu oddania) liczba ta zostanie zredukowana o kolejne 20%, a˙z do osi ˛
agni˛ecia 50% warto´sci
pocz ˛
atkowej.
Oceny:
3
35%–44% (maksymalnej liczby punktów),
3.5
45%–60%,
4
61%–75%,
4.5
76%–89%
5
90%–100%
Ka˙zdy ze studentów jest zobowi ˛
azany dostarczy´c rozwi ˛
azanie zada´n dotycz ˛
acych nast˛epuj ˛
acych zagad-
nie´n:
• budowa klas (
• polimorfizm (
• implementacja interfejsów (
• strumienie (
• kolekcje (
• tworzenie aplikacji posiadaj ˛
acej prosty interfejs graficzny (ang. graphical user interface) (??).
c
E
DGAR
G
ŁOWACKI
4
2
Zadania
2.1
Zadanie I (termin oddania: 29/30 marca 2008)
2.1.1
Serwis samochodowy: budowa klas (zadanie podstawowe: 10 pkt)
Korzystaj ˛
ac z konstrukcji dost˛epnych w j˛ezyku Java
TM
stwórz reprezentacj˛e bytów, z którymi mo˙zna
si˛e zetkn ˛
a´c w serwisie samochodowym.
Autoserwis obsługuje cztery rodzaje pojazdów: (1) motycykle (ang. motorbikes), (2) samochody os-
obowe (posiadaj ˛
ace nie wi˛ecej ni˙z sze´s´c miejsc siedz ˛
acych) (ang. passenger vehicles), (3) tzw. SUV-y
(ang. sports utility vehicles), (4) furgonetki (ang. pickup trucks).
Ka˙zdy pojazd jest opisywany nast˛epuj ˛
acymi atrybutami:
• producent,
• model,
• data produkcji,
• pojemno´s´c silnika,
• moc silnika (podana w koniach mechanicznych),
• numer rejestracyjny,
• wła´sciciel pojazdu, którym mo˙ze by´c (1) jedna lub wi˛ecej osób fizycznych, or (2) firma posiada-
j ˛
aca podmiotowo´s´c prawn ˛
a.
Dodatkowo samochód charakteryzuje si˛e:
• liczb ˛
a miejsc siedz ˛
acych,
• rozmiar felg (podany w calach),
• czy samochód został wyposa˙zony w felgi aluminiowe czy stalowe,
• rodzaj opon (wymiary opon, np. 175/65R14
• pojemno´s´c baga˙znika (w cm
3
),
• czy samochód jest wyposa˙zony w automatyczn ˛
a skrzyni˛e biegów.
Dodatkowo ka˙zdy sachód osobowy mo˙ze posiada´c:
system zabezpieczaj ˛
acy przed blokowaniem kół
w trakcie hamowania (ABS — Anti-lock Braking System), system kontroli antypo´slizgowej (ASR —
Acceleration Skid Control).
Dane dotycz ˛
ace furgonetki powinny obejmowa´c dodatkowo: (1) rozmiary skrzyni, oraz (2) informacj˛e,
czy samochód został wyposa˙zony w nap˛ed na cztery koła.
Zakładamy, ˙ze ka˙zdy pojazd typu SUV posiada nap˛ed obydwu osi.
1
pierwsza liczba (175) oznacza szeroko´s´c przekroju opony, druga (65) jest tzw. profilem, b ˛
ad´z wska´znikiem przekroju
opony oznaczaj ˛
acym procentowy stosunek wysoko´sci opony do jej szeroko´sci, liczba poprzedzona liter ˛
a R okre´sla wewn˛etrzn ˛
a
´srednic˛e osadzenia opony — czyli ´srednic˛e felgi mierzon ˛
a w calach
c
E
DGAR
G
ŁOWACKI
2.1 Zadanie I (termin oddania: 29/30 marca 2008)
5
Rejestrowane dane produdenta obejmuj ˛
a: (1) nazw˛e, oraz (2) dane teleadresowe (adres, numery tele-
fonów) w Polsce.
Jak wspomniano samochód mo˙ze by´c własno´sci ˛
a: (1) osób fizycznych, lub (2) podmiotów posiadaj ˛
a-
cych osobowo´s´c prawn ˛
a.
Dane osoby fizycznej obejmuj ˛
a: (1) imi˛e, (2) nazwisko, oraz (3) dane teleadresowe.
Dane o przed-
si˛ebiorstwie b˛ed ˛
acym wła´scicielem samochodu powinny obejmowa´c: (1) nazw˛e, (2) NIP (Numer Iden-
tyfikacji Podatkowej).
PODPOWIED ´
Z: Rozwi ˛
azanie powinno obejmowa´c klasy reprezentuj ˛
ace: (1) pojazd, (2) motocykl, (3)
samochód, (4) samochód osobowy, (5) furgonetk˛e, (6) SUV, (7) klienta indywidualnego (osob˛e fizyczn ˛
a),
(8) klienta korporacyjnego (osob˛e prawn ˛
a).
Podczas tworzenia rozwi ˛
azania nale˙zy pami˛eta´c o:
1. zapewnieniu hermetyzacji (ang. encapsulation) danych w ramach poszczególnych klas;
2. dostarczeniu metody
toString()
prezentuj ˛
acej zawarto´s´c instancji (obiektu) klasy. Metoda
toString()
jest wykorzystywana w trakcie rzutowania obiektu danej klasy na obiekt klasy
java.lang.String
. Metoda
toString()
powinna prezentowa´c zawarto´s´c instancji danej
klasy zgodnie z nast˛epuj ˛
acym formatem:
<class-name> {
<attribute-name>: <attribute-value>[, <attribute-value>, ...]
}
W przypadku gdy obiekt zawiera referencje do innych obiektów metoda
toString()
powinna by´c
wywoływana rekurencyjnie (z uwzgl˛ednieniem zabezpieczenia przed przepełnieniem stosu).
<class-name> {
...
<attribute-name>:
<class-name> {
<attribute-name>: <attribute-value>[, <attribute-value, ...]
}
}
Przykładowo efekt wywołania metody
toString()
na rzecz obiektu reprezentuj ˛
acego motocykl marki
B
AYERISCHE
M
OTOREN
W
ERKE
AG, którego wła´scicielem jest Jan Kowalski mógłby by´c nast˛epj ˛
acy:
Motorbike {
manufacturer: Manufactuer { Bayerische Motoren Werke AG, address },
model: R 1150 RT,
year of manufacture: 2004,
engine capacity: 1130cc,
engine performance: 71kW,
registration number: WI 12345,
vehicle owner: Owner { Jan Kowalski, address, phone number }
}
Metoda
main()
powinna:
c
E
DGAR
G
ŁOWACKI
2.1 Zadanie I (termin oddania: 29/30 marca 2008)
6
1. tworzy´c po kilka instancji instancji wymienionych klas (patrz. wy˙zej), oraz
2. wy´swietli´c zawarto´s´c ekstensji klas.
c
E
DGAR
G
ŁOWACKI
2.2 Zadanie II (termin oddania: 29/30 marca 2008)
7
2.2
Zadanie II (termin oddania: 29/30 marca 2008)
2.2.1
Sporz ˛
adzenie listy płac (zadanie podstawowe: 10 pkt)
Wykorzystuj ˛
ac klasy utworzone w ramach rozwi ˛
azania zadania
zbuduj aplikacj˛e, która ułatwi wła´s-
cicielowi serwisu samochodowego wygenerowanie listy płac.
Pracownicy warsztatu s ˛
a podzieleni na trzy kategorie: (1) młodszych, oraz (2) starszych mechaników
samochodowych, a tak˙ze (3) odbywaj ˛
acych płatne praktyki uczniów pobliskiego zespołu szkół samo-
chodowych.
Warsztat zatrudnia ł ˛
acznie pi˛eciu starszych i dwudziestu jeden młodszych mechaników.
Ka˙zda z wymienionych grup posiada ´sci´sle okre´slone minimalne — wyra˙zone w godzinach — miesi˛eczne
obci ˛
a˙zenie, które:
• dla młodszych mechaników zostało ustalone na 150 godzin;
• w przypadku starszych mechaników wynosi odpowiednio 120 godzin;
• z kolei praktykanci s ˛
a zobowi ˛
azani przepracowa´c 80 godzin.
Aby otrzyma´c pensj˛e podstawow ˛
a ka˙zdy pracownik musi w ci ˛
agu miesi ˛
aca wypracowa´c limit godzin
ustalony dla swojej kategorii zaszeregowania. Podstawowa pensja brutto została ustalona na: (1) 2500
PLN dla młodszych, (2) 3000 PLN dla starszych, oraz (3) 1000 PLN dla praktykantów.
Je´sli pracownikowi nie uda si˛e wypracowa´c limitu godzin pensja miesi˛eczna jest redukowana o ek-
wiwalent nieprzepracowanych roboczogodzin. Przykładowo, je´sli młodszy mechanik nie przepracuje
ustalonego wymiaru godzin, np. wypracuje zaledwie 140 godzin, jego uposa˙zenie zostanie pominiejs-
zone o: 10 ×
2500PLN
150
= 166.67 PLN.
W przypadku, gdy pracownik przepracuje wi˛ecej roboczogodzin ni˙z wynika to z ustalonego limitu,
przysługuje mu pensja, której wymiar jest wyliczany zgodnie z nast˛epuj ˛
acym wzorem:
BonusSize = ExtraHoursNo
Employee
× ExtraHourPayment
EmployeeCategory
Stawka za nadgodziny wynosi: (1) dla młodszych mechaników: 20 PLN, (2) dla starszych mechaników:
30 PLN, (3) dla praktykantów: 15 PLN.
Warsztat samochodowy pracuje na dwie zmiany, sze´s´c dni w tygodniu (od poniedziałku do soboty).
Dzienna zmiana pracuje w godzinach 6:00–14:00, zmian wieczorna — 14:00–22:00. Ka˙zda zmiana
posiada kierownika, którym ka˙zdorazowo musi by´c starszy mechanik. Praca w charakterze kierownika
zmiany jest ka˙zdorazowo wynagradzana dodatkow ˛
a premi ˛
a w wysoko´sci 300 PLN.
Twoim zadaniem jest wygenerowanie listy płac dla wszystkich mechaników (w tym równie˙z praktykan-
tów) zatrudnianych przez warsztat samochodowy. Zarobki poszczególnych pracowników s ˛
a wyliczane
na podstawie wpisów rejestru czasu pracy za miniony miesi ˛
ac.
Rejestrowany czas pracy jest dzielony na dni oraz zmiany. Ka˙zda zmiana zawiera informacj˛e o:
• składzie osobowym,
• starszym mechaniku, który pełnił rol˛e kierownika zmiany,
• dziennej dacie,
• dniu tygodnia, oraz
• czy była to zmiana dzienna, czy wieczorna.
c
E
DGAR
G
ŁOWACKI
2.2 Zadanie II (termin oddania: 29/30 marca 2008)
8
Twoja aplikacja powinna sporz ˛
adzi´c list˛e płac na luty 2008, co oznacza, ˙ze wyliczenie powinno uwzgl˛ed-
nia´c zapisy rejestru czasu pracy za nast˛epuj ˛
ace dni:
• 1–3 lutego 2008 (czwartek–sobota),
• 5–10 lutego 2008 (poniedziałek–pi ˛
atek),
• 12–17 lutego 2008 (poniedziałek–pi ˛
atek),
• 19–24 lutego 2008 (poniedziałek–pi ˛
atek), oraz
• 26–28 lutego 2008 (poniedziałek–´sroda).
2.2.2
Uwzgl˛ednienie regulacji prawnych w zakresie prawa pracy oraz 6-gozinnej zmiany sobot-
niej (zadanie dodatkowe: 15 pkt)
Dyrektywy Komisji Europejskiej wyznaczaj ˛
a ograniczenia dla przepisów prawnych obowi ˛
azuj ˛
acych
we wszystkich krajach członkowskich, w tym równie˙z w Polsce. Zgodnie z dyrektyw ˛
a wydan ˛
a przez
Komisj˛e Europejsk ˛
a w zakresie prawa pracy minimalny dzienny czas odpoczynku wynosi 11 godzin.
Powy˙zsze ograniczenie oznacza, ˙ze pracownik warsztatu nie mo˙ze pracowa´c na nast˛epuj ˛
acych po sobie
zmianach, o ile pomi˛edzy zmianami nie było dnia wolnego od pracy.
Dodatkowo wła´sciciel warsztatu nosi si˛e z zamiarem zmiany zasad jego funkcjonowania i ograniczy´c
wymiar pracy w soboty do jednej 6-godzinnej zmiany.
Dostosuj rozwi ˛
azanie zadania
do wymogów legislacji europejskiej oraz planowanych zmian organi-
zacji czasu pracy.
c
E
DGAR
G
ŁOWACKI
2.3 Zadanie III (termin oddania: 12/13 kwietnia 2008)
9
2.3
Zadanie III (termin oddania: 12/13 kwietnia 2008)
2.3.1
Salon sprzeda˙zy i komis (zadanie podstawowe: 10 pkt)
Warsztat samochodowy poza serwisowaniem zajmuje si˛e sprzeda˙z ˛
a nowych i u˙zywanych pojazdów: (1)
motocykli, (2) samochodów osobowych, oraz (3) SUV-ów.
Ka˙zdy pojazd u˙zywany, który został oddany w komis mo˙ze posiada´c jeden z wymienionych statusów:
• wyceniony — komis zasugerował cen˛e sprzeda˙zy wła´scicielowi na podstawie jego stanu tech-
nicznego oraz ´sredniej ceny osi ˛
aganej przez pojazdy danego modelu w zbli˙zonym wieku;
• wystawiony na sprzeda˙z;
• zarezerwowany przez potencjalnego nabywc˛e;
• wycofany z komisu przez wła´sciciel — wła´sciciel musi ui´sci´c opłat˛e zwi ˛
azan ˛
a z umieszczeniem
pojazdu w ofercie salonu;
• sprzedany — nabywca dokonał dokonał przelewu na konto bankowe komisu;
• rozliczony — transakcja sprzeda˙zy została rozliczona z poprzednim wła´scicielem.
Z kolei nowy samochód mo˙ze by´c:
• zamówiony — klient zło˙zył zamówienie na pojazd cechuj ˛
acy si˛e okre´slonymi wła´sciwo´sciami
oraz dodatkowym wyposa˙zeniem. Zło˙zenie zamówienia wi ˛
a˙ze si˛e z zaliczk ˛
a w wysoko´sci 3%
ceny pojazdu;
• zarezerwowany — klient zarezerwował sobie pierwsze´nstwo w zakupie okre´slonego pojazdu zna-
jduj ˛
acego si˛e w ofercie salonu;
• dostarczony — pojazd odpowiadaj ˛
acy zamówieniu zło˙zonemu przez klienta został dostarczony ze
składu producenta do salonu;
• sprzedany — na konto bankowe salonu wpłyn˛eła nale˙zno´s´c za pojazd;
• zwrócony do składu producenta — pojazd zamówiony przez niedoszłego klienta został z powrotem
przetransportowany do składu producenta.
Salon sprzeda˙zy i komis pojazdów u˙zywanych współdziel ˛
a jedn ˛
a baz˛e danych przechowuj ˛
aca informacj˛e
nt. wszystkich pojazdów, które w ten, czy inny sposób znalazły si˛e w ofercie. Baza danych nie rejestruje
historii zmian statusów pojazdów — u˙zytkownicy s ˛
a w stanie sprawdzi´c jedynie bie˙zacy status danego
pojazdu.
Stwórz aplikacj˛e, która umo˙zliwi pracownikom salonu filtrowanie danych o pojazdach (nowych i u˙zy-
wanych) na podstawie ich bie˙z ˛
acego statusu.
PODPOWIED ´
Z: Zalecanym sposobem rozwi ˛
azania jest implementacja dwóch interfejsów:
SecondHandVehicle
,
and
NewVehicle
. Definicja interfejsu
SecondHandVehicle
mogłaby wygl ˛
ada´c nast˛epuj ˛
aco:
enum SecondHandVehicleStatus {
PRICE_BID_SUGGESTED,
SOLD,
...
c
E
DGAR
G
ŁOWACKI
2.3 Zadanie III (termin oddania: 12/13 kwietnia 2008)
10
}
interface SecondHandVehicle {
...
SecondHandVehicleStatus getStatus();
...
}
2.3.2
Kontrola realizacji procesu sprzeda˙zy samochodu u˙zywanego (zadanie dodatkowe: 10 pkt)
Rozszerz rozwi ˛
azanie zadania
o wsparcie procesu sprzeda˙zy pojazdu u˙zywanego:
• Proces biznesowy sprzeda˙zy pojazdu u˙zywanego za po´srednictwem salonu rozpoczyna si˛e od
krótkiego przegl ˛
adu wykonywanego przez starszego mechanika. Przebieg przegl ˛
adu okre´sla spec-
jalna procedura obejmuj ˛
aca weryfikacj˛e kolejnych podzespołów pojazdu, której wyniki oraz uwagi
mechanika s ˛
a rejestrowane na specjalnej li´scie kontrolnej. Wynik przegl ˛
adu technicznego jest
nast˛epnie przekazywany kierownikowi zmiany.
• Bior ˛
ac pod uwag˛e ´sredni ˛
a cen˛e sprzeda˙zy danego modelu na rynku wtórnym, oraz stan techniczny
stwierdzony przez do´swiadczonego mechanika kierownik zmiany przedstawia propozycj˛e ceny,
która daje szans˛e na stosunkowo szybk ˛
a sprzeda˙z pojazdu. Je´sli klient nie zdecyduje si˛e od razu
odda´c pojazd w komis cena sprzeda˙zy zasugerowana przez salon jest wa˙zna przez kolejne trzy
tygodnie. Po upływie tego czasu zgodnie z procedur ˛
a przyj˛et ˛
a przez salon pojazd musi przej´s´c
kolejny przegl ˛
ad stanu technicznego.
• Po oddaniu pojazdu w komis cena sprzeda˙zy jest aktualizowana w cyklach kwartalnych.
• Wła´sciciel mo˙ze w ka˙zdej chwili zrezygnowa´c ze sprzeda˙zy pojazdu za po´srednictwem salonu,
ale wówczas wi ˛
a˙ze si˛e to z konieczno´sci ˛
a poniesienia kosztów zwi ˛
azanych z przechowywaniem
przez okres, kiedy pojazd znajdował si˛e w ofercie salonu.
• Potencjalny nabywca mo˙ze zarezerwowa´c sobie prawo pierwokupu co najwy˙zej jednego pojazdu
po okre´slonej cenie. Rezerwacja pozostaje wa˙zna przez kolejne trzy dni.
• Pojazd zmienia status na „sprzedany” z chwil ˛
a rejestracji wpływu z tytułu jego sprzeda˙zy na na
rachunku bankowym salonu.
• Proces sprzeda˙zy ko´nczy si˛e po rozliczeniu si˛e salonu z byłym wła´scicielem pojazdu.
c
E
DGAR
G
ŁOWACKI
2.4 Zadanie IV (termin oddania: 12/13 kwietnia 2008)
11
2.4
Zadanie IV (termin oddania: 12/13 kwietnia 2008)
2.4.1
Symulacja dnia pracy warsztatu samochodowego (zadanie podstawowe: 20 pkt)
Stwórz aplikacj˛e symuluj ˛
ac ˛
a dzie´n roboczy warsztatu samochodowego opart ˛
a na modelu o nast˛epuj ˛
acych
zało˙zeniach:
1. warsztat posiada cztery stanowiska serwisowe (potocznie nazywane „kanałami”);
2. przeci˛etny czas naprawy samochodu wynosi jedn ˛
a godzin˛e;
3. w chwili rozpocz˛ecia zmiany do ka˙zdego stanowiska mo˙ze by´c przypisanych od 1 do 3 mechaników.
Skład zmiany pozostaje niezmienny przez cały czas jej trwania. Do ka˙zdego stanowiska musi by´c
przypisany co najmniej jeden mechanik.
4. W danym momencie na stanowisku mo˙ze by´c serwisowany jeden samochód.
5. Dwie sekundy czasu rzeczywistego odpowiada jednej godzinie pracy warsztatu.
6. W kolejce wej´sciowej symulacji zostanie losowo umieszczonych 48 ró˙znych pojazdów wszystkich
rodzajów opisanych w
PODPOWIED ´
Z: Ka˙zde stanowisko serwisowe jest symulowane przez osobny w ˛
atek. Kolejka wej´s-
ciowa stanowi sekcj˛e krytyczn ˛
a — zasób współdzielony przez wi˛ecej ni˙z jeden w ˛
atek.
UWAGA: Skład zmiany powinien by´c ustalany zgodnie z ograniczeniami wynikaj ˛
acymi z
obowi ˛
azuj ˛
acych przepisów prawnych omówionych w
2.4.2
Symulacja uwzgl˛edniaj ˛
aca bardziej zło˙zony zestaw reguł (zadanie dodatkowe: 30 pkt)
Zmodyfikuj rozwi ˛
azanie dla zadania
rozszerzaj ˛
ac zestaw ogranicze´n uwzgl˛ednianych przez symu-
lacj˛e
1. tylko dwa spo´sród dost˛epnych czterech stanowisk s ˛
a przystosowane do obsługi furgonetek i po-
jazdów typu SUV;
2. przydzielenie przynajmniej jednego starszego mechanika do danego stanowiska zmniejsza czas
obsługi o 50%;
3. Czas naprawy furgonetek lub SUV-ów jest 1,5 razy dłu˙zszy ni˙z obsługa pojazdów pozostałych
rodzajów.
4. Symulacja ko´nczy si˛e z chwil ˛
a obsługi wszystkich ˙z ˛
ada´n umieszczonych w kolejce wej´sciowej,
których liczba mo˙ze by´c podana przez u˙zytkownika jako parametr przekazywany z linii polece´n.
2
Zało˙zenia wymienione w
— w tym równie˙z ograniczenia wynikaj ˛
ace z legislacji w zakresie prawa pracy — pozostaj ˛
a
w mocy.
c
E
DGAR
G
ŁOWACKI
2.5 Zadanie V (termin oddania: 26/27 kwietnia 2008)
12
2.5
Zadanie V (termin oddania: 26/27 kwietnia 2008)
2.5.1
Trwało´s´c danych w oparciu o szeregowalno´s´c (zadanie podstawowe: 10 pkt)
Rozszerz funkcjonalno´s´c dotychczasowego rozwi ˛
azania daj ˛
ac u˙zytkownikowi mo˙zliwo´s´c utrwalenia stanu
struktur danych (instancji klas) w pliku wykorzystuj ˛
ac mechanizm serializacji dost˛epny w Java
TM
.
Aplikacja powinna funkcjonowa´c w dwóch trybach: (1) utrwalania stanu struktur danych przechowywanych
w pami˛eci operacyjnej, lub (2) odtwarzania stanu struktur danych utrwalonego w pliku. Tryb pracy, oraz
nazwa pliku, w którym zostanie utrwalony stan aplikacji (przy trybie zapisu), b ˛
ad´z na podstawie którego
zostanie stan struktur danych (przy trybie odtwarzania) powinny by´c okre´slane w postaci dwóch kole-
jnych argumentów przekazywanych do aplikacji z linii polece´n.
Test, któremu zostanie poddana aplikacja b˛edzie polegał na:
1. utworzeniu kilku instancji ró˙znych klas oraz utrwaleniu ich stanu w pliku, a nast˛epnie
2. odtworzeniu stanu zapisanego w pliku.
2.5.2
Utrwalanie stanu w postaci pliku tekstowego o okre´slonej składni (zadanie dodatkowe: 25
pkt)
Rozszerz funkcjonalno´s´c dotychczasowego rozwi ˛
azania umo˙zliwiaj ˛
ac u˙zytkownikowi zapis stanu struk-
tur danych aplikacji w formacie tekstowym.
Podobnie jak w przypadku rozwi ˛
azania zadania
Twoja aplikacja powinna funkcjonowa´c w dwóch
trybach:
(1) utrwalania stanu struktur danych przechowywanych w pami˛eci operacyjnej, lub (2) odt-
warzania stanu struktur danych utrwalonego w pliku.
Aplikacja powinna wspiera´c nast˛epuj ˛
ac ˛
a składani˛e pliku przechowuj ˛
acego stan struktur danych:
<class-name> <arbitrary-object-name> {
<attribute-name>: <attribute-value>[, ...]
| ref { <arbitrary-object-name> [, ...]};
...
}
Przykładowy plik utrwalaj ˛
acy informacj˛e o dwóch pojazdach i ich wła´scicielach wygl ˛
adałby nast˛epu-
j ˛
aco:
Manufacturer a {
name: Bayerishe Motoren Werke AG;
address: address of BMW;
}
Motorbike b {
manufacturer: ref { a };
model: R 1150 RT;
yearOfManufacture: 2004;
engineCapacity: 1130cc;
enginePerformance: 71kW;
registrationNumber: WI 12345;
c
E
DGAR
G
ŁOWACKI
2.5 Zadanie V (termin oddania: 26/27 kwietnia 2008)
13
vehicleOwner: ref { e, f }
}
Manufacturer c {
name: Fabbrica Italiana Automobili Torino;
address: addres of FIAT;
}
RegularPassengerCar d {
manufacturer: ref { c };
model: Marea Weekend;
yearOfManufacture: 2000;
engineCapacity: 1603cc;
enginePerformance: 84kW;
registrationNumber: WX 00003;
vehicleOwner: ref { e, f }
}
IndividualOwner e {
name: Jan Kowalski;
address: address of Jan Kowalski;
}
IndividualOwner f {
name: Maria Kowalska;
address: address of Maria Kowalska;
}
UWAGA: U˙zytkownik powinien mie´c mo˙zliwo´s´c tworzenia nazw zawieraj ˛
acych polskie znaki diak-
tryczne: ˛
a, ´c, ˛e, ´n, ł, ó, ´z, ˙z. Z tego wzgl˛edu dane aplikacji powinny by´c utrwalane w plikach tekstowych
zgodnie z kodowaniem UTF-8 umo˙zliwiaj ˛
acym zapis wszystkich znaków Unicode
R
.
c
E
DGAR
G
ŁOWACKI
2.6 Zadanie VI (termin oddania: 26/27 kwietnia 2008)
14
2.6
Zadanie VI (termin oddania: 26/27 kwietnia 2008)
2.6.1
Posortowane kolekcje (zadanie podstawowe: 10 pkt)
Do definicji ka˙zdej klasy reprezentuj ˛
acej byt dziedziny problemowej dodaj ekstensj˛e tej klasy w postaci
atrybutu klasowy (
static
) przechowuj ˛
acy wszystkie jej instancje. Atrybut reprezentuj ˛
acy ekstensj˛e
powinien by´c typu kolekcyjnego (tj. powinien by´c obiektem klasy implementuj ˛
acej jeden z interfejsów
rozszerzaj ˛
acych
java.util.Collection
).
Elementy przechowywane w ekstensji powinny by´c posortowane zgodnie z poni˙zszymi regułami:
1. elementy umieszczone w ekstensjach klas reprezentuj ˛
acych pojazdy powinny by´c posortowane
wzgl˛edem: (1) nazwy producenta, (2) modelu, oraz (3) numeru rejestracyjnego;
2. z kolei producenci powinni by´c posortowani wzgl˛edem:
(1) danych teleadresowych, oraz (2)
nazwy;
3. wła´sciciele pojazdów, tj. osoby prawne lub fizyczne powinny by´c posortowane odpowiednio
wzgl˛edem: (1) numeru NIP, lub (2) nazwisk.
2.6.2
Mapy oraz kolekcje posortowane wzgl˛edem alternatywnych kryteriów (zadanie rozszer-
zone: 15 pkt)
2.6.2.1
Mapy (5 pkt)
Rozszerz rozwi ˛
azanie zadania
poprzez utworzenie map umo˙zliwiaj ˛
acych
bezpo´sredni dost˛ep do instancji klas przechowywanych w ekstensjach.
U˙zytkownik aplikacji powinien mie´c mo˙zliwo´s´c natychmiastowego dost˛epu do wpisów ekstensji:
1. klas reprezentuj ˛
acych pojazy po wpisaniu numeru rejestracyjnego;
2. klas reprezentuj ˛
acych producentów, lub wła´scicieli (zarówno indywidualnych, jak i korporacyjnych)
po wpisaniu odpowiednio: (1) nazwy, b ˛
ad´z (2) imienia i nazwiska.
Wspomniana funkcjonalno´s´c powinna by´c dost˛epna za po´srednictwem ´sci´sle zdefiniowanego interfejsu
programistycznego, tak aby odizolowa´c u˙zytkownika od zło˙zono´sci implementacyjnej.
2.6.2.2
Alternatywne sortowanie kolekcji (10 pkt)
Dostosuj swoje rozwi ˛
azanie zadania
do
zasad sortowania wyst˛epuj ˛
acych w j˛ezyku polskim. Przykładowo, słowa zawieraj ˛
ace polskie znaki diak-
tryczne: ˛
a, ´c, ˛e, ł, ´n, ó, ´z, ˙z domy´slnie nie b˛ed ˛
a posortowane zgodnie z polskimi zasadadmi kolatacji (ang.
collation). Przyczyn ˛
a powy˙zszego zjawiska s ˛
a warto´sci przyznane znakom polskiego alfabetu w stan-
dardzie Unicode, które s ˛
a wi˛eksze od wszystkich liter alfabetu łaci´nskiego. Jest to bezpo´sredni powód,
czemu np. słowo „ ´
Cma” domy´slnie zostanie umieszczona po słowie „Motyl”.
PODPOWIED ´
Z: Rozwi ˛
azanie wymaga dostarczenia odpowiedniego rozszerzenia klasy abstrakcyjnej
java.text.Collator
.
c
E
DGAR
G
ŁOWACKI
2.7 Zadanie VII (termin oddania: 17/18 maja 2008)
15
2.7
Zadanie VII (termin oddania: 17/18 maja 2008)
2.7.1
Obracaj ˛
acy si˛e wykres kołowy (zadanie podstawowe: 10 pkt)
Twoim zadaniem jest skonstruowanie prostej aplikacji posiadaj ˛
acej graficzny interfejs u˙zytkownika (ang.
graphical user interface). Centralnym elementem formularza aplikacji powinien by´c przycisk zawier-
aj ˛
acy wykres kołowy (ang. pie chart) stanowi ˛
acy graficzn ˛
a prezentacj˛e rekordów opisuj ˛
acych pewne
wybrane zjawisko. Przykładowym zjawiskiem mógłby by´c profil wykształcenia w wybranym kraju —
tj. udział w społecze´nstwie danego osób posiadaj ˛
acych wykształcenie:
(1) wy˙zsze, (2) ´srednie, (3)
zasadnicze zawodowe, (4) podstawowe.
Wej´sciem dla wykresu powinny by´c warto´sci bezwzgl˛edne — nie procentowy udział. Dla podanego
powy˙zej przykładu oznacza to przekazanie bezwzgl˛ednej liczby osób, które zako´nczyły sw ˛
a edukacj˛e na
okre´slonym poziomie, podanej np. w setkach tysi˛ecy.
Suma warto´sci odpowiadaj ˛
acych poszczególnym fragmentom (ang. slices) wykresu okre´sla ł ˛
aczne wys-
t˛epowanie danego zjawiska wyra˙zone w liczbach bezwzgl˛ednych. Dla rozpatrywanego przykładu b˛edzie
to oczywi´scie liczebno´s´c społecze´nstwa danego kraju.
Figure 1: Wykres kołowy przed i po obrocie w wyniku wci´sni˛ecia przycisku
Poszczególne wycinki diagramu kołowego powinny by´c wykre´slane jedna po drugiej pocz ˛
awszy od
górnej (dodatniej) cz˛e´sci osi pionowej (y), gdzie pocz ˛
atkiem układu współrz˛ednych jest ´srodek przy-
cisku. Lewa kraw˛ed´z pierwszego fragmentu wykresu powinna pokrywa´c si˛e z dodatni ˛
a cz˛e´sci ˛
a osi pio-
nowej, lewa kraw˛ed´z ka˙zdego kolejnego fragmentu powinna pokrywa´c si˛e z praw ˛
a kraw˛edzi ˛
a wycinka
poprzedzaj ˛
acego.
Przycisk powinien całkowicie wypełni´c formularz aplikacji (patrz.
). Wykres powinien by´c wy´srod-
kowany w poziomie i pionie. Szeroko´s´c i wysoko´s´c wykresu powinna stanowii´c
2
3
odpowiednio sze-
roko´sci i wysoko´sci przycisku. Zmiana rozmiaru aplikacji powinnia powodowa´c odpowiedni ˛
a zmian˛e
rozmiaru i kształtu wykresu.
Wci´sni˛ecie przycisku powinno ka˙zdorazowo wi ˛
aza´c si˛e z obrotem wykresu kołowego o k ˛
at ostatniego
c
E
DGAR
G
ŁOWACKI
2.7 Zadanie VII (termin oddania: 17/18 maja 2008)
16
fragmentu, którego prawa kraw˛ed´z pokrywa si˛e z dodatni ˛
a cz˛e´sci ˛
a osi y. Najprostszym sposobem re-
alizacji powy˙zszego wymagania jest wstawienie rekordu reprezentuj ˛
acego ostatni wycinek na pocz ˛
atek
zbioru danych wej´sciowych i ponowne wykre´slenie diagramu kołowego.
2.7.2
Legenda wykresu oraz statystyka symulacji (zadania rozszerzone: 25 pkt)
2.7.2.1
Legenda wykresu (15 pkt)
Rozszerz rozwi ˛
azanie zadania ?? dodaj ˛
ac:
1. nazw˛e ilustrowanego zjawiska powy˙zej diagramu;
2. nazw˛e reprezentowanego rekordu odpowiednio po lewej, lub prawej stronie odpowiedniego frag-
mentu wykresu, mniej wi˛ecej po ´srodku łuku odpowiedniego wycinka. Opisy wycinka nie powinny
na siebie nachodzi´c.
UWAGA: Obrotowi wykresu powinno towarzyszy´c odpowiednie przemieszczenie si˛e opisów.
2.7.2.2
Statystyka symulacji pracy warsztatu (10 pkt)
Wykorzystaj rozwi ˛
azanie zadania
do prezentacji statystyki symulacji pracy warsztatu samochodowego realizowanej przez zadania:
oraz
. Po zako´nczeniu symulacji aplikacja powinna prezentowa´c statystyk˛e dotycz ˛
ac ˛
a wydajno´sci
poszczególnych stanowisk oraz ich załóg w postaci wykresu kołowego z legend ˛
a.
c
E
DGAR
G
ŁOWACKI
2.8 Zadanie VIII (termin oddania: 17/18 maja 2008)
17
2.8
Zadanie VIII (termin oddania: 17/18 maja 2008)
2.8.1
Wielobarwne prymitywy (figury) geometryczne (zadanie podstawowe: 10 pkt)
Stwórz aplikacj˛e posiadaj ˛
ac ˛
a graficzny interfejs u˙zytkownika, której główny panel wypełniaj ˛
a kwadratowe
przyciski jednakowej wielko´sci. Minimalna długo´s´c boku przycisku nie mo˙ze by´c nigdy mniejsza ni˙z 40
pikseli, z kolei maksymalna długo´s´c boku mo˙ze wynie´s´c co najwy˙zej 80 pikseli. Zmiana wielko´sci okna
(formularza) aplikacji oznacza odpowiedni ˛
a zmian˛e rozmiaru wszystkich przycisków z zachowaniem
kształtu.
W ´srodku ka˙zdego przycisku powinien znajdowa´c si˛e wypełniony prymityw (figura) geometryczny,
którego szeroko´s´c i wysoko´s´c powinna wynosi´c
2
3
odpowiednio: szeroko´sci i wysoko´sci przycisku.
Wewn ˛
atrz przycisków powinny by´c wykre´slane wypełnione (ang. filled) prymitywy nast˛epuj ˛
acych rodza-
jów:
1. trójk ˛
aty równoboczne,
2. kwadraty, oraz
3. koła.
W chwili uruchomienia aplikacja powinna losowo wygenerowa´c 15 prymitywów wy˙zej wymienionych
typów. Ka˙zdy prymityw geometryczny powinien by´c wykre´slany w innym (unikalnym) kolorze. Mo˙zli-
wo´sci współcze´snie wykorzystywanej 24-bitowej palety barw przekraczaj ˛
a zdolno´sci percepcyjne prze-
ci˛etnego człowieka pod wzgl˛edem liczby rozró˙znialnych kolorów. Z tego wzgl˛edu, aby zagwaran-
towa´c, by wygenerowane kolory były rozró˙znialne dla u˙zytkownika, nale˙zy zapewni´c, by dla ka˙zdej
pary kolorów ró˙znica warto´sci przynajmniej jednej składowej RGB b˛edzie wynosiła co najmniej 15.
Zakres warto´sci dla ka˙zdej składowej RGB
wynosi: [0..255]. Zbiór wygenerowanych prymitywów,
jak równie˙z kolory przypisane poszczególnym figurom powinny pozosta´c niezmienne przez czały czas
działania aplikacji.
W trakcie inicjalizacji aplikacji ka˙zdy z losowo wygenerowanych prymitywów powinien zosta´c sko-
jarzony z jednym równie˙z losowo wybranym przyciskiem. Wci´sni˛ecie przycisku powinno ponownie
losowo przyporz ˛
adkowa´c prymitywy do przycisków.
Dodatkowo aplikacja powinna posiada´c menu zawieraj ˛
ace nast˛epuj ˛
ace opcje:
1. „rozkład ci ˛
agły” (ang. flow layout) z podmenu:
(a) „do lewej” (ang. left alignment), oraz
(b) „do prawej” (ang. right alignment);
2. „rozkład siatkowy” (ang. grid layout) z podmenu:
(a) 4 × 4 — przyciski zostan ˛
a rozmieszczone w macierzy 4 × 4 (4 kolumny, 4 wiersze).
UWAGA: Prosz˛e zwróci´c uwag˛e, ˙ze jedna z „komórek” (ang. cell) siatki nie b˛edzie zawier-
ała przycisku, a tzw. „miejsce puste” (ang. placeholder).
(b) 5 × 3 — analogicznie 5 kolumn i 3 wiersze.
3
RGB — model barw wykorzystywany dla monitorów komputerowych oparty na trzech podstawowych barwach: czer-
wonym (ang. red), zielonym (ang. green), oraz niebieskim (ang. blue).
c
E
DGAR
G
ŁOWACKI
2.8 Zadanie VIII (termin oddania: 17/18 maja 2008)
18
2.8.2
Obracaj ˛
ace si˛e prymitywy graficzne, układanka (zadania rozszerzone: 20 pkt)
2.8.2.1
Obracaj ˛
ace si˛e prymitywy graficzne (10 pkt)
Rozszerz funkcjonalno´s´c rozwi ˛
azania zada-
nia
, tak aby wci´sni˛ecie przycisku wi ˛
azało si˛e z obrotem ka˙zdego z prymitywów o k ˛
at 30
0
przed ich
ponownym przyporz ˛
adkowaniem.
PODPOWIED ´
Z: Oczywi´scie obrót ma sens jedynie w przypadku kwadratów i trójk ˛
atów równobocznych.
2.8.2.2
Układanka (10 pkt)
Zmodyfikuj rozwi ˛
azanie zadania
, tak aby w trybie 4 × 4 wci´sni˛e-
cie dowolnego przycisku s ˛
asiaduj ˛
acego z tzw. „miejscem pustym” wi ˛
azało si˛e z wizualn ˛
a „zamian ˛
a
miejsc” wybranego przycisku i „miejsca pustego”.
Zamiana miejsc powinna dotyczy´c wył ˛
acznie przycisków posiadaj ˛
acych wspóln ˛
a kraw˛edz z „miejscem
pustym” i wówczas nie powinna si˛e wi ˛
aza´c z ponownym przyporz ˛
adkowaniem prymitywów do przy-
cisków. Reakcja na wci´sni˛ecie przycisku nies ˛
asiaduj ˛
acego z placeholder powinna by´c taka jak w rozwi ˛
aza-
niu oryginalnym, tj. powinno nast ˛
api´c ponowne przypisanie prymitywów do przycisków.
c
E
DGAR
G
ŁOWACKI
2.9 Zadanie IX (termin oddania: 31 maja/1 czerwca 2008)
19
2.9
Zadanie IX (termin oddania: 31 maja/1 czerwca 2008)
2.9.1
Uciekaj ˛
ace si˛e przyciski (zadanie podstawowe: 10 pkt)
Główne okno aplikacji powinno zawiera´c od 3 do 10 przycisków — dokładna liczba przycisków powinna
by´c okre´slona w postaci warto´sci argumentu linii polece´n.
Kontrolki (ang. widgets) umieszczone w głównym panelu aplikacji powinny zachowywa´c si˛e zgodnie z
poni˙zszymi regułami:
• przycisk, który jest w danym momencie wybrany (ang. gained focus) powinien pod ˛
a˙za´c za wska´znikiem
myszki;
• wszystkie pozostałe przyciski (tj. niewybrane) powinny "ucieka´c" przed wska´znikiem myszki;
• wska´znik myszy nie mo˙ze by´c umieszczony nad ˙zadnym przyciskiem (tj. u˙zytkownik nie powinien
mie´c nigdy mo˙zliwo´sci wci´sni˛ecia przycisku za pomoc ˛
a myszki);
• przycisky wybrany powinien by´c wyró˙zniony za pomoc ˛
a pogrubionego czerwonego obramowania;
• przyciski nie mog ˛
a na siebie zachodzi´c.
2.9.2
Walidacja danych wprowadzanych przez u˙zytkownika (zadanie rozszerozne: 20 pkt)
Zbuduj prosty graficzny interfejs u˙zytkownika umo˙zliwiaj ˛
acy zarz ˛
adzanie strukturami danych, których
zdefinowanie było przedmiotem zadania:
. U˙zytkownik aplikacji powinien mie´c mo˙zliwo´s´c wprowadza-
nia danych wszystkich typów, które zostały opisane w instrukcji dla zadania ??, tj. (1) pojazdów, (2)
wła´scicieli (obydwu rodzajów), (3) producentów, itp.
Panel główny aplikacji powinien by´c podzielony na dwie cz˛e´sci:
1. cz˛e´s´c górna powinna zawiera´c szczegóły aktualnie prezentowanego obiektu (ang. item);
2. cz˛e´s´c doln ˛
a powinien stanowi´c panel nawigacyjny zawieraj ˛
acy cztery przyciski:
(a) „nast˛epny” umo˙zliwiaj ˛
acy przej´scie do kolejnego elementu zapisanego w repozytorium ap-
likacji;
(b) „poprzedni” umo˙zliwiaj ˛
acy odpowiednio przej´scie do poprzedniego elementu;
(c) „dodaj” umo˙zliwiaj ˛
acy dodanie nowego elementu — wci´sni˛ecie „dodaj” powinno wi ˛
aza´c si˛e
z wy´swietleniem okna dialogowego, za pomoc ˛
a którego u˙zytkownik b˛edzie mógł okre´sli´c
typ dodawanego elementu (samochód osobowy, motocykl, itp.);
(d) „usu´n” umo˙zliwiaj ˛
acy usuni˛ecie aktualnie prezentowanego elementu.
U˙zytkownik powinien mie´c mo˙zliwo´s´c modyfikacji warto´sci wszystkich atrybutów (pól) opisuj ˛
acych
aktualnie prezentowany rekord. Dane wprowadzane przez u˙zytkownika powinny by´c walidowane (ang.
validated), tj. aplikacja powinna sprawdza´c ich poprawno´s´c:
1. aplikacja powinna uniemo˙zliwia´c wybrania (ang. move focus) innej kontrolki, dopóki aktualnie
edytowana kontrolka nie zawiera warto´sci poprawnej. Przykładowo imi˛e i nazwisko wła´sciciela
indywidualnego nie mo˙ze zawiera´c innych znaków ni˙z litery, a pojemno´s´c silnika musi by´c liczb ˛
a
całkowit ˛
a.
c
E
DGAR
G
ŁOWACKI
2.9 Zadanie IX (termin oddania: 31 maja/1 czerwca 2008)
20
2. wprowadzenie warto´sci niepoprawnej by´c sygnalizowane przez aplikacj˛e poprzez zmian˛e koloru
ramki wybranej kontrolki na czerwono oraz wygenerowanie krótkiego sygnału dzwi˛ekowego (ang.
beep).
UWAGA: Rodzaje pojazdów, czy wła´scicieli ró˙zni ˛
a si˛e pod wzgl˛edem liczby oraz typów atrybutów
opisuj ˛
acych dany typ rekordu. Z tego wzgl˛edu u˙zytkownik powinien wprowadza´c dane za pomoc ˛
a for-
mularzy zaprojektowanych z my´sl ˛
a o poszczególnych rodzajach rekordów.
Wszystkie rekordy (wszytkich typów) powinny by´c przechowywane w jednej kolekcji. Dlatego te˙z prze-
jscie do elementu innego typu ni˙z aktualnie prezentowany powinno wi ˛
aza´c si˛e ze zmian ˛
a wygl ˛
adu górnej
cz˛e´sci konsoli umo˙zliwiaj ˛
acej podgl ˛
ad oraz edycj˛e rekordów zapisanych w repozytorium aplikacji.
UWAGA: Tworzenie/zmiana powi ˛
aza´n wyst˛epuj ˛
acych pomi˛edzy poszczególnymi rekordami (np. po-
jazdami i ich producentami, czy wła´scicielami) wymaga u˙zycia:
(1) list opuszczanych (ang. combo
boxes) — je´sli z bie˙z ˛
acym elementem mo˙ze by´c powi ˛
azany w danej roli jeden element, b ˛
ad´z (2) list —
w przypadku, gdy aktualnie prezentowany element mo˙ze by´c powi ˛
azany z wi˛eksz ˛
a liczb ˛
a rekordów.
c
E
DGAR
G
ŁOWACKI
2.10 Zadanie X (termin oddania: 14/15 czerwca 2008)
21
2.10
Zadanie X (termin oddania: 14/15 czerwca 2008)
2.10.1
Panel z zakładkami umo˙zliwiaj ˛
acy przegl ˛
adanie ró˙zne rodzaje rekordów (zadanie podsta-
wowe: 10 pkt)
Zbuduj aplikacj˛e przypominaj ˛
ac ˛
a rozwi ˛
azanie zadania
. Podobnie jak poprzednio okno aplikacji
powinno by´c podzielone na dwie cz˛e´sci: (1) cz˛e´s´c górn ˛
a prezentuj ˛
ac ˛
a szczegóły aktualnie wybranego
rekordu, (2) cz˛e´s´c doln ˛
a zawieraj ˛
ac ˛
a panel navigacyjny.
Panel nawigacyjny powinien zawiera´c cztery przyciski:
(1)„poprzedni”, (2)„nast˛epny”, (3)„dodaj”,
oraz (4)„usu´n”, których funkcjonalno´s´c powinna pozosta´c niezmieniona w porównaniu z rozwi ˛
azaniem
zadania
W odró˙znieniu do poprzedniej aplikacji wygl ˛
ad panelu górnego nie powinien zmienia´c si˛e w zale˙zno´sci
od rodzaju aktualnie prezentowanego rekordu. Cz˛e´s´c górn ˛
a aplikacji powinien stanowi´c panel zaw-
ieraj ˛
acy zakładki (ang. tabbed panel) umo˙zliwiaj ˛
acy podgl ˛
ad wszystkich rodzajów elementów prze-
chowywanych w repozytorium aplikacji. Po wybraniu zakładki u˙zytkownik powinien mie´c mo˙zliwo´s´c:
(1) przegl ˛
adania, (2) dodawania, oraz (3) usuwania elementów danego typu przechowywanych w re-
pozytorium.
Kolejn ˛
a ró˙znic ˛
a w stosunku do rozwi ˛
azania
powinien by´c sposób podziału obszaru roboczego okna
aplikacji mi˛edzy dwoma opisanymi wy˙zej panelami. Tym razem u˙zytkownik powinien mie´c mo˙zliwo´s´c
zmiany rozmiaru ka˙zdej z cz˛e´sci za pomoc ˛
a „panelu podziału” (ang. split panel).
UWAGA: W odró˙znieniu do rozwi ˛
azania
aplikacja nie musi sprawdza´c poprawno´sci danych wprowadzanych
przez u˙zytkownika.
2.10.2
Utrwalanie zaznaczonego fragmentu panelu oraz paskki narz˛edzi (zadanie rozszerzone:
25 pkt)
2.10.2.1
Zapis zaznaczonego fragmentu panelu głównego aplikacji w pliku (15 pkt)
Załó˙zmy,
˙ze chcieliby´smy sporz ˛
adzi´c instrukcj˛e u˙zytkownika dla aplikacji stworzonej w ramach zadania
Ka˙zda dobrze opracowana dokumentacja zawiera zrzuty ekranów opisywanych fragmentów graficznego
interfejsu u˙zytkownika. W celu uzyskania lepszej ilustracji opisywanego fragmentu funkcjonalno´sci
zrzuty ekranów s ˛
a wzbogacane dodatkowymi elementami graficznymi takimi jak wyró˙znienia (np. za
pomoc ˛
a ramek).
Twoje zadanie b˛edzie polegało na rozszerzeniu funkcjonalno´sci rozwi ˛
azania
, którego celem b˛edzie
ułatwienie pracy osobom odpowiedzialnym za opracowanie dokumentacji u˙zytkowej.
Wci´sniecie prawego przycisku myszy na obszarze roboczym aplikacji powinno wy´swietli´c tzw. menu
kontekstowe, lub „wyskakuj ˛
ace” (ang. pop-up menu) zawieraj ˛
ace tylko jeden element: pole wyboru
(ang. check box) umo˙zliwiaj ˛
ace przeł ˛
aczanie aplikacji do trybu ułatwiaj ˛
acego prac˛e autorom dokumen-
tacji u˙zytkowej.
Tryb wsparcia autorów dokumentacji u˙zytkowej powinien obejmowa´c nast˛epuj ˛
ac ˛
a funkcjonalno´s´c:
1. ruch myszki w tzw. trybie „przeci ˛
agania” (ang. dragging) (poruszanie myszk ˛
a przy wci´sni˛etym
lewym przycisku) powinien by´c zaznaczany poprzez wykre´slanie czerwonej linii o nieregularnym
kształcie;
2. „przeci ˛
aganie” myszki przy jednoczesnym trzymaniu kombinacji przycisków
CTRL+M
powinno
umo˙zliwia´c u˙zytkownikowi zaznaczanie wybranego obszaru za pomoc ˛
a czerwonej ramki. Zwole-
nienie lewego przycisku myszki powinno wi ˛
aza´c si˛e z wy´swietleniem standardowego okna di-
c
E
DGAR
G
ŁOWACKI
2.10 Zadanie X (termin oddania: 14/15 czerwca 2008)
22
alogowego umo˙zliwiaj ˛
acego wybór pliku (
JFileChooser
), w którym zostanie zapisany zaz-
naczony fragment obszaru roboczego aplikacji. Wybrany fragment okna aplikacji powinien by´c
utrwalony w postaci pliku graficznego w formacie
PNG
. UWAGA: Ramka powinna ogranicza´c
obszar, który mo˙ze zosta´c zapisany w pliku, co oznacza, ˙ze w przypadku, gdy podczas „przeci ˛
a-
gania” wska´znik myszki opu´sci obszar roboczy ramka powinna wyró˙znia´c obszar wewn ˛
atrz okna
aplikacji.
2.10.2.2
Paski narz˛edziowe (10 pkt)
Uzupełnij aplikacj˛e rozwijan ˛
a w ramach poprzednich zada´n
poprzez dodanie dwóch „pływaj ˛
acych”
pasków narz˛edziowych:
1. pierwszy pasek narz˛edziowy powinien posiada´c cztery przyciski, których funkcjonalno´s´c powinna
odpowiada´c funkcjonalno´sci przycisków panelu nawigacyjnego (patrz.
2. drugi pasek narz˛edziowy b˛edzie zawierał jeden przycisk zachowuj ˛
acy swój stan (wci´sni˛ety/zwolniony).
Stan przycisku powinien korespondowa´c ze stanem pola wyboru (ang. checkbox) opisanego w
zadaniu
, tj. jego wci´sni˛ecie powinno przeł ˛
acza´c aplikacj˛e w tryb wsparcia autorów po-
dr˛ecznika u˙zytkownika, natomiast zwolnienie powinno przywróci´c aplikacj˛e do trybu normalnego.
UWAGA: Zwró´c uwag˛e, ˙ze paski narz˛edziowe duplikuj ˛
a funkcjonalno´s´c opisan ˛
a w tre´sci zada´n
oraz
. Z tego wzgl˛edu implementacja akcji wywoływanych w chwili zgłoszenia zdarze´n za
pomoc ˛
a obydwu rodzajów interfejsów powinna by´c oparta o
javax.swing.AbstractAction
.
4
„pływaj ˛
acy” pasek narz˛edziowy (ang. floatable toolbar) umo˙zliwia u˙zytkownikowi aplikacji swobodne umieszczenie go
w dowolnym miejscu obszaru roboczego aplikacji, b ˛
ad´z wyci ˛
agni˛ecie poza ten obszar poprzez umieszczenie w osobnym oknie.
c
E
DGAR
G
ŁOWACKI
2.11 Zadanie XI (termin oddania: 28/29 czerwca 2008)
23
2.11
Zadanie XI (termin oddania: 28/29 czerwca 2008)
2.11.1
Wzajemnie powi ˛
azane listy pojazdów i ich wła´scicieli (30 pts)
Rozszerz funkcjonalno´s´c aplikacji zrealizowanej w ramach zadania
poprzez dodanie kolejnej za-
kładki (ang. tab) zawieraj ˛
acej dwie listy prezentuj ˛
ace rekordy dwórch rodzajów: (1) wła´scicieli, oraz
(2) pojazdów.
Zasadnicza funkcjonalno´s´c nowego panelu b˛edzie sprowadzała si˛e do wizualizacji zale˙zno´sci wyst˛epuj ˛
a-
cych pomi˛edzy poszczególnymi elementami dwóch wymienionych kategorii. Wybranie rekordu prezen-
towanego na jednej z list powinno wi ˛
aza´c si˛e z automatycznym wyró˙znieniem powi ˛
azanych rekordów
na drugiej li´scie. Przykładowo, je´sli u˙zytkownik zaznaczy jednego b ˛
ad´z wi˛ecej wła´scicieli, aplikacja
powinna automatycznie wyró˙zni´c pojazdy stanowi ˛
ace własno´s´c wybranych wła´scicieli.
UWAGA: Zwró´c uwag˛e na sprz˛e˙zenie zwrotne wyst˛epuj ˛
ace pomi˛edzy obydwoma listami: (1) wybranie
danej osoby na li´scie wła´scicieli spowoduje (2) automatyczne wyró˙znienie wszystkich pojazdów stanow-
i ˛
acych jej własno´s´c, co z kolei b˛edzie wi ˛
azało si˛e z (3) zaznaczeniem wszystkich wła´scicieli wybranych
pojazdów, a nast˛epnie (4) wyró˙znieniem pojazdów b˛ed ˛
acych współwłasno´sci ˛
a wszystkich zaznaczonych
osób, itd.
UWAGA: Niniejsze zadanie wymaga wykorzystania wzorca projektowego Model-View-Controller omówionego
w trakcie wykładu.
c
E
DGAR
G
ŁOWACKI