Приложение предоставляет простой консольный интерфейс для работы с библиотекой. В меню верхнего уровня присутствуют 5 операций. Нажатие соответствующей цифры сразу же активирует функцию (без нажатия ENTER).
1 - SELECT, 2 - INSERT, 3 - UPDATE, 4 - DELETE, 5 - EXIT
Дополнительно предлагается ввести первые буквы названия книги. Выводимые результаты будут соответственно отфильтрованы. Если ввести пустую строку (просто ENTER) - показываются все книги. В результатах присуствуют колонки id
- идентификатор книги, title
- название книги. Идентификатор потребуется для использования в других операциях (UPDATE, DELETE). После названия каждой книги выводится список ее авторов.
SELECT:
Enter the first letters of book's title, or nothing (all books)
> Р
5 Робинзон Крузо - Даниэл Дефо
13 Русские народные сказки -
18 Руслан и Людмила - Пушкин Александр Сергеевич
Запрос для выборки:
select b.id, b.title, GROUP_CONCAT(a.name, ', ') au from books b
left join lnk_books_authors l on b.id = l.book_id
left join authors a on l.author_id = a.id
where b.title like :title
group by b.id, b.title";
Добавить новую книгу в библиотеку. Сначала предлагается ввести название книги, потом автора. Можно ввести несколько авторов, разделяя их имена запятыми. Каждый из этих авторов будет связан с книгой. Если имя автора уже есть в таблице - используется существующий идентификатор, в противном случае добавляется новый автор.
INSERT:
Enter book title
> Алгебра 9 кл.
Coma separated list of authors
> Мерзляк, Полонский, Якир
1 was added
При вводе пустого название (ENTER) происходит возврат в главное меню и новая книга не добавляется. Возможен пустой список авторов.
Редактирование названия книги и списка авторов. Требуется ввести идентификатор книги для редактирования, потом новое название. Если книга не найдена (ошибочный идентификатор) сразу возвращаемся в меню. Пустой ввод оставляет название без изменений.
После ввода нового названия предлагается ввести изменения в список авторов. Введите список дополнительных авторов, разделяя их имена запятыми. Если автора требуется удалить из списка, поставьте знак -
перед именем. Минусование отсутствующих авторов не оказывает никакого эффекта.
UPDATE:
Enter book number for update
> 19
Title: Наследник из калькуты
Enter new book's title
> Наследник из Калькутты
1 Book name was updated
Authors: Штильмарк, Василевский
Coma separater lisn for add (<name>) or delete ( -<name> )
> -Штильмарк, -Василевский, Роберт Штильмарк
Authors add: 1; delete: 2
Удаление книги. Требуется ввести идентификатор книги. Вместе с книгой каскадно удаляются и все записи из связующей таблицы.
DELETE:
Enter book's number to delete
> 19
1 was deleted
Выход из приложения.
В файловой базе данных SQLite хранятся данные о книгах и авторах.
Таблицы:
- books
- authors
- lnk_books_authors
CREATE TABLE [books](
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[title] VARCHAR NOT NULL);
CREATE TABLE [authors](
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[name] VARCHAR NOT NULL);
CREATE TABLE [lnk_books_authors](
[book_id] INTEGER REFERENCES [books]([id]) ON DELETE CASCADE,
[author_id] INTEGER REFERENCES [authors]([id]) ON DELETE CASCADE,
PRIMARY KEY([book_id], [author_id]));
Таблица lnk_books_authors
служит для связи "многие ко многим" между книгами и авторами.
Файл SQLite базы данных должен иметь имя books.db
, однако полный путь к этому файлу жестко не задан. Программа будет искать базу сначала в текущем каталоге, если не найдет - на уровень выше, потом еще выше, и так до корневой директории. При запуске показывается полный путь к используемой базе данных, например:
Using database file: D:\Projects\books\books.db
В то время как текущий каталог приложения здесь d:\Projects\books\bin\Debug\
Если файл books.db
не найден, программа завершается с ошибкой.