Les gjennom hele oppgavesettet før du begynner å b,svare deloppgavene.. Hold deg til de identifikator-navnene som er brukt i o pgaveteksten, dog med unntak av metodenes parameternavn som n velges fritt.. Dersom det er en deloppgave du ikke får til, bør du gå videre til den neste. Får du bruk for en metode fra en deloppgave d ikke har gjort, kan du gjøre kall på metoden selv om du ikke har pro rammert den. Du forutsetter da at den utfører det den er tiltenkt å gjør. Det er viktig at du svarer (i alle fall litt) på alle deloppgavene.. Merk deg at svært mye av programmeringen går ut p å gjøre kall på passende metoder av dem som er omtalt i oppgaven. Merk deg derfor o hva de omtalte metodene utfører. Pass pa ved metod kall at argumenter er av riktig type og sørg for å gjøre bruk v dataene som metodene returnerer.. Svar nøyaktig på det du blir spurt om. Dersom du me er at oppgaveteksten ikke gir deg tilstrekkelig informasjon lier er uklar, kan du gjøre dine egne forutsetninger. Gjør i så fall rede f r disse.. Ved sensur vil alle bokstaverte deloppgaver (a, b, c,.. ) telle like mye. 4
Lotteri Oppgaven g~r ut p~ ~ lage deler av et program for et lite p gelotteri. Programmet skal kunne registrere loddsalg, bestemme gev stenes størrelse og utføre trekning. Klassen Lodd representerer ett enkelt lo d. Klassen Lotteri inneholder en array av slike. Dessuten inneholder den blant annet en array av Premie-objekter. Disse representerer lotteriets premier. Kla sen Lotterivindu definerer et brukervindu som skal brukes blant annet i forbi deise med loddsalg og trekning. Nærmere detaljer for de nevnte klass ne er forklart i de enkelte deloppgavene. Metodene som du blir bedt om ~ pro rammere, skal i den grad det faller naturlig gjøre bruk av de konstanter so er definert i oppgaveteksten. Oppgave 1 Klassen Lodd representerer ett enkelt lodd. Den skal ha dat felt (instansvariable) for loddkjøperens navn, adresse og telefo nummer. Dessuten skal hvert Lodd-objekt ha et loddnummer {heltall og en variabel som indikerer om loddet er et vinnerlodd eller ikke. Dette bl r først avgjort ved trekningen. I utgangspunktet er det derfor ikke et vinnerlod. a) Programmer klassen Lodd. Klassen skal ha konstruktørf m initialiserer alle instansvariable. Konstruktøren må ha de nødvendige p rametre for dette. Klassen skal ha følgende metoder: public void setvunneto{.) Metoden registrerer at loddet er et vinnerlodd public boolean vunneto { Returverdien indikerer om dette er et vinnerlodd eller ikke. public String tostringo { } Den returnerte teksten skal inneholde opplysninger om lod*ts nummer, samt loddkjøperens navn, adresse og telefonnummer. I Oppgave 2 Klassen Premie som er skissert i det følgende, representeret en enkelt premie i lotteriet. 2.
skal initialisere premiesum og plassering via parametre. public class Premie private Lodd vinnerlodd; / /Ioddet som har vunnet premien, / /bestemmes når treknin blir foretatt t pr!vate ~ouble pre.miesum; / /hvor m.ange \~oner premien ut jør private Int plassering; / /nummeret til premien <Konstruktør> public void setvinner( Lodd vinner) public Lodd getvinnero } public String tostringo~ J. a) Programmer konstruktør og metoder for klassen premie.! Konstruktøren Metodene setvinner og getvinner er set- og get-metoder (m tator- og aksessor-metoder) for instansvariabelen vinnerlodd. tostrin -metoden skal returnere en tekst som forteller hvilken premie dette er (nu meret på premien) og hvor mange kroner den er på (fortrinnsvis for attert til to desimaler). Oppgave 3 I det følgende finner du en skisse av klassen Lotteri. public class Lotteri { public static final int MAXANTLODD = 100, ANTPREMIER = 6 public static final double LODDPRIS = 50.0, RØDEKORSAND L = 0.1; private Lodda loddbok = new Loddr MAXANTLODD ]; private Premier] premieliste = new Premie[ ANTPREMIER ]; private int ants"olgte = O; Ilantall solgte lodd private double sumloddsalg = 0.0; Ilsummen det er solgt I d for totalt private double rødekors = 0.0; Ilsummen som skal gå tit Rø e Kors private boolean trekningforetatt = false; Ilindikerer om trek ng er foretatt <Metoder du skal programmere i de følgende deloppgavene.1 a) Programmer metodene public int getantsolgteo { public boolean trukketo { } / /returverdi indikerer antall sol~e lodd } / /returverdi indikerer om det e~ foretatt trekning b) Programmer metoden public double loddsalg( String n, String adr, String tlf, int ant~odd ) {...} Metoden registrerer salg av et antall nye lodd, forutsatt at et er nok usolgte lodder igjen. Parametrene angir loddkjøperens navn, adres og telefonnummer, samt antall lodd som ønskes kjøpt. Loddnu meret for hvert lodd skal settes lik array-indeksen for hvor Lodd-objektet bl r plassert. Ved loddsalg skal det holdes rede på hvor mange lodd som er so gt hittil og hvor stor sum det er solgt lodd for. Returverdien skal indikere sk Idig beløp for loddsalget, eller 0.0 om det var for få usolgte lodder igjen. 3
c) Programmer metoden public void beregnpremiero { } Metoden skal foreta beregning av premier I samt hvor stor p ngesum som skal g~ til Røde Kors. Beregningene skal gjøres etter følgen e regler: En andel lik RØOEKORSANOEL av summen det er solgt lodd r skal g~ til Røde Kors. Av det resterende beløpet skal halvparten g~ til første remien. De fem neste premiene får like mye hver av den andre halvparten. etoden skal registrere premiene i arrayen premieliste. d) Programmer metoden public String premieprognosero,..} Den returnerte teksten skal opplyse om summen det er SOlg r lodd for, hvor mye som har gått til Røde Kors, samt premienummer og pe gebeløp for de seks premiene. e) Programmer metoden public void trekning() ) Metoden skal foreta selve trekningen og registrere at trekni g er foretatt. Vinnerloddene skal trekkes ved at det trekkes et tilfeldig tall blant de loddnumrene som er solgt. Det registreres at det uttrukne I ddet n~ er et vinnerlodd. Vinnerne skal registreres i Premie-objektene ve at pekeren vinnerlodd settes til ~ peke p~ vinnerloddet. Metoden m~ pa se p~ at et lodd ikke kan være vinnerlodd mer enn en gang. f) Programmer metoden public String vinnerlisteo ",I.. Den premienummer returnerte teksten og pengebeløp, skal for hver samt av nummeret de seks premiene til vinnerio in f det eholde og vinnerens navn, adresse og telefonnummer. Oppgave 4 I det følgende ser du et bilde av programmets brukergrense~nitt, samt en skisse av klassen Lotterivindu som definerer brukergrenses~ittet. 4
Navn -.-J Adresse TelefonI --j Antall lodd D Sum å betale ~="=~.~~=~ I Registrerlodds8g II VispremieprOgnose' Foretatre'.j ~Iott;rr t Resultater public class Lotterivindu extends JFrame private Lotteri lotteriet; private JTextField navnefelt, adressefelt. telefonfelt, antallfelt,t sumfelt; private JButton regknapp, prognoseknapp, trekningsknapp, n knapp; private JT extarea utskrift; private Lotterilytter lytter; public LotterivinduO super( "Pengelotteri" ); lotteriet = new Lotteri(); lytter = new Lotteri Iytter(); regknapp = new JButton( "Registrer loddsalg" ); regknapp.addactionlistener( lytter ); prognoseknapp = new JButton( "Vis premieprognose' prognoseknapp.addactionlistener( lytter ); trekningsknapp = new JButton( "Foreta trekning" ); trekningsknapp.addactionlistener( lytter ); nyknapp = new JButton( "Nytt lotteri" ); nyknapp.addactionlistener( lytter ); <Metoder du skal programmere i de følgende deloppgavene' private class Lotterilytter... {... } / / som du skal programmere under punkt 4 e) 1 I de følgende deloppgavene skal all kommunikasjon med bt keren foreg~ via komponentene som er vist i brukergrensesnittet. a) Programmer metoden public void registrerloddsalg{) { Metoden skal registrere salg av et antall nye lodd, forutsatt t t det er nok utsolgte lodder igjen. Det skal gis passende tilbakemelding il brukeren. Skyldig beløp for loddsalget skal skrives ut i tekstfeltet bere net for dette, 5
b) Programmer metoden public void vispremieprognoseo { t Metoden skal, forutsatt at det er solgt minst like mange IOdd f som det er premier i lotteriet, be~egne hvor store premi~ne vil bli. Den ndelen av loddsalget som skal ga til Røde Kors skal og sa beregnes. Re ultatene av beregningene skal skrives ut i programvinduet. c) Programmer metoden public void foretatrekningo { Metoden skal, forutsatt at det er solgt minst like mange lod som det er premier i lotteriet, og forutsatt at det ikke allerede er foreta trekning, foreta trekning og premieberegning. I brukervinduet skal vinnerlis a skrives ut med det innhold som er nevnt i oppgave 3 f), eller eventuelt oppi sning om hvorfor trekning ikke lot seg utføre. d) Programmer metoden public void nyttlotteri() Metoden skal, forutsatt at det er foretatt trekning i nåvære~e lotteri klargjøre for et nytt lotteri. I e) Programmer den indre klassen Lotterilytter slik at den fa1ger opp de hendelsene som finner sted i brukergrensesnittet, og sørger for at de tilhørende oppgavene blir utført. f) inneholdende Til slutt skal en du main-metode programmere som applikasjonskiassen starter hele programme. Lotterif rogramt Klassen skal programmeres slik at applikasjonen avsluttes n~r man klikk r p~ lukkeknappen i vinduets øvre høyre hjørne. SLUTT b