Aus einem Buch (Python3 von Michael Weigend) hab ich ein Ticketsystem was sich relativ einfach adaptieren lässt. So hast du schonmal ein Grundbau und
Das Theater Stück
Code: Alles auswählen
#----------------------------------------------------
# Dateiname: musical.py
# Modul mit Klassen zur Modellierung eines Musicals
#
# Objektorientierte Programmierung mit Python
# Kap. 12
# Michael Weigend 2.10.09
#----------------------------------------------------
# musical.py - Modell eines Musicals
import pickle
class Musical:
def __init__(self, titel, eintrittspreis, saal):
self.titel = titel
self.eintrittspreis = eintrittspreis
self.saal = saal
self.vorstellungen = [] # Liste von Vorstellungen
def getVorstellung(self, datum):
"""Rückgabe eines Vorstellungs-Objektes mit
passendem Datum, falls vorhanden, sonst None"""
for vorstellung in self.vorstellungen:
if vorstellung.datum == datum: return vorstellung
# Nach dem return bricht die Ausführung der Funktion ab
def neueVorstellung(self, vorstellung):
"""Objekt vorstellung wird in Liste eingefügt"""
self.vorstellungen += [vorstellung]
def __str__(self): #1
beschreibung = '\n' + self.titel + '\n' + \
len(self.titel)*'=' + '\n'
for vorstellung in self.vorstellungen:
beschreibung += str(vorstellung) + '\n'
return beschreibung
class Vorstellung:
def __init__(self, datum, beginn, saal ):
self.datum = datum
self.beginn = beginn
self.saalbelegung = Saalbelegung(saal)
self.saal = saal
def __str__(self): #1
beschreibung = self.datum + '\n' + \
str(self.saalbelegung.getFreiePlaetze()) + \
' freie Plätze\n'
return beschreibung
class Saalbelegung:
"""pflegt Liste von Listen mit Platz-Objekten"""
def __init__(self, saal):
self.belegung = []
self.saal = saal
for i in range(len(saal.plaetzeProReihe)): #2
reihe = []
for j in range(saal.plaetzeProReihe[i]):
platz = Platz()
reihe += [platz]
self.belegung += [reihe]
def buche(self, reihe, platz, zuschauer): #3
'''weist dem Platz platz in Reihe reihe einen
Zuschauer zu'''
if not self.belegung[reihe][platz].belegt():
self.belegung[reihe][platz].belege(zuschauer)
return 'Platz gebucht'
else: return 'Platz schon belegt'
def getFreiePlaetze(self):
"""liefert Anzahl der freien Plaetze"""
frei=0
for reihe in self.belegung:
for platz in reihe:
if not platz.belegt(): frei += 1
return frei
def __str__(self): #1
beschreibung = 'Saalbelegung\n'
beschreibung += ' Platz: 1 2 3 4 5 6 7 8 9 10 '
beschreibung += '11 12 13 14\n'
nr = 1 # Reihennummer
for reihe in self.belegung:
beschreibung += 'Reihe ' + format(nr, '2d') + ': '
for platz in reihe:
beschreibung += str(platz)
nr += 1
beschreibung += '\n' # neue Zeile
return beschreibung
class Zuschauer:
def __init__(self, name, tel):
self.name, self.tel = name, tel
class Platz:
def __init__(self):
self.zuschauer = None
def belegt(self):
if self.zuschauer: return True
else: return False
def belege(self, zuschauer):
self.zuschauer = zuschauer
def __str__(self): #1
if self.belegt():
return self.zuschauer.name[:2] + ' '
# vom Zuschauername nur die ersten beiden Zeichen
else:
return '-- ' # freier Platz
class Saal:
def __init__(self, liste):
self.plaetzeProReihe = liste
Und das Ticketsystem dazu
Code: Alles auswählen
#----------------------------------------------------
# Dateiname: musicaltickets.py
# Verwaltung eines Musicals - Kartenverkauf
#
# Objektorientierte Programmierung mit Python
# Kap. 12
# Michael Weigend 2.10.09
#----------------------------------------------------
import pickle
from musical import *
class Kartenverkauf:
__menuetext = '''
Musical-Ticketservice
---------------------
(B)uchung
(U)eberblick Vorstellungen
(E)nde
'''
def __init__(self, datei):
self.__datei = datei
self.__lade_musical()
self.__run()
def __lade_musical(self):
''' versucht, aus Datei Musical zu laden'''
try:
f = open(self.__datei, 'rb')
self.__musical = pickle.load(f)
f.close()
print('\n W I L L K O M M E N')
print('beim Buchungssystem für das Musical',
self.__musical.titel)
except:
print('Kein Musical gespeichert. ')
def __run(self):
''' Menü und Verarbeitung von Auswahlen'''
print(self.__menuetext)
wahl = '-'
while wahl not in 'eE':
wahl = input('Auswahl: ')
if wahl in 'bB': self.__buchen()
elif wahl in 'uU': print(self.__musical)
print(self.__menuetext)
print('Danke für die Benutzung von Musical-Ticketservice')
self.__speichern()
def __buchen(self): #1
'''Dialog zum Buchen mehrerer Plätze '''
datum = input('Datum der Vorstellung: ')
vorstellung = self.__musical.getVorstellung(datum)
if not vorstellung: #2
print('An diesem Tag gibt es keine Vorstellung')
else:
print(vorstellung.saalbelegung)
name = input('Name: ')
tel = input('Telefonnummer: ')
zuschauer = Zuschauer(name, tel)
reihe = 'x' #3
while reihe != '':
reihe = input('Reihe: ')
if reihe != '': #4
platz = input('Platz: ')
print(vorstellung.saalbelegung.buche(
int(reihe)-1, int(platz) - 1, zuschauer))
def __speichern(self):
f = open(self.__datei, 'wb')
pickle.dump(self.__musical, f)
f.close()
kasse1 = Kartenverkauf('daten/hairspray.txt')
bei zweiten kann ich mir gut vorstellen, dass du die hier vorgeschlagenen Drucksysteme integrieren kannst.
Ich wollte dir diesen Code nur zeigen, da ich denke, das er für dich vielleicht zum Teil verwartbar ist.
BTW: Ich kann das Buch auch sehr empfehlen. Gibt jetzt sogar die Auflage 7. Ich hab aber nur die Auflage 6. Hänge gerade selbst wieder darüber. Aber nach der Arbeit ist das Hobbycoden manchmal sehr träge...