Загрузка данных


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()