Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Boliglån
og subklassene
Serielån
og Annuitetslån
. De registrerte lånene skal lagres i et register
av typen Låneregister
. Programmet har to vinduer som kommuniserer med brukeren,
RegistreringsGUI
og NedbetalingsGUI
. Programmets main-metode ligger i klassen
Bank
. De forskjellige deloppgavene inneholder mere informasjon.
Boliglån
. Denne klassen inneholder det som er felles
for subklassene Annuitetslån
og Serielån
.
public abstract class Boliglån { private static long nestenr = 11001500000L; private static double basisrente = 0.029; // dvs. 2.9 % private static double rentetillegg = 0.005; // dvs. 0.5 % private static final double SEKSTIPROSENT = 0.6; // NB! Datafeltene over skal ikke initialiseres av konstruktøren. private long lånenr; private String navn; private double lånebeløp; private double restlån; private int verditakst; private int nedbetalingstid; // i antall hele år private double rente; // eks. 0.04 tilsvarer 4% < Konstruktør med parametre som gir startverdier for dataene som skal registreres for hvert lån, med unntak av lånenummer og rente. Lånet skal tildeles et unikt lånenummer som skal genereres automatisk. Lånenumrene skal ha verdier fra og med 11001500001 og oppover. Lånets rente skal bestemmes på grunnlag av lånebeløp og verditakst, se metoden under. > public static double bestemRente( double beløp, double takst ) { double sikkerhet; if ( takst > 0 ) sikkerhet = beløp / takst; else return basisrente + rentetillegg; if ( sikkerhet <= SEKSTIPROSENT ) return basisrente; else return basisrente + rentetillegg; } < get-metoder for datafeltene lånenr, navn, lånebeløp, restlån, verditakst, nedbetalingstid og rente. > public boolean nedbetal( double beløp ) { < Metoden skal redusere restlånet med beløpet som parameteren angir, under forutsetning av at det er mindre eller lik restlånet. Hvis så er tilfelle skal metoden returnere true, i motsatt fall skal den returnere false. > } abstract public String kontoutskrift(); } // end of class Boliglåna) Programmer klassens konstruktør. b) Programmer get-metoder for datafeltene navn, lånenr og restlån, samt metoden
public boolean nedbetal( double beløp )
.Annuitetslån
, som er en subklasse til klassen Boliglån
.public class Annuitetslån extends Boliglån { private double kostnadPrÅr; < Konstruktør med parametre som mottar startverdier for dataene som skal registreres for lånet, med unntakt av lånenummer og renter. Det må også beregnes hva lånet vil koste pr år. > public static double beregnKostnadPrÅr( double lånebeløp, int år, int takst ) { double rentefot = bestemRente( lånebeløp, takst ); double q = 1 + rentefot; double qn = Math.pow( q, år ); return lånebeløp * qn * ( q - 1 ) / ( qn - 1 ); } public static double totalkostnad( double lånebeløp, int år, int takst ) { < Metoden skal returnere summen av renter og avdrag som skal betales gjennom hele nedbetalingsperioden.(Tips: Bruk metoden over.) > } public boolean nedbetal( double beløp ) { < Metoden skal redefineres slik at den i tillegg til å nedbetale lånet med beløpet som parameteren angir, også tildeler datafeltet kostnadPrÅr ny verdi, ved at annuitetslånets kostnad pr år beregnes på nytt. (Se metoden over). Den nye beregningen skal baseres på den restlånet som nå gjennstår. Returverdien angir om nedbetalingen har funnet sted eller ikke. > } public String kontoutskrift() { < Metoden skal returnere en tekst som inneholder låntakerens navn, lånenr, type lån, restlån samt utgifter for lånet neste år. > } public static String[] betalingsplan( double lånebeløp, int år, int takst ) { < Metoden genererer og returnerer en nedbetalingsplan annuitetslån. Hvert String-element i arrayen som returneres fra metoden tilsvarer en linje i betalingsplanen som er vist på bildet i oppgave 4. NB! Skal ikke programmeres! > } } // end of class Annuitetslåna) Programmer klassens konstruktør og metoden
public static double totalkostnad( double lånebeløp, int år, int takst )
.
b)
Programmer/redefiner metoden public boolean nedbetal( double beløp )
.public String kontoutskrift()
.
Nedenfor ser du klassen Serielån
. Klassen skal IKKE programmeres, men du
trenger å kjenne til den i senere oppgaver.
public class Serielån extends Boliglån { public Serielån( String n, double beløp, int år, int takst ) { < Initialiserer datafeltene > } public static double totalkostnad( double lånebeløp, int år, int takst ) { < Metoden beregner og returnerer totalkostadene for et serielån, dvs. summen av renter og avdrag som skal betales gjennom hele nedbetalingsperioden. Metoden blir brukt av betalingsplan. > } public double nesteÅrsBeløp() { < Metoden beregner og returnerer neste års beløp. Metoden blir brukt av totalkostnad og betalingsplan. > } public static String[] betalingsplan( double lånebeløp, int år, int takst ) { < Metoden genererer og returnerer en nedbetalingsplan for serielån. Hvert String-element i arrayen som returneres fra metoden tilsvarer en linje i betalingsplanen som er vist på bildet i oppgave 4. > } public String kontoutskrift() { < Metoden returnerer en tekststreng som inneholder låntakerens navn, lånenr, type lån, restlån samt utgifter for lånet neste år. > } } // end of class Serielån
Låneregister
:
public class Låneregister { public static final int KAPASITET = 100; public static final int SERIE = 1; public static final int ANNUITET = 2; private Boliglån[] kontoer = new Boliglån[ KAPASITET ]; public int getIndeks( long lånenr ) { < Metoden skal returnere arrayindeksen til boliglånsobjektet med samme lånenummeret som parameteren angir. Hvis et slikt ikke finnes i arrayen, skal metoden returnere -1. > } public Boliglån finnKonto( long nr) { < Metoden returnerer (en referanse til) boliglånsobjektet med samme lånenummeret som parameteren angir. Hvis et slikt ikke finnes, returnerer metoden null. NB! Skal IKKE programmeres, men du får bruk for den senere. > }
public double getRestlån( long lånenr ) { < Metoden returnerer restlånet til boliglånet med samme lånenummeret som parameteren angir. Hvis et slikt ikke finnes i registeret, skal metoden returnere 0.0 > } public Boliglån nyttLån( String navn, double beløp, int år, int takst, int type ) { < Metoden tar imot låntakerens navn, lånebeløpet, antall år, verditakst og lånetype som parameter. Hvis lånetypen er lik SERIE skal et objekt av typen Serielån opprettes, og hvis lånetypen er ANNUITET skal et objekt av typen Annuitetslån opprettes. Det nye låneobjektet skal så settes inn i arrayen på første ledige plass. Metoden skal til slutt returnere (en referanse til) det nye objektet. Hvis arrayen er full, eller parameteren type er forskjellig fra både SERIE og ANNUITET, skal metoden returnere null. > } public String[] oversiktAlleLån() { < Metoden skal returnere en array av tekststrenger med opplysninger om alle boliglån i registeret. Hvert element i arrayen skal inneholde informasjon om hvert enkelt boliglån (dvs. låntakerens navn, lånenr, type lån, restlån samt utgifter for lånet neste år.). > } public boolean nedbetal( long lånenr, double beløp ) { < Metoden skal nedbetale boliglånet, med samme lånenummer som parameteren lånenr, med det beløp som parameteren beløp angir, under forutsetning av at dette lånet finnes i registeret. Returverdien skal angi om dette lot seg gjøre eller ikke. Hvis hele lånet er innfridd, skal boliglåneobjektet i tillegg slettes. > } } // end of class Låneregistera) Programmer metodene
public int getIndeks( long lånenr )
public double getRestlån( long lånenr )
.
b)
Programmer metodenpublic Boliglån nyttLån( String navn, double beløp, int år, int takst, int type )
.
c)
Programmer metoden public String[] oversiktAlleLån()
.
d)
Programmer metoden public boolean nedbetal( long lånenr, double beløp )
.
RegistreringsGUI
. I det
venstre er det trykket på lånekalkulator-knappen og i det høyre er det trykket på
knappen for å registrere et nytt lån.
Som du ser skal det være mulig å få skrevet ut en betalingsplan for et potensielt lån,
slik at lånetakeren kan sammenligne hva de forskjellige lånene vil koste totalt sett,
og ikke minst hva lånet koster pr år, FØR vedkommende bestemmer seg.
< import-setninger > public class RegistreringsGUI extends JFrame { private JTextField typefelt, beløpsfelt, tidsFelt, takstfelt, navnefelt, lånenrFelt; private JButton visPlan, nyttLån, oversikt; private JTextArea utskrift; private Låneregister register; public RegistreringsGUI(Låneregister b) { register = b; < Setter opp brukergrensesnittet > < Oppretter et lytteobjekt > < Knytter knappene til lytteobjektet > } private void skrivPlan(String [] plan) { < Metoden skal skrive innholdet i arrayen den mottar som paramterer ut i tekstområdet utskrift, slik at hvert arrayelement kommer på en egen linje. > } public void visBetalingsplan() { < Metoden skal hente nødvendig informasjon fra vinduets tekstfelter, og sørge for at en betalingsplan, av den type lån brukeren har valgt, blir vist i tekstområdet utskrift, slik det er vist på bilde over. Tips: Bruk metoden skrivPlan! > } public void registrerNyttLån() { < Metoden skal registrere et nytt lån ut fra de data som finnes i de aktuelle tekstfeltene vinduet. Hvis registreringen lar seg utføre, skal det nye lånets lånenummer skrives ut til tekstfeltet lånenrFelt, og betalingsplanen for det nye lånet skal skrives ut i tekstområdet. I tillegg skal i et dialogvindu gis melding om registreringen lot seg utføre eller ikke. > } public void oversiktAlleLån() { < Metoden skal skrive ut informasjon om alle lånekontoene i registeret utskriftsområdet. NB! Skal ikke programmeres! > } < Private indre lytteklasse > } // end of class RegistreringsGUIa) Programmer hjelpemetoden
private void skrivPlan(String [] plan)
.public void visBetalingsplan()
. Her skal du
gjøre bruk av hjelpemetoden du programmerte først.
b)
Programmer metoden public void registrerNyttLån()
.
c)
Programmer den private indre lytteklassen slik at den fanger opp
hendelsene i vinduet og utfører de oppgavene som tilsvarer teksten på knappene.
NedbetalingsGUI
. I det
venstre er det trykket på kontoutskrift-knappen og i det høyre er det trykket på
knappen for å nedbetale et eksisterende lån.
Under finner du skissen av den tilhørende klassen.
< import-setnnger > public class NedbetalingsGUI extends JFrame { private JTextField lånenrFelt,beløpsfelt; private JButton nedbetal, visKontoutskrift; private JTextArea utskrift; private Låneregister register; public NedbetalingsGUI(Låneregister b) { register = b; < Setter opp brukergrensesnittet > < Oppretter lytteobjekt > < Knytter knappene til lytteobjektet > } public void kontoutskrift() { < Metoden skal skrive ut lånekonto-informasjon om lånet med lånenummeret lik det som er skrevet i inn i lånenrFelt. > } public void nedbetalLån() { < Metoden skal lese lånenummer og beløp fra vinduets tekstfelter og nedbetale lånet. Hvis dette lar seg gjøre skal det i tekstområdet skrives hva restlånet er etter nedbetalingen. Hvis lånet ble slettet, som følge av at det ble innfridd, skal det gis melding om dette. Hvis nedbetalingen ikke lar seg utføre, skal det gis en feilmelding. > } < Privat indre lytteklasse > }// end of class NedbetalingsGUIa) Programmer metoden
public void kontoutskrift()
.
b)
Programmer metoden public void nedbetalLån()
.
Bank
som inneholder main-metoden.
Her skal du opprette et låneregister og de to vinduene, som er beskrevet i oppgave 4 og 5,
slik at begge vinduene kommuniserer med samme låneregister.
SLUTT