Python programlama dili ile Kütüphane takip uygulaması yazmak için aşağıdaki adımları takip edebiliriz:
- Veri Modeli Oluşturma: Öğrenciler ve kitaplar için veri modelleri oluşturacağız.
- İşlevler Tanımlama: Kitap ödünç alma, kitap iade etme ve süresi geçen kitapları kontrol etme işlevlerini tanımlayacağız.
- Bildirim Sistemi: Süresi geçen kitaplar için öğrencilere bildirim gönderme işlevini ekleyeceğiz.
Ayrıca Tkinter kullanarak bu uygulamanın grafiksel bir arayüzünü (GUI) oluşturabiliriz. Ekran görüntüsü aşağıda gösterilmektedir.
![](https://tasarladik.com/wp-content/uploads/2024/05/image-1.png)
Kod bloğu aşağıda verilmektedir.
import tkinter as tk
from tkinter import messagebox
from datetime import datetime, timedelta
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
self.is_borrowed = False
class Student:
def __init__(self, student_id, name):
self.student_id = student_id
self.name = name
self.borrowed_books = {}
class Library:
def __init__(self):
self.books = []
self.students = []
self.borrowed_books = {}
def add_book(self, book):
self.books.append(book)
def add_student(self, student):
self.students.append(student)
def borrow_book(self, student_id, book_title):
student = next((s for s in self.students if s.student_id == student_id), None)
book = next((b for b in self.books if b.title == book_title and not b.is_borrowed), None)
if student and book:
book.is_borrowed = True
due_date = datetime.now() + timedelta(days=30)
student.borrowed_books[book_title] = due_date
self.borrowed_books[book_title] = (student_id, due_date)
messagebox.showinfo("Başarılı", f"{book_title} kitabı {student.name} adlı öğrenciye {due_date.strftime('%Y-%m-%d')} tarihine kadar ödünç verildi.")
else:
messagebox.showerror("Hata", "Kitap mevcut değil veya öğrenci bulunamadı.")
def return_book(self, student_id, book_title):
student = next((s for s in self.students if s.student_id == student_id), None)
if student and book_title in student.borrowed_books:
del student.borrowed_books[book_title]
book = next((b for b in self.books if b.title == book_title), None)
if book:
book.is_borrowed = False
del self.borrowed_books[book_title]
messagebox.showinfo("Başarılı", f"{book_title} kitabı iade edildi.")
else:
messagebox.showerror("Hata", "Kitap veya öğrenci bulunamadı.")
def check_overdue_books(self):
now = datetime.now()
overdue_books = [(title, info) for title, info in self.borrowed_books.items() if info[1] < now]
if overdue_books:
message = "\n".join([f"{title}: {due_date.strftime('%Y-%m-%d')} teslim tarihi geçmiş" for title, (student_id, due_date) in overdue_books])
messagebox.showwarning("Süresi Geçmiş Kitaplar", message)
else:
messagebox.showinfo("Bilgi", "Süresi geçmiş kitap yok.")
def list_borrowed_books(self):
borrowed_books_info = [f"{title} - Öğrenci ID: {info[0]}, Teslim Tarihi: {info[1].strftime('%Y-%m-%d')}" for title, info in self.borrowed_books.items()]
if borrowed_books_info:
message = "\n".join(borrowed_books_info)
else:
message = "Ödünç verilen kitap yok."
messagebox.showinfo("Ödünç Verilen Kitaplar", message)
library = Library()
# Tkinter GUI
root = tk.Tk()
root.title("Kütüphane Takip Uygulaması")
def add_book():
title = book_title_entry.get()
author = book_author_entry.get()
if title and author:
book = Book(title, author)
library.add_book(book)
messagebox.showinfo("Başarılı", "Kitap eklendi.")
else:
messagebox.showerror("Hata", "Lütfen tüm bilgileri doldurun.")
def add_student():
student_id = student_id_entry.get()
name = student_name_entry.get()
if student_id and name:
student = Student(student_id, name)
library.add_student(student)
messagebox.showinfo("Başarılı", "Öğrenci eklendi.")
else:
messagebox.showerror("Hata", "Lütfen tüm bilgileri doldurun.")
def borrow_book():
student_id = borrow_student_id_entry.get()
book_title = borrow_book_title_entry.get()
if student_id and book_title:
library.borrow_book(student_id, book_title)
else:
messagebox.showerror("Hata", "Lütfen tüm bilgileri doldurun.")
def return_book():
student_id = return_student_id_entry.get()
book_title = return_book_title_entry.get()
if student_id and book_title:
library.return_book(student_id, book_title)
else:
messagebox.showerror("Hata", "Lütfen tüm bilgileri doldurun.")
def check_overdue_books():
library.check_overdue_books()
def list_borrowed_books():
library.list_borrowed_books()
# Kitap ekleme
tk.Label(root, text="Kitap Ekle").grid(row=0, column=0, columnspan=2)
tk.Label(root, text="Kitap Başlığı").grid(row=1, column=0)
book_title_entry = tk.Entry(root)
book_title_entry.grid(row=1, column=1)
tk.Label(root, text="Yazar").grid(row=2, column=0)
book_author_entry = tk.Entry(root)
book_author_entry.grid(row=2, column=1)
tk.Button(root, text="Kitap Ekle", command=add_book).grid(row=3, column=0, columnspan=2)
# Öğrenci ekleme
tk.Label(root, text="Öğrenci Ekle").grid(row=4, column=0, columnspan=2)
tk.Label(root, text="Öğrenci ID").grid(row=5, column=0)
student_id_entry = tk.Entry(root)
student_id_entry.grid(row=5, column=1)
tk.Label(root, text="İsim").grid(row=6, column=0)
student_name_entry = tk.Entry(root)
student_name_entry.grid(row=6, column=1)
tk.Button(root, text="Öğrenci Ekle", command=add_student).grid(row=7, column=0, columnspan=2)
# Kitap ödünç alma
tk.Label(root, text="Kitap Ödünç Al").grid(row=8, column=0, columnspan=2)
tk.Label(root, text="Öğrenci ID").grid(row=9, column=0)
borrow_student_id_entry = tk.Entry(root)
borrow_student_id_entry.grid(row=9, column=1)
tk.Label(root, text="Kitap Başlığı").grid(row=10, column=0)
borrow_book_title_entry = tk.Entry(root)
borrow_book_title_entry.grid(row=10, column=1)
tk.Button(root, text="Kitap Ödünç Al", command=borrow_book).grid(row=11, column=0, columnspan=2)
# Kitap iade etme
tk.Label(root, text="Kitap İade Et").grid(row=12, column=0, columnspan=2)
tk.Label(root, text="Öğrenci ID").grid(row=13, column=0)
return_student_id_entry = tk.Entry(root)
return_student_id_entry.grid(row=13, column=1)
tk.Label(root, text="Kitap Başlığı").grid(row=14, column=0)
return_book_title_entry = tk.Entry(root)
return_book_title_entry.grid(row=14, column=1)
tk.Button(root, text="Kitap İade Et", command=return_book).grid(row=15, column=0, columnspan=2)
# Süresi geçen kitapları kontrol etme
tk.Button(root, text="Süresi Geçen Kitapları Kontrol Et", command=check_overdue_books).grid(row=16, column=0, columnspan=2)
# Ödünç verilen kitapları listeleme
tk.Button(root, text="Ödünç Verilen Kitapları Listele", command=list_borrowed_books).grid(row=17, column=0, columnspan=2)
root.mainloop()
Bu örnekte Tkinter ile arayüzünü oluşturduğumuz Kütüphane Takip programını yaptık. Burada herhangi bir veritabanı kullanılmamıştır. Verilerin sürekli olarak saklanması isteniliyorsa veri tabanı kullanılmalıdır.