Postępuj zgodnie z tym samouczkiem, aby dowiedzieć się, jak utworzyć podstawową aplikację do zarządzania danymi z prostym interfejsem GUI.

System wypożyczania książek to bardzo wygodny sposób zarządzania inwentarzem i wypożyczaniem dla bibliotekarzy. Ta prosta aplikacja jest idealna dla małych i dużych bibliotek, domów kultury, klubów książki, a nawet dla Twojej osobistej kolekcji książek.

Pisząc przykładową aplikację, dowiesz się, jak zbudować międzyplatformową aplikację GUI, jak używać klas i obiektów do modelowania encji oraz jak modularyzować swoje programy.

Instalowanie Tkintera i budowanie ekranu logowania/rejestracji użytkownika

Aby zbudować system wypożyczania książek, użyjesz Tkintera. Tkinter to standardowa biblioteka GUI dla aplikacji komputerowych Pythona. Aby go zainstalować, wpisz w terminalu:

pip install tkinter

W tym można znaleźć cały kod źródłowy budowy systemu wypożyczania książek dla bibliotek Repozytorium GitHub.

Zaimportuj wymagane moduły i zdefiniuj klasę, System wypożyczania książek

instagram viewer
. Zdefiniuj metodę konstruktora dla klasy i zainicjuj okno główne, ustawiając tytuł, wymiary i kolor tła aplikacji. Zdefiniuj dwie listy, książki I lista_pożyczek, których będziesz używać do przechowywania tytułów książek i książek, które ktoś pożyczył.

Zdefiniuj słownik, nagrywać, którego możesz użyć do zaktualizowania stanu książek. Użyj setup_gui() metoda tworzenia graficznego interfejsu użytkownika i inicjalizacji pustej listy, bibliotekarze, którego będziesz używać do przechowywania poświadczeń.

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

Zdefiniuj metodę, setup_gui(). Na ekranie rejestracji/logowania utworzysz trzy nazwane etykiety etykieta_logowania, nazwa_użytkownika_etykieta, I etykieta_hasła. Dla każdej etykiety zdefiniuj element nadrzędny, w którym chcesz ją umieścić, tekst, który ma wyświetlać, styl czcionki oraz kolor czcionki.

Wraz z etykietami musisz utworzyć dwa widżety wpisów o nazwach nazwa_użytkownika_wpis I wpis_hasła aby uzyskać i przechowywać dane uwierzytelniające bibliotekarza. Możesz zbudować narzędzie do sprawdzania haseł, aby przetestować bezpieczeństwo hasła w Pythonie. Użyj Pakiet menedżera, aby uporządkować wszystkie te widżety i dodać odpowiednie wypełnienie, aby uzyskać atrakcyjność wizualną.

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

Zdefiniuj metodę, Zaloguj sie(). Użyj Dostawać() metodę na widżecie wpisu, aby wyodrębnić wartość poświadczeń wprowadzonych przez bibliotekarza. Przejrzyj listę bibliotekarzy i sprawdź, czy nazwa użytkownika i hasło odpowiadają wprowadzonym wartościom. Jeśli tak, usuń wartości wprowadzone od początku do końca. Zniszcz wszystkie utworzone widżety i wywołaj ekran_zarządzania_książkami() metoda wyświetlania ekranu zarządzania systemem wypożyczania książek.

W przeciwnym razie dane logowania są nieprawidłowe lub bibliotekarz nie zarejestrował się. Wyświetl odpowiednią wiadomość za pomocą widżetu skrzynki wiadomości Tkintera. Jeśli chcesz zaszyfruj swoje hasło, zainstaluj moduł 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.")

Zdefiniuj metodę, rejestr(). Wyodrębnij wartość danych uwierzytelniających wprowadzonych przez bibliotekarza, dodaj je do listy bibliotekarzy i całkowicie wyczyść wpisy.

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)

Zdefiniuj metodę, ekran_zarządzania_książkami(). Utwórz cztery nazwane etykiety dodaj_etykietę_książki, etykieta_książki zwrotnej, usuń_etykietę_książki, I etykieta_książki_wydania. Utwórz cztery wpisy i cztery przyciski odpowiadające tym etykietom oraz kolejny przycisk, aby wyświetlić listę wszystkich książek wraz z ich statusem. Użyj menedżera pakietów, aby uporządkować elementy i dodać trochę wypełnienia.

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)

Budowa funkcjonalności systemu wypożyczania książek

