Pratite ovaj vodič kako biste naučili kako izraditi osnovnu aplikaciju za upravljanje podacima s jednostavnim GUI sučeljem.
Sustav posudbe knjiga super je zgodan način za knjižničare da upravljaju inventarom i aktivnostima posudbe. Ova jednostavna aplikacija idealna je za male i velike knjižnice, društvene centre, književne klubove, pa čak i za vašu osobnu kolekciju knjiga.
Pišući primjer aplikacije, naučit ćete kako izgraditi višeplatformsku GUI aplikaciju, kako koristiti klase i objekte za modeliranje entiteta i kako modularizirati svoje programe.
Instaliranje Tkinter-a i izrada zaslona za prijavu/registraciju korisnika
Za izgradnju sustava posuđivanja knjiga, koristit ćete Tkinter. Tkinter je standardna GUI biblioteka za Python desktop aplikacije. Da biste ga instalirali, unesite u terminal:
pip install tkinter
Ovdje možete pronaći cijeli izvorni kod za izgradnju sustava za posuđivanje knjiga za knjižnice GitHub spremište.
Uvezite potrebne module i definirajte klasu, Sustav posudbe knjiga
. Definirajte metodu konstruktora za klasu i inicijalizirajte korijenski prozor, postavljajući naslov, dimenzije i boju pozadine aplikacije. Definirajte dvije liste, knjige i popis_pozajmica, koje ćete koristiti za pohranjivanje naslova knjiga i onih koje su ljudi posudili.Definirajte rječnik, snimiti, koje možete koristiti za ažuriranje statusa knjiga. Koristiti setup_gui() metoda za stvaranje grafičkog korisničkog sučelja i inicijaliziranje praznog popisa, knjižničari, koje ćete koristiti za pohranjivanje vjerodajnica.
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 = []
Definirajte metodu, setup_gui(). Za zaslon za registraciju/prijavu stvorit ćete tri nazivne oznake prijavna_oznaka, oznaka_username, i oznaka_lozinke. Za svaku oznaku definirajte nadređeni element u koji je želite smjestiti, tekst koji bi trebao prikazati, stil fonta koji bi trebao imati zajedno s bojom fonta.
Zajedno s oznakama morate izraditi dva widgeta za unos pod nazivom unos_korisničkog imena i unos_lozinke dobiti i pohraniti vjerodajnice knjižničara. Možete izgraditi a alat za provjeru lozinki za testiranje sigurnosti vaše lozinke s Pythonom. Koristiti paket upravitelja za organiziranje svih ovih widgeta i dodavanje odgovarajuće podloge za vizualnu 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
Definirajte metodu, prijaviti se(). Koristiti dobiti() metodu na widgetu za unos za izdvajanje vrijednosti vjerodajnica koje je unio knjižničar. Iterirajte po popisu knjižničara i provjerite odgovaraju li korisničko ime i lozinka unesenim vrijednostima. Ako da, obrišite vrijednosti unesene od početka do kraja. Uništite sve widgete koje ste izradili i pozovite ekran_za_upravljanje_knjigama() metoda za prikaz zaslona upravljanja sustavom posudbe knjiga.
U suprotnom vjerodajnice za prijavu nisu točne ili se knjižničar nije registrirao. Prikažite odgovarajuću poruku putem widgeta okvira za poruke Tkinter-a. U slučaju da želite šifrirajte svoju lozinku, instalirajte 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.")
Definirajte metodu, Registar(). Izdvojite vrijednost vjerodajnica koje knjižničar unese, dodajte ih na knjižničarev popis i potpuno izbrišite unose.
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)
Definirajte metodu, ekran_za_upravljanje_knjigama(). Stvorite četiri oznake s nazivom dodaj oznaku_knjige, povratna_oznaka_knjige, ukloniti_oznaku_knjige, i oznaka_knjige_izdanja. Stvorite četiri unosa i četiri gumba koji odgovaraju tim oznakama, te još jedan gumb za prikaz popisa svih knjiga zajedno s njihovim statusom. Upotrijebite upravitelja paketa da organizirate elemente i dodate podstavu.
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 sustava posudbe knjiga
Definirajte metodu, dodaj_knjigu(). Ekstrahirajte sadržaj widgeta za unos i dodajte ga na popis knjiga. U rječniku zapisa dodajte ključ kao naslov knjige i vrijednost kao dodao. Prikaži okvir s porukom o uspjehu koji govori da je program uspješno dodao knjigu. Obrišite sadržaj dodati_knjigu_upis od početka do kraja.
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)
Definirajte metodu, ukloni_knjigu(). Izdvojite naslov knjige i provjerite postoji li u knjige popis. Ako postoji, uklonite ga i njegov zapis iz rječnika. Kada završite, prikažite okvir s porukom o uspjehu koji vas obavještava da je program uklonio knjigu. U suprotnom, prikažite okvir s porukom o pogrešci u kojem piše da knjiga nije pronađena. Obrišite unos za ukloniti_upis_u_knjigu potpuno.
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)
Definirajte metodu, sveska_knjiga(). Izdvojite naslov knjige i provjerite postoji li u knjige popis. Ako da, dodajte ovo u popis_pozajmica popis i uklonite ga s popisa knjiga. Ažurirajte vrijednost knjige kao izdao. U suprotnom, prikažite okvir s porukom o pogrešci koji govori da knjiga nije pronađena. Obrišite sadržaj unos_u_knjižici().
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)
Definirajte metodu, povratna_knjiga(). Ekstrahirajte naslov i provjerite postoji li u popis_pozajmica popis. Ako da, uklonite ga i dodajte natrag na popis knjiga i ažurirajte vrijednost u zapisu kao što je vraćeno. Prikaži okvir s porukom o uspjehu koji navodi da je osoba vratila knjigu.
Ako naslov postoji u popisu knjiga i status zapisa glasi dodao, prikazati okvir s porukom o pogrešci koji kaže da osoba ne može vratiti knjigu jer je nitko nije izdao. U suprotnom, prikažite okvir s porukom o pogrešci koji govori da knjiga nije pronađena.
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)
Definirajte metodu, pogledaj_knjige(). Inicijalizirajte poruka varijabla kao prazna. Konstruirajte poruku za izvođenje interpolacije niza i prikaz naslova knjiga zajedno s njihovim statusom. Ako je poruka prazna, nema dostupnih knjiga. Prikažite odgovarajući izlaz u okviru s porukom.
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)
Napravite instancu klase i pokrenite Tkinter glavna petlja() za osluškivanje događaja dok ne zatvorite prozor. Koristiti the __ime__ == "__glavni__" idiom za pokretanje programa.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Primjer rezultata sustava posudbe knjiga
Prilikom pokretanja programa, pozdravlja vas ekranom za registraciju/prijavu. Kada unesete vjerodajnice i kliknete na Registar gumb, program vas dodaje kao knjižničara. Unos istih vjerodajnica i udaranje Prijaviti se odvest će vas do zaslona za upravljanje.
Kada unesete naslov knjige i pritisnete Dodaj knjigu, program prikazuje okvir s porukom da je uspješno dodao knjigu. Ako kliknete na gumb problem, povratak ili uklanjanje, program prikazuje odgovarajući okvir s porukom tijekom ažuriranja statusa.
Pritiskom na Pogledaj knjige gumb, program prikazuje naslove knjiga zajedno s njihovim statusom. Ako uklonite knjigu, program briše naslov i ne možete je vidjeti.
U slučaju da pokušate vratiti knjigu bez izdavanja ili uklanjanja knjige dok je izdana, program prikazuje okvir s porukom o pogrešci.
Unapređenje aplikacije za posudbu knjiga
Ova implementacija je temelj za izgradnju sigurne GUI aplikacije na razini proizvodnje. Njegovu funkcionalnost možete poboljšati implementacijom provjere valjanosti unosa pomoću hašlib za pohranjivanje lozinki, implementaciju odgovarajućeg rukovanja pogreškama i dodavanje postojanosti podataka u bazu podataka.
Osim toga, trebali biste implementirati razine autentifikacije korisnika s različitim razinama pristupa za čitatelje, knjižničare i administratore. Možete dodati funkciju pretraživanja za traženje knjiga i olakšati im pristup.