Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Plass, Rad, Konsertsal
og Konserthus
. Objekter av typene Plass
og Rad
vil i oppgaveteksten bli omtalt som henholdsvis plasser og rader.
Av hensyn til oppgavens størrelse er programmet svært forenklet i forhold
til det som normalt ville kreves av et slikt program. Det er imidlertid bygget
opp på en slik måte at det er mulig å legge til ønsket funksjonalitet ved senere anledninger.
Plass
.
Klassen skal ha følgende datafelt:
true
eller false
avhengig av om plassen er ledig (det vil si ikke reservert) eller ikketoString
-metode som returnerer plassnummeret, samt
referansen i tilfelle plassen er reservert, melding om at den er ledig
ellersPlass
.
Rad
som er skissert nedenfor representerer
én enkelt rad i konsertsalen.
public class Rad
{
private int radnr; // radens nummer
private Plass[] plasser; // skal inneholde ett Plass
-objekt for hver av radens plasser.
// Plassene er nummererte fra 1 og oppover.
< Konstruktør med to parametre, en for radens nummer og en for
det antall plasser som det skal være på raden. Konstruktøren skal
initialisere datafeltene og fyller raden med det antall plasser
som parameteren antall angir. >
}
public ... getAntPlasser()
{
< Returnerer antall plasser på raden. >
}
public ... ledig( int plassnr )
{
< Returnerer true dersom plassen med det nummer som parameteren angir
eksisterer og er ledig, returnerer false ellers. >
}
public void reserver( int plassnr, String ref )
{
< Reserverer plassen som første parameter angir. Andre parameter
angir plassens referanse. (Du kan forutsette at plassen eksisterer
og er ledig.) >
}
public ... ledigePlasser()
{
< Returnerer en boolsk array der array-elementene inneholder
true eller false avhengig av om den tilsvarende plassen i arrayen
plasser er ledig eller ikke. >
}
public void ledigstill( int plassnr )
{
< Ledigstiller den plassen som parameteren angir. >
}
public ... plassinfo( int plassnr )
{
< Returnerer informasjon om radnummer, plassnummer, samt referanse for
plassen i tilfelle den er reservert, eller informasjon om at den er ledig.
Hvis plassen ikke eksisterer skal metoden gi beskjed om det. >
}
} // end of class Rad
I noen av metodene som er skissert for klassen Rad
, mangler
det datatype for returverdien. Der må du selv finne ut hva den skal være.
a) Programmer klassens konstruktør og metoden getAntPlasser
.ledig
og reserver
.
c) Programmer metoden ledigePlasser
.
d) Programmer metodene ledigstill
og plassinfo
.
Konsertsal
, som er skissert nedenfor, representerer
konserthusets konsertsal med et antall rader av forskjellig lengde.
public class Konsertsal
{
private final int ANTALLFØRSTERAD = 10; // antall plasser på første rad
private Rad[] rader; // skal inneholde ett Rad
-objekt for alle elementene i arrayen.
< Konstruktør med antall rader som parameter. Konstruktøren skal
initialiserer datafeltene. Første rad har radnr lik 1. Videre nummereres
radene fortløpende oppover. Antall plasser på en rad øker med 1 for hver
ny rad etter den første raden. >
}
public void ledigstill( int rad, int plass )
{
< Ledigstiller angitt plass. >
}
public void tømKonsertsal()
{
< Gjør konsertsalen klar for ny forestilling ved at alle plassene ledigstilles. >
}
public void visLedigePlasser( JTextArea sal )
{
< Skriver ut i mottatt tekstområde en oversikt over alle ledige plasser.
Det skal være en tekstlinje for hver rad i konsertsalen.
Forrest på tekstlinja skrives radens nummer. Deretter følger plassnummerene,
dvs. alle ledige plasser står oppført med sitt nummer, mens alle reserverte
står oppført med XX. Utskriften skal i størst mulig grad ligne på den som er
vist på bilde av tekstområdet i oppgave 4. Det betyr at det må skrives ut et
varierende antall blanke foran plassnumrene på hver rad. I tillegg skal hvert
ledige plassnummer skrives ut med to sifre hvilket medfører at plassnumre
mindre enn 10 skal skrives med en innledende null. Du kan forutsette at alle
tegn og blanke har samme bredde. >
}
public String reservasjonsoversikt()
{
< Den returnerte tekst skal for hver reservert plass inneholde en
tekstlinje med plassens radnummer, plassnummer og referanse. >
}
public boolean reserver( int rad, int startplass, int antall, String ref )
{
< Forsøker å reservere det antall plasser som parameteren antall angir.
For enkelhets skyld forutsettes det at alle plassene skal være på
samme rad: den rad som parameteren rad angir.
Parameteren startplass angir plassnummer for den første av plassene.
(De øvrige plassene har økende plassnumre etter hverandre.)
Parameteren ref angir plassenes referanse (den samme for alle).
Dersom noen av plassene er opptatt eller ikke finnes, skal ingen
plasser reserveres.
Returverdien skal indikere om reservasjonen lyktes eller ikke.>
}
} // end of class Konsertsal
a) Programmer klassens konstruktør.
b) Programmer metodene ledigstill
og
tømKonsertsal
.
c) Programmer metoden visLedigePlasser
.
d) Programmer metoden reservasjonsoversikt
.
e) Programmer metoden reserver
.
Konserthus
definerer brukergrensesnittet til programmet.
Nedenfor ser du et par bilder av brukergrensesnittet:
< import-setninger > public class Konserthus extends JFrame { private final int ANTALLRADER = 13; private Konsertsal sal; private JTextField telefonfelt, radfelt, plassfelt, antallsfelt; private JTextArea utskrift; private JButton reservasjonsknapp, tømmeknapp, ledigknapp, listeknapp; public Konserthus() { sal = new Konsertsal( ANTALLRADER ); < oppretter lytteobjektet > < knytter knappene til lytteobjektet > < oppretter brukergrensesnittet > } public void visLedigePlasser() { < Skriver ut i tekstområdet oversikt over ledige plasser. > } public void visReservasjoner() { < Skriver ut i tekstområdet radnummer, plassnummer og referanse for alle reserverte plasser. > } public void reserverPlass() { < Forsøker å reservere de plasser som indikeres av verdiene som leses inn fra tekstfeltene. I tekstområdet gis det passende tilbakemelding til brukeren. (Plassene må ligge etter hverandre innenfor en og samme rad. Ønskes det plasser som ikke oppfyller dette, må reservasjon foretas i flere omganger.)> } public void tømKonsertsal() { < Gjør klar konsertsalen for ny forestilling ved å ledigstille alle plasser. For at dette ikke skal gjøres uforvarende, bør metoden be om en bekreftelse fra brukeren før dette blir utført. > } < privat lytteklasse > }// end of class Konserthusa) Programmer metodene
visLedigePlasser
og
visReservasjoner
.
b) Programmer metoden reserverPlass
.
c) Programmer metoden tømKonsertsal
.
d)