Zdefiniuj metodę, add_book(). Wyodrębnij zawartość widżetu wpisu i dodaj ją do listy książek. W słowniku rekordów dodaj klucz jako tytuł księgi i wartość jako dodany. Wyświetl okno komunikatu o powodzeniu informujące, że program pomyślnie dodał książkę. Wyczyść zawartość pliku add_book_entry od początku do końca.

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)

Zdefiniuj metodę, usuń_książkę(). Wyodrębnij tytuł książki i sprawdź, czy jest on obecny w pliku książki lista. Jeśli istnieje, usuń go i jego zapis ze słownika. Po zakończeniu wyświetl okno komunikatu o sukcesie informujące, że program usunął książkę. W przeciwnym razie wyświetl komunikat o błędzie informujący, że książka nie została znaleziona. Wyczyść wpis usuń_wpis_książki całkowicie.

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)

Zdefiniuj metodę, wydanie_książki(). Wyodrębnij tytuł książki i sprawdź, czy istnieje w książki lista. Jeśli tak, dołącz to do lista_pożyczek liście i usuń ją z listy książek. Zaktualizuj wartość książki jako wydany. W przeciwnym razie wyświetl okno komunikatu o błędzie informujące, że książka nie została znaleziona. Wyczyść zawartość pliku wydanie_książki_wpis().

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)

Zdefiniuj metodę, zwrot_książki(). Wyodrębnij tytuł i sprawdź, czy istnieje w lista_pożyczek lista. Jeśli tak, usuń go i dołącz z powrotem do listy książek i zaktualizuj zwróconą wartość w rekordzie. Wyświetl okno komunikatu o powodzeniu informujące, że dana osoba zwróciła książkę.

Jeśli tytuł istnieje na liście książek, a status rekordu brzmi dodany, wyświetl okno z komunikatem o błędzie informującym, że dana osoba nie może zwrócić książki, ponieważ nikt jej nie wydał. W przeciwnym razie wyświetl okno komunikatu o błędzie informujące, że książka nie została znaleziona.

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)

Zdefiniuj metodę, wyświetl_książki(). Zainicjuj wiadomość zmienna jako pusta. Skonstruuj wiadomość, aby wykonać interpolację łańcucha i wyświetlić tytuły książek wraz z ich statusem. Jeśli wiadomość jest pusta, nie ma dostępnych książek. Wyświetl odpowiednie dane wyjściowe w oknie komunikatu.

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)

Utwórz instancję klasy i uruchom Tkinter główna pętla() nasłuchiwać zdarzeń do momentu zamknięcia okna. Używać the __nazwa__ == "__główny__" idiom aby uruchomić program.

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

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

Przykładowy wynik systemu wypożyczania książek

Po uruchomieniu programu wita Cię ekran rejestracji/logowania. Po wprowadzeniu poświadczeń i kliknięciu przycisku Rejestr przycisk, program doda Cię jako bibliotekarza. Wprowadzanie tych samych danych uwierzytelniających i uderzanie Zaloguj sie przekieruje Cię do ekranu zarządzania.

Po wprowadzeniu tytułu książki i naciśnięciu przycisku Dodaj książkę program wyświetla komunikat informujący o pomyślnym dodaniu książki. Jeśli klikniesz przycisk wydania, zwrotu lub usunięcia, program wyświetli odpowiednie okno komunikatu podczas aktualizacji statusu.

Po kliknięciu Zobacz książki program wyświetla tytuły książek wraz z ich statusem. Jeśli usuniesz książkę, program usunie jej tytuł i nie będziesz mógł jej przeglądać.

W przypadku próby zwrotu książki bez jej wydania lub usunięcia książki w trakcie wydawania, program wyświetli okno z komunikatem o błędzie.

Ulepszanie aplikacji do wypożyczania książek

Ta implementacja jest podstawą do zbudowania bezpiecznej aplikacji GUI na poziomie produkcyjnym. Możesz zwiększyć jego funkcjonalność, wdrażając sprawdzanie poprawności danych wejściowych, używając haszysz do przechowywania haseł, wdrażanie właściwej obsługi błędów i dodawanie trwałości danych z bazą danych.

Oprócz tego należy wdrożyć poziomy uwierzytelniania użytkowników z różnymi poziomami dostępu dla czytelników, bibliotekarzy i administratorów. Możesz dodać funkcję wyszukiwania, aby wyszukiwać książki i ułatwiać dostęp.