Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""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()