Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
I denne oppgaven skal du lage en forenklet versjon av dette reseptsystemet.
Programmet vil inneholde klassene 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 Person
a) 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 Pasient
a)
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 Pasientregister
a)
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 Legekontor
a)
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.
Nedenfor ser du en skisse av klassen 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 Apotek
a)
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 Reseptsystem
a)
Programmer metoden public void opprettLegekontor().
b)
Programmer metoden public void opprettApotek().