Ακολουθήστε αυτό το σεμινάριο για να μάθετε πώς να δημιουργείτε μια βασική εφαρμογή διαχείρισης δεδομένων με μια απλή διεπαφή GUI.

Ένα σύστημα δανεισμού βιβλίων είναι ένας εξαιρετικά βολικός τρόπος για τους βιβλιοθηκονόμους να διαχειρίζονται δραστηριότητες απογραφής και δανεισμού. Αυτή η απλή εφαρμογή είναι ιδανική για μικρές έως μεγάλες βιβλιοθήκες, κοινοτικά κέντρα, λέσχες βιβλίων, ακόμα και για την προσωπική σας συλλογή βιβλίων.

Γράφοντας το δείγμα εφαρμογής, θα μάθετε πώς να δημιουργείτε μια εφαρμογή GUI για πολλές πλατφόρμες, πώς να χρησιμοποιείτε κλάσεις και αντικείμενα για μοντελοποίηση οντοτήτων και πώς να διαμορφώνετε τα προγράμματά σας.

Εγκατάσταση του Tkinter και δημιουργία της οθόνης σύνδεσης/εγγραφής χρήστη

Για να δημιουργήσετε το σύστημα δανεισμού βιβλίων, θα χρησιμοποιήσετε το Tkinter. Το Tkinter είναι η τυπική βιβλιοθήκη GUI για εφαρμογές επιφάνειας εργασίας Python. Για να το εγκαταστήσετε, πληκτρολογήστε στο τερματικό:

pip install tkinter

Μπορείτε να βρείτε ολόκληρο τον πηγαίο κώδικα για τη δημιουργία ενός συστήματος δανεισμού βιβλίων για βιβλιοθήκες σε αυτό

Αποθετήριο GitHub.

Εισαγάγετε τις απαιτούμενες ενότητες και ορίστε μια κλάση, Σύστημα Δανεισμού Βιβλίων. Καθορίστε μια μέθοδο κατασκευής για την κλάση και αρχικοποιήστε το ριζικό παράθυρο, ορίζοντας τον τίτλο, τις διαστάσεις και το χρώμα φόντου της εφαρμογής. Ορίστε δύο λίστες, βιβλία και lend_list, που θα χρησιμοποιήσετε για να αποθηκεύσετε τους τίτλους των βιβλίων και ποιους έχουν δανειστεί οι άνθρωποι.

Ορίστε ένα λεξικό, Ρεκόρ, που μπορείτε να χρησιμοποιήσετε για να ενημερώσετε την κατάσταση των βιβλίων. Χρησιμοποιήστε το 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, όνομα_χρήστη, και κωδικός_ετικέτας. Για κάθε ετικέτα, ορίστε το γονικό στοιχείο στο οποίο θέλετε να την τοποθετήσετε, το κείμενο που πρέπει να εμφανίζεται, το στυλ γραμματοσειράς που πρέπει να έχει μαζί με το χρώμα της γραμματοσειράς.

Μαζί με τις ετικέτες, πρέπει να δημιουργήσετε δύο γραφικά στοιχεία καταχώρισης με το όνομα όνομα_χρήστη και κωδικός_καταχώρησης για να λάβετε και να αποθηκεύσετε τα διαπιστευτήρια του βιβλιοθηκονόμου. Μπορείτε να φτιάξετε ένα έλεγχος κωδικού πρόσβασης για να ελέγξετε την ασφάλεια του κωδικού πρόσβασής σας με την Python. Χρησιμοποιήστε το πακέτο διαχειριστή για να οργανώσει όλα αυτά τα γραφικά στοιχεία και να προσθέσει το κατάλληλο padding για οπτική εμφάνιση.

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, επιστροφή_βιβλίου_ετικέτα, 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)

Ορίστε μια μέθοδο, issue_book(). Εξάγετε τον τίτλο του βιβλίου και ελέγξτε αν υπάρχει στο βιβλία λίστα. Εάν ναι, προσαρτήστε το στο lend_list λίστα και αφαιρέστε το από τη λίστα βιβλίων. Ενημερώστε την αξία του βιβλίου ως εκδόθηκε. Διαφορετικά, εμφανίστε ένα πλαίσιο μηνύματος σφάλματος που λέει ότι το βιβλίο δεν βρέθηκε. Διαγράψτε τα περιεχόμενα του 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)

Ορίστε μια μέθοδο, return_book(). Εξάγετε τον τίτλο και ελέγξτε αν υπάρχει στο 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() για να ακούσετε συμβάντα μέχρι να κλείσετε το παράθυρο. Χρήση ο __όνομα__ == "__κύριος__" ιδίωμα για να τρέξετε το πρόγραμμα.

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

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

Παράδειγμα Εξόδου του Συστήματος Δανεισμού Βιβλίων

Κατά την εκτέλεση του προγράμματος, σας καλωσορίζει με μια οθόνη εγγραφής/σύνδεσης. Όταν εισάγετε τα διαπιστευτήρια και κάνετε κλικ στο Κανω ΕΓΓΡΑΦΗ κουμπί, το πρόγραμμα σας προσθέτει ως βιβλιοθηκάριο. Εισάγετε τα ίδια διαπιστευτήρια και χτυπάτε Σύνδεση θα σας πλοηγήσει στην οθόνη διαχείρισης.

Όταν εισάγετε τον τίτλο του βιβλίου και πατήσετε το Προσθήκη βιβλίου, το πρόγραμμα εμφανίζει ένα πλαίσιο μηνύματος ότι πρόσθεσε το βιβλίο με επιτυχία. Εάν κάνετε κλικ στο κουμπί ζητήματος, επιστροφής ή κατάργησης, το πρόγραμμα εμφανίζει το κατάλληλο πλαίσιο μηνύματος κατά την ενημέρωση της κατάστασης.

Κάνοντας κλικ στο Προβολή Βιβλίων κουμπί, το πρόγραμμα εμφανίζει τον τίτλο των βιβλίων μαζί με την κατάστασή τους. Εάν αφαιρέσετε ένα βιβλίο, το πρόγραμμα διαγράφει τον τίτλο και δεν μπορείτε να το προβάλετε.

Σε περίπτωση που προσπαθήσετε να επιστρέψετε ένα βιβλίο χωρίς να το εκδώσετε ή να αφαιρέσετε ένα βιβλίο κατά την έκδοση, το πρόγραμμα εμφανίζει ένα πλαίσιο μηνύματος σφάλματος.

Βελτίωση της εφαρμογής δανεισμού βιβλίων

Αυτή η υλοποίηση αποτελεί τη βάση για τη δημιουργία μιας ασφαλούς εφαρμογής GUI σε επίπεδο παραγωγής. Θα μπορούσατε να βελτιώσετε τη λειτουργικότητά του εφαρμόζοντας επικύρωση εισόδου, χρησιμοποιώντας hashlib για την αποθήκευση κωδικών πρόσβασης, την εφαρμογή του κατάλληλου χειρισμού σφαλμάτων και την προσθήκη διατήρησης δεδομένων με μια βάση δεδομένων.

Εκτός από αυτό, θα πρέπει να εφαρμόσετε επίπεδα ελέγχου ταυτότητας χρήστη με διαφορετικά επίπεδα πρόσβασης για αναγνώστες, βιβλιοθηκονόμους και διαχειριστές. Μπορείτε να προσθέσετε λειτουργίες αναζήτησης για την αναζήτηση βιβλίων και να διευκολύνετε την πρόσβαση.