Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

KONSERTHUSET

Du skal lage et program som skal brukes til reservasjon av billetter ved et konserthus. Programmet skal kunne vise ledige plasser, kunne reservere ønskede plasser, vise data for reserverte plasser, samt ledigstille alle plassene i konsertsalen. Hver reserverte plass skal tilordnes en referanse i form av et telefonnummer. For enkelhets skyld skal programmet ikke kunne håndtere mer enn én enkelt forestilling om gangen.

Programmet vil bestå av fire klasser: 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.

OPPGAVE 1

I denne oppgaven skal du programmere klassen Plass. Klassen skal ha følgende datafelt:

Du må selv avgjøre hvilke datatyper som skal brukes, og hvilken aksessform datafeltene skal ha.

Klassen skal ha en konstruktør som initialiserer datafeltene. Konstruktøren skal kun ha plassens nummer som parameter.

Klassen skal i tillegg ha metoder for følgende operasjoner:

a) Programmer klassen Plass.

 
 

OPPGAVE 2

Klassen 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.

b) Programmer metodene ledig og reserver.

c) Programmer metoden ledigePlasser.

d) Programmer metodene ledigstill og plassinfo.

OPPGAVE 3

Klassen 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.

OPPGAVE 4

Klassen Konserthus definerer brukergrensesnittet til programmet. Nedenfor ser du et par bilder av brukergrensesnittet:

Nedenfor følger en skisse av klassen:

< 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 Konserthus

a) Programmer metodene visLedigePlasser og visReservasjoner.

b) Programmer metoden reserverPlass.

c) Programmer metoden tømKonsertsal.

d)

OPPGAVE 5

a) Oppgavene 1 til 4 utgjør ikke et fullstendig java-program. Hva er det som mangler? Skriv det som mangler for at programmet skal kunne kjøres.

SLUTT