Блок графического пользовательского интерфейса (меню)

ВВЕДЕНИЕ

Трудно сейчас найти человека, который бы не читал книги. Электронные, аудиокниги или традиционные бумажные книги различных жанров. Читают везде, но особенно приятно это делать дома. И вот настаёт день, когда книг становится много. Найти интересующую книгу уже становится тяжело. Трудно вспомнить, дома ли та книга, которую полдня ищешь, или отдана другу, а он забыл её вернуть! И тогда возникает необходимость создания каталога домашней библиотеки, потому что каталог – это средство контроля за книгами и поддержания библиотеки в порядке.

Раньше владелец домашней библиотеки писал свой каталог в блокноте или на специальных бланках, куда вносились сведения об имеющихся книгах, их расположение в шкафах, а также пометки, если книга кому-то отдана, при таком ведении каталога записи редактировались очень сложно, так как необходимо заранее предусмотреть место для заметок, место для записи данных о новых поступлениях или место для записи, кому книга дана на прочтение.

Современные люди всё чаще отказываются от традиционных бумажных каталогов в пользу электронных, которые представлены специализированными программами для создания баз данных и потенциально обладающих самыми широкими возможностями. Но для пользования ими нужны некоторые навыки, для многих эти программы оказываются слишком сложными и разбираться в них, ради каталога домашней библиотеки готовы не все.

Представленная мной программа обладает простым интерфейсом, предусматривает поля для записи всех данных по книгам, не возникает проблем с редактированием и добавление новых записей.

Данное программное обеспечение должны по достоинству оценить люди, которые трепетно относятся к своему времени и стремятся к максимальной личной организации. Целевая аудитория – активный слой населения, имеющий доступ к современным технологиям, а также частные коллекционеры.

ОБЗОР ИСТОЧНИКОВ

Основные технологии

Язык С++ – компилируемый, статически типизированный язык программирования общего назначения третьего поколения, сочетающий в себе свойства как высокоуровневых, так и низкоуровневых языков программирования. Синтаксис С++ унаследован от языка С.

Объектно-ориентированное программирование (ООП) – это парадигма (совокупность понятий и идей) программирования, в рамках которой «во главу угла» ставят понятия объектов и классов.

База данных – набор сведений, хранящихся некоторым упорядоченным способом. Иными словами, база данных – это хранилище данных.

Система управления базами данных – это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т. д.
СУБД – это система, позволяющая создавать базы данных и манипулировать сведениями о них.

Пользовательский интерфейс – совокупность средств и методов, при помощи которых пользователь взаимодействует с различными, чаще всего сложными, машинами, устройствами и аппаратурой.

Псевдографика – совокупность символов, включённых в набор символов компьютерного шрифта, отображающих графические примитивы (линии, прямоугольники, треугольники, кресты, различная заливка и т. п.). Псевдографические символы реализуются в рамках формата шрифта (к примеру, матрица 8×12 точек) и дополняют в таком наборе цифро-буквенные и служебные символы. Основное назначение псевдографики – графическое оформление программ с текстовым интерфейсом пользователя (в том числе и т. н. консольных) – отображение в них окон, меню, кнопок и прочих элементов интерфейса, создания рамок и таблиц.

Обзор аналогов

Существует множество аналогов данному проекту. Эти программы разработаны как для государственных библиотек, так и для частных коллекций. Данная программа ориентирована на людей, желающих навести порядок в своей домашней библиотеке, то при разработке данного ПО будут рассматриваться программы, рассчитанные на индивидуальное пользование. Самые крупные из них: AllMyBooks и Calibre. Данные приложения предоставляют удобный функционал для систематизации как бумажных, так и электронных книг, среди которых поиск по множеству параметров, удаление и добавление книг. В приложении используются функции отображения каталога, добавления, удаления и поиска книг, сортировки по различным параметрам, а также возможность регистрации выдачи и возврата книг.

СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ

В данном разделе будет произведено структурирование проекта, т.е. указаны основные блоки и их взаимодействие между собой.

В соответствии с поставленными задачами и требованиями, разрабатываемое ПО разделено на следующие подсистемы:

