Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Python: tk_tools: annuiteettilaskuri

koodaaja [15.06.2021 00:12:33]

#

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()

koodaaja [23.06.2021 12:53:48]

#

Ohjelmaan on lisätty kaksi toimintoa tiedontallennus ja tietyn kuukauden lyhennys ja korko.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta