تابع مع هذا البرنامج التعليمي لمعرفة كيفية إنشاء تطبيق أساسي لإدارة البيانات بواجهة أمامية بسيطة لواجهة المستخدم الرسومية.

يعد نظام استعارة الكتب طريقة مريحة للغاية لأمناء المكتبات لإدارة أنشطة المخزون والاقتراض. هذا التطبيق البسيط مثالي للمكتبات الصغيرة والكبيرة والمراكز المجتمعية ونوادي الكتب وحتى لمجموعة كتبك الشخصية.

عند كتابة نموذج التطبيق ، ستتعرف على كيفية إنشاء تطبيق واجهة المستخدم الرسومية عبر الأنظمة الأساسية ، وكيفية استخدام الفئات والكائنات لنمذجة الكيانات ، وكيفية تشكيل برامجك.

تثبيت Tkinter وبناء شاشة تسجيل دخول / تسجيل المستخدم

لبناء نظام استعارة الكتب ، سوف تستفيد من Tkinter. Tkinter هي مكتبة واجهة المستخدم الرسومية القياسية لتطبيقات سطح المكتب في Python. لتثبيته ، اكتب في Terminal:

pip install tkinter

يمكنك العثور على الكود المصدري الكامل لبناء نظام استعارة الكتب للمكتبات في هذا مستودع جيثب.

استيراد الوحدات المطلوبة وتحديد فئة ، نظام استعارة الكتب. تحديد طريقة منشئ للفئة وتهيئة نافذة الجذر ، وتحديد العنوان ، والأبعاد ، ولون الخلفية للتطبيق. تحديد قائمتين ، الكتب و lend_list، والتي ستستخدمها لتخزين عناوين الكتب وتلك التي استعارها الأشخاص.

instagram viewer

تحديد قاموس ، سِجِلّ، التي يمكنك استخدامها لتحديث حالة الكتب. استخدم ال setup_gui () طريقة لإنشاء واجهة مستخدم رسومية وتهيئة قائمة فارغة ، أمناء المكتبات، التي ستستخدمها لتخزين بيانات الاعتماد.

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

تحديد طريقة ، setup_gui (). بالنسبة لشاشة التسجيل / تسجيل الدخول ، ستقوم بإنشاء ثلاثة تسميات مسماة login_label, username_label، و password_label. لكل تسمية ، حدد العنصر الأصل الذي تريد وضعه فيه ، والنص الذي يجب أن يعرضه ، ونمط الخط الذي يجب أن يحتوي عليه مع لون الخط.

جنبًا إلى جنب مع التسميات ، تحتاج إلى إنشاء اثنين من أدوات الإدخال المسماة اسم المستخدم_الدخول و إدخال كلمة المرور للحصول على أوراق اعتماد أمين المكتبة وتخزينها. يمكنك بناء ملف مدقق كلمة المرور لاختبار أمان كلمة المرور الخاصة بك مع Python. استخدم ال علية مدير لتنظيم كل هذه الحاجيات وإضافة الحشو المناسب للنداء البصري.

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

تحديد طريقة ، تسجيل الدخول(). استخدم ال يحصل() على عنصر واجهة مستخدم الإدخال لاستخراج قيمة بيانات الاعتماد التي تم إدخالها بواسطة أمين المكتبة. كرر قائمة المكتبيين وتحقق مما إذا كان اسم المستخدم وكلمة المرور يتطابقان مع القيم التي تم إدخالها. إذا كانت الإجابة بنعم ، فامسح القيم التي تم إدخالها من البداية إلى النهاية. قم بتدمير جميع عناصر واجهة المستخدم التي قمت بإنشائها واستدعاء book_management_screen () طريقة عرض شاشة إدارة نظام استعارة الكتب.

وإلا ، فإن بيانات اعتماد تسجيل الدخول غير صحيحة ، أو لم يتم تسجيل أمين المكتبة. اعرض الرسالة المناسبة عبر أداة مربع رسائل Tkinter. في حال كنت ترغب في ذلك قم بتشفير كلمة المرور الخاصة بك ، قم بتثبيت وحدة 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.")

تحديد طريقة ، يسجل(). استخرج قيمة بيانات الاعتماد التي يدخلها أمين المكتبة ، وأضفها إلى قائمة أمين المكتبة ، وامسح الإدخالات تمامًا.

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)

تحديد طريقة ، book_management_screen (). قم بإنشاء أربع تسميات مسماة add_book_label, return_book_label, remove_book_label، و Issue_book_label. قم بإنشاء أربعة إدخالات وأربعة أزرار مقابلة لهذه الملصقات ، وزر آخر لعرض قائمة جميع الكتب جنبًا إلى جنب مع حالتها. استخدم مدير الحزم لتنظيم العناصر وإضافة بعض المساحة المتروكة.

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)

