Stolik Miejsc 1 6 2 4 3 4 Osoba Znajomi 1 2,3,4 2 3,4,5Należy tak przydzielić osoby do stolików, by "dopasowanie" było najlepsze. Kryteriami uwzględnianymi przy definicji dopasowania powinny być:
Szkoła Miejsc 1 26 2 20 3 42 Uczeń Punkty Preferencje 1 123 1,2,3 2 80 3 3 92 3,2Należy tak zapisać uczniów do szkół, by "dopasowanie" było najlepsze. Kryteriami uwzględnianymi przy definicji dopasowania powinny być:
- dane osobowe pacjentów (wystarczy imię, nazwisko, pesel), - dane lekarzy (wystarczy imię, nazwisko, specjalizacja), - gabinety (lekarze przyjmują w gabinetach), - godziny przyjęć (w kolejne dni tygodnia, w godzinach od do, co zadany interwał: np. 20 min), - zarejestrowane wizyty (można dokonać rejestracji na wizytę), - zakończone wizyty (by było wiadomo, które wizyty faktycznie się zakończyły).Aplikacja powinna umożliwiać:
- wyszukanie lekarza o zadanej specjalizacji, - wyszukanie wolnego terminu u danego lekarza, - zarejestrowanie i wyrejestrowanie pacjenta, - zapisanie wyniku wizyty po jej zakończeniu, - przeszukiwanie rejestracji (w poszukiwaniu pacjenta), - edycję listy lekarzy, - edycję listy godzin przyjęć (z gabinetami).Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- dane osobowe klientów (wystarczy imię i nazwisko), - oferty wycieczek (termin od do, opis, kierunek, liczba miejsc), - rezerwacje (kto dokonał rezerwacji, na jaką wycieczką, kto w wycieczce uczestniczy, termin płatności, status rezerwacji).Aplikacja powinna umożliwiać:
- zarządzanie ofertami (stworzenie, aktualizacja, usunięcie), - przeszukiwanie ofert (ze względu na termin, kierunek, liczbę miejsc), - zarządzanie rezerwacjami (założenie, opłacenie, anulowanie), - generowanie zestawień (aktywność uczestników w zadanym okresie, najpopularniejsze wycieczki na podstawie liczby wykupionych miejsc), - zmianę "bieżącego czasu" (chodzi o to, by dało się zasymulować sytuację przedawnienia rezerwacji).Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- lista uczniów (wystarczy, że będą to uczniowie jednej klasy), - lista przedmiotów, - oceny (na jednym przedmiocie dany uczeń może otrzymać wiele ocen, przy czym wagi ocen można pominąć), - frekwencja.Aplikacja powinna umożliwiać:
- zarządzanie listą uczniów (dopisanie do listy, usunięcie z listy) - zarządzanie ocenami (wystawianie i anulowanie ocen w ramach przedmiotów) - zarządzanie obecnościami (nieobecny, usprawiedliwiony) - generowanie zestawień (średnia ocen danego ucznia, średnia ocen klasy)Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- testy w podziale na grupy tematyczne, każdy test składa się z zestawów pytań i odpowiedzi , - dane użytkowników, z wynikami przeprowadzonych testów oraz listą testów pominiętych.Aplikacja powinna umożliwiać:
- zarządzanie testami (redagowanie pytań i odpowiedzi, zapamiętanie lub usunięcie testu, przypisanie testu do grupy, utworzenie i usunięcie grupy testów), - przeprowadzenie testu (użytkownik może wybrać i przeprowadzić test - dla uproszczenia rozpoczętego testu nie można przerwać), - generowanie zestawień (średni wynik z testów danego użytkownika, wynik testu odniesiony do średniej, średni wynik użytkowników w grupie testów itp.).Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- istnieje "n" zasobników z przyprawami, - przyprawy w zasobnikach można uzupełniać, jednak uzupełnianie musi odbywać się w sposób rozłączny z pobieraniem z zasobników, - przyprawy z zasobników można pobierać jedynie w postaci mieszanek za pomocą mieszacza, - mieszacz pozwala na równoczesne pobranie "m" mieszanek pod warunkiem, że składniki mieszanek są różne, - przyprawy uzupełniają "dostawcy", - przyprawy pobierają "kucharze".Wizualizację działania aplikacji można zrealizować w trybie grafiki pikselowej (zamieszczając kod w metodzie paintComponent()) lub na formularzu (korzystając z komponentów SWING jak JLabel, JTextField itd.).
- istnieją dwie taśmy produkcyjne, na których transportowane są przetwarzane elementy (mogą poruszać się w przeciwnych kierunkach), - taśmy przesuwają się przez n stanowisk, na których produkty te mogą zostać poddane obróbce, - na taśmie 1 przesuwają się elementy nieobrobione, na taśmie 2 elementy obrobione, - elementy są wstawiane na początek taśmy 1 przez dwa roboty, przy czym przy wstawianiu elementów roboty te muszą się ze sobą synchronizować, - elementy są pobierane z końca taśmy 2 przez dwa roboty, które też muszą się ze sobą synchronizować, - taśma 1 nie przesunie się, jeśli na ostatniej jej pozycji znajduje się nieobrobiony element, - taśma 2 nie przesunie się, jeśli na końcowej pozycji końcowej znajduje się obrobiony element, - na każdym stanowisku znajduje się jeden pracownik, który pobiera element z taśmy 1, obrabia go, a następnie odkłada na taśmę 2, - całość można zwizualizować na etykietach w następujący sposób: roboty: R1 R2 \ / taśma 1 :| c > _ > _ > _ | stanowiska: _ b _ _ taśma 2 :| _ < _ < A < _ | / \ roboty: R3 R4 1 2 3 4 interpretacja: - pojedyncze małe litery reprezentują elementy nieobrobione, duże - obronione - na taśmie 1 znajduje się element c, - na drugie stanowisko pobrano element b, - na taśmie 2 znajduje się obrobiony element A, - w obecnym stanie trudno powiedzieć, czy element A to wynik działania na stanowisku 3 czy 4).Uwagi: może zdarzyć się, że kolejność elementów pobranych z taśmy 2 nie będzie zgadzać sie z kolejnością ich odłożenia na taśmę 1. Wątkami są: roboty, pracownicy, napędy taśm. W wątkach należy wstawić opóźnienia (najlepiej parametryzowane), by można było zaobserwować zachowanie układu przy różnych prędkościach pracy robotów, pracowników i napędów. Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- istnieje aplikacja centralna komunikująca się z innymi aplikacjami poprzez gniazda TCP/IP (klasy Socket, ServerSocket) - metody udostępnione w interfejsie tej aplikacji powininny pozwalać na zgłaszanie nowych zadań, przeglądanie zadań istniejących, pobieranie zadań do wykonania i przesłanie wyników - choć kodowanie przesyłanej informacji może być dowolne, to jednak zalecane jest kodowanie tekstowe (np. ciąg znaków: "+;20;40" może oznaczać zadanie sumowania liczb), - wyklucza się serializację obiektów (metody writeObject lub readObject nie powinny być stosowane), - złożoność zadań obliczeniowych nie musi być wysoka (chodzi raczej o przetestowanie pomysłu niż o wykonanie przemysłowego wdrożenia, na zajęciach zostanie to doprecyzowane), - opis zadań można rozszerzyć (o priorytety, kategorie, adresata itp.), - aplikacje wykonujące zadania obliczeniowe to procesy działające współbieżnie (mogą to być aplikacje uruchamiane na tym samym komputerze co aplikacja centralna lub na innych komputerach), - należy zastanowić się nad sposobem przekazywania/składowania wyników obliczeń.
- w systemie działają jako osobne aplikacje: kurier (może być ich wielu), dyspozytor, klient (może ich być wielu), - kurier zgłasza dyspozytorowi gotowość przyjęcia przesyłki (podając swoje namiary: host:port oraz kategorie przyjmowanych przesyłek), - klient zleca dyspozytorowi zadanie nadania przesyłki (podając swoje namiary: host:port oraz zawartość przesyłki wraz z jej kategorią), - dyspozytor odbiera zlecenie od klienta i, jeśli może je zrealizować, odpowiada potwierdzeniem otwarcia zlecenia (w przeciwnym wypadku odmawia przyjęcia zlecenia), - dyspozytor przekazuje zlecenie do realizacji któremuś z kurierów będących w stanie gotowości, - wybrany kurier otrzymuje przesyłkę do przekazania, przy czym kategoria przesyłki musi należeć do kategorii przez niego obsługiwanych, - jeśli aktulnie żaden kurier nie jest w stanie gotowości, to dyspozytor przekazuje przesyłkę do magazynu (o określonej pojemności), - zapełnienie magazynu uniemożliwia dyspozytorowi przyjęcie zlecenia, - pobieranie zleceń z magazynu odbywa się w chwilach, gdy pojawiają się jacyś kurierzy w stanie gotowości, - kurier informuje dyspozytora o fakcie dostarczenia przesyłki, z kolei dyspozytor informuje klienta o zakończeniu zlecenia, - kurier może wycofać u dyspozytora zgłoszenie gotowości na przyjęcie przesyłki pod warunkiem, że nie realizuje w danej chwili żadnego zlecenia, - komunikacja pomiędzy elementami systemu następuje z wykorzystaniem gniazd TCP/IP (klasy Socket, ServerSocket), - format komunikatów, protokół ich przekazywania, sposób serializacji danych - to kwestia do samodzielnego rozwiązania, - z założenia wszystkie komunikaty powinny mieć postać tekstową (format komunikatów należy zaproponować samemu), - każdy z elementów systemu (kurierzy, dyspozytor, klient) powinien posiadać interaktywny graficzny interfejs pozwalający na prowadzenie symulacji i obserwacje zmian, - klienci oraz kurierzy powinni obsługiwać zarówno gniazda klienckie (by wysłać coś do dyspozytora) oraz gniazda serwerowe (by coś odebrać od dyspozytora).
- elementami systemu są: terminale, monitory, centrala, stanowiska, - terminal wydaje klientom numerowane bilety po wybraniu typu sprawy, - na monitorach dla każdego typu sprawy wyświetlane są: liczba oczekujących, numery biletów aktualnie obsługiwanych, - centrala przekazuje terminalom na żądanie numery kolejnych biletów, - centrala pozwala zarejestrować się monitorom, by potem przekazywać im informacje aktualizacyjne, - aktualizacja informacji na monitorze następuje przy każdym przekazaniu z centrali biletu jakiemuś terminalowi bądź po zgłoszeniu centrali gotowości obsługi klienta na którymś ze stanowisk, - na stanowisku można poprosić centralę o numer biletu następnego klienta oraz zgłosić, że klient z danym numerem biletu został obsłużony.Wymagane klasy i interfejsy:
public class Ticket implements Serializable { public String category; public int number; public char status; // 'i' - issued, 'c' - called, 's' - served } public class Info implements Serializable { public Ticket[] serving; public int waiting; } public interface ICentral extends Remote { public bool register(IMonitor m) throws RemoteException; public Ticket ticketQuery(Ticket ticketServed) throws RemoteException; } public interface IMonitor extends Remote { public void update(Info[] i) throws RemoteException; }Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
- elementami systemu są: sensory, tablice, centrala, - sensor zbiera dane i na żądanie udostępnia je tablicy, w której wcześniej został zarejestrowany, - częstość odczytów sensora da się sparametryzować (lokalnie), - tablica pobiera dane z zarejestrowanych sensorów i te dane wyświetla, - częstość pobierania danych z sensorów da się parametryzować (zdalnie z centrali), - w jednej tablicy mogą się zarejestrować tylko trzy sensory: temperatury, siły wiatru, opadów, - tablica dostarcza dane pobrane z sensorów na żądanie centrali, w której wcześniej została zarejestrowana, - centrala zarządza tablicami (włącza/wyłącza pobieranie i wyświetlanie danych na tablicach), - centrala pobiera i wyświetla dane z tablic (w formie tabelarycznej).Wymagane klasy i zdalne interfejsy:
public class SensorReadings implements Serializable { public char category; // 't' - temperature, 'w' - wind, 'p' - precipitation public float value; // wartość, której jednostka zależy od kategorii } public class BoardData implements Serializable { public float temperature; public float wind; public float precipation; } public class ISensor extends Remote { SensorReadings getSensorReadings(); } public class IBoard extends Remote { bool register(ISensor s, char category) throws RemoteException; bool unregister(ISensor s) throws RemoteException; void toggle() throws RemoteException; // przełącznik włącz/wyłącz zbierania i wyświetlania danych na tablicy void setUpdateInterval(long milisec) throws RemoteException; } public class ICentrala extends Remote { int register(IBoard s) throws RemoteException; // zwraca numer przypisany do zarejestrowanej tablicy lub 0, jeśli operacja się nie udała int unregister(int id) throws RemoteException; // zwraca numer wyrejestrowanej tablicy lub 0, jeśli operacja się nie udała }Pozostałe szczegóły mają być zgodne z ustaleniami poczynionymi na początku zajęć.
Jeśli nie oznaczono inaczej, ta strona internetowa wraz z zawartością podlegają licencji Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 3.0 Polska (CC BY-NC-SA 3.0 PL).