2026. június 26., péntek

Valutaárfolyam-lekérdező és -átváltó alkalmazás

Egy komplex Python program több programozási koncepció (objektum-orientáltság, fájlkezelés, API integráció és hibakezelés) kombinációja.Az alábbi példa egy valós idejű valutaárfolyam-lekérdező és -átváltó alkalmazás, amely egy külső webszervertől (pl. ExchangeRate-API) kéri le az adatokat, kezeli az esetleges hálózati hibákat, és logolja a tranzakciókat egy szöveges fájlba.
---------
from datetime import datetime
import os
import requests


class ValutaKalkulator:

    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = (
            f"https://exchangerate-api.com{self.api_key}/latest/"
        )

    def arfolyam_lekeres(self, valuta):
        """Lekérdezi az aktuális árfolyamokat a megadott alapvalutához."""
        try:
            url = f"{self.base_url}{valuta}"
            valasz = requests.get(url)
            valasz.raise_for_status()  # Hibakezelés (pl. 404 vagy 500 esetén)
            adat = valasz.json()
            return adat["conversion_rates"]
        except requests.exceptions.RequestException as e:
            print(f"\nHiba történt a hálózati kapcsolat során: {e}")
            return None
        except KeyError:
            print("\nHiba: Az API válasz nem tartalmazza az árfolyamokat.")
            return None

    def penzvaltas(self, osszeg, honnan, hova):
        """Kiszámolja az átváltott összeget és logolja azt."""
        print(f"Adatok lekérése a(z) {honnan} valutáról...")
        arfolyamok = self.arfolyam_lekeres(honnan)

        if arfolyamok and hova in arfolyamok:
            arfolyam = arfolyamok[hova]
            valtott_osszeg = osszeg * arfolyam

            # Eredmény formázása matematikailag megfelelő kerekítéssel ($2$ tizedesjegyre)
            eredmeny = round(valtott_osszeg, 2)

            # Tranzakció logolása fájlba
            self.tranzakcio_mentese(osszeg, honnan, eredmeny, hova, arfolyam)
            return eredmeny
        else:
            print(f"A(z) {hova} valuta nem található az árfolyamlistában.")
            return None

    def tranzakcio_mentese(
        self, osszeg, honnan, valtott_osszeg, hova, arfolyam
    ):
        """Privát metódus a tranzakciók fájlba írásához."""
        fajl_nev = "tranzakciok.txt"
        idopont = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        with open(fajl_nev, "a", encoding="utf-8") as f:
            f.write(
                f"{idopont} - {osszeg} {honnan} átváltva {valtott_osszeg} {hova} értékre (Árfolyam: {arfolyam})\n"
            )


# Főprogram
if __name__ == "__main__":
    API_KULCS = "IDE_IRJA_AZ_API_KULCSAT"  # Helyettesítse be a saját kulcsával

    # Példa futtatás
    kalkulator = ValutaKalkulator(api_key=API_KULCS)

    try:
        osszeg_input = float(input("Kérem adja meg az átváltani kívánt összeget: "))
        honnan_input = input("Melyik valutából vált (pl. EUR): ").upper()
        hova_input = input("Melyik valutába vált (pl. HUF): ").upper()

        eredmeny = kalkulator.penzvaltas(
            osszeg_input, honnan_input, hova_input
        )

        if eredmeny is not None:
            print(
                f"\nEredmény: {osszeg_input} {honnan_input} = {eredmeny} {hova_input}"
            )
            print("A tranzakció sikeresen mentve a 'tranzakciok.txt' fájlba.")
    except ValueError:
        print("Hiba: Kérjük, hogy az összegnél számot adjon meg.")
--------------
Kérem adja meg az átváltani kívánt összeget: 100
Melyik valutából vált (pl. EUR): EUR
Melyik valutába vált (pl. HUF): HUF
Adatok lekérése a(z) EUR valutáról...
Eredmény: 100.0 EUR = 38975.0 HUF
A tranzakció sikeresen mentve a 'tranzakciok.txt' fájlba.

Nincsenek megjegyzések:

Megjegyzés küldése