Folgen Sie diesem Tutorial, um zu erfahren, wie Sie eine einfache Datenverwaltungs-App mit einem einfachen GUI-Frontend erstellen.
Ein Buchausleihsystem ist für Bibliothekare eine äußerst praktische Möglichkeit, den Bestand und die Ausleihaktivitäten zu verwalten. Diese einfache App ist ideal für kleine bis große Bibliotheken, Gemeindezentren, Buchclubs und sogar für Ihre persönliche Büchersammlung.
Beim Schreiben der Beispiel-App erfahren Sie, wie Sie eine plattformübergreifende GUI-App erstellen, wie Sie Klassen und Objekte zum Modellieren von Entitäten verwenden und wie Sie Ihre Programme modularisieren.
Tkinter installieren und den Benutzer-Anmelde-/Registrierungsbildschirm erstellen
Um das System zum Ausleihen von Büchern aufzubauen, verwenden Sie Tkinter. Tkinter ist die Standard-GUI-Bibliothek für Python-Desktopanwendungen. Um es zu installieren, geben Sie im Terminal Folgendes ein:
pip install tkinter
Den gesamten Quellcode zum Aufbau eines Buchausleihsystems für Bibliotheken finden Sie hier GitHub-Repository.
Importieren Sie die erforderlichen Module und definieren Sie eine Klasse. BookBorrowingSystem. Definieren Sie eine Konstruktormethode für die Klasse und initialisieren Sie das Stammfenster, indem Sie den Titel, die Abmessungen und die Hintergrundfarbe der Anwendung festlegen. Definieren Sie zwei Listen, Bücher Und lend_list, in dem Sie die Titel der Bücher und die ausgeliehenen Bücher speichern.
Definieren Sie ein Wörterbuch, aufzeichnen, mit dem Sie den Status der Bücher aktualisieren können. Benutzen Sie die setup_gui() Methode zum Erstellen der grafischen Benutzeroberfläche und Initialisieren einer leeren Liste, Bibliothekare, das Sie zum Speichern der Anmeldeinformationen verwenden werden.
import tkinter as tk
from tkinter import messagebox
classBookBorrowingSystem:
def__init__(self):
self.master = tk.Tk()
self.master.title("Book Borrowing System")
self.master.geometry("750x600")
self.master.config(bg='#708090')
self.books = []
self.lend_list = []
self.record = {}
self.setup_gui()
self.librarians = []
Definieren Sie eine Methode, setup_gui(). Für den Registrierungs-/Anmeldebildschirm erstellen Sie drei Labels mit dem Namen login_label, Benutzername_Label, Und passwort_label. Definieren Sie für jedes Etikett das übergeordnete Element, in dem Sie es platzieren möchten, den Text, den es anzeigen soll, den Schriftstil, den es haben soll, sowie die Schriftfarbe.
Zusammen mit den Beschriftungen müssen Sie zwei benannte Eintrags-Widgets erstellen Benutzername_Eintrag Und Passwort_Eintrag um die Anmeldeinformationen des Bibliothekars zu erhalten und zu speichern. Sie können eine bauen Passwortprüfer zum Testen Ihrer Passwortsicherheit mit Python. Benutzen Sie die Pack Manager, um alle diese Widgets zu organisieren und die entsprechende Polsterung hinzuzufügen, um sie optisch ansprechend zu gestalten.
defsetup_gui(self):
self.login_label = tk.Label(self.master, text="Book Borrowing System", font=("Helvetica", 24), bg='#708090', fg='white')
self.login_label.pack(pady=(30, 10))
self.login_button = tk.Button(self.master, text="Login", command=self.login, font=("Helvetica", 14))
self.login_button.pack(pady=10)
# Similarly, create the username_label, username_entry, password_label,
# password_entry, and the register button
Definieren Sie eine Methode, Anmeldung(). Benutzen Sie die erhalten() -Methode im Eintrags-Widget, um den Wert der vom Bibliothekar eingegebenen Anmeldeinformationen zu extrahieren. Gehen Sie die Liste der Bibliothekare durch und prüfen Sie, ob Benutzername und Passwort mit den eingegebenen Werten übereinstimmen. Wenn ja, löschen Sie die eingegebenen Werte vom Anfang bis zum Ende. Zerstören Sie alle von Ihnen erstellten Widgets und rufen Sie das auf book_management_screen() Methode zum Anzeigen des Verwaltungsbildschirms des Buchleihsystems.
Andernfalls sind die Anmeldedaten falsch oder der Bibliothekar hat sich nicht registriert. Zeigen Sie die entsprechende Nachricht über das Nachrichtenbox-Widget von Tkinter an. Falls Sie möchten Verschlüsseln Sie Ihr Passwort und installieren Sie das bcrypt-Modul.
deflogin(self):
username = self.username_entry.get()
password = self.password_entry.get()for librarian in self.librarians:
if username == librarian[0] and password == librarian[1]:
self.username_entry.delete(0, tk.END)
self.password_entry.delete(0, tk.END)
self.login_label.destroy()# Destroy all the entries, labels, and buttons
self.book_management_screen()
return
messagebox.showerror("Error", "Invalid username or password. Please register if not done already.")
Definieren Sie eine Methode, registrieren(). Extrahieren Sie den Wert der vom Bibliothekar eingegebenen Anmeldeinformationen, fügen Sie sie der Liste des Bibliothekars hinzu und löschen Sie die Einträge vollständig.
defregister(self):
username = self.username_entry.get()
password = self.password_entry.get()
self.librarians.append([username, password])
self.username_entry.delete(0, tk.END)
self.password_entry.delete(0, tk.END)
Definieren Sie eine Methode, book_management_screen(). Erstellen Sie vier Etiketten mit dem Namen add_book_label, return_book_label, Remove_Book_Label, Und Issue_book_label. Erstellen Sie vier Einträge und vier Schaltflächen, die diesen Beschriftungen entsprechen, sowie eine weitere Schaltfläche, um die Liste aller Bücher zusammen mit ihrem Status anzuzeigen. Verwenden Sie den Pack-Manager, um die Elemente zu organisieren und etwas Polsterung hinzuzufügen.
defbook_management_screen(self):
self.add_book_label = tk.Label(self.master, text="Add Book", font=("Helvetica", 18), bg='#708090', fg='white')
self.add_book_label.pack(pady=(20, 5))
self.add_book_entry = tk.Entry(self.master, font=("Helvetica", 14))
self.add_book_entry.pack()
self.add_book_button = tk.Button(self.master, text="Add Book", command=self.add_book, font=("Helvetica", 14))
self.add_book_button.pack(pady=5)# Repeat the same for return_book, remove_book, issue_book
self.view_books_button = tk.Button(self.master, text="View Books", command=self.view_books, font=("Helvetica", 14))
self.view_books_button.pack(pady=10)
Aufbau der Funktionalität des Buchleihsystems
Definieren Sie eine Methode, add_book(). Extrahieren Sie den Inhalt des Eintrags-Widgets und fügen Sie ihn der Bücherliste hinzu. Fügen Sie im Datensatzwörterbuch den Schlüssel als Titel des Buches und den Wert als hinzu hinzugefügt. Zeigt ein Erfolgsmeldungsfeld an, das darüber informiert, dass das Programm das Buch erfolgreich hinzugefügt hat. Löschen Sie den Inhalt des add_book_entry vom Anfang bis zum Ende.
defadd_book(self):
book = self.add_book_entry.get()
self.books.append(book)
self.record[book] = "added"
messagebox.showinfo("Success", "Book added successfully")
self.add_book_entry.delete(0, tk.END)
Definieren Sie eine Methode, remove_book(). Extrahieren Sie den Titel des Buches und prüfen Sie, ob er im enthalten ist Bücher Liste. Wenn es vorhanden ist, entfernen Sie es und seinen Datensatz aus dem Wörterbuch. Sobald Sie fertig sind, wird eine Erfolgsmeldung angezeigt, die Sie darüber informiert, dass das Programm das Buch entfernt hat. Andernfalls wird eine Fehlermeldung angezeigt, die besagt, dass das Buch nicht gefunden wurde. Löschen Sie den Eintrag Remove_book_entry vollständig.
defremove_book(self):
book = self.remove_book_entry.get()if book in self.books:
self.books.remove(book)if book in self.record:
del self.record[book]messagebox.showinfo("Success", "Book removed successfully")
else:
messagebox.showerror("Error", "Book not found")
self.remove_book_entry.delete(0, tk.END)
Definieren Sie eine Methode, issue_book(). Extrahieren Sie den Titel des Buchs und prüfen Sie, ob er in der Datei vorhanden ist Bücher Liste. Wenn ja, fügen Sie dies dem bei lend_list Liste und entfernen Sie es aus der Bücherliste. Aktualisieren Sie den Wert des Buches als ausgegeben. Andernfalls wird eine Fehlermeldung angezeigt, dass das Buch nicht gefunden wurde. Löschen Sie den Inhalt des issue_book_entry().
defissue_book(self):
book = self.issue_book_entry.get()if book in self.books:
self.lend_list.append(book)
self.books.remove(book)
self.record[book] = "issued"
messagebox.showinfo("Success", "Book issued successfully")
else:
messagebox.showerror("Error", "Book not found")
self.issue_book_entry.delete(0, tk.END)
Definieren Sie eine Methode, Buch zurück geben(). Extrahieren Sie den Titel und prüfen Sie, ob er in der Datei vorhanden ist lend_list Liste. Wenn ja, entfernen Sie es, hängen Sie es wieder an die Bücherliste an und aktualisieren Sie den zurückgegebenen Wert im Datensatz. Zeigen Sie ein Erfolgsmeldungsfeld an, das besagt, dass die Person das Buch zurückgegeben hat.
Wenn der Titel in der Buchliste vorhanden ist und der Status des Datensatzes lautet hinzugefügt, wird ein Fehlermeldungsfeld angezeigt, das besagt, dass die Person das Buch nicht zurückgeben kann, da es niemand ausgegeben hat. Andernfalls wird eine Fehlermeldung angezeigt, die besagt, dass das Buch nicht gefunden wurde.
defreturn_book(self):
book = self.return_book_entry.get()if book in self.lend_list:
self.lend_list.remove(book)
self.books.append(book)
self.record[book] = "returned"
messagebox.showinfo("Success", "Book returned successfully")
elif book in self.books and self.record.get(book) == "added":
messagebox.showerror("Error", "Book can't be returned. It hasn't been issued.")
else:
messagebox.showerror("Error", "Book not found.")
self.return_book_entry.delete(0, tk.END)
Definieren Sie eine Methode, view_books(). Initialisieren Sie die Nachricht Variable als leer. Konstruieren Sie die Nachricht, um eine String-Interpolation durchzuführen und den Titel der Bücher zusammen mit ihrem Status anzuzeigen. Wenn die Nachricht leer ist, sind keine Bücher verfügbar. Zeigen Sie die entsprechende Ausgabe in einem Meldungsfeld an.
defview_books(self):
message = ""for book, status in self.record.items():
message += f"{book}: {status}\n"ifnot message:
message = "No book records available."
messagebox.showinfo("Books", message)
Erstellen Sie eine Instanz der Klasse und führen Sie Tkinter aus Hauptschleife() um auf Ereignisse zu warten, bis Sie das Fenster schließen. Verwenden Die __name__ == "__main__" Idiom um das Programm auszuführen.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Beispielausgabe des Buchleihsystems
Wenn Sie das Programm ausführen, werden Sie mit einem Registrierungs-/Anmeldebildschirm begrüßt. Nach Eingabe der Anmeldeinformationen und Klicken auf Registrieren Klicken Sie auf die Schaltfläche und das Programm fügt Sie als Bibliothekar hinzu. Geben Sie die gleichen Anmeldeinformationen ein und klicken Sie Anmeldung führt Sie zum Verwaltungsbildschirm.
Wenn Sie den Titel des Buches eingeben und auf „Buch hinzufügen“ klicken, zeigt das Programm eine Meldung an, dass das Buch erfolgreich hinzugefügt wurde. Wenn Sie auf die Schaltfläche „Ausgeben“, „Zurückgeben“ oder „Entfernen“ klicken, zeigt das Programm das entsprechende Meldungsfeld an, während der Status aktualisiert wird.
Beim Klicken auf Bücher ansehen Wenn Sie auf die Schaltfläche klicken, zeigt das Programm den Titel der Bücher sowie deren Status an. Wenn Sie ein Buch entfernen, löscht das Programm den Titel und Sie können es nicht ansehen.
Wenn Sie versuchen, ein Buch ohne Ausgabe zurückzugeben oder ein Buch während der Ausgabe zu entfernen, zeigt das Programm eine Fehlermeldung an.
Verbesserung der App zum Ausleihen von Büchern
Diese Implementierung ist eine Grundlage für den Aufbau einer sicheren GUI-Anwendung auf Produktionsebene. Sie können die Funktionalität verbessern, indem Sie die Eingabevalidierung implementieren Hashlib zum Speichern von Passwörtern, zum Implementieren einer ordnungsgemäßen Fehlerbehandlung und zum Hinzufügen von Datenpersistenz mit einer Datenbank.
Darüber hinaus sollten Sie Benutzerauthentifizierungsebenen mit unterschiedlichen Zugriffsebenen für Leser, Bibliothekare und Administratoren implementieren. Sie können eine Suchfunktion hinzufügen, um nach Büchern zu suchen und den Zugriff zu erleichtern.