Создание библиотеки классов и управляемую пользователем программу с псевдографическим интерфейсом
Создание библиотеки классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат. Упрощённая структура библиотек, взаимодействие классов и объектов, основные алгоритмы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.08.2012 |
Размер файла | 37,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
Данный программный продукт состоит из двух самостоятельных библиотек: строковых типов и консольно-графических компонентов, которые могут быть использованы в других целях, и использующей (демонстрирующей) их программы.
Содержание библиотек:
Строковые типы: базовая строка, строка-идентификатор, комплексное число.
Консольно-графические компоненты: меню, рамка, список, консоль, ввод-диалог.
Программа позволяет создать до девяти строковых объектов и манипулировать ими, отображая их текущее состояние в списке, результаты процедур на консоли и используя меню для ввода команд и диалоги для ввода параметров.
Ниже отображены структура и взаимодействие классов и объектов, основные алгоритмы.
1. Упрощённая структура библиотек, иерархия классов
1.1 Строковые типы
Имеются следующие типы (рисунок 1):
· BaseString - базовая строка - содержит С-строку глобально заданной (или меньшей) длины, контролирует доступ, обеспечивает ввод-вывод.
· Identifier - строка-идентификатор - следит, чтобы хранимая строка отвечала правилам составления идентификаторов языка С.
· Complex - комплексное число - содержит символьное представление комплексного числа в формате «1234i567» со знаками или без. Обеспечивает алгебраическое сложение и вывод в формате «(1234, i 567)».
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 1 - библиотека строковых типов.
1.2 Графические компоненты
Имеются следующие компоненты и системы (рисунок 2):
· Item - пункт меню - содержит координаты, надпись, вызываемую функцию и массив подменю. Имеет функции рисования и стирания, при стирании экран закрашивается чёрным (если что-то было затёрто, старое содержимое не восстанавливается).
· Menu - меню - содержит массив корневых пунктов меню, контролирует общий процесс исполнения программы: следит за нажатиями на навигационные клавиши, сворачивает и разворачивает пункты и их подменю, вызывает обработчики нажатий. Алгоритм изображён ниже (рисунок 3).
· Frame - рамка - в конструкторе выводит псевдографическую рамку, в деструкторе стирает её. Есть функция перерисовки.
· List - список - рамка, выводящая нужную надпись на любой строчке с номером.
· Console - консоль - потоковый вывод текста в рамке.
· DialogInput - диалог ввода строки - только рисование диалогового окна с некоторой надписью и полем под ввод в конструкторе и стирание в деструкторе.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 2 - библиотека графических компонентов
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
1.3 Форма - оболочка данного приложения
Форма - потомок меню (рисунок 4).
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 4 - форма
Использованное в ней дерево меню изображено на рисунке 5.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Так же она содержит массив указателей на строки для эксперимента, список строк и консоль для вывода результатов действий.
В одном модуле с формой описаны самостоятельные функции, которые будут присвоены обработчикам нажатий пунктов меню.
2. Подробное описание всех классов, их полей и методов
2.1 Строковые типы
2.1.1 BaseString - базовая строка
Вспомогательные объявления:
enum ourStrings {base, identifier, decimal, complex, binary} - типы строковых объектов
const int refoolLenght = 16 - максимальная длина строки
Защищённые поля:
char* strPointer - указатель на строку
int lenght - длина строки
ourStrings objType - тип объекта
int refool - переполнение
Защищённые методы:
void copy (char* str) - копирование массива символов в строку с учётом переполнения
Открытые методы:
BaseString() - конструктор по-умолчанию
BaseString(char* str) - конструктор из С-строки
BaseString(char ch) - конструктор из символа
BaseString(BaseString& orig) - конструктор копирования
virtual ~BaseString() - виртуальный деструктор
char OftenChar() - самый часто встречающийся символ
int getLenght() - возврат длины
ourStrings ObjectType() - возврат типа
bool isRefooled() - возврат переполненности
bool contain (char ch) - содержит ли строка данный символ
virtual ostream& outer (ostream& s) - метод потокового вывода
virtual istream& iner (istream& s) - метод потокового ввода
Дополнительные функции:
ostream& operator <<(ostream& s, const BaseString& str) - оператор потокового вывода
istream& operator >>(istream& s, BaseString& str) - оператор потокового ввода
2.1.2 Identifier - строка-идентификатор - потомок базовой строки
Открытые методы:
static bool isCorrect (char* str) - является ли некоторая С-строка идентификатором
static bool isCorrect (BaseString str) - является ли некоторая базовая строка идентификатором
Identifier() - конструктор по-умолчанию
Identifier(char* str) - конструктор из С-строки
Identifier(char ch) - конструктор из символа
Identifier(Identifier& orig) - конструктор копирования
const Identifier& operator= (const Identifier& orig) - оператор присваивания
char& operator[] (int ind) - оператор индекса, возвращает ссылку на ind-й символ
Identifier operator- (const Identifier& subtrahend) - удаление символов вычитаемого из символов уменьшаемого
void regDown() - перевод букв в нижний регистр
istream& iner (istream& s) - метод потокового ввода
Дополнительные функции:
ostream& operator <<(ostream& s, const Identifier& str) - оператор потокового вывода
istream& operator >>(istream& s, Identifier& str) - оператор потокового ввода
2.1.3 Complex - комплексное число - потомок базовой строки
Скрытые методы:
void toFixedLenght (char* strnum) - перевод строки-числа из "(-)123456\0 " в "±0000000000000123456\0" [refoolLenght+1] (предполагается, что память выделена заранее)
void toFloatLenght (char* strnum) - обратный перевод (память не освобождается)
void add (char* adden1, char* adden2, char* sum) - алгебраическое сложение чисел-строк, представленных в формате"±0000000000000123456\0" [refoolLenght+1]
Открытые методы:
Complex() - конструктор по-умолчанию
Complex (char* str) - конструктор из С-строки
Complex (int re, int im) - конструктор из значений действительной и мнимой частей
Complex (Complex& orig) - конструктор копирования
bool isCorrect (char* str) - является ли некоторая С-строка комплексным числом
bool isCorrect (BaseString str) - является ли некоторая базовая строка комплексным числом
void getReal(char* ) -копирование действительного поля в массив символов
void getImage(char* ) - копирование мнимого поля в массив символов
const Complex& operator= (const Complex& orig) - оператор присваивания
Complex operator+ (const Complex& adden) - оператор сложения
Complex operator- (const Complex& orig) - оператор вычитания
virtual ostream& outer (ostream& s) - метод потокового вывода
virtual istream& iner (istream& s) - метод потокового ввода
Дополнительные функции:
ostream& operator <<(ostream& s, const Complex& str) - оператор потокового вывода
istream& operator >>(istream& s, Complex& str) - оператор потокового ввода
2.2 Графические компоненты - меню
2.2.1 Глобальные константы
const int menuWidth = 16 - какой ширины будет рисоваться каждый пункт
const int lineColor = 1 - цвет линий, обрамляющих пункты
const int activeColor = 10 - цвет активного в данный момент пункта
const int enabledColor = 3 - цвет включённого пункта
const int passiveColor = 4 - цвет отключённого пункта
библиотека алгоритм строка
2.2.2 Item - пункт меню
Защищённые поля:
char* caption - надпись
int left, top - координаты группы пунктов
int index - номер данного пункта
int underMenuLen - число пунктов подменю в группе
Item** underMenu - массив указателей для пунктов подменю
Item* upperItem - указатель на старший пункт
Открытые поля:
bool enabled, activied - включён и активен ли пункт
Открытые методы:
Item(Item* upperItem, char* caption, int left, int top, int index) - конструктор - инициализирует всё, кроме подменю
~Item() - виртуальный деструктор
void (*onEnter) (Item* sender, Menu* place) - указатель на обработчик события входа в меню - получает аргументами указатель на текущие меню и пункт
void createUndermenu (int left, int top, int itemsN ...) - создание подменю, выводящегося в конкретной точке, из серии заголовков. На место точек при вызове ставится itemsN C-строк.
int getIndex() - возврат номера пункта
Item* getUpperItem() - возврат указателя на старший пункт
Item* moveUp() - перемещение вверх по подменю, возвращает указатель на предыдущий включённый пункт
Item* moveDown() - перемещение вниз по подменю, возвращает указатель на следующий включённый пункт
Item* goToRoot() - закрытие всех подменю и возврат указателя на корневой пункт
void open() - вывод пункта на экран
void close() - скрытие пункта (очистка экрана)
Item* openUnderMenu() - открытие (вывод) подменю и передача ему активности (переприсваивание поля activied), возврат указателя на пункт, ставший активным
void closeUnderMenu() - скрытие подменю и возврат активности данному пункту
Item* operator[] (int i) - возврат указателя на i-й элемент подменю или 0, если подменю нет
2.2.3 Menu - меню
Защищённые поля:
Item** roots - массив указателей для корневых элементов
int rootsN - число корневых элементов
Защищённые методы:
void open() - первая прорисовка корневых элементов
Item* moveRight(Item* current) - перемещение вправо по корневым пунктам, возврат указателя на следующий от аргумента включённый пункт
Item* moveLeft(Item* current) - перемещение влево по корневым пунктам, возврат указателя на предыдущий от аргумента включённый пункт
Открытые методы:
virtual ~Menu() - виртуальный деструктор
Item* operator[] (int i) - возврат указателя на i-й корневой элемент
void perform() - управление процессом через меню (алгоритм на рисунке 4).
2.3 Графические компоненты - панели
2.3.1 Глобальные константы
frameColors = 2+7*16 - цвет рамок
const int dialogColors = 12+2*16 - цвет диалогового окна
2.3.2 Frame - рамка
Защищённые поля:
char* caption - надпись
int left, top, width, height - координаты и размеры
Открытые методы:
Frame (int left, int top, int width, int height, char* caption) - конструктор - сохранение аргументов и прорисовка
virtual void redraw() - перерисовка рамки пустой
~Frame() - деструктор - стирание
2.3.3 List - список - потомок рамки
Открытые методы:
List (int left, int top, int width, int N, char* caption) - конструктор
void drawLine (int i, char* caption) - вывод данной строки на данной строчке.
void redraw() - перерисовка списка пустым с номерами строк
2.3.3 Console - консоль - потомок рамки
Открытые методы:
Console (int left, int top, int width, int height, char* caption) - конструктор
void output(char* c) - добавление в поток строки
2.3.4 DialogInput - диалоговое окно ввода
Скрытые поля:
int left, top, width - координаты и ширина (высота всегда под 1 строку заголовка и 1 строку для ввода)
Открытые методы:
DialogInput(int left, int top, int width, char* caption) - конструктор - рисование
~DialogInput() - деструктор - стирание
2.4 Модуль данного приложения
2.4.1 Глобальные константы
const int window1left = 3, window1top = 14, window1width = 16 - координаты и приращение ширины (к длине базовой строки) 1-го окна - списка (высота - по числу элементов
const int window2left = 55, window2top = 4 - координаты второго угла - консоли (размеры - до краёв экрана)
const int window3left = 36, window3top = 21 - координаты третьего окна номеров параметров
2.4.2 Form - форма - потомок меню
Поля:
int objectsN - число объектов для экспериментов
int arg1, arg2, val - номера операндов
List* window1 - указатель на первое окно (список)
Console* window2 - указатель на второе окно (консоль)
BaseString** array - массив указателей под объекты для манипуляций
Методы:
Form() - конструктор - создание пунктов меню для данной задачи
~Form() - деструктор - удаление строковых объектов и окон
void drawOperandsWindow() - рисование окна под номера операндов
void drawOperands() - вывод номеров операндов в их окне
void outputObject(int i) - вывод информации об i-м объекте в окно 1
2.4.3 Обработчики нажатий меню
void <name>(Item* sender, Menu* place) - формат всех обработчиков, далее перечислены только имена и соответствующие пункты меню
initializeObject - Инициализация -> Количество элементов
inputOperands - Инициализация -> Начальное значение
createObject - вызовы всех конструкторов с параметрами, кроме копирующих:
Тестирование -> Базовая строка -> Создать из строки,
Тестирование -> Базовая строка -> Создать из символа,
Тестирование -> Идентификатор -> Создать из строки,
Тестирование -> Идентификатор -> Создать из символа,
Тестирование -> Комплексное число -> Создать из строки,
Тестирование -> Комплексное число -> Создать из чисел
copyObject - вызовы всех конструкторов копирования:
Тестирование -> Базовая строка -> Скопировать,
Тестирование -> Идентификатор -> Скопировать,
Тестирование -> Комплексное число -> Скопировать
stringOftenChar - Тестирование -> Базовая строка -> Частый символ
identifierSubstract - Тестирование -> Идентификатор -> Вычитание
identifierIndexOperator - Тестирование -> Идентификатор -> Индекс…
complexArytmetic - арифметика комплексных чисел:
Тестирование -> Комплексное число -> сложение
Тестирование -> Комплексное число -> вычитание
toExit - Выход
2.4.4 Функция main
int main() {
Form* form = new Form;
form->perform();
delete form;
}
Вывод
В ходе КР была разработана на языке программирования C++ библиотека классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат.
Размещено на Allbest.ru
Подобные документы
Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.
дипломная работа [1,0 M], добавлен 09.08.2016Определение программного модуля. Принципы использования dll-библиотеки. Преимущества и недостатки использования dll-библиотек. Описание коэффициентов моделей. Разработка структуры классов. Реализация библиотеки классов в среде разработки MS Visual Studio.
дипломная работа [676,6 K], добавлен 16.06.2015Иерархия основных классов MFC (базовой библиотеки классов). Структура простой MFC программы. Работа с текстом в MFC. Функции вывода текста, установки цветов, режимов отображения, получение метрик. Применение контекста устройства, обработка сообщений.
контрольная работа [27,8 K], добавлен 11.08.2010Разработка виртуальной библиотеки, которая в электронной форме и с лаконичным, удобным интерфейсом позволяет хранить информацию в надёжном и компактном виде, при этом значительно увеличивая скорость поиска нужной информации и проста в распространении.
курсовая работа [1,1 M], добавлен 05.07.2012Создание Win-приложения для библиотеки, которое позволяло бы осуществлять операции выдачи и сдачи книг в соответствии со сроками. Выбор программных и технических средств реализации проекта. Разработка интерфейса системы, описание реализованных классов.
курсовая работа [3,1 M], добавлен 14.08.2015Классы и свойства объектно-ориентированного пространства. Методика создания новых классов в delphi: выбор родительского класса, изменение существующих компонентов, создание подклассов для элементов управления windows. Создание новой ветви классов.
контрольная работа [13,0 K], добавлен 07.07.2012Компиляция программ на языке C/C++. Компиляция нескольких файлов. Библиотеки объектных файлов. Создание статической и динамической библиотеки. Функции работы. Создание динамической библиотеки для решения системы линейных уравнений.
курсовая работа [27,4 K], добавлен 07.08.2007Разработка набора взаимосвязанных классов для реализации Hash-поиска как специализированного контейнера. Поиск с использованием Хэш-функций. Объектная технология. Описание пользовательского интерфейса. Листинг и описание всех классов библиотеки на DP.
курсовая работа [231,2 K], добавлен 15.10.2008Краткая характеристика предметной области. Актуальность разработки объектно-ориентированной модели информационной системы для учебной библиотеки. Создание диаграммы вариантов использования, последовательности, кооперативной диаграммы, диаграммы классов.
курсовая работа [381,8 K], добавлен 01.06.2009Изображение класса на диаграмме UML. Инкапсуляция как средство защиты его внутренних объектов. Использование принципа полиморфизма для реализации механизма интерфейсов. Создание новых классов путем наследования. Ассоциация как вид отношений между ними.
лекция [516,6 K], добавлен 03.12.2013