Portál AbcLinuxu, 2. května 2025 11:50
Programování v Ruby - Výpočet čisté mzdy
16.6.2013 08:39
| Přečteno: 1444×
| Ostatní
| poslední úprava: 17.6.2013 13:51
Zjednodušený program na výpočet čisté mzdy je rozdělen do tří souborů, a to hlavni.rb, konstanty.rb a metody.rb
# soubor konstanty.rb
SAZBA_ZDRAVOTNI_ZAMESTNAVATEL = 9.0
SAZBA_SOCIALNI_ZAMESTNAVATEL = 25.0
SAZBA_ZDRAVOTNI_ZAMESTNANEC = 4.5
SAZBA_SOCIALNI_ZAMESTNANEC = 6.5
SAZBA_DANE_Z_PRIJMU = 15.0
POPLATNIK = 2070
DRZITEL_ZTP = 1345
STUDENT = 335
DITE = 1117
STR1 = 'Podepsal jste prohlaseni? A/N'
STR2 = 'Jste drzitelem ZTP? A/N'
STR3 = 'Studujete? A/N'
STR4 = 'Kolik mate deti?'
# soubor metody.rb
def procenta_a_zaokrouhleni(x,y)
x *= y / 100
x = '%.2f' % x
return x.to_f.ceil
end
def zaokrouhlit_stovky(x)
x = x.to_f / 100
return x.ceil * 100
end
def test_vstupu_cisel(a)
abort "Chybny vstup" if a !~ /[0-9]+/
end
def test_vstupu_an(a)
abort "Chybny vstup" if a !~ /a|n/i
end
# soubor hlavni.rb
require '/home/nagyova/mzda/konstanty.rb'
require '/home/nagyova/mzda/metody.rb'
puts
puts 'VYPOCET CISTE MZDY'
puts
print 'Mesicni mzda: '
hruba_mzda = gets
test_vstupu_cisel(hruba_mzda)
hruba_mzda = hruba_mzda.to_i
puts STR1
odpoved = gets
test_vstupu_an(odpoved)
if odpoved =~ /a/i
sleva_na_dani = POPLATNIK
puts STR2
odpoved = gets
test_vstupu_an(odpoved)
if odpoved =~ /a/i
sleva_na_dani += DRZITEL_ZTP
end
puts STR3
odpoved = gets
test_vstupu_an(odpoved)
if odpoved =~ /a/i
sleva_na_dani += STUDENT
end
puts STR4
sleva_na_deti = gets
test_vstupu_cisel(sleva_na_deti)
sleva_na_deti = sleva_na_deti.to_i
if sleva_na_deti > 0
sleva_na_deti *= DITE
end
else
sleva_na_dani = 0
sleva_na_deti = 0
end
zdravotni_zamestnavatel = procenta_a_zaokrouhleni(hruba_mzda, SAZBA_ZDRAVOTNI_ZAMESTNAVATEL)
socialni_zamestnavatel = procenta_a_zaokrouhleni(hruba_mzda, SAZBA_SOCIALNI_ZAMESTNAVATEL)
zdravotni_zamestnanec = procenta_a_zaokrouhleni(hruba_mzda, SAZBA_ZDRAVOTNI_ZAMESTNANEC)
socialni_zamestnanec = procenta_a_zaokrouhleni(hruba_mzda, SAZBA_SOCIALNI_ZAMESTNANEC)
super_hruba_mzda = hruba_mzda + zdravotni_zamestnavatel + socialni_zamestnavatel
super_hruba_mzda = zaokrouhlit_stovky(super_hruba_mzda)
zaloha_na_dan = procenta_a_zaokrouhleni(super_hruba_mzda, SAZBA_DANE_Z_PRIJMU)
zaloha_na_dan = zaloha_na_dan - sleva_na_dani
if zaloha_na_dan < 0
zaloha_na_dan = 0
end
cista_mzda = hruba_mzda - zdravotni_zamestnanec - socialni_zamestnanec - zaloha_na_dan + sleva_na_deti
odvody_statu = zdravotni_zamestnavatel + socialni_zamestnavatel + zdravotni_zamestnanec + socialni_zamestnanec + zaloha_na_dan - sleva_na_deti
2.times {puts}
43.times {print '*'}
puts
puts '*%-30s*%10d*' % ['Zdravotni zamestnavatel', zdravotni_zamestnavatel]
puts '*%-30s*%10d*' % ['Socialni zamestnavatel', socialni_zamestnavatel]
43.times {print '*'}
puts
puts '*%-30s*%10d*' % ['Zdravotni zamestnanec', zdravotni_zamestnanec]
puts '*%-30s*%10d*' % ['Socialni zamestnanec', socialni_zamestnanec]
puts '*%-30s*%10d*' % ['Sleva na dani', sleva_na_dani]
puts '*%-30s*%10d*' % ['Zaloha na dan', zaloha_na_dan]
puts '*%-30s*%10d*' % ['Zvyhodneni na deti', sleva_na_deti]
puts '*%-30s*%10d*' % ['Cista mzda', cista_mzda]
43.times {print '*'}
puts
puts '*%-30s*%10d*' % ['Odvody statu celkem', odvody_statu]
43.times {print '*'}
puts
Konstanty v Ruby začínají velkým písmenem, ale pro větší přehlednost se obvykle píšou všemi velkými písmeny. Rovněž je možné dále měnit jejich hodnoty, ale v takovém případě nás upozorní iterpret na to, že konstanta byla změněna.
V metodě procenta_a_zaokrouhleni příkaz x *= y / 100 (zkrácený tvar pro x = x * y / 100) spočte procenta a x = '%.2f' % x je zaokrouhlí na dvě desetinná místa. Metoda to_f převede řetězec na desetinné číslo a ceil ho zaokrouhlí na celý integer nahoru.
1.1.ceil # se rovna 2
Ve vlastních metodách na kontrolu vstupu metoda abort ukončí program a vypíše chybovou hlášku, pokud řetězec neodpovídá regulérnímu výrazu (regexp). Regulérní výrazy jsou v Ruby ohraničeny lomítky / a pro rovnost vzoru regulérního výrazu s řetězcem se používá operátor =~ a pro nerovnost !~.
/[0-9]+/ vzor pro jedno a více čísel od nuly do devíti, bez + bychom měli vzor jen pro jedno číslo.
/a|n/i vzor pro znaky a nebo n, svislice představuje or, a i na konci znamená case insensitive a brání rozlišováním mezi malými a velkými písmeny.
Pozor! Mám špatně napsané regulérní výrazy, nyní jako mzda projde i "abc1", výrazy je třeba ohraničit symboly ^ a $
V metodách a celém programu jsou též použity podmínky if, máme na výběr několik způsobů, jak je napsat.
if x < 10
x+=1
end
if x < 10 then
x+=1
end
if x < 10 then x+=1 end
anebo
x+=1 if x < 10
if je samozřejmě možné rozšířit o else
if x < 10
puts 'x je mensi nez 10'
else
puts 'x neni mensi nez 10'
end
Mezi další podmínky, které v Ruby můžeme použít, patří elsif, unless, case a operátor ?:.
V hlavním souboru příkaz require připojí soubory s konstantami a metodami, k jejich nalezení používáme absolutní adresu, a pokud budete chtít, aby vám program fungoval, budete ji muset změnit dle toho, kam soubor umístíte.
Pokud bychom napsali pouze require 'konstanty', program by tento soubor hledal na adresách, které jsou uloženy v globální proměnné $LOAD_PATH, zkráceně $:, k zjištění, které adresy proměnná obsahuje, zadáme do terminálu ruby -e 'puts $:' anebo v interaktivním interpretu irb napíšeme puts $:. Aby program fungoval jen s require 'konstanty', musíme přidat novou adresu do proměnné $LOAD_PATH.
3.times {print 'Ruby! '} # Ruby! Ruby! Ruby!
puts '*%-30s*%10d*' % ['Zdravotni zamestnavatel', zdravotni_zamestnavatel]
%-30s třicetiznakový řetězec zarovnaný doleva
K spuštění program přejdeme v příkazové řádce do složky, kam jsme umístili všechny soubory, a zadáme příkaz ruby hlavni.rb
Na úpravu programu můžeme použít nějaké vývojové prostředí, třeba Geany. A za domácí úkol můžete program rozšířit o daňový bonus 
S programováním teprve začínám, takže kdybyste věděli, jak něco vyřešit lépe a více Ruby-like, klidně napište do diskuze.
Tiskni
Sdílej:
Komentáře
Vložit další komentář
16.6.2013 09:12
JS
Re: Programování v Ruby - Výpočet čisté mzdy
16.6.2013 11:11
ZAH | skóre: 43
| blog:
ZAH
Re: Programování v Ruby - Výpočet čisté mzdy
16.6.2013 12:05
Josef Kufner | skóre: 70
Re: Programování v Ruby - Výpočet čisté mzdy
16.6.2013 12:09
David Watzke | skóre: 74
| blog:
Blog...
| Praha
Re: Programování v Ruby - Výpočet čisté mzdy
16.6.2013 13:20
xxar3s
Re: Programování v Ruby - Výpočet čisté mzdy
16.6.2013 22:00
pavlix | skóre: 54
| blog:
pavlix
Re: Programování v Ruby - Výpočet čisté mzdy
14.4.2015 21:52
Hovlo
Re: Programování v Ruby - Výpočet čisté mzdy
25.9.2015 07:54
Program588
Re: Programování v Ruby - Výpočet čisté mzdy
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.