A feladat során egy Egészségügyi rendszert fogunk fejleszteni.
Készíts egy hc.knowledge.Lexicon
osztályt. A lexikonnak legyen egy getCureFor
nevű statikus metódusa, mely egy String
paramétert vár, és String
-gel tér vissza. Legyen képes az alábbi válaszok megadására:
input | output |
---|---|
headache | aspirin |
sore throat | warm tea |
sprained ankle | rest |
influenza | no medicine |
running nose | paper tissue |
Minden esetben, ha nem a felsorolt inputok egyikét küldik be a getCureFor
metódusba, adja vissza a No known cure
üzenetet.
Legyen egy hasCure
statikus metódus ami egy String
-et vár, és true
értékkel tér vissza, ha a lexikonban van gyógymód az adott betegséghez.
Készíts egy hc.doctor.Stamp
osztályt, ami egy orvosi bélyegzőt reprezentál. Legyen egy registrationNumber
adattagja, ami egy rejtett, megváltoztathatatlan egész szám. A bélyegző String
-é alakítva legyen: rn: <registrationNumber>
. A hc.doctor.Stamp
konstructora csak a hc.doctor
package-ből legyen elérhető.
Készíts egy hc.doctor.Doctor
osztályt, melyre az alábbiak iagazak:
-
minden
hc.doctor.Doctor
rendelkezik egy rejtett, nem megváltoztathatóname
adattaggal, amit egyString
reprezentál -
minden
hc.doctor.Doctor
rendelkezik, egy rejtett, nem megváltoztathatóstamp
adattaggal, amit egyhc.doctor.Stamp
reprezentál -
a
Doctor
objektumokString
-é alakítva tartalmazzák az orovos nevét és a bélyegzőjükString
reprezentánsát egy szóközzel elválasztva. Például:Dr. Ross Geller rn: 123
-
a
hc.doctor.Doctor
osztály konstruktora csak a leszármazottak számára legyen elérhető, és paraméterül várjon egy nevet és egy bélyegzőt (name
ésstamp
) -
A
Doctor
osztály rendelkezzen egycanCure
metódussal, mely egyString
-et vár bemenő paraméterül, és egyboolean
értéket ad vissza, annak megfelelően, hogy az adott betegségre létezik-e gyógymód aLexicon
-ban -
a
Doctor
osztály rendelkezzen egycure
metódussal, mely két bemenőString
paraméteret vár: a beteg neve és a betegség neve. A visszatérési értéke:<beteg neve> should take: <gyógymód>\nsign: <name>\nstamp: <stamp>
. Ahol a<beteg neve>
a paraméterül kapott beteg név, a<gyógymód>
a Lexiconban található gyógymód a betegségre. A\n
sortörést jelöl. A<name>
mező az orvos neve, astamp
pedig aStamp
objektukString
-e alakítva. Pl.:Peter Pan should take: aspirin sign: Dr. A. Kula rn: 66
amennyiben nincs ismert gyógymód a betegségre, a visszatérési érték legyen: No known cure
Készíts egy nem ellenőrzött kivételt: hc.doctor.RegistrationNumberIsAlreadyTakenException
, ami konstruktorában egy Doctor
-t vár, és az üzenete Registration number is already taken by: <Doctor>
, ahol a<Doctor>
a pareméterül kapott orovos String
-é alakítva.
Készíts egy hc.doctor.DoctroNominator
osztályt, aminek egyetlen statikus metódusa legyen a nominate
függvény, mely egy Doctor
objektummal tér vissza, és bemenő paraméterként egy nevet (String
), és egy regisztrációs számot vár.
A nominate
metódus dobjon RegistrationNumberIsAlreadyTakenException
-t, ha olyan regisztrációs számmal akarnak orvost létrehozni, amivel egyszer már hoztak létre egy orvost.
Készítsd el a hc.university.Researcher
interface-t. A Researcher
egyetlen findCure
metódussal rendelkezzen, mely String
-et ad vissza, és egy String
-et vár paraméterül.
Készíts egy hc.doctor.ResearcherDoctor
nevű osztályt, mely a hc.doctor.Doctor
osztályt terjeszti ki és a hc.doctor.ResearcherDoctor
interfacet implementálja. A ResearcherDoctor
tartsa számon hány gyógymódot fejlesztett eddig ki, amit tároljon egy rejtett researchCounter
változóban. A ResearcherDoctor
a findCure
metódus ismert betegségekre adja vissza a Lexicon
-ban található gyógymódot, ismeretlen betegségek esetén pedig:
- növelje eggyel a
researchCounter
értékét - fejlesszen ki egy új gyógymódot (a viasszadott üzenet legyen
cure - <Doctor> - <researchCounter>
, ahol a<Doctor>
az orvosString
reprezentánsa, a<researchCounter>
pedig a a kikutatott gyógymódok sorszáma. Pl.:cure - Dr. Drake Ramore rn: 8128 - 1
- az új gyógymódot jegyezze fel a
Lexicon
-ba. (Ehhez adj hozzá egy statikusregisterCure
metódust aLexicon
osztályhoz, ami kétString
paramétert vár (a betegség neve, és a gyógymód)).
A ResearcherDoctor
minden esetben válaszoljon true
értékkel, ha megkérdezik tőle, meg tud-e gyógyítani egy betegséget.
Egészíts ki a hc.doctor.DoctorNominator
osztályt egy nominateResearcher
metódussal, melyre ugyanazon szabályok vontakoznak, mint a nominate
metódusra, de ResearcherDoctor
típusú objektumokat gyárt. Figyelem: ResearcherDoctor
-ok sem rendelkezhetnek ugyanazon pecséttel, mint egy sima Doctor
.
Ha a ResearcherDoctor
-on meghívják a cure
metódust egy eddig ismeretlen betegséggel, akkor először kutassa ki a gyógymódot, majd járjon el úgy, mint a Doctor
osztály.
Készíts egy hc.institute.Hospital
osztályt, mely egy generikus paraméterrel rendelkező osztály. Biztosítsd, hogy a generikus paraméternek csak a Doctor
osztályt, vagy annak valamely leszármazottját lehessen beállítani. A Hospital
-oknak legyen egy rejtett doctors
adattagja, aminek a típusa legyen java.util.List
, és az ott dolgozó orvosokat tartalmazza. A doctors
lista generikus paramétere egyezzen meg a Hospital
generikus paraméterével.
Az objectumoknak 2 metódusa legyen:
addDoctor
ami egy generikusnak megfelelő típusú objektumot vár paraméterül, és felveszi adoctors
listába.cure
mely egy beteg nevét és a betegség nevét várja paraméterül és egyboolean
értékkel tér vissza, és keres egy olyan orovost adoctors
listában, aki tudja gyógyítani a betegséget, meghívja rajta acure
metódust, majd visszatértrue
értékkel. Ha nem talál ilyen orvost, akkor térjen visszafalse
értékkel.
Készítsd el a hc.institute.ResearchHospital
osztályt, ami a Hospital
osztály speciális leszármazottja, nincs generikus paramétere, és csak ResearcherDoctor
-okat lehet hozzáadni.