Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Person
,
Lege
, Pasient
, Resept
,
Legeregister
og
Pasientregister
, som tilsammen utgjør datastrukturen.
Klassene Legekontor
og Apotek
utgjør brukergrensesnittet på henholdsvis
legekontoret og apoteket, mens Reseptsystem
setter sammen de forskjellige delene av programmet.
(I tillegg er det en driverklasse som inneholder main-metoden. )
Hvordan klassene er relatert til hverandre
vil fremgå av teksten i deloppgavene.
Det er mange klasser, men du skal ikke programmere alle. Du vil
imidlertid få bruk for å kjenne til alle klassene, og nødvendig informasjon
vil i denne forbindelse bli oppgitt etterhvert.
Klassen
Resept
skal du ikke programmere, men du vil trenge å kjenne
til den. public class Resept { private boolean utlevert = false; private String tekst; private Calendar dato; private Pasient pasient; private Lege lege; private int nr; private static int nesteNr = 0; < Konstruktøren mottar reseptens tekst, legen og pasienten som parametre. Resepten blir tildelt et unikt nummer, datoen for opprettelsen av resepten blir registert, i tillegg til at annen nødvendig initialisering blir foretatt. > < get-metoder for datafeltene nr og utlevert > public void registrerUtlevert() { < Metoden registrerer at den medisinen resepten foreskriver er utlevert. > } public String toString() { < Metoden returnerer en tekst som innholder all informasjon på resepten, samt opplysninger om medisinen resepten foreskriver er utlevert eller ikke. > } } // end of class Resept******************************************************************************************* Programmet innholder et lite klassehierarki bestående av superklassen
Person
og
subklassene Lege
og Pasient
.
Person
.
public class Person { private String navn; private String fødselsdato; < Konstruktør som mottar navn og fødselsdato som parametre og foretar initialisering av datafeltene. > < get-metode for navn > < get-metode for fødselsdato > public String toString() { < Metoden skal returnere navn og fødselsdato i form av tekst. > } } // end of class Persona) Programmer ferdig klassen
Person
ved å erstatte all pseudo-kode med java-kode.
Lege
, som er en direkte subklasse til
klassen Person
. I tillegg til datafeltene som klassen har arvet fra sin
superklasse skal Lege
ha
datafelt for følgende opplysninger:
p>
Resept
.(Se skisse av klassen Resept
foran i oppgaven.)Resept
-objekter) arrayen skal kunne inneholde.
Konstantens verdi kan du sette til 100.Resept
-objekter) som arrayen til enhver tid inneholdertoString
-metode som returnerer alle
opplysninger som er lagret om legen, samt alle reseptene vedkommende lege har skrevet ut.Lege
-metoden
public String nyResept( Resept r ) { < Metoden mottar en resept som parameter og setter den, om mulig, inn i arrayen av resepter. Hvis dette gikk bra, skal metoden returnere informasjon om selve resepten, og i motsatt fall skal den returnere informasjon om at det ikke var plass i arrayen. > }d) Programmer
Lege
-metoden
public String utskrevneResepter() { < Metoden skal returnere en tekst som inneholder informasjon om alle reseptene legen har skrevet ut. Reseptene skal skrives ut i omvendt kronologisk rekkefølge slik at de nyeste reseptene kommer første og de eldste sist. Hvis legen ikke har skrevet ut noen resepter, skal metoden returnere informasjon om det. > }
Pasient
er også en direkte subklasse til klassen Person
.
Nedenfor ser du en skisse av klassen:
public class Pasient < arver klassen Person > { private Resept[] resepter; private int antall = 0; < En konstant MAX lik 100 for det maskimale antall resepter arrayen kan inneholde > < Konstruktør som mottar pasientens navn og fødselsdato som parametre og foretar nødvendig initialisering. > public boolean nyResept( Resept ny ) { < Metoden setter en ny resept inn i pasientens resept-array. NB! Denne metoden skal du ikke programmere!> } public Resept finnResept( int n ) { < Metoden returnerer resepten med reseptnummer lik parameteren n. Hvis en slik ikke finnes, skal metoden returnere null. > } public String toString() { < Metoden skal returnere all informasjon om pasienten og vedkommendes resepter. Det skal fremgå av teksten om medisinene reseptene foreskriver er utlevert eller ikke, samt hvor mange resepter som ikke er avhentet. > } } // end of class Pasienta) Programmer metoden
public Resept finnResept( int n )
.
b)
Programmer metoden public String toString()
.
Pasientregister
.
Nedenfor ser du en skisse av klassen:
public class Pasientregister { private Pasient[] pasienter; public Pasientregister( Pasient[] p ) { pasienter = p; } public boolean nyPasient( Pasient p ) { < Metoden setter, hvis mulig, inn Pasient-objektet p på første ledige plass i arrayen. Returverdien indikerer om dette var mulig eller ikke. NB! Denne metoden skal du ikke programmere! > }
public Pasient finnPasient( String dato, String navn ) { < Metoden returnerer, hvis mulig, Pasient-objektet med fødselsdato og navn lik parametrene dato og navn. Hvis et slikt objekt ikke finnes returnerer metoden null. NB! Denne metoden skal du ikke programmere! > } public Pasient[] finnPasient( String dato ) { < Metoden skal returnere array som inneholder alle pasientene som har fødselsdato lik parameteren dato. Arrayens lengde skal være nøyaktig lik det antall Pasient-objekter som har en slik fødselsdato. Dvs. I arrayen som returneres skal ingen array-elementer være lik null.) Hvis det ikke finnes noen pasienter med denne fødselsdatoen, skal metoden returnere null. > } } // end of class Pasientregistera) Programmer metoden
public Pasient[] finnPasient( String dato )
.
***********************************************************************************
Nedenfor ser du en skisse av klassen Legeregister
. Du skal
ikke programmere klassen, men trenger å kjenne til den.
public class Legeregister { private Lege[] leger; public Legeregister( Lege[] l ){ ... } public Lege[] getLeger(){ ... } < Andre metoder du ikke vil får bruk for i denne oppgaven > }// end of class Legeregister***********************************************************************************
Nedenfor ser du en skisse av vindusklassen Legekontor
:
< import-setninger> public class Legekontor extends JFrame { private Lege legen; private Pasientregister pasienter; private JTextField pNavnFelt, pFødtFelt; private JTextArea utskrift, editor; private JButton nyPasient, finnPasient, sendResept, alleResepter; public Legekontor( Lege l, Pasientregister p ) { super( "LEGE " + l.toString() ); legen = l; pasienter = p; < Oppretter alle skjermkomponentene og setter opp brukergrensesnittet. > < Oppretter et lytteobjekt og knytter knappene til lytteobjektet. > }
public void alleResepter() { < Metoden skal i tekstområdet "utskrift" skrive ut alle reseptene legen har forskrevet. > } public void nyPasient() { < Metoden skal registrere en ny pasient i Pasientregisteret. > } public void finnPasient() { < Metoden skal i tekstområdet "utskrift" skrive ut informasjon om en ønsket pasient, forutsatt at både pasientens navn og fødselsdato er skrevet inn. Hvis imidlertid det kun er fødselsdatoen som er skrevet inn, skal metoden skrive ut opplysninger om alle pasienter som er født på denne datoen. Hvis det ikke finnes noen slik(e) pasient(er), skal metoden gi beskjed om det. > } public void sendResept() { < Ut fra informasjonen som legen har skrevet inn i vinduets tekstfelt og tekstområdet "editor", skal metoden lage en resept. Hvis pasienten som resepten skal skrives ut til ikke finnes i pasientregisteret, må pasienten først registeres. Resepten skal inneholde informasjon om pasienten og legen, samt den teksten som legen har skrevet inn i tekstområdet "editor". (Her vil det stå opplysninger om medisin, mengde og dosering m.m ) Den nye resepten skal så lagres i både legens og pasientens Resept-array. > } < private lytteklasse som skal fange opp hedelsene i vinduet. > }// end of class Legekontora) Programmer metoden
public void alleResepter()
.
b)
Programmer metoden public void nyPasient()
.
c)
Programmer metoden public void finnPasient()
.
d)
Programmer metoden public void sendResept()
.
e)
Programmer den private lytteklassen slik at den fanger opp klikkene på knappene
og sørger for at de tilhørende oppgavene blir utført.
Apotek
:
< import-setninger > public class Apotek extends JFrame { private Pasientregister pasienter; private JTextField pNavnFelt, pFødtFelt, reseptNrFelt; private JTextArea reseptOmråde; private JButton finnResepter, registrerUtlevert; public Apotek( String apotek, Pasientregister p ) { super( apotek + " apotek " ); < Oppretter alle komponentene og setter opp brukergrensesnittet. > < Oppretter et lytteobjekt og knytter knappene til lytteobjektet. > } public void finnResepter() { < NB! Denne metoden skal du ikke programmere! > } public void registrertUtlevert() { < Ut fra pasientens navn, fødselsdato og reseptens nummer skal metoden registerere at medisinen som resepten foreskriver er utlevert. > } < private lytteklasse som fanger opp hedelsene i vinduet. > }// end of class Apoteka) Programmer metoden
public void registrertUtlevert()
.
public class Reseptsystem { private Pasientregister pasienter; private Legeregister legene; public Reseptsystem( int antPasienter, int antLeger ) // Kan oppgis { legene = new Legeregister( opprettLegeArray( antLeger ) ); pasienter = new Pasientregister( opprettPasientArray(antPasienter) ); // kan droppes opprettLegekontor(); opprettApotek(); } public Lege[] opprettLegeArray( int antLeger ) { < Metoden returnerer er array med Lege-objekter. Antallet objekter er lik arrayens lengde. NB! Denne metoden skal du ikke programmere! > } public Pasient[] opprettPasientArray(int antPasienter) { < Metoden returnerer er array med Pasient-objekter. Antallet objekter er lik arrayens lengde. NB! Denne metoden skal du ikke programmere! > } public void opprettLegekontor() { < Metoden skal opprette like mange legekontor (Legekontor-objekter) som leger i Legeregisteret. > } public void opprettApotek() { < Metoden skal opprette 4 apotek (Apotek-objekter) med følgende navn: "Svanen", "Sfinksen", "Vitus" og "Løven". > } }// end of class Reseptsystema) Programmer metoden
public void opprettLegekontor()
.
b)
Programmer metoden public void opprettApotek()
.