Техническое описание (1077194)
Текст из файла
Московский государственный технический университет им. Н.Э.Баумана
_______________________________________________________________________
Утверждаю: | |
Большаков С.А. | "__"_____________2004 г. |
Курсовая работа по дисциплине ПППО
Система классов «Таблица»
Техническое описание
(вид документа)
писчая бумага
(вид носителя)
12
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-54 | Маркус М.Р. |
Большаков С.А. | "__"_____________2004 г. |
Москва - 2004
1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММНОМ ОБЕСПЕЧЕНИИ.
Система классов написана на языке С++ в версии компании Borland Int. Файлы программного продукта:
Файл | Описание | Размер |
Cell.h | Файл заголовка | 1.56 Kb |
Row.h | Файл заголовка | 1.25 Kb |
Absttbl.h | Файл заголовка | 1.28 Kb |
Cell.cpp | Файл исходного кода | 4.31 Kb |
Row.cpp | Файл исходного кода | 5.76 Kb |
Absttbl.cpp | Файл исходного кода | 9.04 Kb |
Table.cpp | Файл исходного кода | 4.00 Kb |
Test.exe | Исполняемый файл | 56.9 Kb |
2. СТРУКТУРА КЛАССОВ СИСТЕМЫ.
2.1. ОПИСАНИЕ КЛАССОВ
Система классов «Таблица» состоит из 4 классов – Cell (класс ячейка), Row (класс строка), AbstractTable (абстрактный класс таблица) и Table (наследованный класс от класса AbstractTable).
Класс Cell предназначен для хранения непосредственно текстовых данных. Он содержит указатель на текстовые данные. Для конечного пользователя в public доступе содержатся функции, в основном, контрольного типа – печать ячейки, просмотр её свойств, а также функция замены текста в ячейке. Сделано это для того, чтобы не дать пользователю возможность случайно изменить «внутрисистемные» переменные класса. Кроме того, объект ячейки в отдельности не имеет ценности для конечного пользователя.
Класс Row – это класс-контейнер ячеек. Он предназначен для хранения строки таблицы. Физически, контейнер представляет собой массив объектов Cell. Также как и класс Cell, класс Row в public доступе имеет функции, позволяющие только просматривать свойства объекта, осуществлять доступ к хранимым ячейкам, а также осуществлять вывод строки. Единственная функция, позволяющая изменять свойство класса – функция установки режима отображения строки.
Класс AbstractTable, как видно из названия, является абстрактным классом таблицы. Он содержит все функции для управления таблицей и доступа к её содержимому. Этот класс предназначен для использования непосредственно конечным пользователем. Чистая виртуальная функция этого класса – это функция печати таблицы. Также он является контейнером для объектов класса Row.
Класс Table – это наследованный класс от AbstractTable с перегруженной функцией печати таблицы. Все остальные функции наследуются без изменений.
2.2. ДИАГРАММА КЛАССОВ СИСТЕМЫ
2.3. МОДУЛЬНАЯ СТРУКТУРА КЛАССОВ
2.4. ОПИСАНИЕ ДАННЫХ КЛАССОВ
Название | Тип | Описание |
Cell::Text | Char * | Текст в ячейке |
Cell::ChangeFlag | Int | Флаг разрешения изменений без обновления юниона |
Cell::CellX | Int | Позиция ячейки в таблице по вертикали |
Cell::CellY | Int | Позиция ячейки в таблице по горизонтали |
Cell::UnionVSize | Int | Вертикальный размер юниона |
Cell::UnionHSize | Int | Горизонтальный размер юниона |
Cell::IsVisible | Int | Видимость ячейки |
Cell::IsUnion | Int | Содержится ли ячейка в юнионе |
Cell::UnionCells | Cell ** | Массив указателей на ячейки юниона |
Cell::UnionId | int | Порядковый номер ячейки в юнионе |
Row::CellArray | Cell * | Массив ячеек строки |
Row::RowLength | Int | Количество ячеек в строке |
Row::RowX | Int | Позиция строки в таблице |
Row::IsVisible | Int | Видимость строки |
Row::Height | Int | Высота строки |
AbstractTable::Rows | Row * | Массив строк таблицы |
AbstractTable::RowsNum | Int | Количество строк в таблице |
AbstractTable::ColsNum | Int | Количество столбцов в таблице |
AbstractTable::TableName | Char[31] | Название таблицы |
AbstractTable::LineThickness | Int | Толщина линий |
Table::Rows | Row * | Массив строк таблицы |
Table::RowsNum | Int | Количество строк в таблице |
Table::ColsNum | Int | Количество столбцов в таблице |
Table::TableName | Char[31] | Название таблицы |
Table::LineThickness | Int | Толщина линий |
2.5. ОПИСАНИЕ ФУНКЦИЙ КЛАССОВ
Функции класса Cell
Описание | Вид | Пример |
Конструктор | Cell ( char * text, int x, int y) | Cell A(“Test”,1,2); |
Конструктор | Cell (); | Cell A(); |
Получение текста ячейки | char * getText ( void) | Str = A.getText(); |
Получение длины текста | int getTextLength (void) | Len = A.getTextLength(); |
Установка текста ячейки | Int setText (char *) | a.setText(“”); |
Получение координаты х ячейки | Int getCellX (void) | x = getCellX(); |
Получение координаты у ячейки | Int getCellY (void) | Y = getCelly(); |
Печать ячейки | Void printCell( ostream _FAR &); | A.printCell(cout); |
Получение верт. Размера юниона | int getUVS( void); | V = A.getUVS(); |
Получение гор. Размера юниона | int getUHS( void); | H = A.getUHS(); |
Получение видимости ячейки | int getVis( void); | Vis = A.getVIs(); |
Проверка состояния ячейки в юнионе | int getUn ( void); | Un = A.getCellUn(); |
Установка корд. Х | void setCellX ( int); | a.setCellX(1); |
Установка корд. У | void setCellY ( int); | a.setCellY(2); |
Оператор присваивания | Cell & operator = ( Cell &); | A = B; |
Оператор сложения | Cell & operator + ( Cell &); | C = (A + B); |
Установка верт. Размера юниона | void setUVS ( int); | A.setUVS(2); |
Установка гор. Размера юниона | void setUHS ( int); | A.setUHS(4); |
Установка видимости | void setVis ( int); | A.setVis(1); |
Установка состояния в юнионе | void setUn ( int); | A.setUn(0); |
Обновление юниона | void updateUnion ( int); | A.updateUnion(); |
Установка флага разрешения изменений | void setChangeFlag ( int); | a.setChangeFlag(1); |
Получение флага разрешения изменений | int getChangeFlag ( void); | Flag = A.getChangeFlag(); |
Функции класса Row
Описание | Вид | Пример |
Конструктор | Row() | Row R(); |
Конструктор | Row(int cell_num, int row_x) | Row R(4,2) |
Печать строки | void printRow ( ostream _FAR &); | R.printRow(cout); |
Печать строки в таблице | void printLineRow( ostream FAR&); | r.printRow(cout) |
Получить длину | int getRowLength( void); | Len = r.getRowLength(); |
Получить позицию | int getRowX ( void); | X = R.getRowX(); |
Оператор доступа к ячейкам строки | Cell & operator [] ( int); | Row[0].printCell(cout); |
Получение видимости | int getVis ( void); | Vis = R.getVis(); |
Установка видимости | void setVis ( int); | R.setVis(1); |
Добавить ячейку | int addCell ( char *); | R.addCell(“Test”); |
Добавить ячейку | int addCell ( Cell &, int); | R.addCell(&A,2); |
Добавить ячейку | int addCell ( int); | R.addCell(2); |
Добавить ячейку | int addCell ( char *, int); | R.addCell(“Test”,3); |
Удалить ячейку | int deleteCell ( int); | R.deleteCell(4); |
Обновить ячейку | int updateCell ( int, char *, int, int); | R.updateCell(1,“Test”,1,1); |
Оператор присваивания | Row & operator = ( Row &); | R = B; |
Оператор добавления ячейки | Row & operator + ( Cell &); | R + A; |
Оператор уменьшения на 1 позицию | Row & operator -- ( int); | R--; |
Оператор увеличения на 1 позицию | Row & operator ++ ( int); | R++; |
Функции класса AbstractTable
Описание | Вид | Пример |
Конструктор | AbstractTable(char * name); | AbstractTable T(“Table”); |
Конструктор | AbstractTable (int row, int cols, char * name) | AbstractTable T(,5,5,“Table”); |
Добавить строку | int addRow( int, int); | T.addRow(0,5); |
Добавить колонку | int addCol( int, int); | T.addCol(0,5); |
Добавить ячейку | int addCell( int, int, char *); | T.addCell(1,1,”Test”); |
Установить видимость ячейки | void setCellVis (int, int, int); | T.setCellVis(1,1,0); |
Получить видимость ячейки | int getCellVis ( int, int); | Vis = T.getCellVis(1,1); |
Поменять местами содержимое двух ячеек | Void swapCells ( int, int, int, int); | T.swapCells(1,1,2,2); |
Удалить строку | int deleteRow ( int); | t.deleteRow(2); |
Удалить колонку | int deleteCol ( int); | T.deleteCol(2); |
Чистая виртуальная функция печати | virtual void printTable ( ostream _FAR &) = 0; | |
Объединить в юнион ячейки начиная с с х,у размером м на н. | int uniteCells ( int, int, int, int); | T.uniteCells(1,1,4,4); |
Объединить ячейки начиная с первого указателя до второго | int uniteCells ( Cell *, Cell *); | T.uniteCells(&A,&B); |
Удалить из юниона все ячейки | void deuniteCell ( int, int); | A.deuniteCell(1,1); |
Получить число строк | int getRowsNum ( void); | Rows = T.getRowsNum(); |
Получить число столбцов | int getColsNum ( void); | Cols = T.getColsNum(); |
Оператор вычитания из таблицы ячейки. Результат – обнуление всех ячеек с таким же содержимым | AbstractTable & operator - ( Cell &); | T – A; |
Оператор доступа к строкам | Row & operator [] ( int); | T[3].printLineRow(cout); |
Функции класса Table
Описание | Вид | Пример |
Конструктор | Table(char * name); | Table T(“Table”); |
Конструктор | Table (int row, int cols, char * name) | Table T(,5,5,“Table”); |
Добавить строку | int addRow( int, int); | T.addRow(0,5); |
Добавить колонку | int addCol( int, int); | T.addCol(0,5); |
Добавить ячейку | int addCell( int, int, char *); | T.addCell(1,1,”Test”); |
Установить видимость ячейки | void setCellVis (int, int, int); | T.setCellVis(1,1,0); |
Получить видимость ячейки | int getCellVis ( int, int); | Vis = T.getCellVis(1,1); |
Поменять местами содержимое двух ячеек | Void swapCells ( int, int, int, int); | T.swapCells(1,1,2,2); |
Удалить строку | int deleteRow ( int); | t.deleteRow(2); |
Удалить колонку | int deleteCol ( int); | T.deleteCol(2); |
Печати таблицы | void printTable ( ostream _FAR &); | T.printTable(cout); |
Объединить в юнион ячейки начиная с с х,у размером м на н. | int uniteCells ( int, int, int, int); | T.uniteCells(1,1,4,4); |
Объединить ячейки начиная с первого указателя до второго | int uniteCells ( Cell *, Cell *); | T.uniteCells(&A,&B); |
Удалить из юниона все ячейки | void deuniteCell ( int, int); | A.deuniteCell(1,1); |
Получить число строк | int getRowsNum ( void); | Rows = T.getRowsNum(); |
Получить число столбцов | int getColsNum ( void); | Cols = T.getColsNum(); |
Оператор вычитания из таблицы ячейки. Результат – обнуление всех ячеек с таким же содержимым | AbstractTable & operator - ( Cell &); | T – A; |
Оператор доступа к строкам | Row & operator [] ( int); | T[3].printLineRow(cout); |
3. ДИАГРАММА ОБЪЕКТОВ ТЕСТОВОГО ПРИМЕРА
4. ОПИСАНИЕ ТЕСТОВОГО ПРИМЕРА
См. документ «Описание тестового примера».
5. ОПИСАНИЕ ОТЛАДКИ КЛАССА
-
Использование указателей там, где удобнее было бы использовать ссылки
-
Освобождение указателя, возвращаемого функцией.
-
Освобождение не используемого указателя.
-
Отсутствие перегруженных операций присваивания.
-
При присваивании строки автоматически присваивались все ячейки со своими юнионами. Как следствие – непредсказуемые последствия с выделением памяти. Как выход – запоминание юнионов при удалении строк и столбцов и отмечание уже вновь созданных ячеек.
-
Просто забыл как-нибудь отметить неотображаемую строку и долго искал пропажу.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.