Følg denne veiledningen for å lære hvordan du bygger en grunnleggende databehandlingsapp med en enkel GUI-frontend.

Et boklånssystem er en super praktisk måte for bibliotekarer å administrere inventar og låneaktiviteter. Denne enkle appen er ideell for små til store biblioteker, samfunnshus, bokklubber og til og med for din personlige boksamling.

Når du skriver eksempelappen, vil du lære om hvordan du bygger en GUI-app på tvers av plattformer, hvordan du bruker klasser og objekter til å modellere enheter, og hvordan du modulariserer programmene dine.

Installere Tkinter og bygge brukerpåloggings-/registreringsskjermen

For å bygge boklånesystemet vil du benytte deg av Tkinter. Tkinter er standard GUI-biblioteket for Python-skrivebordsapplikasjoner. For å installere den, skriv inn terminalen:

pip install tkinter

Du finner hele kildekoden for å bygge et boklånssystem for biblioteker i denne GitHub-depot.

Importer de nødvendige modulene og definer en klasse, Boklånesystem. Definer en konstruktørmetode for klassen og initialiser rotvinduet, sett tittelen, dimensjonene og bakgrunnsfargen til applikasjonen. Definer to lister,

instagram viewer
bøker og utlånsliste, som du skal bruke til å lagre titlene på bøkene og hvilke folk har lånt.

Definer en ordbok, ta opp, som du kan bruke til å oppdatere statusen til bøkene. Bruke setup_gui() metode for å lage det grafiske brukergrensesnittet og initialisere en tom liste, bibliotekarer, som du vil bruke til å lagre legitimasjonen.

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

Definer en metode, setup_gui(). For registrerings-/påloggingsskjermen vil du opprette tre navngitte etiketter login_label, brukernavn_etikett, og password_label. For hver etikett definerer du det overordnede elementet du vil plassere det i, teksten den skal vise, skriftstilen den skal ha sammen med skriftfargen.

Sammen med etikettene må du opprette to oppføringswidgeter med navn brukernavn_oppføring og password_entry å hente og lagre legitimasjonen til bibliotekaren. Du kan bygge en passordkontroll for å teste passordsikkerheten din med Python. Bruke pakke manager for å organisere alle disse widgetene og legge til passende polstring for visuell appell.

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

Definer en metode, Logg Inn(). Bruke få() metode på oppføringswidgeten for å trekke ut verdien av legitimasjonen angitt av bibliotekaren. Gå gjennom listen over bibliotekarer og sjekk om brukernavnet og passordet samsvarer med verdiene som er angitt. Hvis ja, fjern verdiene som er angitt fra start til slutt. Ødelegg alle widgetene du har laget og ring book_management_screen() metode for å vise administrasjonsskjermen til boklånesystemet.

Ellers er påloggingsinformasjonen feil, eller bibliotekaren har ikke registrert seg. Vis den aktuelle meldingen via Tkinters meldingsbokswidget. I tilfelle du vil krypter passordet ditt, installer bcrypt-modulen.

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.")

Definer en metode, registrere(). Trekk ut verdien av legitimasjonen bibliotekaren legger inn, legg dem til bibliotekarens liste, og fjern oppføringene fullstendig.

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)

Definer en metode, book_management_screen(). Lag fire navngitte etiketter add_book_label, return_book_label, remove_book_label, og issue_book_label. Lag fire oppføringer og fire knapper som tilsvarer disse etikettene, og en annen knapp for å se listen over alle bøkene sammen med deres status. Bruk pakkebehandleren til å organisere elementene og legge til litt polstring.

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)

Bygge funksjonaliteten til boklånesystemet

Definer en metode, add_book(). Trekk ut innholdet i oppføringswidgeten og legg den til i boklisten. I postordboken legger du til nøkkelen som tittel på boken og verdien som la til. Vis en suksessmeldingsboks som forteller at programmet har lagt til boken. Fjern innholdet i add_book_entry fra start til slutt.

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)

Definer en metode, remove_book(). Trekk ut tittelen på boken og sjekk om den finnes i boken bøker liste. Hvis den finnes, fjern den og dens oppføring fra ordboken. Når du er ferdig, viser du en suksessmeldingsboks som informerer om at programmet har fjernet boken. Hvis ikke, vis en feilmeldingsboks som sier at boken ikke ble funnet. Fjern oppføringen av remove_book_entry helt.

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)

Definer en metode, issue_book(). Trekk ut tittelen på boken og sjekk om den finnes i bøker liste. Hvis ja, legg dette til utlånsliste listen og fjern den fra boklisten. Oppdater verdien av boken som utstedt. Hvis ikke, vis en feilmeldingsboks som sier at boken ikke ble funnet. Fjern innholdet i 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)

Definer en metode, return_book(). Trekk ut tittelen og sjekk om den finnes i utlånsliste liste. Hvis ja, fjern den og legg den til i boklisten og oppdater verdien i posten som returnert. Vis en suksessmeldingsboks som sier at personen har returnert boken.

Hvis tittelen finnes i boklisten og statusen til posten lyder la til, vis en feilmeldingsboks som sier at personen ikke kan returnere boken fordi ingen har utstedt den. Hvis ikke, vis en feilmeldingsboks som sier at boken ikke ble funnet.

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)

Definer en metode, view_books(). Initialiser beskjed variabel som tom. Konstruer meldingen for å utføre strenginterpolasjon og vise tittelen på bøkene sammen med deres status. Hvis meldingen er tom, er det ingen tilgjengelige bøker. Vis den tilsvarende utgangen i en meldingsboks.

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)

Lag en forekomst av klassen og kjør Tkinter mainloop() for å lytte etter hendelser til du lukker vinduet. Bruk de __navn__ == "__main__" formspråk for å kjøre programmet.

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

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

Eksempel på produksjon av boklånesystemet

Når du kjører programmet, hilser det deg med en registrerings-/påloggingsskjerm. Når du skriver inn legitimasjonen og klikker på Registrere knappen, legger programmet deg til som bibliotekar. Skriver inn samme legitimasjon og slår Logg Inn vil navigere deg til administrasjonsskjermen.

Når du skriver inn tittelen på boken og trykker på Legg til bok, viser programmet en meldingsboks om at den har lagt til boken. Hvis du klikker på problemet, returner eller fjern-knappen, viser programmet den aktuelle meldingsboksen mens statusen oppdateres.

Ved å klikke på Se bøker -knappen, viser programmet tittelen på bøkene sammen med deres status. Hvis du fjerner en bok, sletter programmet tittelen og du kan ikke se den.

I tilfelle du prøver å returnere en bok uten å utstede den eller fjerne en bok mens den er utstedt, viser programmet en feilmeldingsboks.

Forbedring av boklån-appen

Denne implementeringen er grunnlaget for å bygge en sikker GUI-applikasjon på produksjonsnivå. Du kan forbedre funksjonaliteten ved å implementere inndatavalidering ved å bruke hashlib å lagre passord, implementere riktig feilhåndtering og legge til datapersistens med en database.

Bortsett fra dette bør du implementere brukerautentiseringsnivåer med varierende tilgangsnivåer for lesere, bibliotekarer og administratorer. Du kan legge til søkefunksjonalitet for å søke etter bøker og gjøre det enklere å få tilgang.