Skip to content
Snippets Groups Projects
Commit 951d7304 authored by Liisi Jokinen's avatar Liisi Jokinen
Browse files

Delete varasto_korjattu.py

parent ebe3c5e6
No related tags found
No related merge requests found
"""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("7. Listaa vähissä olevat 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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment