Postupujte podľa tohto návodu a naučte sa, ako vytvoriť základnú aplikáciu na správu údajov s jednoduchým rozhraním GUI.

Systém požičiavania kníh je pre knihovníkov mimoriadne pohodlný spôsob, ako spravovať inventár a výpožičné činnosti. Táto jednoduchá aplikácia je ideálna pre malé až veľké knižnice, komunitné centrá, knižné kluby a dokonca aj pre vašu osobnú zbierku kníh.

Pri písaní vzorovej aplikácie sa dozviete, ako vytvoriť aplikáciu GUI pre viacero platforiem, ako používať triedy a objekty na modelovanie entít a ako modularizovať svoje programy.

Inštalácia Tkinter a vytvorenie obrazovky prihlásenia/registrácie používateľa

Na vybudovanie systému požičiavania kníh využijete Tkinter. Tkinter je štandardná knižnica GUI pre desktopové aplikácie Pythonu. Ak ho chcete nainštalovať, zadajte do terminálu:

pip install tkinter

Celý zdrojový kód budovania systému požičiavania kníh pre knižnice nájdete v tomto úložisko GitHub.

Importujte požadované moduly a definujte triedu, BookBorrowingSystem. Definujte metódu konštruktora pre triedu a inicializujte koreňové okno, nastavte nadpis, rozmery a farbu pozadia aplikácie. Definujte dva zoznamy,

instagram viewer
knihy a zoznam_požičovní, ktoré použijete na uloženie názvov kníh a ktoré si ľudia požičali.

Definujte slovník, záznam, ktorý môžete použiť na aktualizáciu stavu kníh. Použi setup_gui() metóda na vytvorenie grafického používateľského rozhrania a inicializácia prázdneho zoznamu, knihovníci, ktorý budete používať na uloženie poverení.

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 metódu, setup_gui(). Pre registračnú/prihlasovaciu obrazovku vytvoríte tri menovky s názvom login_label, meno_používateľa, a heslo_štítok. Pre každý štítok definujte nadradený prvok, do ktorého ho chcete umiestniť, text, ktorý má zobrazovať, štýl písma, ktorý by mal mať, spolu s farbou písma.

Spolu s menovkami musíte vytvoriť dva vstupné widgety s názvom username_entry a heslo_zadanie získať a uložiť poverenia knihovníka. Môžete postaviť a nástroj na kontrolu hesiel na testovanie zabezpečenia hesla pomocou Pythonu. Použi balenie správcu usporiadať všetky tieto miniaplikácie a pridať vhodné vypchávky pre vizuálnu príťažlivosť.

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 metódu, Prihlásiť sa(). Použi dostať () metódu na vstupnom widgete na extrahovanie hodnoty poverení zadaných knihovníkom. Opakujte zoznam knihovníkov a skontrolujte, či sa používateľské meno a heslo zhodujú so zadanými hodnotami. Ak áno, vymažte zadané hodnoty od začiatku do konca. Zničte všetky miniaplikácie, ktoré ste vytvorili, a zavolajte na book_management_screen() spôsob zobrazenia obrazovky správy systému požičiavania kníh.

V opačnom prípade sú prihlasovacie údaje nesprávne alebo sa knihovník nezaregistroval. Zobrazte príslušnú správu prostredníctvom widgetu schránky správ Tkinter. V prípade, že chcete zašifrujte svoje heslo, nainštalujte 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 metódu, Registrovať(). Extrahujte hodnotu poverení, ktoré knihovník zadá, pridajte ich do zoznamu knihovníkov a úplne vymažte záznamy.

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 metódu, book_management_screen(). Vytvorte štyri menovky s názvom add_book_label, return_book_label, remove_book_label, a issue_book_label. Vytvorte štyri položky a štyri tlačidlá zodpovedajúce týmto štítkom a ďalšie tlačidlo na zobrazenie zoznamu všetkých kníh spolu s ich stavom. Pomocou správcu balíkov usporiadajte prvky a pridajte výplň.

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)

Budovanie funkčnosti systému požičiavania kníh

