Пратите овај водич да бисте научили како да направите основну апликацију за управљање подацима са једноставним ГУИ фронтендом.

Систем позајмљивања књига је супер згодан начин за библиотекаре да управљају инвентаром и активностима позајмљивања. Ова једноставна апликација је идеална за мале и велике библиотеке, друштвене центре, књижарске клубове, па чак и за вашу личну колекцију књига.

Пишући пример апликације, научићете како да направите вишеплатформску ГУИ апликацију, како да користите класе и објекте за моделирање ентитета и како да модуларизујете своје програме.

Инсталирање Ткинтер-а и прављење екрана за пријаву/регистрацију корисника

Да бисте изградили систем позајмљивања књига, користићете Ткинтер. Ткинтер је стандардна ГУИ библиотека за Питхон десктоп апликације. Да бисте га инсталирали, унесите у терминал:

pip install tkinter

Овде можете пронаћи цео изворни код изградње система позајмљивања књига за библиотеке ГитХуб спремиште.

Увезите потребне модуле и дефинишите класу, БоокБорровингСистем

. Дефинишите метод конструктора за класу и иницијализујте основни прозор, постављајући наслов, димензије и боју позадине апликације. Дефинишите две листе, књиге и Ленд_лист, које ћете користити за чување наслова књига и оних које су људи позајмили.

Дефинишите речник, запис, који можете користити за ажурирање статуса књига. Користити сетуп_гуи() метод за креирање графичког корисничког интерфејса и иницијализацију празне листе, библиотекари, који ћете користити за чување акредитива.

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

Дефинишите метод, сетуп_гуи(). За екран за регистрацију/пријаву, креираћете три ознаке са именом логин_лабел, корисничко име_ознака, и лозинка_ознака. За сваку ознаку дефинишите родитељски елемент у који желите да га поставите, текст који треба да прикаже, стил фонта који треба да има заједно са бојом фонта.

Заједно са ознакама, потребно је да креирате два виџета за унос имена корисничко име_ентри и пассворд_ентри да добије и ускладишти акредитиве библиотекара. Можете изградити а провера лозинке да тестирате безбедност ваше лозинке помоћу Питхон-а. Користити паковање менаџера да организује све ове виџете и дода одговарајуће подлоге за визуелну привлачност.

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

Дефинишите метод, Пријавите се(). Користити добити() метод на виџету за унос за издвајање вредности акредитива које је унео библиотекар. Пређите преко листе библиотекара и проверите да ли се корисничко име и лозинка подударају са унетим вредностима. Ако јесте, обришите вредности унете од почетка до краја. Уништите све виџете које сте креирали и позовите боок_манагемент_сцреен() метода за приказ екрана управљања системом позајмљивања књига.

У супротном, акредитиви за пријаву су нетачни или се библиотекар није регистровао. Прикажите одговарајућу поруку преко виџета Ткинтеровог оквира за поруке. У случају да желите шифрујте своју лозинку, инсталирајте бцрипт модул.

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

Дефинишите метод, регистровати(). Извуците вредност акредитива које библиотекар унесе, додајте их на листу библиотекара и потпуно обришите уносе.

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)

Дефинишите метод, боок_манагемент_сцреен(). Направите четири ознаке са именом адд_боок_лабел, ретурн_боок_лабел, ремове_боок_лабел, и иссуе_боок_лабел. Направите четири уноса и четири дугмета која одговарају овим ознакама и још једно дугме да бисте видели листу свих књига заједно са њиховим статусом. Користите менаџер пакета да бисте организовали елементе и додали мало допуна.

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)

Изградња функционалности система позајмљивања књига

Дефинишите метод, адд_боок(). Извуците садржај виџета за унос и додајте га на листу књига. У речнику записа додајте кључ као наслов књиге и вредност као додао је. Прикажите оквир са поруком о успеху који говори да је програм успешно додао књигу. Обришите садржај адд_боок_ентри од почетка до краја.

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)

Дефинишите метод, уклони_књигу(). Извуците наслов књиге и проверите да ли је присутан у књиге листа. Ако постоји, уклоните га и његов запис из речника. Када завршите, прикажите оквир са поруком о успеху који обавештава да је програм уклонио књигу. У супротном, прикажите оквир са поруком о грешци да књига није пронађена. Обришите унос за ремове_боок_ентри у потпуности.

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)

Дефинишите метод, иссуе_боок(). Извуците наслов књиге и проверите да ли постоји у књиге листа. Ако јесте, додајте ово у Ленд_лист листу и уклоните је са листе књига. Ажурирајте вредност књиге као издата. У супротном, прикажите оквир са поруком о грешци да књига није пронађена. Обришите садржај иссуе_боок_ентри().

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)

Дефинишите метод, ретурн_боок(). Извуците наслов и проверите да ли постоји у Ленд_лист листа. Ако јесте, уклоните га и вратите га на листу књига и ажурирајте вредност у запису како је враћена. Прикажите оквир са поруком о успеху у којем се наводи да је особа вратила књигу.

Ако наслов постоји у списку књига и гласи статус записа додао је, приказати оквир са поруком о грешци да особа не може да врати књигу јер је нико није издао. У супротном, прикажите оквир са поруком о грешци да књига није пронађена.

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)

Дефинишите метод, виев_боокс(). Иницијализујте порука променљива као празна. Конструишите поруку да бисте извршили интерполацију низова и приказали наслове књига заједно са њиховим статусом. Ако је порука празна, нема доступних књига. Прикажите одговарајући излаз у оквиру за поруке.

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)

Креирајте инстанцу класе и покрените Ткинтер маинлооп() да слушате догађаје док не затворите прозор. Користите тхе __наме__ == "__маин__" идиом да покренете програм.

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

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

Пример резултата система позајмљивања књига

Када покренете програм, поздравља вас екраном за регистрацију/пријаву. Када унесете акредитиве и кликнете на Регистровати дугме, програм вас додаје као библиотекара. Уношење истих акредитива и ударање Пријавите се ће вас одвести до екрана за управљање.

Када унесете наслов књиге и притиснете Додај књигу, програм приказује оквир са поруком да је књигу успешно додао. Ако кликнете на дугме за проблем, повратак или уклањање, програм приказује одговарајући оквир са поруком док ажурира статус.

Кликом на Виев Боокс дугме, програм приказује наслове књига заједно са њиховим статусом. Ако уклоните књигу, програм брише наслов и не можете да је видите.

У случају да покушате да вратите књигу без издавања или уклањања књиге док је издата, програм приказује оквир са поруком о грешци.

Побољшање апликације за позајмљивање књига

Ова имплементација је основа за изградњу безбедне ГУИ апликације на нивоу производње. Можете побољшати његову функционалност имплементацијом валидације уноса, користећи хасхлиб за чување лозинки, имплементирање правилног руковања грешкама и додавање постојаности података бази података.

Осим тога, требало би да имплементирате нивое аутентификације корисника са различитим нивоима приступа за читаоце, библиотекаре и администраторе. Можете додати функцију претраживања да бисте претраживали књиге и олакшали приступ.