Блок логического ядра

Подсистема, отвечающая за выполнение основной задачи программы – управление домашней библиотекой. Блок работает с командами, поступившими от пользователя, данные для которых были загружены из подсистемы хранилища данных иблока данных для работы. Это так называемое «ядро» программы. Здесь заключен основной функционал приложения.

3. Блок данных для работы (в оперативной памяти)

Данные, с которыми непосредственно работают алгоритмы. С помощью этого блока происходит обмен информацией между различными функциональными подсистемами, без которого сложно представить практически любую программу.

Хранилище данных (файл)

Подсистема, отвечающая за хранение пользовательских данных, в которой находится информация о книгах, содержащихся в домашней библиотеке.

Структурная схема программы представлена в приложении А.

Класс Menu

Класс Menu – это внешняя оболочка программы. Именно в этом классе и заключается интерфейс приложения, реализованный с помощью псевдографики. В основе данного класса лежит принцип создания консольных меню, соответствующих различным этапам обработки данных, методы для выбора пунктов меню и для возврата в главное меню после выполнения очередной обработки. Здесь реализованы методы для главного меню приложения, меню сортировки по полю, а также меню для выбора дополнительного параметра сортировки. Методы, реализованные в данном классе приведены ниже:

- voidMainMenu(int)- вывод главного меню.

- intMainMenuChoice()- выбор нужного пункта в главном меню.

- voidSortMenu(int)- вывод меню сортировки.

- intSortMenuChoice()- выбор нужного пункта в меню сортировки.

- voidSortSubmenu(int)- вывод меню дополнительного параметра сортировки.

- intSortSubmenuChoice()- выбор необходимого пункта в меню дополнительного параметра сортировки.

- voidExit()- возврат в главное меню.

Класс Database

Класс Database – это основополагающий класс программы. Именно здесь и сосредоточены основные методы и алгоритмы, необходимые для реализации поставленной задачи. Сам класс содержит объекты типа Publication, связанные с ним отношением композиции. Здесь осуществляется вывод каталога, добавление, удаление и поиск книг, сортировка по различным параметрам, выдача и возврат книг, сохранение и загрузка данных книг. Методы данного класса описаны ниже:

- voidShow()- вывод каталога книг.

- voidDeleteElement(string)- удаление книги.

- int Give(string, string, string)- выдача книги.

- intTake()- возврат книги.

- Publication* Find(string)- нахождение книги.

- voidSortTitle()- сортировка по названию книги.

- voidSortPlace()- сортировка по месту книги.

- voidSortAuthor()- сортировка по автору.

- voidSortGenre()- сортировка по жанру книги.

- voidSortYear()- сортировка по году издания.

- voidSaveToFile(ifstream&)- сохранение данных в текстовый файл.

- voidUpload(ofstream&)- загрузка данных из текстового файла.

Класс Publication

В программе реализован класс Publication, являющийся основополагающим в плане хранения данных во время работы программы. Так как данные будут организованы в виде двусвязной очереди, то данный класс имеет два указателя типа Publicationна следующий и предыдущий элементы. Также он содержит указатель типа Lender для хранения данных о выдаче или возврате книг. Необходимый для реализации класс Book является классом-наследником данного класса, что подчёркивает важность класса Publication для хранения данных. Методы данного класса приведены ниже:

- voidShow() = 0 - чисто виртуальная функция вывода данных.

Диаграмма классов представлена в приложении Б.

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

Данная операция предполагает как первоначальную загрузку данных из текстового файла при запуске программы, так и добавление записи о книге самим пользователем, при выборе соответствующего пункта главного меню. В первом случае для выполнения данной операции в цикле while производится добавление с помощью функции Add() книг со своими данными, полученными из файла путём построчного считывания. Программа не выделяет память заранее, так как для хранения данных на протяжении всей работы приложения и выполнения различного рада преобразований с ними используется двусвязный список. В случае возникновения ошибки при открытии файла функция вызывает обработчик ошибок, что приведёт к аварийному завершению программы.

