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

Pengelotteriet

Oppgaven går ut på å lage et program som simulerer et pengelotteri. Lotteriet skal være et veldedighetslotteri der en viss prosent av inntektene går til Røde Kors. Programmet skal kunne registrere loddsalg, bestemme gevinstenes størrelser og foreta trekningen. Klassen Lodd representerer ett enkelt lodd, mens klassen Gevinst representerer en gevinst. I klassen Lotteri er det to arrayer, den ene inneholder Lodd-objektene og den andre inneholder Gevinst-objektene. Klassen Loddsalgvindu utgjør brukergrensesnittet for loddsalget, mens klassen Lotterivindu utgjør brukergrensensnittet for å vise gevinstprognoser og foreta trekningen. Lodd-objekter og Gevinst-objekter vil i teksten bli omtalt som lodd og gevinster. Nærmere detaljer om de nevnte klassene er forklart i de enkelte deloppgavene.

Oppgave 1

Klassen Lodd skal ha datafelt for følgende opplysninger:

Klassen skal ha følgende metoder:

a) Deklarer klassens datafelt, og programmer klassens konstruktør.

b) Programmer resten av klassens metoder.
NB! Pass på at du velger riktig aksessform for datafeltene og metodene.

Oppgave 2

Klassen Gevinst skal ha datafelt for følgende opplysninger:

Klassen skal ha følgende metoder:

a) Programmer klassen Gevinst.

Oppgave 3

Klassen Lotteri inneholder to arrayer, loddbok og gevinster. Loddboka er i utgangspunktet tom, men etterhvert som loddene selges, opprettes det Lodd-objekter som så settes inn i arrayen. Arrayen gevinster er også tom i utgangspunktet og her blir Gevinst-objektene først satt inn når størrelsen på gevistene er beregnet, dvs. før trekningen i lotteriet. Nedenfor ser du en skisse av klassen Lotteri:

< import-setninger >

public class Lotteri
{
  private int loddpris;
  private double rødekors;   //0.1 tilsvarer 10% til Røde Kors
  private  int antallSolgte; //Antall solgte lodd
  private  int sumLoddsalg;  //Summen det er solgt lodd for i hele kroner
  private Lodd[] loddbok;
  private Gevinst[] gevinster;
  private boolean trekningForetatt = false;

  < Konstruktør som mottar parametre for rødekorsandelen og loddprisen,
    samt to parametre lengdene for arrayene. >

  < get-metoder for antallSolgte og loddpris >

  public String loddsalg( String navn, String adr, String mobil, int antall )
  {
    < Metoden skal registrere salg av det antall lodd som loddkjøperen
      ønsker å kjøpe, under forutsetning av at det er nok usolgte lodd
      igjen (dvs. nok ledig plass i arrayen). Paramtrene gir opplysninger
      om loddkjøperens navn, adresse og mobilnummer, samt hvor mange lodd
      vedkommende skal ha. Datafeltene antallSolgte og sumLoddsalg skal
      oppdateres, slik at det til enhver tid holdes rede på hvor mange
      lodd som er solgt og hvor mye det er solgt lodd for. Metoden skal
      returnene en tekst med informasjon om loddene som kjøpes, samt
      opplysninger om hvor mye loddkjøperen skal betale. Hvis salget ikke
      lar seg gjennomføre (fordi det ikke er nok lodd igjen)  skal metoden
      returnere informasjon om det. >
  }

  public int rødekorsAndel()
  {
    < Metoden returnerer den andelen av loddsalget skal skal gå til Røde Kors.
      Beløpet skal returneres i hele kroner. >
  }

  public void beregnGevinster()
  {
    < Metoden skal opprette gevinster (antallet gevinster er lik lengden på
      gevinst-arrayen) og beregne størrelsen på dem etter følgende regler:
      Etter at Røde Kors-andelen er trukket fra inntektene av loddsalget, skal
      50% gå til 1.gevinsten, mens resten av beløpet skal fordeles de
      resterende gevinstene. (Hver gevinst skal representeres som et Gevinst-
      objekt i arrayen gevinster.) >
  }

