Kontinuasjonseksamen i programmering 13.02.03 LØSNINGSFORSLAG Oppgave 1 a) public class Lodd { private String navn, adresse, telefon; private int loddnr; private boolean vinnerlodd; public Lodd( String n, String adr, String tlf, int nr ) { navn = n; adresse = adr; telefon = tlf; loddnr = nr; vinnerlodd = false; } public void setVunnet() { vinnerlodd = true; } public boolean vunnet() { return vinnerlodd; } public String toString() { return "Lodd nr. " + loddnr + " " + navn + ", " + adresse + ". Tlf. " + telefon; } } Oppgave 2 a) public Premie( double sum, int plass ) { vinnerlodd = null; premiesum = sum; plassering = plass; } public void setVinner( Lodd vinner ) { vinnerlodd = vinner; } public Lodd getVinner() { return vinnerlodd; } public String toString() { DecimalFormat f = new DecimalFormat( "0.00" ); return "Premie nr. " + plassering + " kr. " + f.format( premiesum ); } Oppgave 3 a) public int getAntSolgte() { return antSolgte; } public boolean trukket() { return trekningForetatt; } b) public double loddsalg( String n, String adr, String tlf, int antLodd ) { if ( antLodd + antSolgte <= MAXANTLODD ) { for ( int i = 0; i < antLodd; i++ ) { loddbok[antSolgte++] = new Lodd(n, adr, tlf, antSolgte); sumLoddsalg += LODDPRIS; } return antLodd * LODDPRIS; } else return 0.0; } c) public void beregnPremier() { rødeKors = sumLoddsalg * RØDEKORSANDEL; double rest = sumLoddsalg - rødeKors; double førstepremie = rest / 2; rest -= førstepremie; premieliste[ 0 ] = new Premie( førstepremie, 1 ); double trøstepremie = rest / ( ANTPREMIER - 1 ); for ( int i = 1; i < ANTPREMIER; i++ ) { premieliste[ i ] = new Premie( trøstepremie, i + 1 ); } } d) public String premieprognoser() { String prognose = "Solgt lodder for kr. " + sumLoddsalg; prognose += "\nTil Røde Kors: kr. " + rødeKors; for ( int i = 0; i < ANTPREMIER; i++ ) prognose += "\n" + premieliste[ i ].toString(); return prognose; } e) public void trekning() { int nr = 0; for ( int i = 0; i < ANTPREMIER; i++ ) { do { nr = (int) ( Math.random() * antSolgte ); } while ( loddbok[ nr ].vunnet() ); loddbok[ nr ].setVunnet(); premieliste[ i ].setVinner( loddbok[ nr ] ); } trekningForetatt = true; } f) public String vinnerliste() { String vinnere = ""; for ( int i = 0; i < ANTPREMIER; i++ ) { vinnere += premieliste[ i ].toString() + " " + premieliste[ i ].getVinner().toString() + "\n"; } return vinnere; } Oppgave 4 a) public void registrerLoddsalg() { String navn = navnefelt.getText(); String adresse = adressefelt.getText(); String tlf = telefonfelt.getText(); int antall = Integer.parseInt( antallfelt.getText() ); double skyldig = lotteriet.loddsalg( navn, adresse, tlf, antall ); if ( skyldig > 1 ) { utskrift.setText("Loddsalg registrert"); sumfelt.setText( skyldig + "" ); } else utskrift.setText( "Dessverre for få usolgte lodder igjen." ); } b) public void visPremieprognose() { if ( lotteriet.getAntSolgte() >= Lotteri.ANTPREMIER ) { lotteriet.beregnPremier(); utskrift.setText( lotteriet.premieprognoser() ); } else utskrift.setText( "Det er dessverre solgt for få lodder." ); } c) public void foretaTrekning() { if ( !lotteriet.trukket() ) { if ( lotteriet.getAntSolgte() >= Lotteri.ANTPREMIER ) { lotteriet.beregnPremier(); lotteriet.trekning(); utskrift.setText( lotteriet.vinnerliste()); } else utskrift.setText( "Det er solgt for få lodder." ); } else utskrift.setText( "Trekning er allerede foretatt!" ); } d) public void nyttLotteri() { if ( lotteriet.trukket() ) lotteriet = new Lotteri(); else utskrift.setText( "Det må først foretas trekning i dette lotteriet!" ); } e) private class Lotterilytter implements ActionListener { public void actionPerformed( ActionEvent e ) { if ( e.getSource() == regknapp ) registrerLoddsalg(); else if ( e.getSource() == prognoseknapp ) visPremieprognose(); else if ( e.getSource() == trekningsknapp ) foretaTrekning(); else if ( e.getSource() == nyknapp ) nyttLotteri(); } } f) public class Lotteriprogram { public static void main( String[] args ) { Lotterivindu vindu = new Lotterivindu(); vindu.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } }); } }