Вывод на экран каталога книг
Первоначально выполняется проверка на наличие книг в каталоге, и если каталог не пустой, то происходит вызов функции отвечающей за вывод на экран шаблона таблицы. После в цикле while происходит поэлементный вывод каталога. Если же каталог оказался пустым, то вывода на экран не произойдёт, а пользователя вернёт обратно в главное меню.
Удаление записи о книге
Для удобства выводится на экран каталог книг. Далее пользователя просят ввести место удаляемой книги. Осуществляется проверка на существование книги с таким место в базе. Если книга существует, то вызывается функция удаления книги. Если удаляемый элемент оказывается “головой” списка, то в этом случае этот элемент удаляется, следующий за ним становится новой “головой”:
if(previous == fisrt)
head = first->GetNext();
Если удаляемый элемент не является “головой”, то он удаляется, а его место занимает следующий за ним элемент:
else
previous->SetNext(first->GetNext());
Выдача и возврат книг
Данные функции были разработаны для исключения ситуаций потери книг, по забывчивости её владельца.
При выборе пункта меню “Выдача книг” вызывается соответствующая функция. Далее выводится каталог всех книг для более быстрого поиска нужной. Пользователю предлагается ввести место книги на выдачу. Если введённого места не существует, пользователю предлагается повторно его ввести и так до тех пор, пока не будет введено существующее в каталоге. Пользователю предлагается ввести имя человека, которому выдаётся книга и его email. Если данная книга уже выдана, то выводится соответствующее сообщение, а пользователя возвращает в главное меню.
При выборе пункта меню “Возврат книг” выводится каталог и предлагается пользователю ввести место книги, которая будет возвращена. Если книга не была выдана, то выведется соответствующее сообщение и пользователь будет возвращён в главное меню.
Сохранение базы данных книг
Чтобы избежать потери каталога при завершении работы была разработана функция сохранения базы книг в текстовом файле. Занесение осуществляется построчной записью полей каждой книги в файл:
year = to_string(dynamic_cast<Book*>(temp)->GetYear());
out << dynamic_cast<Book*>(temp)->GetTitle() << endl;
out << dynamic_cast<Book*>(temp)->GetAuthor() << endl;
out << dynamic_cast<Book*>(temp)->GetGenre() << endl;
out << year << endl;
out << temp->GetPlace() << endl;
out << temp->GetFio() << endl;
out << temp->GetEmail() << endl;
Такой способ работы с файлом предусматривает возможность замены поля книги при ошибке во введённых данных. Однако изменение расположения полей не предусматривается, так как это приведёт к некорректной работе программы.
Перемещение курсора в меню
Для выделения некоторого пункта меню объявлена специальная переменная. Зная коды основных клавиш, не составляет труда отловить их: «↑»(стрелка вверх) – код 80; «↓»(стрелка вниз) – код 72; enter – код 13. Поэтому при каждом нажатии клавиши, программа отлавливает нажатие с помощью функции _getch(). Нажатие стрелок вверх или вниз изменяет переменную, которая отвечает за то, какой пункт меню подсвечивать. Нажатие enter вызывает метод соответствующий подсвеченному меню.
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Данное приложение рассчитано в первую очередь на обычного пользователя, задумавшего систематизировать свою домашнюю библиотеку, поэтому будет полезно объяснить, как правильно работать с данным приложением.
Начнем с главного меню (рисунок 5.1).
Рисунок 5.1 – Главное меню программы.
Главное меню состоит из восьми пунктов, по которым легко понять за что они отвечают. Перемещение по меню происходит с помощью кнопок «↑» (стрелка вверх) и «↓» (стрелка вниз).
При выборе подпункта “Показать список книг в библиотеке” на экран выводится каталог книг, представленный в виде таблицы (рисунок 5.2).
Рисунок 5.2 – Вывод каталога книг на экран.
Подпункт “Добавить книгу” данного меню позволяет добавить запись о новой книге в каталог. Подпункт “Убрать книгу из библиотеки” предназначен для удаления ненужной записи пользователем.
Подпункт “Найти книгу” предназначен для поиска информации о нужной книге в каталоге по месту расположения (рисунок 5.3).
Рисунок 5.3 – Нахождение информации о нужной книге.
Подпункт “Выдать книгу” позволяет добавить запись о выдаче книги в каталог, при условии, что книга не была выдана ранее. Подпункт “Вернуть книгу” предназначен для удаления записи о выдаче книги в каталоге, если она была выдана.
Подпункт “Сортировать” предназначен для сортировки каталога по пяти различным полям (рисунок 5.4).
Рисунок 5.4 – Меню сортировки программы.
После выбора пользователем поля сортировки ему предлагается осуществить сортировку по возрастанию или убыванию (рисунок 5.5).
Рисунок 5.4 – Подменю сортировки программы.
Подпункт “Выход” предназначен для сохранения данных каталога в текстовом файле и завершении работы программы.
ТЕСТИРОВАНИЕ
Чтобы протестировать работоспособность приложения, нужно пройти по всем пунктам меню.
В процессе прохождения по всем пунктам меню, производилась проверка на различные типы возможных ошибок в программном коде. При выполнении программы данных ошибок выявлено не было. Связанно это с тем, что для каждого возможного варианта подобных ошибок, были созданы специализированные классы “exception”. В зависимости от возможной ошибки, программа вызывает метод класса, соответствующий данной ошибке. Были произведены тесты, включающие в себя запуск программы без файла базы данных, запуск программы с пустым списком, ввод некорректного года издания, попытка ввода несуществующего места расположения книги в каталоге. Ко всем тестам программа была устойчива. Также было проведено тестирование быстродействия программы, с которым она также справилась. Таким образом была наглядно подтверждена эффективность использования подобных конструкций для объемных программ, где подобные ошибки приводят к экстренному завершению программы.
Проведена проверка на совместимость с различными операционными системами. Она была проверена запуском программы на разных версиях Windows. Точно можно заметить, что на версиях от Windows 7 и выше – программа работает обычном режиме и непредвиденных ошибок не было выявлено. Кроссплатформенности программа не предусматривает, поэтому на GNU/Linux или на Mac OS X программа не работает.
ЗАКЛЮЧЕНИЕ
За время выполнения данной курсовой работы было реализовано все, что было запланировано. Была проделана работа по созданию доступного и понятного любому пользователю интерфейса, в ближайшем будущем в планах организовать графический интерфейс при помощи специализированных для этого приложений, например: OpenGL или QtCreator, добавления большего количества изданий: журналов, газет, аудиокниг. Также планируется организовать обработку и электронных книг.
Проект получился именно таким, каким и был спрогнозирован изначально. Это достаточно удобное приложение, за созданием которого было проведено большое количество времени и с удовольствием составлялись алгоритмы, для решения основной задачи программы. Желание навести порядок в своей домашней библиотеке в совокупности с интересом к изучению ООП, дает свои результаты. Что касается будущего данного проекта, то достигнутые результаты будут обновляться. Будут реализованы новые идеи, которые, не были рассмотрены во время разработки приложения, но возникли после сдачи данного курсового проекта. После добавления некоторого функционала и обновления разработанного входе выполнения курсового проекта интерфейса в сторону функциональности, еще большей оптимизации некоторых алгоритмов данную программу можно будет считать полноценной программой управления домашней библиотекой и в каком-то плане достойным соперником вышеописанным гигантами данной индустрии.
СПИСОК ИСТОЧНИКОВ
[1] Лафоре Р. - Объектно-ориентированное программирование в С++, 4-е издание – СПб: Питер, 2004/2007 - с. 923. - ISBN 978-5-94723-302-5
[2] Луцик Ю. А. Объектно-ориентированное программирование на языке С++ / Ю. А. Луцик, А. М. Ковальчук, И. В. Лукьянова. – Мн.: БГУИР, 2003.
[3] cppstudio – основы программирования на языках Си и C++ для начинающих: [электронный ресурс] http://cppstudio.com/
[4] Как программировать на С++( пятое издание) / Х.М. Дейтел, П.Дж. Дейтел – 2006.
ПРИЛОЖЕНИЕ А
(Обязательное)
Структурная схема
ПРИЛОЖЕНИЕ Б
(Обязательное)
Диаграмма классов
ПРИЛОЖЕНИЕ В
(Обязательное)
Схема алгоритма добавления элемента
ПРИЛОЖЕНИЕ Г
(Обязательное)
Схема алгоритма удаления элемента
ПРИЛОЖЕНИЕ Д
(Обязательное)
Схема алгоритма поиска элемента