Hotelrezeption für einen Zeitraum ein Zimmer auf Belegt setzten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Harald87
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2017, 16:01

Hallo liebe Pyhton-Gemeinde,
ich bin noch ziemlich neu hier und hoffe ihr könnte mir helfen. :)

Ich versuche ein Programm zu schreiben, welches einer Hotelrezeption dienen könnte. Nun zu meiner Frage:

Ich habe leider keine Idee :K wie ich es schaffen kann, dass ein Raum bei einer Buchung für einen bestimmten Zeitraum auf besetzt gestellt wird und damit keine weitern Buchungen mehr möglich sind.

Code: Alles auswählen

 
rooms=[]
	for i in range (1,21):
		rooms.append(str(i))
avaible=[]
        for i in range(1,21):
            	avaible.append(0)
Ich hatte vor dafür eine extra Liste zu erstellen die entsprechend entweder auf 0 für frei oder 1 für besetzt steht. Wie schaffe ich jedoch diese Liste in Relation zu den gegebenen Zeitraum zu setzten die der Kunde eingibt.

Datum wird in der Form: dd.mm.yyyy vom Kunden eingegeben.

Schonmal vielen Dank für die Hilfe.
MfG Harald :wink:
Zuletzt geändert von Anonymous am Dienstag 3. Januar 2017, 16:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@Harald87: Eine einfache Ja/Nein-Information pro Raum reicht hier nicht aus. Du musst pro Raum mehrere Zeiträume speichern können, denn ein Zimmer kann ja auch nächste Woche für eine Woche reserviert werden und übernächste Woche zum Beispiel noch einmal für eine Woche. Und wenn dann ein Kunde gerne das Zimmer nächste Woche für zwei Wochen mieten möchte, muss man das ablehnen, weil das mit der zweiten bereits vorhandenen Reservierung kollidiert.

Mal abgesehen davon das Dein Code so wie er da steht wegen der Einrückung syntaktisch nicht korrekt ist, ist das alles viel zu simpel um diese Fragestellung sinnvoll lösen zu können. Ich würde das gar nicht erst mit den Grunddatentypen lösen wollen, denn hier macht es IMHO auf jeden Fall schon Sinn eigene Datentypen, also Klassen, zu schreiben. Ansonsten solltest Du mindestens `collections.namedtuple` anschauen und Wörterbücher, und nicht anfangen irgendwelche ”parallelen” Datenstrukturen aufbauen. Die Informationen für ein Zimmer sollten in *einer* Datenstruktur zusammengefasst werden und nicht auf mehrere Listen verteilt werden. Und dann teilt man das Problem auf kleinere Teilprobleme auf bis man die Teilprobleme jeweils mit einer Funktion (oder Methode) mit ein paar Zeilen Code lösen kann. Hier wäre ein Teilproblem beispielsweise der Test ob zwei Zeiträume sich (nicht) überlappen.

Für die interne Repräsentation der Datumsangaben hat das `datetime`-Modul passende Datentypen.
Harald87
User
Beiträge: 4
Registriert: Dienstag 3. Januar 2017, 16:01

Vielen Dank für die schnelle Antwort ! :D

Soweit hatte ich das verstanden im Endeffekt fehlt mir nur noch die Überprüfung ob das Zimmer frei ist.
In meinem Code gibt es noch eine Dictionary "guestbook" welche als key eine ID besitzt und als Werte das Start- bzw Enddatum.
Die Raumnummer soll automatisch vergeben werden und auch noch als Wert für das Dictionary dienen.

Wie überprüfe ich denn ob ein Zeitraum mit einem anderen überlappt? Gibt es dafür einen Befehl oder muss ich dies selbst schreiben?

EDIT:

Vielen Dank für deine Hilfestellung hab es schon geschafft mir etwas ähnliches zu schreiben was die Arbeit erledigt. :)
BlackJack

@Harald87: Das musst Du selbst schreiben. Zumindest gibt es nichts in der Python-Standardbibliothek dafür (AFAIK).

Edit: Noch eine Anmerkung zum Eingangsbeitrag: Für Wahrheitswerte gibt es in Python den Typ `bool` mit den Werten `True` und `False`. Da sollte man für die bessere Verständlichkeit des Quelltextes nicht die Zahlen 0 und 1 für ”missbrauchen”.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Harald87: wie BlackJack schon geschrieben hat, kennt datetime die üblichen Vergleichsoperationen. Um Überlappung von Zeiträume zu prüfen, muß man sich aber selbst eine Kleinigkeit schreiben. Das was Du da an Code gezeigt hast, fehlt noch mehr, als nur eine Überprüfung. So eine Raumverwaltung ist ja bestimmt mit einer Datenbank gekoppelt. Da macht es also Sinn, die Datenbankstruktur direkt an eine Objektstruktur zu binden. Solche Intervall-Überprüfungen können dann viele Datenbanken auch direkt ausführen.
Antworten