  public String gevinstprognoser()
  {
    < Metoden skal returnere informasjon om hvor mye det er solgt lodd for og
      hvor stor andel som skal gå til Røde Kors, samt gi en oversikt over hva
      de forskjellige gevinstene lyder på. Det er en forutsetning at det er
      solgt flere lodd enn det er gevinster. Hvis ikke, skal metoden returnere
      informasjon om at det er solgt for få lodd til at gevinstprognoser kan
      beregnes. >
  }

  public void trekning()
  {
    < Metoden skal beregne gevinster og foreta en trekning.
      Følgende instruksjon returnerer indeksen til et av loddene i loddboka:

            int indeks = (int) ( Math.random() * antSolgte );

      Det skal trekkes like mange lodd som det er gevinster, men alle
      loddene som trekkes må være forskjellige. Vinnerloddene må oppdateres,
      slik at de merkes som vinnerlodd,  og gevinstene må oppdateres, slik at
      det registreres hvem vinnerne er. Det må også registreres i lotteriet
      at trekningen er foretatt. >
  }

  public String vinnerliste()
  {
    < Denne metoden skal foreta trekningen ved at metoden over blir kalt,
      under forutsetning av at det er solgt flere lodd enn det er gevinster
      og at trekningen ikke allerede er foretatt. Metoden skal så returnere
      en liste over hvilke lodd som har vunnet hvilke gevinster, og hvem de
      heldige vinnerne er. Hvis det ikke er solgt nok lodd, skal metoden
      returnere informasjon om at det er solgt for få lodd til å foreta
      trekningen. >
  }
}// end of class Lotteri

a) Programmer metoden
public String loddsalg( String navn, String adr, String mobil, int antall)

b) Programmer metodene

c) Programmer metoden public String gevinstprognoser().

d) Programmer metoden public void trekning().

e) Programmer metoden public String vinnerliste().

Oppgave 4

Nedefor seg du et bilde av vinduet for loddsalget, etterfulgt av en skisse av klassen Loddsalgvindu.

< import-setninger >

public class Loddsalgvindu extends JFrame
{
  private Lotteri lotteriet;
  private JTextField navnefelt, mailfelt, mobilfelt, antallfelt;
  private JTextArea utskrift;
  private JButton regknapp;
  private Loddsalglytter lytter;

  public Loddvindu(Lotteri l)
  {
    < Setter opp brukergrensesnittet og knytter regknapp til lytteobjektet. >
  }

  public void registrerLoddsalg()
  {
    < Metoden skal registrere salg av et antall nye lodd, forutsatt at
      det er nok usolgte lodd igjen. Utfallet av registreringen skal
      skrives i utskriftsområdet, herunder utskrift av alle loddene som
      er kjøpt. >
  }

  < Privat lytteklasse >

} // end of class Loddsalgvindu

a) Programmer metoden public void registrerLoddsalg().

Oppgave 5

Nedenfor seg du to bilder av lotterivinduet. Det første viser gevinstprognoser, mens det andre viser resultatet av trekningen:

Nedenfor ser du en skisse av klassen Lotterivindu:

< import-setninger >

public class Lotterivindu extends JFrame
{
  private Lotteri lotteriet;
  private Loddvindu loddvindu;
  private JButton prognoseknapp, trekningsknapp;
  private JTextArea utskrift;
  private Lotterilytter lytter;

  public Lotterivindu(Lotteri l, Loddvindu lv)
  {
    < Setter opp brukergrensesnittet og knytter knappene til lytteobjektet. >
  }

  public void visGevinstprognose()
  {
    < Metoden skal vise gevinstprognosene i utskriftsområdet. >
  }

  public void vinnerliste()
  {
    < Metoden skal vise resultatet av trekningen i utskriftsområdet. >
  }

  < Den private lytteklassen Lotterilytter >

}// end of class Lotterivindu

a) Programmer metodene

b) Programmer den private lytteklassen Lotterilytter.
Hvilke instruksjoner må stå i konstruktøren for at hendelsene i vinduet skal fanges opp av lytteobjektet?

Oppgave 6

a) Programmer klassen Lotteriprogram som inneholder applikasjonens main-metode.


 
SLUTT