// PankkiMonimuotoinen.java Copyright (c) 2006 Kari Laitinen // http://www.naturalprogramming.com // 2006-03-05 Tiedosto luotu. // 2006-04-09 Viimeisin muutos. /* javaohjelmat3-kansiossa on kolme .java-tiedostoa jotka sisaltavat luokan nimelta Pankkitili. Nama tiedostot ovat PankkiYksinkertainen.java, PankkiParempi.java seka PankkiMonimuotoinen.java. Koska Pankkitili-luokka ei ole samanlainen kaikissa naissa ohjelmissa, on mahdollista etta syntyy ongelmia kun kaannat ja suoritat naita ohjelmia. Taman vuoksi on tarkeaa etta kaannat ohjelmat aina kokonaisuu- dessaan ennen niiden suoritusta. Eras mahdollinen ongelma joka voi tulla eteen on se etta ohjelmaa PankkiYksinkertainen.java ei voida enaa suorittaa sen jalkeen kun ohjelma PankkiParempi.java on kaannetty. Tama johtuu siita etta ohjelman PankkiParempi.java (tai PankkiMonimuotoinen.java) kaantaminen korvaa Pankkitili.class-tiedoston joka aiemmin syntyi ohjelman PankkiYksinkertainen.java kaannoksessa. */ class Pankkitili { protected String tilin_omistaja ; protected long tilin_numero ; protected double tilin_saldo ; public Pankkitili( String annettu_tilin_omistaja, long annettu_tilin_numero, double tilin_alkusaldo ) { tilin_omistaja = annettu_tilin_omistaja ; tilin_numero = annettu_tilin_numero ; tilin_saldo = tilin_alkusaldo ; } public void nayta_tilin_tiedot() { System.out.print( "\n\nP A N K K I T I L I N T I E D O T : " + "\n Tilin omistaja : " + tilin_omistaja + "\n Tilin numero: " + tilin_numero + "\n Tilin saldo: " + tilin_saldo ) ; } public void talleta_rahaa( double talletettava_rahamaara ) { System.out.print( "\n\nTAPAHTUMA TILILLA NUMERO " + tilin_numero + " (Tilin omistaja: " + tilin_omistaja + " )" ) ; System.out.print( "\n Talletettu maara: " + talletettava_rahamaara + "\n Vanha tilin saldo: " + tilin_saldo ) ; tilin_saldo = tilin_saldo + talletettava_rahamaara ; System.out.print( " Uusi saldo: " + tilin_saldo ) ; } public void nosta_rahaa( double nostettava_rahamaara ) { System.out.print( "\n\nTAPAHTUMA TILILLA NUMERO " + tilin_numero + " (Tilin omistaja: " + tilin_omistaja + " )" ) ; if ( tilin_saldo < nostettava_rahamaara ) { System.out.print("\n -- Nostoa ei suoritettu: " + "Ei riittavasti saldoa nostaa " + nostettava_rahamaara ) ; } else { System.out.print("\n Nostettu maara: " + nostettava_rahamaara + "\n Vanha tilin saldo: " + tilin_saldo ) ; tilin_saldo = tilin_saldo - nostettava_rahamaara ; System.out.print(" Uusi saldo: " + tilin_saldo ) ; } } public void siirra_rahaa_tilille( Pankkitili vastaanottava_tili, double siirrettava_rahamaara ) { System.out.print( "\n\nTAPAHTUMA TILILLA NUMERO " + tilin_numero + " (Tilin omistaja: " + tilin_omistaja + " )" ) ; if ( tilin_saldo >= siirrettava_rahamaara ) { vastaanottava_tili.tilin_saldo = vastaanottava_tili.tilin_saldo + siirrettava_rahamaara ; System.out.print( "\n " + siirrettava_rahamaara + " siirrettiin tilille " + vastaanottava_tili.tilin_numero + " (Tilin omistaja: " + vastaanottava_tili.tilin_omistaja + " )" + "\n Saldo ennen siirtoa: " + tilin_saldo ) ; tilin_saldo = tilin_saldo - siirrettava_rahamaara ; System.out.print( " Uusi saldo: " + tilin_saldo ) ; } else { System.out.print( "\n -- Ei tarpeeksi saldoa siirtoon." ) ; } } } class LuotollinenTili extends Pankkitili { protected double luottoraja ; public LuotollinenTili( String annettu_tilin_omistaja, long annettu_tilin_numero, double tilin_alkusaldo, double annettu_luottoraja ) { super( annettu_tilin_omistaja, annettu_tilin_numero, tilin_alkusaldo ) ; luottoraja = annettu_luottoraja ; } public void nosta_rahaa( double nostettava_rahamaara ) { System.out.print( "\n\nTAPAHTUMA TILILLA NUMERO " + tilin_numero + " (Tilin omistaja: " + tilin_omistaja + " )" ) ; if ( tilin_saldo + luottoraja < nostettava_rahamaara ) { System.out.print("\n -- Nostoa ei suoritettu: " + "Ei riittavasti luottoa nostaa " + nostettava_rahamaara ) ; } else { System.out.print("\n Nostettu maara: " + nostettava_rahamaara + "\n Vanha tilin saldo: " + tilin_saldo ) ; tilin_saldo = tilin_saldo - nostettava_rahamaara ; System.out.print(" Uusi saldo: " + tilin_saldo ) ; } } } class RajoitettuTili extends Pankkitili { protected double maksimi_noston_maara ; public RajoitettuTili( String annettu_tilin_omistaja, long annettu_tilin_numero, double tilin_alkusaldo, double annettu_nostoraja ) { super( annettu_tilin_omistaja, annettu_tilin_numero, tilin_alkusaldo ) ; maksimi_noston_maara = annettu_nostoraja ; } public void nosta_rahaa( double nostettava_rahamaara ) { if ( nostettava_rahamaara > maksimi_noston_maara ) { System.out.print( "\n\nTAPAHTUMA TILILLA NUMERO " + tilin_numero + " (Tilin omistaja: " + tilin_omistaja + " )" ) ; System.out.print( "\n -- Nostoa ei suoritettu: Ei voi nostaa " + nostettava_rahamaara + "\n -- Nostoraja on " + maksimi_noston_maara + "." ) ; } else { super.nosta_rahaa( nostettava_rahamaara ) ; } } } class PankkiMonimuotoinen { public static void main( String[] ei_kaytossa ) { Pankkitili hurriganesin_tili = new Pankkitili( "Remu Aaltonen", 222222, 2000.00 ) ; LuotollinenTili popedan_tili = new LuotollinenTili( "Pate Mustajarvi", 333333, 2000.00, 1000.00 ) ; RajoitettuTili him_yhtyeen_tili = new RajoitettuTili( "Ville Valo", 444444, 4000.00, 1000.00 ) ; hurriganesin_tili.nosta_rahaa( 2500.00 ) ; popedan_tili.nosta_rahaa( 2500.00 ) ; him_yhtyeen_tili.nosta_rahaa( 2500.00 ) ; } }