Tämä ohjelma laskee annuiteettilainan koron ja lyhennyksen joka kuukaudelle. Annuiteettilainassa maksuerät ovat yhtäsuuria ja korko lasketaan joka kuukauden jäljellä olevasta lainasta. Tästä saadaan lyhennys, kun maksuerästä vähennetään korko. tk_tools kirjastolla muodostetaan taulukko. Muokattu 17.6. klo 23.46.
from tkinter import *
import tk_tools
import numpy as np
import matplotlib.pyplot as plt
root = Tk()
def Laske(laina,korko,kuukaudet):
kuukausiKorko = korko/12.0
#Lasketaan maksuerä ja korko
#Annuiteettilainassa jokainen maksuerä on yhtäsuuri.
maksuera = laina*(1.0+(kuukausiKorko/100.0))**kuukaudet*(kuukausiKorko/100.0)
maksuera /= (1.0+(kuukausiKorko/100.0))**kuukaudet-1
koronMaara = (laina*kuukausiKorko)/100.0
koronMaarat = []
lyhennykset = []
summa = maksuera*kuukaudet
summaKorko = summa-laina
while (laina > 0):
koronMaara =(laina*kuukausiKorko)/100.0
lyhennys = maksuera-koronMaara
laina -= lyhennys
koronMaarat.append((round(koronMaara*100)/100.0))
lyhennykset.append((round(lyhennys*100)/100.0))
return koronMaarat,lyhennykset,maksuera,summa,summaKorko
def Kayttoliittyma():
#Annetaan lähtötiedot.
try:
if (checkVar.get() == 0):
#Otetaan lähtötiedot ja tallennetaan tiedostoon.
tiedosto = open("annuiteetti.txt","w")
laina = float(e1.get())
korko = float(e2.get())
kuukaudet = float(e3.get())
tiedosto.write(str(laina) + "\n" + str(korko) + "\n" + str(kuukaudet))
tiedosto.close()
else:
#Ladataan tiedostosta.
tiedosto = open("annuiteetti.txt","r")
mjn = tiedosto.readlines()
laina = float(mjn[0])
korko = float(mjn[1])
kuukaudet = float(mjn[2])
tiedosto.close()
#Toista kertaa tietoja ei voi syöttää
e1.configure(state=DISABLED)
e2.configure(state=DISABLED)
e3.configure(state=DISABLED)
btn.configure(state=DISABLED)
koronMaarat,lyhennykset,maksuera,summa,summaKorko = Laske(laina,korko,kuukaudet)
l4.config(text="Yhteensa:" + str(summa))
l5.config(text="Korot:"+str(summaKorko))
if (checkVar2.get() == 1):
for x in range(len(koronMaarat)):
ruudukko.add_row([str(x+1), str(koronMaarat[x]),str(lyhennykset[x])])
else:
indeksi = int(spin.get())
ruudukko.add_row([str(indeksi+1),str(koronMaarat[indeksi]),str(lyhennykset[indeksi])])
#Muodostetaan pylväskaavio
fig = plt.subplots(figsize=(100,100))
N = len(lyhennykset)
p1 = plt.bar(np.arange(N),lyhennykset,0.35)
p2 = plt.bar(np.arange(N),koronMaarat,0.35, bottom=lyhennykset)
plt.legend((p1[0],p2[0]),("lyhennykset","koron määrät"))
plt.ylabel("Rahasumma")
plt.xticks(np.arange(N))
plt.yticks(np.arange(0,maksuera,maksuera/20))
plt.show()
except:
print("Ei kelpaa")
frame = Frame(root)
frame.pack()
frame2 = Frame(root)
frame2.pack()
frame3 = Frame(root)
frame3.pack()
#Ensimmäinen frame
var = StringVar()
var2 = StringVar()
var3 = StringVar()
l1 = Label(frame,textvariable=var)
l1.grid(row=1,column=1)
e1 = Entry(frame)
e1.grid(row=1,column=2)
l2 = Label(frame,textvariable=var2)
l2.grid(row=2,column=1)
e2 = Entry(frame)
e2.grid(row=2,column=2)
l3 = Label(frame,textvariable=var3)
l3.grid(row=3,column=1)
e3 = Entry(frame)
e3.grid(row=3,column=2)
var.set("Lainan määrä")
var2.set("Korko")
var3.set("Maksuaika kuukausina")
#Toinen frame
btn = Button(frame2,text="Laske",command=Kayttoliittyma)
btn.grid()
l4 = Label(frame2)
l4.grid()
l5 = Label(frame2)
l5.grid()
checkVar = IntVar()
check = Checkbutton(frame2,text="Lataa",variable=checkVar,onvalue=1,offvalue=0)
check.grid()
checkVar2 = IntVar()
check2 = Checkbutton(frame2,text="Koko taulukko",variable=checkVar2,onvalue=1,offvalue=0)
check2.grid()
spin = Spinbox(frame2,from_=0,to=120)
spin.grid()
#Kolmas frame
ruudukko = tk_tools.EntryGrid(frame3,3)
ruudukko.pack()
root.mainloop()Ohjelmaan on lisätty kaksi toimintoa tiedontallennus ja tietyn kuukauden lyhennys ja korko.
Aihe on jo aika vanha, joten et voi enää vastata siihen.