• Członkowie 1 post
    21 maja 2025 22:15
    
    import time
    import os
    import math
    
    
    # f = open("file.txt", "r")
    # print(f.read())
    
    plik = r"C:\Users\PC\Desktop\visualstudiofiles\losowe_projekty\Bankomat\Dane Osobowe.txt"
    linia_salda = 1
    
    with open(plik, "r", encoding="utf-8") as text_file:
        linietxt = text_file.readlines()
    
    pin = linietxt[0].strip()
    saldo = float(linietxt[1].strip())
    
    
    def clear():
        os.system('cls')
    
    
    clear()
    
    
    def wait(a):
        time.sleep(a)
    
    
    def start(pin):
        clear()
        print("             Witaj w bankomacie!")
        wpisany_pin = input("                PIN: ")
        if wpisany_pin == pin:
            # jeżeli dobry pin
            clear()
            print("             PIN podany poprawnie")
            wait(2)
            clear()
    
            def panel(saldo):
                clear()
                print("______ \n      |\n   1  |  Wpłać Gotówkę\n______|\n\n______ \n      |\n   2  |  Wypłać Gotówkę\n______|\n\n______ \n      |\n   3  |  Zakończ\n______|\n\n             Saldo konta: "+str(saldo)+"zł\n\n")
                dzialanie = input("\n\nWybierz akcję: ")
    
                if dzialanie == '1':
                    # jeżeli wybierzemy wpłacanie
                    def wplacanie(saldo):
                        clear()
                        print("             Saldo konta: "+str(saldo)+"zł")
                        print("             Wpłać gotówkę")
                        ilosc_wpl = input("                 : ")
                        clear()
                        print("       Saldo konta po operacji: " +
                              str(saldo+float(ilosc_wpl))+"zł")
                        print("             Wpłacana ilość: "+ilosc_wpl+"zł")
                        print("             Wpisz t aby potwierdzić")
                        potwierdzenie_wplaty = input("                 : ")
                        if potwierdzenie_wplaty == 't':
                            # jeżeli zgodzimy się na wpłate
                            clear()
                            print("           Proszę włożyć do bankomatu " +
                                  ilosc_wpl+"zł.")
                            wlozone = input("                  : ")
                            clear()
                            i = 0
                            while i != 3:
                                print("             Weryfikowanie kwoty.")
                                wait(1)
                                clear()
                                print("             Weryfikowanie kwoty..")
                                wait(1)
                                clear()
                                print("             Weryfikowanie kwoty...")
                                wait(1)
                                clear()
                                i += 1
                            if wlozone == ilosc_wpl:
                                # jeżeli dobrą ilość daliśmy
                                clear()
                                print("         Tranzakcja zakończona sukcesem.")
                                wait(2)
                                saldo += float(ilosc_wpl)
                                panel(saldo)
                            else:
                                # jeżeli złą ilość daliśmy
                                clear()
                                print(
                                    "             Podałeś złą kwotę.\n             Spróbuj jeszcze raz.")
                                wait(2)
                                wplacanie(saldo)
                        else:
                            clear()
                            panel(saldo)
    
                    wplacanie(saldo)
    
                elif dzialanie == '2':
                    # jeżeli wybierzemy wypłacanie
                    def wyplacanie(saldo):
                        clear()
                        print("             Saldo konta: "+str(saldo)+"zł")
                        print("             Wypłać gotówkę")
                        ilosc_wypl = input("       (MAX "+str(saldo)+"zł) : ")
                        clear()
                        if float(ilosc_wypl) > saldo:
                            print("     Nie możesz wypłacić więcej niż masz na koncie")
                            print("             Spróbuj jeszcze raz")
                            wait(2)
                            clear()
                            wyplacanie(saldo)
                        else:
                            print("       Saldo konta po operacji: " +
                                  str(saldo-float(ilosc_wypl))+"zł")
                            print("             Wypłacana ilość: "+ilosc_wypl+"zł")
                            print("             Wpisz t aby potwierdzić")
                            potwierdzenie_wyplaty = input("                 : ")
                            if potwierdzenie_wyplaty == 't':
                                # jeżeli zgodzimy się na wypłate
                                for index in range(0, int(math.floor(float(ilosc_wypl))), 50):
                                    clear()
                                    print("             Wypłacono "+str(index)+"zł.")
                                    wait(0.5)
                                clear()
                                print("             Wypłacono "+ilosc_wypl+"zł.")
                                print(
                                    "      Sprawdź czy wypłacona kwota zgadza się (t - tak; n - nie)")
                                poprawnosc_wyplacenia = input(
                                    "                  : ")
                                if poprawnosc_wyplacenia == 't':
                                    # jeśli bankomat dobrze wypłacił
                                    clear()
                                    print("          Tranzakcja zakończona sukcesem")
                                    wait(2)
                                    saldo -= float(ilosc_wypl)
                                    panel(saldo)
                                else:
                                    # jeśli bankomat źle wypłacił
                                    clear()
                                    print(
                                        "             Bardzo przepraszam.\n             Spróbuj jeszcze raz.")
                                    wait(2)
                                    clear()
                                    wyplacanie(saldo)
    
                    wyplacanie(saldo)
    
                elif dzialanie == '3':
                    # zakończenie
                    clear()
                    print("             Do zobaczenia!")
                    saldo = str(saldo)
    
                    def zmien_saldo(plik, linia_salda, saldo):
                        with open(plik, "r", encoding="utf-8") as file:
                            linie = file.readlines()
    
                        linie[linia_salda] = str(saldo) + '\n'
    
                        with open(plik, 'w', encoding="utf-8") as file:
                            file.writelines(linie)
                    wait(2)
                    clear()
                    zmien_saldo(plik, linia_salda, saldo)
                    start(pin)
            panel(saldo)
    
        else:
            clear()
            print("             PIN podany niepoprawnie")
            wait(2)
            clear()
            czas = 5
            while czas > 0:
                print("        Spróbuj jeszcze raz za "+str(czas)+"s.")
                wait(1)
                czas -= 1
                clear()
            start(pin)
    
    
    start(pin)
    

    W pliku Dane Osobowe.txt są 2 linijki tekstu. Pierwsza to PIN druga to stan konta.

  • Członkowie 16 postów
    23 maja 2025 19:31

    Funkcja start jest zdecydowanie za długa :) Podziel to na mniejsze fragmenty ;)

  • Członkowie 16 postów
    2 czerwca 2025 01:28

    Ten przykład to idealny projekt pod OOP - ja bym to napisał obiektowo.
    Zobacz funkcję format() oraz jak się justuje tekst w pythonie. Użyj kilku(nastu) małych funkcji, rozbijając main() który jest zbyt wielgachny :)
    Może też się przydać libka tqdm lub podobna. Są też ciekawe dodatki zastępujące pythonowski input().

    Powodzenia!