Sledite tej vadnici, če želite izvedeti, kako zgraditi osnovno aplikacijo za upravljanje podatkov s preprostim vmesnikom GUI.

Sistem izposoje knjig je zelo priročen način za knjižničarje, da upravljajo inventar in dejavnosti izposoje. Ta preprosta aplikacija je idealna za majhne in velike knjižnice, skupnostne centre, knjižne klube in celo za vašo osebno zbirko knjig.

S pisanjem vzorčne aplikacije se boste naučili, kako zgraditi aplikacijo GUI za več platform, kako uporabiti razrede in predmete za modeliranje entitet in kako modularizirati svoje programe.

Namestitev Tkinterja in izdelava zaslona za prijavo/registracijo uporabnika

Za izgradnjo sistema izposoje knjig boste uporabili Tkinter. Tkinter je standardna knjižnica GUI za namizne aplikacije Python. Če ga želite namestiti, vnesite v terminal:

pip install tkinter

Tu lahko najdete celotno izvorno kodo za izgradnjo sistema izposoje knjig za knjižnice Repozitorij GitHub.

Uvozite zahtevane module in definirajte razred, Sistem izposoje knjig. Definirajte metodo konstruktorja za razred in inicializirajte korensko okno, nastavite naslov, dimenzije in barvo ozadja aplikacije. Določite dva seznama,

knjige in lend_list, ki jih boste uporabili za shranjevanje naslovov knjig in tistih, ki so si jih ljudje izposodili.

Določite slovar, zapis, ki jih lahko uporabite za posodobitev stanja knjig. Uporabi setup_gui() metoda za ustvarjanje grafičnega uporabniškega vmesnika in inicializacijo praznega seznama, knjižničarji, ki ga boste uporabili za shranjevanje poverilnic.

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 = []

Določite metodo, setup_gui(). Za zaslon za registracijo/prijavo boste ustvarili tri imenovane oznake prijavna_oznaka, uporabniško ime_oznaka, in oznaka_gesla. Za vsako oznako določite nadrejeni element, v katerega jo želite postaviti, besedilo, ki naj bo prikazano, slog pisave, ki naj ga ima, skupaj z barvo pisave.

Skupaj z oznakami morate ustvariti dva vnosna gradnika z imenom uporabniško_ime_vnos in geslo_vnos pridobiti in shraniti poverilnice knjižničarja. Lahko zgradite a preverjalnik gesel za testiranje varnosti vašega gesla s Pythonom. Uporabi paket upravitelja, da organizira vse te pripomočke in doda ustrezno oblazinjenje za vizualno privlačnost.

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

Določite metodo, Vpiši se(). Uporabi dobiti () metodo na gradniku za vnos, da izvlečete vrednost poverilnic, ki jih je vnesel knjižničar. Preglejte seznam knjižničarjev in preverite, ali se uporabniško ime in geslo ujemata z vnesenimi vrednostmi. Če da, počistite vnesene vrednosti od začetka do konca. Uničite vse pripomočke, ki ste jih ustvarili, in pokličite book_management_screen() način za prikaz zaslona upravljanja sistema za izposojo knjig.

V nasprotnem primeru so poverilnice za prijavo napačne ali pa se knjižničar ni registriral. Prikažite ustrezno sporočilo prek gradnika Tkinterjevega sporočilnega polja. V primeru, da želite šifrirajte svoje geslo, namestite 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.")

Določite metodo, register(). Izvlecite vrednost poverilnic, ki jih vnese knjižničar, jih dodajte na knjižničarjev seznam in popolnoma počistite vnose.

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)

Določite metodo, book_management_screen(). Ustvarite štiri oznake z imenom add_book_label, povratna_knjižna_oznaka, odstraniti_oznako_knjige, in oznaka_knjige_izdaje. Ustvarite štiri vnose in štiri gumbe, ki ustrezajo tem oznakam, in še en gumb za ogled seznama vseh knjig skupaj z njihovim stanjem. Z upraviteljem paketov organizirajte elemente in dodajte nekaj oblazinjenja.

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)

Izgradnja funkcionalnosti sistema izposoje knjig

