Volg deze zelfstudie om te leren hoe u een eenvoudige app voor gegevensbeheer bouwt met een eenvoudige GUI-frontend.
Een boekleensysteem is een superhandige manier voor bibliothecarissen om inventaris en uitleenactiviteiten te beheren. Deze eenvoudige app is ideaal voor kleine tot grote bibliotheken, gemeenschapscentra, boekenclubs en zelfs voor uw persoonlijke boekencollectie.
Als u de voorbeeld-app schrijft, leert u hoe u een platformonafhankelijke GUI-app kunt bouwen, hoe u klassen en objecten kunt gebruiken om entiteiten te modelleren en hoe u uw programma's kunt modulariseren.
Tkinter installeren en het gebruikersaanmeldings-/registratiescherm bouwen
Voor het bouwen van het boekenleensysteem maak je gebruik van Tkinter. Tkinter is de standaard GUI-bibliotheek voor Python-desktoptoepassingen. Om het te installeren, typt u in de terminal:
pip install tkinter
Hierin vindt u de volledige broncode van het bouwen van een boekenleensysteem voor bibliotheken GitHub-opslagplaats.
Importeer de vereiste modules en definieer een klasse,
Boekleensysteem. Definieer een constructormethode voor de klasse en initialiseer het hoofdvenster door de titel, de afmetingen en de achtergrondkleur van de toepassing in te stellen. Definieer twee lijsten, boeken En uitleenlijst, die u gaat gebruiken om de titels van de boeken op te slaan en welke mensen hebben geleend.Definieer een woordenboek, dossier, die u kunt gebruiken om de status van de boeken bij te werken. Gebruik de setup_gui() methode om de grafische gebruikersinterface te maken en een lege lijst te initialiseren, bibliothecarissen, die u zult gebruiken om de inloggegevens op te slaan.
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 = []
Definieer een methode, setup_gui(). Voor het registratie-/inlogscherm maakt u drie labels met de naam login_label, gebruikersnaam_label, En wachtwoord_label. Definieer voor elk label het bovenliggende element waarin u het wilt plaatsen, de tekst die het moet weergeven, de letterstijl die het moet hebben en de letterkleur.
Samen met de labels moet u twee invoerwidgets maken met de naam gebruikersnaam_entry En wachtwoord_entry om de inloggegevens van de bibliothecaris op te halen en op te slaan. Je kunt een bouwen wachtwoordcontrole om uw wachtwoordbeveiliging met Python te testen. Gebruik de pak manager om al deze widgets te ordenen en de juiste opvulling toe te voegen voor visuele aantrekkingskracht.
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
Definieer een methode, Log in(). Gebruik de krijgen() methode op de invoerwidget om de waarde van de door de bibliothecaris ingevoerde inloggegevens te extraheren. Herhaal de lijst met bibliothecarissen en controleer of de gebruikersnaam en het wachtwoord overeenkomen met de ingevoerde waarden. Zo ja, wis dan de ingevoerde waarden van het begin tot het einde. Vernietig alle widgets die je hebt gemaakt en roep de boek_beheer_scherm() methode om het beheerscherm van het boekenuitleensysteem weer te geven.
Anders zijn de inloggegevens onjuist of heeft de bibliothecaris zich niet geregistreerd. Geef het juiste bericht weer via de berichtenbox-widget van Tkinter. Voor het geval je dat wilt versleutel uw wachtwoord, installeer de bcrypt-module.
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.")
Definieer een methode, register(). Extraheer de waarde van de inloggegevens die de bibliothecaris invoert, voeg ze toe aan de lijst van de bibliothecaris en wis de vermeldingen volledig.
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)
Definieer een methode, boek_beheer_scherm(). Maak vier labels met de naam add_book_label, return_book_label, remove_book_label, En issue_book_label. Maak vier vermeldingen en vier knoppen die overeenkomen met deze labels, en nog een knop om de lijst met alle boeken samen met hun status te bekijken. Gebruik de pakketbeheerder om de elementen te ordenen en wat opvulling toe te voegen.
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)
Bouwen aan de functionaliteit van het boekenleensysteem
Definieer een methode, add_book(). Extraheer de inhoud van de invoerwidget en voeg deze toe aan de boekenlijst. Voeg in het recordwoordenboek de sleutel toe als de titel van het boek en de waarde als toegevoegd. Geef een bericht weer dat het programma het boek met succes heeft toegevoegd. Wis de inhoud van het add_book_entry van het begin tot het einde.
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)
Definieer een methode, verwijder_boek(). Extraheer de titel van het boek en controleer of deze aanwezig is in de boeken lijst. Als het bestaat, verwijder het en zijn record uit het woordenboek. Als u klaar bent, geeft u een berichtvenster weer waarin staat dat het programma het boek heeft verwijderd. Geef anders een foutbericht weer waarin staat dat het boek niet is gevonden. Wis de invoer van de remove_book_entry volledig.
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)
Definieer een methode, uitgave_boek(). Extraheer de titel van het boek en controleer of deze bestaat in de boeken lijst. Zo ja, voeg deze dan toe aan de uitleenlijst lijst en verwijder het uit de boekenlijst. Werk de waarde van het boek bij als uitgegeven. Geef anders een foutbericht weer waarin staat dat het boek niet is gevonden. Wis de inhoud van het 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)
Definieer een methode, retour_boek(). Pak de titel uit en controleer of deze bestaat in de uitleenlijst lijst. Zo ja, verwijder het en voeg het weer toe aan de boekenlijst en werk de waarde in het record bij zoals geretourneerd. Geef een berichtvenster weer waarin staat dat de persoon het boek heeft teruggestuurd.
Als de titel bestaat in de boekenlijst en de status van het record luidt toegevoegd, geeft een foutbericht weer waarin staat dat de persoon het boek niet kan retourneren omdat niemand het heeft uitgegeven. Geef anders een foutbericht weer waarin staat dat het boek niet is gevonden.
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)
Definieer een methode, bekijk_boeken(). Initialiseer de bericht variabele als leeg. Construeer het bericht om stringinterpolatie uit te voeren en de titel van de boeken samen met hun status weer te geven. Als het bericht leeg is, zijn er geen boeken beschikbaar. Geef de corresponderende uitvoer weer in een berichtvenster.
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)
Maak een instantie van de klasse en voer het Tkinter Hoofdlus() om naar gebeurtenissen te luisteren totdat u het venster sluit. Gebruik de __naam__ == "__hoofd__" idioom om het programma uit te voeren.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Voorbeelduitvoer van het boekenleensysteem
Bij het uitvoeren van het programma begroet het u met een registratie-/inlogscherm. Bij het invoeren van de referenties en het klikken op de Register knop, voegt het programma u toe als bibliothecaris. Het invoeren van dezelfde inloggegevens en raken Log in navigeert u naar het beheerscherm.
Door de titel van het boek in te voeren en op Boek toevoegen te drukken, geeft het programma een berichtvenster weer dat het boek met succes is toegevoegd. Als u op de knop Uitgeven, Terugsturen of Verwijderen klikt, geeft het programma het juiste berichtvenster weer terwijl de status wordt bijgewerkt.
Bij het klikken op de Boeken bekijken knop, toont het programma de titel van de boeken samen met hun status. Als u een boek verwijdert, verwijdert het programma de titel en kunt u het niet bekijken.
Als u probeert een boek terug te sturen zonder het uit te geven of een boek te verwijderen terwijl het is uitgegeven, geeft het programma een foutbericht weer.
Verbetering van de app voor het lenen van boeken
Deze implementatie vormt de basis voor het bouwen van een veilige GUI-toepassing op productieniveau. U kunt de functionaliteit ervan verbeteren door invoervalidatie te implementeren met behulp van hashlib om wachtwoorden op te slaan, de juiste foutafhandeling te implementeren en gegevenspersistentie toe te voegen met een database.
Afgezien hiervan moet u gebruikersauthenticatieniveaus implementeren met verschillende toegangsniveaus voor lezers, bibliothecarissen en beheerders. U kunt zoekfunctionaliteit toevoegen om naar boeken te zoeken en de toegang te vergemakkelijken.