При добавлении записи о книге пользователем осуществляется вызов функции Add(), создаётся в памяти запись о книге, с данными полученными от пользователя. Эта запись добавляется в список, где хранится да завершения программы или пока пользователь её не удалит.

При нехватке памяти на осуществление данной операции произойдёт аварийное завершение программы.

Удаление записи о книге

Для удобства выводится на экран каталог книг. Далее пользователя просят ввести место удаляемой книги. Осуществляется проверка на существование книги с таким место в базе. Если книга существует, то вызывается функция удаления книги. Если удаляемый элемент оказывается “головой” списка, то в этом случае этот элемент удаляется, следующий за ним становится новой “головой”:

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

Блок графического пользовательского интерфейса (меню) - student2.ru

Рисунок 5.1 – Главное меню программы.

Главное меню состоит из восьми пунктов, по которым легко понять за что они отвечают. Перемещение по меню происходит с помощью кнопок «↑» (стрелка вверх) и «↓» (стрелка вниз).

При выборе подпункта “Показать список книг в библиотеке” на экран выводится каталог книг, представленный в виде таблицы (рисунок 5.2).

Блок графического пользовательского интерфейса (меню) - student2.ru

Рисунок 5.2 – Вывод каталога книг на экран.

Подпункт “Добавить книгу” данного меню позволяет добавить запись о новой книге в каталог. Подпункт “Убрать книгу из библиотеки” предназначен для удаления ненужной записи пользователем.

Подпункт “Найти книгу” предназначен для поиска информации о нужной книге в каталоге по месту расположения (рисунок 5.3).

Блок графического пользовательского интерфейса (меню) - student2.ru

Рисунок 5.3 – Нахождение информации о нужной книге.

Подпункт “Выдать книгу” позволяет добавить запись о выдаче книги в каталог, при условии, что книга не была выдана ранее. Подпункт “Вернуть книгу” предназначен для удаления записи о выдаче книги в каталоге, если она была выдана.

Подпункт “Сортировать” предназначен для сортировки каталога по пяти различным полям (рисунок 5.4).

Блок графического пользовательского интерфейса (меню) - student2.ru

Рисунок 5.4 – Меню сортировки программы.

После выбора пользователем поля сортировки ему предлагается осуществить сортировку по возрастанию или убыванию (рисунок 5.5).

Блок графического пользовательского интерфейса (меню) - student2.ru

Рисунок 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.

ПРИЛОЖЕНИЕ А

(Обязательное)

Структурная схема

ПРИЛОЖЕНИЕ Б

(Обязательное)

Диаграмма классов

ПРИЛОЖЕНИЕ В

(Обязательное)

Схема алгоритма добавления элемента

ПРИЛОЖЕНИЕ Г

(Обязательное)

Схема алгоритма удаления элемента

ПРИЛОЖЕНИЕ Д

(Обязательное)

Схема алгоритма поиска элемента

ВВЕДЕНИЕ

Трудно сейчас найти человека, который бы не читал книги. Электронные, аудиокниги или традиционные бумажные книги различных жанров. Читают везде, но особенно приятно это делать дома. И вот настаёт день, когда книг становится много. Найти интересующую книгу уже становится тяжело. Трудно вспомнить, дома ли та книга, которую полдня ищешь, или отдана другу, а он забыл её вернуть! И тогда возникает необходимость создания каталога домашней библиотеки, потому что каталог – это средство контроля за книгами и поддержания библиотеки в порядке.

Раньше владелец домашней библиотеки писал свой каталог в блокноте или на специальных бланках, куда вносились сведения об имеющихся книгах, их расположение в шкафах, а также пометки, если книга кому-то отдана, при таком ведении каталога записи редактировались очень сложно, так как необходимо заранее предусмотреть место для заметок, место для записи данных о новых поступлениях или место для записи, кому книга дана на прочтение.

Современные люди всё чаще отказываются от традиционных бумажных каталогов в пользу электронных, которые представлены специализированными программами для создания баз данных и потенциально обладающих самыми широкими возможностями. Но для пользования ими нужны некоторые навыки, для многих эти программы оказываются слишком сложными и разбираться в них, ради каталога домашней библиотеки готовы не все.