Določite metodo, add_book(). Ekstrahirajte vsebino pripomočka za vnos in jo dodajte na seznam knjig. V slovarju zapisa dodajte ključ kot naslov knjige in vrednost kot dodano. Prikažite okno s sporočilom o uspehu, ki sporoča, da je program uspešno dodal knjigo. Počistite vsebino add_book_entry od začetka 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)

Določite metodo, odstrani_knjigo(). Izvlecite naslov knjige in preverite, ali je prisoten v knjige seznam. Če obstaja, ga odstranite in njegov zapis iz slovarja. Ko končate, prikažite okno s sporočilom o uspehu, ki vas obvesti, da je program odstranil knjigo. V nasprotnem primeru se prikaže polje s sporočilom o napaki, ki pravi, da knjige ni bilo mogoče najti. Počisti vnos za odstrani_knjižni_vnos popolnoma.

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)

Določite metodo, izdaja_knjige(). Izvlecite naslov knjige in preverite, ali obstaja v knjige seznam. Če da, to pripnite k lend_list in jo odstranite s seznama knjig. Posodobite vrednost knjige kot izdala. V nasprotnem primeru se prikaže polje s sporočilom o napaki, ki pravi, da knjige ni bilo mogoče najti. Počistite vsebino izdaja_knjiga_vnos().

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)

Določite metodo, vrni_knjigo(). Izvlecite naslov in preverite, ali obstaja v lend_list seznam. Če da, ga odstranite in pripnite nazaj na seznam knjig ter posodobite vrednost v zapisu, kot je vrnjeno. Prikažite okno s sporočilom o uspehu, ki navaja, da je oseba vrnila knjigo.

Če naslov obstaja v seznamu knjig in se glasi status zapisa dodanoprikaže polje s sporočilom o napaki, ki pravi, da oseba ne more vrniti knjige, ker je ni nihče izdal. V nasprotnem primeru se prikaže polje s sporočilom o napaki, ki pravi, da knjige ni mogoče najti.

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)

Določite metodo, ogled_knjig(). Inicializirajte sporočilo spremenljivka kot prazna. Sestavite sporočilo za izvedbo interpolacije nizov in prikaz naslovov knjig skupaj z njihovim stanjem. Če je sporočilo prazno, ni na voljo nobene knjige. Prikažite ustrezen izhod v sporočilnem polju.

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)

Ustvarite primerek razreda in zaženite Tkinter glavna zanka() da poslušate dogodke, dokler ne zaprete okna. Uporaba the __ime__ == "__glavni__" idiom za zagon programa.

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

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

Primer izhoda sistema izposoje knjig

Ko zaženete program, vas pozdravi z registracijskim/prijavnim zaslonom. Ko vnesete poverilnice in kliknete Registrirajte se gumb, vas program doda kot knjižničarja. Vnos istih poverilnic in udarjanje Vpiši se vas bo preusmeril na zaslon za upravljanje.

Ko vnesete naslov knjige in pritisnete Dodaj knjigo, program prikaže okno s sporočilom, da je knjigo uspešno dodal. Če kliknete gumb za težavo, vrnitev ali odstranitev, program med posodabljanjem statusa prikaže ustrezno sporočilo.

Ob kliku na Ogled knjig program prikaže naslove knjig skupaj z njihovim statusom. Če odstranite knjigo, program izbriše naslov in si je ne morete ogledati.

V primeru, da poskušate vrniti knjigo, ne da bi jo izdali, ali odstranite knjigo, medtem ko je bila izdana, program prikaže polje s sporočilom o napaki.

Izboljšanje aplikacije za izposojo knjig

Ta izvedba je temelj za gradnjo varne aplikacije GUI na produkcijski ravni. Njegovo funkcionalnost lahko izboljšate z implementacijo preverjanja vnosa z uporabo hashlib za shranjevanje gesel, izvajanje pravilne obravnave napak in dodajanje obstojnosti podatkov z bazo podatkov.

Poleg tega bi morali uvesti ravni avtentikacije uporabnikov z različnimi stopnjami dostopa za bralce, knjižničarje in skrbnike. Dodate lahko funkcijo iskanja za iskanje knjig in lažji dostop do njih.