بناء وظيفة نظام استعارة الكتب

تحديد طريقة ، add_book (). قم باستخراج محتوى عنصر واجهة الإدخال وإضافته إلى قائمة الكتب. في قاموس التسجيلات ، أضف المفتاح كعنوان للكتاب والقيمة كـ مضاف. اعرض مربع رسالة تفيد بأن البرنامج قد أضاف الكتاب بنجاح. امسح محتوى add_book_entry من البداية الى النهاية.

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)

تحديد طريقة ، remove_book (). استخرج عنوان الكتاب وتحقق مما إذا كان موجودًا في الكتب قائمة. إذا كان موجودًا ، فقم بإزالته مع سجله من القاموس. بمجرد الانتهاء من ذلك ، اعرض مربع رسالة تفيد بأن البرنامج قد أزال الكتاب. بخلاف ذلك ، اعرض مربع رسالة خطأ يفيد بأنه لم يتم العثور على الكتاب. امسح دخول remove_book_entry بالكامل.

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)

تحديد طريقة ، الإصدار_الكتب (). استخرج عنوان الكتاب وتحقق مما إذا كان موجودًا في الكتب قائمة. إذا كانت الإجابة بنعم ، قم بإلحاق هذا بامتداد lend_list قم بإزالته من قائمة الكتب. قم بتحديث قيمة الكتاب كـ صادر. بخلاف ذلك ، اعرض مربع رسالة خطأ يفيد بأنه لم يتم العثور على الكتاب. امسح محتويات إصدار_ كتاب_الدخول ().

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)

تحديد طريقة ، كتاب عودة(). استخرج العنوان وتحقق مما إذا كان موجودًا في ملف lend_list قائمة. إذا كانت الإجابة بنعم ، فقم بإزالتها وإلحاقها مرة أخرى بقائمة الكتب وتحديث القيمة في السجل كما تم إرجاعها. اعرض مربع رسالة تفيد بأن الشخص قد أعاد الكتاب.

إذا كان العنوان موجودًا في قائمة الكتاب وتقرأ حالة السجل مضاف، اعرض مربع رسالة خطأ يفيد بأن الشخص لا يمكنه إعادة الكتاب لأنه لم يقم أحد بإصداره. بخلاف ذلك ، اعرض مربع رسالة خطأ يفيد بأن الكتاب غير موجود.

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)

تحديد طريقة ، view_books (). قم بتهيئة ملف رسالة متغير فارغ. قم ببناء الرسالة لإجراء استيفاء السلسلة وعرض عنوان الكتب مع حالتها. إذا كانت الرسالة فارغة ، فلا توجد كتب متاحة. اعرض الإخراج المطابق في مربع رسالة.

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)

قم بإنشاء مثيل للفئة وقم بتشغيل Tkinter mainloop () للاستماع إلى الأحداث حتى تغلق النافذة. يستخدم ال __name__ == "__main__" لغة. مثل لتشغيل البرنامج.

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

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

ناتج مثال لنظام استعارة الكتب

عند تشغيل البرنامج ، يرحب بك بشاشة تسجيل / تسجيل دخول. عند إدخال بيانات الاعتماد والنقر فوق يسجل زر ، البرنامج يضيفك كأمين مكتبة. إدخال نفس بيانات الاعتماد وضرب تسجيل الدخول سينقلك إلى شاشة الإدارة.

عند إدخال عنوان الكتاب والضغط على إضافة كتاب ، يعرض البرنامج مربع رسالة أنه أضاف الكتاب بنجاح. إذا قمت بالنقر فوق زر المشكلة أو الإرجاع أو الإزالة ، فسيعرض البرنامج مربع الرسالة المناسب أثناء تحديث الحالة.

عند النقر فوق ملف عرض الكتب ، يعرض البرنامج عنوان الكتب مع حالتها. إذا قمت بإزالة كتاب ، فإن البرنامج يحذف العنوان ولا يمكنك مشاهدته.

في حالة محاولة إرجاع كتاب دون إصداره أو إزالة كتاب أثناء إصداره ، يعرض البرنامج مربع رسالة خطأ.

تحسين تطبيق استعارة الكتب

يعد هذا التنفيذ أساسًا لبناء تطبيق واجهة مستخدم رسومية آمن على مستوى الإنتاج. يمكنك تحسين وظائفه من خلال تنفيذ التحقق من صحة الإدخال ، باستخدام هاشليب لتخزين كلمات المرور وتنفيذ المعالجة المناسبة للأخطاء وإضافة استمرارية البيانات بقاعدة بيانات.

بصرف النظر عن هذا ، يجب عليك تنفيذ مستويات مصادقة المستخدم بمستويات مختلفة من الوصول للقراء وأمناء المكتبات والمسؤولين. يمكنك إضافة وظيفة البحث للبحث عن الكتب وتسهيل الوصول إليها.