Definujte metódu, pridať_knihu(). Extrahujte obsah miniaplikácie vstupu a pridajte ho do zoznamu kníh. V slovníku záznamov pridajte kľúč ako názov knihy a hodnotu ako pridané. Zobrazte okno so správou o úspechu s informáciou, že program úspešne pridal knihu. Vymazať obsah pridať_položku_knihy od začiatku do konca.

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 metódu, remove_book(). Extrahujte názov knihy a skontrolujte, či sa v nej nachádza knihy zoznam. Ak existuje, odstráňte ho a jeho záznam zo slovníka. Po dokončení zobrazte okno so správou o úspechu, ktorá informuje, že program knihu odstránil. V opačnom prípade sa zobrazí okno s chybovým hlásením, že kniha sa nenašla. Vymažte vstup remove_book_entry úplne.

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 metódu, issue_book(). Extrahujte názov knihy a skontrolujte, či existuje knihy zoznam. Ak áno, pripojte toto k zoznam_požičovní zoznam a odstráňte ho zo zoznamu kníh. Aktualizujte hodnotu knihy ako vydané. V opačnom prípade sa zobrazí okno s chybovým hlásením, že kniha sa nenašla. Vyčistite 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 metódu, return_book(). Extrahujte názov a skontrolujte, či existuje v súbore zoznam_požičovní zoznam. Ak áno, odstráňte ho a pripojte ho späť do zoznamu kníh a aktualizujte hodnotu v zázname tak, ako bola vrátená. Zobrazte okno so správou o úspechu, v ktorej sa uvádza, že osoba vrátila knihu.

Ak názov existuje v zozname kníh a stav záznamu je načítaný pridané, zobrazí okno s chybovým hlásením, že osoba nemôže vrátiť knihu, pretože ju nikto nevydal. V opačnom prípade sa zobrazí okno s chybovým hlásením, že kniha sa nenašla.

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 metódu, zobraziť_knihy(). Inicializujte správu premenná ako prázdna. Zostavte správu tak, aby vykonala interpoláciu reťazca a zobrazila názov kníh spolu s ich stavom. Ak je správa prázdna, nie sú k dispozícii žiadne knihy. Zobrazte zodpovedajúci výstup v okne sprá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)

Vytvorte inštanciu triedy a spustite Tkinter mainloop() počúvať udalosti, kým nezavriete okno. Použite na __name__ == "__main__" idiom spustiť program.

defrun(self):
self.master.mainloop()

if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()

Príklad výstupu systému požičiavania kníh

Pri spustení programu vás privíta obrazovka registrácie/prihlásenia. Po zadaní poverení a kliknutí na Registrovať tlačidlo, program vás pridá ako knihovníka. Zadanie rovnakých poverení a zasiahnutie Prihlásiť sa vás presmeruje na obrazovku správy.

Po zadaní názvu knihy a stlačení Pridať knihu program zobrazí hlásenie, že knihu úspešne pridal. Ak kliknete na tlačidlo problém, vrátiť alebo odstrániť, program počas aktualizácie stavu zobrazí príslušné okno so správou.

Po kliknutí na Zobraziť knihy program zobrazí názvy kníh spolu s ich stavom. Ak odstránite knihu, program vymaže názov a nebudete si ju môcť prezerať.

V prípade, že sa pokúsite vrátiť knihu bez toho, aby ste ju vydali, alebo knihu odobrať, kým bola vydaná, program zobrazí okno s chybovým hlásením.

Vylepšenie aplikácie na požičiavanie kníh

Táto implementácia je základom pre vybudovanie bezpečnej GUI aplikácie na produkčnej úrovni. Jeho funkčnosť môžete vylepšiť implementáciou overovania vstupu pomocou hašib na ukladanie hesiel, implementáciu správneho spracovania chýb a pridanie perzistencie údajov do databázy.

Okrem toho by ste mali implementovať úrovne autentifikácie používateľov s rôznymi úrovňami prístupu pre čitateľov, knihovníkov a správcov. Môžete pridať funkciu vyhľadávania na vyhľadávanie kníh a uľahčenie prístupu.