Представленная мной программа обладает простым интерфейсом, предусматривает поля для записи всех данных по книгам, не возникает проблем с редактированием и добавление новых записей.

Данное программное обеспечение должны по достоинству оценить люди, которые трепетно относятся к своему времени и стремятся к максимальной личной организации. Целевая аудитория – активный слой населения, имеющий доступ к современным технологиям, а также частные коллекционеры.

ОБЗОР ИСТОЧНИКОВ

Основные технологии

Язык С++ – компилируемый, статически типизированный язык программирования общего назначения третьего поколения, сочетающий в себе свойства как высокоуровневых, так и низкоуровневых языков программирования. Синтаксис С++ унаследован от языка С.

Объектно-ориентированное программирование (ООП) – это парадигма (совокупность понятий и идей) программирования, в рамках которой «во главу угла» ставят понятия объектов и классов.

База данных – набор сведений, хранящихся некоторым упорядоченным способом. Иными словами, база данных – это хранилище данных.

Система управления базами данных – это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т. д.
СУБД – это система, позволяющая создавать базы данных и манипулировать сведениями о них.

Пользовательский интерфейс – совокупность средств и методов, при помощи которых пользователь взаимодействует с различными, чаще всего сложными, машинами, устройствами и аппаратурой.

Псевдографика – совокупность символов, включённых в набор символов компьютерного шрифта, отображающих графические примитивы (линии, прямоугольники, треугольники, кресты, различная заливка и т. п.). Псевдографические символы реализуются в рамках формата шрифта (к примеру, матрица 8×12 точек) и дополняют в таком наборе цифро-буквенные и служебные символы. Основное назначение псевдографики – графическое оформление программ с текстовым интерфейсом пользователя (в том числе и т. н. консольных) – отображение в них окон, меню, кнопок и прочих элементов интерфейса, создания рамок и таблиц.

Обзор аналогов

Существует множество аналогов данному проекту. Эти программы разработаны как для государственных библиотек, так и для частных коллекций. Данная программа ориентирована на людей, желающих навести порядок в своей домашней библиотеке, то при разработке данного ПО будут рассматриваться программы, рассчитанные на индивидуальное пользование. Самые крупные из них: AllMyBooks и Calibre. Данные приложения предоставляют удобный функционал для систематизации как бумажных, так и электронных книг, среди которых поиск по множеству параметров, удаление и добавление книг. В приложении используются функции отображения каталога, добавления, удаления и поиска книг, сортировки по различным параметрам, а также возможность регистрации выдачи и возврата книг.

СТРУКТУРНОЕ ПРОЕКТИРОВАНИЕ

В данном разделе будет произведено структурирование проекта, т.е. указаны основные блоки и их взаимодействие между собой.

В соответствии с поставленными задачами и требованиями, разрабатываемое ПО разделено на следующие подсистемы:

Блок графического пользовательского интерфейса (меню)

Подсистема, с помощью которой производится управление программой. Отсюда происходит взаимодействие с «ядром» программы, посредством предоставленных интерфейсом возможностей. Переключение между преобразованиями происходит моментально, посредством выбора подпункта меню и нажатия клавиши Enter, вызывающей ту или иную задачу. Управление в данном блоке происходит с помощью работы с псевдографикой.

Блок логического ядра

Подсистема, отвечающая за выполнение основной задачи программы – управление домашней библиотекой. Блок работает с командами, поступившими от пользователя, данные для которых были загружены из подсистемы хранилища данных иблока данных для работы. Это так называемое «ядро» программы. Здесь заключен основной функционал приложения.

3. Блок данных для работы (в оперативной памяти)

Данные, с которыми непосредственно работают алгоритмы. С помощью этого блока происходит обмен информацией между различными функциональными подсистемами, без которого сложно представить практически любую программу.

Хранилище данных (файл)

Подсистема, отвечающая за хранение пользовательских данных, в которой находится информация о книгах, содержащихся в домашней библиотеке.

Структурная схема программы представлена в приложении А.

Наши рекомендации