Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Perl: Asuntosijoituslaskuri Tk-kirjastolla

koodaaja [29.09.2021 17:36:53]

#

Tämä ohjelma hyödyntää olio-ohjelmointia sekä Tk-kirjaston käyttöä. Ohjelma laskee asuntosijoituksen tuoton tai hinnan. Syötteenä on tulot (esim. vuokratulot), hoitovastike sekä vsv (varainsiirtovero).

#!/usr/bin/perl

package Sijoitus;
use Tk;

sub new {
 my $class = shift;
 my $self = {
  #Määritetään muuttujat
  _tulot => shift,
  _hoitovastike => shift,
  _syote => shift,
  _vsv => shift,
  _tulos => shift,

 };

 bless $self,$class;
 return $self;

}

sub AsetaTiedot {
 my ($self,$tulot,$hoitovastike,$syote,$vsv) = @_;
 #Asetetaan käyttäjän antamat tiedot.
 $self->{_tulot} = $tulot if defined ($tulot);
 $self->{_hoitovastike} = $hoitovastike if defined ($hoitovastike);
 $self->{_syote} = $syote if defined ($syote);
 $self->{_vsv} = $vsv if defined ($vsv);

 return $self->{tulot},$self->{_hoitovastike},$self->{_syote},$self->{_vsv};
}

sub LaskeTuotto {
 my ($self) = @_;
 #Tässä aliohjelmassa lasketaan asunnon tuottoprosentti, kun tiedetään lähtötiedot.

 $self->{_tulos} = ($self->{_tulot}*12-$self->{_hoitovastike}*12);
 $self->{_tulos} /= ($self->{_syote}+$self->{_vsv}/100.0);
 return $self->{_tulos};

}

sub LaskeHinta {
 my ($self) = @_;
 #Tässä aliohjelmassa lasketaan asunnon hinta, kun tiedetään lähtötiedot.

 $self->{_tulos} = ($self->{_tulot}*12-$self->{_hoitovastike}*12);
 $self->{_tulos} /= ($self->{_syote}/100.0*(1+$self->{_vsv}/100.0));
 return $self->{_tulos};

}

#Luodaan seuraavaksi graafinen käyttöliittymä, jota kautta ohjataan ohjelmaa.
my $main = MainWindow->new;
$main->title("Sijoituslaskuri");

my $teksti = "";

my $nappain = $main->Button(-text=>"Tuotto",-command=>\&Tuotto)->pack();
my $nappain2 = $main->Button(-text=>"Hinta",-command=>\&Hinta)->pack();


my $tlaatikko = $main->Entry()->pack();
my $tlaatikko2 = $main->Entry()->pack();
my $tlaatikko3 = $main->Entry()->pack();
my $tlaatikko4 = $main->Entry()->pack();


my $lappu = $main->Label(-textvariable=>\$teksti)->pack();

$sijoitus = new Sijoitus();

#Luodaan näppäimille kuuntelijat.



sub Tuotto(){
 $sijoitus->AsetaTiedot(int $tlaatikko->get(),int $tlaatikko2->get(),int $tlaatikko3->get(),int $tlaatikko4->get());
 $teksti = $sijoitus->LaskeTuotto();
}

sub Hinta(){
 $sijoitus->AsetaTiedot(int $tlaatikko->get(),int $tlaatikko2->get(),int $tlaatikko3->get(),int $tlaatikko4->get());
 $teksti = $sijoitus->LaskeHinta();
}

MainLoop;

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta