Skip to content
Snippets Groups Projects
varasto_valmis.py 4.05 KiB
Newer Older
Erkki Kaila's avatar
Erkki Kaila committed
"""Ohjelma mallintaa yksinkertaista varastokirjanpitoa"""

def nayta_UI():
    """Näyttää käyttöliittymän"""
    while True:
        print("Valitse toiminto:")
        print("1. Lataa tuotteet tiedostosta")
        print("2. Tallenna tuotteet tiedostoon")
        print("3. Lisää tuote")
        print("4. Ota tuotetta varastosta")
        print("5. Etsi tuote")
        print("6. Listaa kaikki tuotteet")
        print("0. Poistu")
        
        valinta = int(input("Valintasi: "))
        
        if valinta == 1:
            lataa_tiedot()
            print("Tiedot ladattu!")
        elif valinta == 2:
            tallenna_tiedot()
            print("Tiedot tallennettu!")
        elif valinta == 3:
            nimi = input("Anna tuotteen nimi:")
            maara = int(input("Anna määrä: "))
            lisaa_tuote(nimi, maara)
            print("Tuote lisätty!")
        elif valinta == 4:
            nimi = input("Anna tuotteen nimi:")
            maara = int(input("Anna määrä: "))
            if ota_tuotetta(nimi, maara):
                print("Tuotetta otettu!")
            else:
                print("Tuotetta ei ollut tarpeeksi varastossa.")
        elif valinta == 5:
            tuotteet = etsi_tuotteet(input("Anna hakutermi: "))
            # Jos tuotelista ei ollut tyhjä...
            if tuotteet:
                print(tuotteet)
            else:
                print("Tuotteita ei löytynyt.")
        elif valinta == 6:
            print(listaa_tuotteet())
        elif valinta == 0:
            break
        
        # Ylimääräinen rivinvaihto
        print()        

def lataa_tiedot() -> list:
    """Lataa varaston tuotetiedot tiedostosta"""
    # tyhjennetään ensin kaikki nykyiset tuotteet
    global tuotteet
    tuotteet.clear()
    
    # Tiedoston nimi on aina sama
    with open("tuotteet.csv") as tiedosto:
        for rivi in tiedosto:
            tiedot = rivi.strip().split(",")
            # rivillä on ensin nimi, sitten kappalemäärä
            tuotteet[tiedot[0]] = int(tiedot[1])
            
def tallenna_tiedot():
    """Tallentaa varaston tuotetiedot tiedostoon"""
    # Tiedoston nimi on aina sama
    with open("tuotteet.csv", "w") as tiedosto:
        for nimi, maara in tuotteet.items():
            rivi = f"{nimi},{maara}\n"
            tiedosto.write(rivi)
              
def lisaa_tuote(nimi: str, maara: int):
    """Lisää annetun tuotteen varastoon"""
    global tuotteet
    # Tarkistetaan, onko tuote jo varastossa
    if nimi in tuotteet:
        # Jos on, lisätään saldoa
        tuotteet[nimi] += maara
    else:
        # Jos ei, lisätään uusi tuote
        tuotteet[nimi] = maara
    
def ota_tuotetta(nimi: str, maara: int) -> bool:
    """Ottaa tuotetta varastosta annetun määrän, jos sitä on tarpeeksi

    Args:
        nimi (str): tuotteen nimi
        maara (int): kuinka paljon tuotetta otetaan

    Returns:
        bool: True, jos tuotetta oli varastossa tarpeeksi, muuten False
    """
    global tuotteet
    if nimi in tuotteet:
        # onko varastossa tarpeeksi...
        if tuotteet[nimi] >= maara:
            tuotteet[nimi] -= maara
            return True
            # Tuotetta ei ollut (tarpeeksi) varastossa
    return False
    
def etsi_tuotteet(hakutermi: str) -> str:
    """Hakee annettuja tuotteita varastosta"""
    # iteroidaan tuotteet läpi, tallennetaan merkkijonoon sopivat
    tulos = ""
    # dictin ei tarvitse olla global, koska sitä ei muuteta
    for nimi in tuotteet:
        if hakutermi in nimi:
            # Rivinvaihto perässä tekee siistimmän tulosteen
            tulos += f"{nimi}, {tuotteet[nimi]} kpl.\n"
            
    return tulos
    
def listaa_tuotteet() -> str:
    """Listaa kaikki varaston tuotteet"""
    
    # hyödynnetään etsi_tuotteet -funktiota tyhjällä hakutermillä,
    # joka löytää siis kaikki tuotteet
    return etsi_tuotteet("")
    
    
# ------------------    
# PÄÄOHJELMA
# ------------------

# Varastotiedot ovat tallessa globaalissa sanakirjassa
# Avaimena on tuotteen nimi ja arvona sen määrä kokonaislukuna
tuotteet = {}
nayta_UI()