Podle tohoto návodu se dozvíte, jak vytvořit základní aplikaci pro správu dat s jednoduchým rozhraním GUI.
Systém půjčování knih je pro knihovníky velmi pohodlný způsob, jak spravovat zásoby a výpůjční činnosti. Tato jednoduchá aplikace je ideální pro malé i velké knihovny, komunitní centra, knižní kluby a dokonce i pro vaši osobní sbírku knih.
Při psaní ukázkové aplikace se dozvíte, jak vytvořit aplikaci GUI pro různé platformy, jak používat třídy a objekty k modelování entit a jak modularizovat své programy.
Instalace Tkinter a vytvoření obrazovky přihlášení/registrace uživatele
K vybudování systému půjčování knih využijete Tkinter. Tkinter je standardní knihovna GUI pro desktopové aplikace Pythonu. Chcete-li jej nainstalovat, zadejte do terminálu:
pip install tkinter
Celý zdrojový kód budování systému půjčování knih pro knihovny najdete v tomto úložiště GitHub.
Importujte požadované moduly a definujte třídu, BookBorrowingSystem. Definujte metodu konstruktoru pro třídu a inicializujte kořenové okno, nastavte nadpis, rozměry a barvu pozadí aplikace. Definujte dva seznamy,
knihy a seznam_půjček, které budete používat k ukládání názvů knih a které si lidé půjčili.Definujte slovník, záznam, kterou můžete použít k aktualizaci stavu knih. Použijte setup_gui() metoda pro vytvoření grafického uživatelského rozhraní a inicializace prázdného seznamu, knihovníci, který použijete k uložení přihlašovacích údajů.
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 = []
Definujte metodu, setup_gui(). Pro registrační/přihlašovací obrazovku vytvoříte tři pojmenované štítky přihlašovací_štítek, štítek uživatelského jména, a heslo_štítek. Pro každý štítek definujte nadřazený prvek, do kterého jej chcete umístit, text, který by měl zobrazovat, styl písma, který by měl mít, spolu s barvou písma.
Spolu s popisky musíte vytvořit dva vstupní widgety pojmenované zadání uživatelského_jména a heslo_zadání získat a uložit pověření knihovníka. Můžete postavit a kontrola hesel pro testování zabezpečení vašeho hesla pomocí Pythonu. Použijte balíček správce uspořádat všechny tyto widgety a přidat vhodné vycpávky pro vizuální přitažlivost.
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
Definujte metodu, přihlásit se(). Použijte dostat() metoda na vstupním widgetu k extrahování hodnoty pověření zadaných knihovníkem. Projděte si seznam knihovníků a zkontrolujte, zda uživatelské jméno a heslo odpovídají zadaným hodnotám. Pokud ano, vymažte zadané hodnoty od začátku do konce. Zničte všechny widgety, které jste vytvořili, a zavolejte book_management_screen() způsob zobrazení obrazovky správy systému půjčování knih.
V opačném případě jsou přihlašovací údaje nesprávné nebo se knihovník nezaregistroval. Zobrazte příslušnou zprávu prostřednictvím widgetu schránky zpráv Tkinter. V případě, že budete chtít zašifrujte své heslo, nainstalujte modul bcrypt.
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.")
Definujte metodu, Registrovat(). Extrahujte hodnotu přihlašovacích údajů, které knihovník zadá, přidejte je do knihovního seznamu a úplně vymažte položky.
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)
Definujte metodu, book_management_screen(). Vytvořte čtyři pojmenované štítky přidat štítek_knihy, return_book_label, odebrat štítek_knihy, a issue_book_label. Vytvořte čtyři položky a čtyři tlačítka odpovídající těmto štítkům a další tlačítko pro zobrazení seznamu všech knih spolu s jejich stavem. Pomocí správce balíčků uspořádejte prvky a přidejte nějaké vycpávky.
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)
Budování funkčnosti systému půjčování knih
Definujte metodu, add_book(). Extrahujte obsah vstupního widgetu a přidejte jej do seznamu knih. Ve slovníku záznamů přidejte klíč jako název knihy a hodnotu jako přidal. Zobrazte okno se zprávou o úspěchu, že program úspěšně přidal knihu. Vymažte obsah přidat_položku_knihy od začátku do konce.
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)
Definujte metodu, remove_book(). Extrahujte název knihy a zkontrolujte, zda se v ní nachází knihy seznam. Pokud existuje, odstraňte jej a jeho záznam ze slovníku. Po dokončení zobrazte okno se zprávou o úspěchu, která informuje, že program knihu odstranil. V opačném případě zobrazte okno s chybovou zprávou, že kniha nebyla nalezena. Vymažte vstup odebrat_položku_knihy zcela.
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)
Definujte metodu, issue_book(). Extrahujte název knihy a zkontrolujte, zda v ní existuje knihy seznam. Pokud ano, připojte toto k seznam_půjček seznamu a odstranit jej ze seznamu knih. Aktualizujte hodnotu knihy jako vydané. V opačném případě zobrazte okno s chybovou zprávou, že kniha nebyla nalezena. Vymažte obsah 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)
Definujte metodu, return_book(). Extrahujte název a zkontrolujte, zda v souboru existuje seznam_půjček seznam. Pokud ano, odeberte jej a připojte zpět k seznamu knih a aktualizujte hodnotu v záznamu tak, jak byla vrácena. Zobrazte okno se zprávou o úspěchu oznamující, že osoba knihu vrátila.
Pokud název existuje v seznamu knih a stav záznamu je přečten přidal, zobrazí okno s chybovou zprávou, že daná osoba nemůže knihu vrátit, protože ji nikdo nevydal. V opačném případě zobrazte okno s chybovou zprávou, že kniha nebyla nalezena.
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)
Definujte metodu, zobrazit_knihy(). Inicializujte zpráva proměnná jako prázdná. Sestavte zprávu tak, aby provedla interpolaci řetězců a zobrazila název knih spolu s jejich stavem. Pokud je zpráva prázdná, nejsou k dispozici žádné knihy. Zobrazte odpovídající výstup v okně zprávy.
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)
Vytvořte instanci třídy a spusťte Tkinter mainloop() poslouchat události, dokud nezavřete okno. Použití a __name__ == "__main__" idiom ke spuštění programu.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Příklad výstupu systému půjčování knih
Při spuštění programu vás přivítá registrační/přihlašovací obrazovka. Po zadání přihlašovacích údajů a kliknutí na Registrovat tlačítko, program vás přidá jako knihovníka. Zadání stejných přihlašovacích údajů a stisknutí Přihlásit se vás přenese na obrazovku správy.
Po zadání názvu knihy a stisknutí tlačítka Přidat knihu program zobrazí okno se zprávou, že knihu úspěšně přidal. Pokud kliknete na tlačítko problém, vrátit nebo odebrat, program při aktualizaci stavu zobrazí příslušné okno se zprávou.
Po kliknutí na Zobrazit knihy program zobrazí název knih spolu s jejich stavem. Pokud knihu odeberete, program smaže její titul a nebudete jej moci zobrazit.
V případě, že se pokusíte vrátit knihu, aniž byste ji vydali, nebo odebrat knihu, když byla vydána, program zobrazí okno s chybovou zprávou.
Vylepšení aplikace pro půjčování knih
Tato implementace je základem pro vybudování zabezpečené aplikace GUI na produkční úrovni. Jeho funkčnost můžete vylepšit implementací ověřování vstupu pomocí hashlib k ukládání hesel, implementaci správného zpracování chyb a přidání perzistence dat do databáze.
Kromě toho byste měli implementovat úrovně ověřování uživatelů s různými úrovněmi přístupu pro čtenáře, knihovníky a správce. Můžete přidat funkci vyhledávání pro vyhledávání knih a usnadnit přístup.