if __name__ == '__main__':
db = LibraryDB('library.db')
while True:
print("\n" + "="*30)
print("МЕНЮ БИБЛИОТЕКИ")
print("1. Зарегистрировать читателя")
print("2. Добавить книгу в каталог")
print("3. Добавить физический экземпляр (приёмка)")
print("4. Выдать книгу")
print("5. Оформить возврат")
print("6. Показать должников")
print("0. Выйти")
print("="*30)
choice = input("Выберите действие (введите цифру): ")
try:
if choice == '1':
name = input("Введите ФИО читателя: ")
phone = input("Введите номер телефона: ")
reader_id = db.add_reader(name, phone)
print(f" Читатель зарегистрирован! Его ID: {reader_id}")
elif choice == '2':
title = input("Название книги: ")
author = input("Автор: ")
year = int(input("Год издания (число): "))
book_id = db.add_book(title, author, year)
print(f" Книга добавлена в каталог! ID книги: {book_id}")
elif choice == '3':
book_id = int(input("ID книги из каталога: "))
inv_num = input("Инвентарный номер (например, INV-100): ")
copy_id = db.add_copy(book_id, inv_num)
print(f" Экземпляр добавлен! ID экземпляра: {copy_id}")
elif choice == '4':
copy_id = int(input("ID выдаваемого экземпляра: "))
reader_id = int(input("ID читателя: "))
days = int(input("На сколько дней выдать? (по умолчанию 14): ") or 14)
db.issue_copy(copy_id, reader_id, days)
# Сообщение об успехе выведет сам метод issue_copy
elif choice == '5':
copy_id = int(input("ID возвращаемого экземпляра: "))
db.return_copy(copy_id)
elif choice == '6':
debtors = db.get_debtors()
if not debtors:
print(" Должников нет!")
else:
print("\n--- СПИСОК ДОЛЖНИКОВ ---")
for d in debtors:
print(f" {d['full_name']} ({d['phone']})")
print(f" Задержал: «{d['title']}» (инв. {d['inventory_number']})")
print(f" Должен был сдать: {d['due_date']}\n")
elif choice == '0':
print("Выход из программы. До свидания!")
break
else:
print(" Неизвестная команда. Попробуйте еще раз.")
except ValueError as ve:
# Отлавливаем ошибки, если вместо числа ввели букву
print(f" Ошибка ввода: Пожалуйста, вводите числа там, где требуются ID или год. ({ve})")
except sqlite3.IntegrityError as ie:
# Отлавливаем дубликаты (например, одинаковый телефон или инвентарный номер)
print(f" Ошибка базы данных: Запись уже существует или нарушена связь. ({ie})")
except Exception as e:
# Ловим логические ошибки из наших методов (например, книга уже выдана)
print(f" Ошибка: {e}")
# Обязательно закрываем соединение при выходе из цикла
db.close()