Book CRUD

Add, edit, and delete books from dialog windows backed by SQLite.

Goal for this part

Add toolbar actions to create, edit, and delete books through modal dialogs that write to SQLite.

Concepts: Toplevel dialogs

A Toplevel window with grab_set() acts like a modal dialog. Keep validation in the dialog; keep SQL in the main app methods. Refuse to delete a title that still has open loans.

How to run it and what you should see

Add a book, edit its title, then try deleting a title with open loans and confirm the app blocks it.