Разработка библиотеки классов "Заказ товаров"
Характеристика основных средств проектирования, абстрагирования и выделения классов. Моделирование иерархии классов. Анализ структуры программного продукта. Проектирование управляющих и интерфейсных классов. Описание структуры тестирующей программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | практическая работа |
Язык | русский |
Дата добавления | 17.01.2020 |
Размер файла | 929,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КУРСОВАЯ РАБОТА
Разработка библиотеки классов «Заказ товаров»
по дисциплине: Объектно-ориентированное программирование
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. Z6432K
Гараненков А.М
Старший преподаватель
Шумова Е.О.
Санкт-Петербург, 2019
Задание на курсовое проектирование
1. Цели и задачи курсового проектирования
Целями курсового проекта являются:
- закрепление знаний, полученных в ходе изучения дисциплины «Объектноориентированное программирование»
- приобретение навыков практического программирования с использованием объектно-ориентированной парадигмы
- изучение отдельных разделов предметной области, не вошедших в программу теоретического обучения, формирование навыка поиска информации по конкретной теме, ее анализа и использования для решения задачи моделирование программа интерфейсный
- подготовка к выполнению выпускной квалификационной работы
Задачей курсового проекта является разработка иерархии типов в заданной предметной области, включающей в себя:
- разработку иерархии классов
- разработку приложения
- разработку документации
- подготовку презентации.
2. Тематика курсового проекта
В ходе выполнения курсового проекта студенты должны практически освоить общий методологический подход, используемый при проектировании и программной реализации системы классов, соответствующей объектно-ориентированной парадигме программирования. Создаваемая система классов описывает (моделирует) определённую предметную область и может служить основой для полноценной информационной системы, решающей задачи данной области. Спроектированная система классов должна быть не только реализована в виде программы, но и протестирована. Для тестирования классов студент должен разработать приложение, функциональные возможности которого должны демонстрировать различные варианты использования объектов созданных классов.
3. Задание на курсовое проектирование
В ходе курсового проекта необходимо разработать приложение, позволяющее протестировать взаимодействие объектов классов, спроектированных и реализованных студентом для решения конкретной задачи при заданных критериях. При разработке программного обеспечения следует использовать шаблоны проектирования. Также предпочтение должно быть отдано графическому приложению.
При этом подлежат разработке следующие вопросы:
а) анализ задания;
б) разработка библиотеки классов
в) разработка тестового приложения;
г) оформление расчётно-пояснительной записки по результатам выполнения проекта
д) создание презентации к проекту
1. Предметная область
1.1 Анализ задачи
В рамках курсовой работы необходимо разработать структуру классов для предметной области «Заказ товаров».
Некоторая компания торгует различными товарами. Каждый товар имеет название и цену. Товары бывают двух категорий. Первая категория товаров продается поштучно, и цена указывается за единицу товара. Другие товары могут иметь единицы измерения и продаваться на вес, отмер, объем и т.п. Для них цена указывается за выбранную для них единицу измерения.
Все товары находятся на складе. Товарной позицией на складе называют товар и его количество в наличии.
При формировании заказа покупатель формирует заказ, который также состоит из позиций необходимых ему товаров. Для каждого товара заказчик указывает необходимое количество. По заказу высчитывается общая сумма.
1.2 Требования к проекту
Программа для предметной области «Заказ товаров» должна выполнять следующие функции:
-хранить список товарных позиций на складе;
-выводить на экран или в файл список позиций на складе;
-добавлять новый товар на склад или изменять количество товара;
-выполнять поиск товара на складе;
-создавать новый заказ;
-просматривать список заказов;
-хранить список товарных позиций в заказе;
-выводить на экран или в файл список позиций в заказе;
-добавлять новый товар в заказ или изменять количество в заказе;
-выполнять поиск товара в заказе.
Программа должна быть разработана на языке С++.
Программа должна иметь консольный интерфейс и меню позволяющий выбирать функцию программы.
Для хранения данных программы используются текстовые файлы.
2. Проектная часть
2.1 Средства проектирования
В процессе проектирования необходимо выделить основные классы системы и составить диаграмму классов.
Для построения диаграммы классов будем использовать средство проектирования StarUML.
StarUML - это проект с открытым кодом для разработки быстрых, гибких, расширяемых, функциональных и, главное, распространяемых бесплатно платформ UML/MDA для 32-разрядных систем Windows. Цель проекта StartUML - создание универсальной бесплатной платформы для моделирования, которая послужит аналогом для таких коммерческих проектов, как Rational Rose, Together и других.
Простота использования является наиболее важной характеристикой в разработке приложений. Бесплатная платформа StarUML выгодно отличается от своих аналогов, в том числе и коммерческих, поддержкой множества особенностей, таких как быстрый диалог, управление с помощью клавиатуры, обзор диаграмм и многое другое. Кроме того, все эти дополнения понятны даже для неподготовленного пользователя.
2.2 Абстрагирование и выделение классов
В рамках системы выделим следующие классы:
-Класс Goods - класс, описывающий любой товар;
-Класс PieceGoods - класс, описывающий товар продаваемый поштучно. Класс будет наследоваться от класса Goods.
- Класс WeightGoods - класс, описывающий товар продаваемый на вес, отмер, объем и .п. Класс будет наследоваться от класса Goods.
- Класс GoodsPosition - класс, описывающий товарную позицию (пара товар/количество);
- Класс PositionList - класс, описывающий контейнер для товарных позиций. В программе класс может представлять как состояние склада, так и состояние заказа. И склад, и заказ, можно представить как список позиций.
- Класс Input - класс, обеспечивающий ввод данных с потока;
- Класс Print - класс, обеспечивающий вывод данных в поток;
- Класс Goods - класс, обеспечивающий вывод меню и организацию диалога с пользователем.
2.3 Моделирование иерархии классов
Диаграмма классов для системы показана на рисунке 2.1.
Рисунок 2.1 - Диаграмма классов
На диаграмме присутствуют следующие виды отношений между классами:
-обобщение (наследование) - для классов, описывающих товары;
-агрегация, для классов реализующих контейнеры и содержащие ссылки на другие классы;
-зависимость, для интерфейсных классов, реализующих ввод и вывод данных из потока.
Класс для вывода меню никак не зависит от остальных классов системы, поэтому не связан с ними никакими отношениями.
Детальный состав свойств и методов классов будет рассмотрен в следующем разделе.
3. Практическая часть
3.1 Структура программного продукта
Код программы состоит из следующих модулей:
-Goods.h - описание и реализация класса «Goods»;
-GoodsPosition.h- описание и реализация класса «GoodsPosition»;
-PieceGoods.h- описание и реализация класса «PieceGoods»;
-WeightGoods.h- описание и реализация класса «WeightGoods»;
-PositionList.h- описание и реализация класса «PositionList»;
-Input.h- описание и реализация класса «Input»;
-Print.h- описание и реализация класса «Print»;
-Menu.h- описание и реализация класса «Menu»;
-Source.cpp -главный модуль программы.
3.2 Проектирование классов сущностей
К классам сущностей относятся классы: Goods, PieceGoods, WeightGoods и GoodsPosition.
Класс Goods имеет следующие поля:
static int ID; //Генератор id
int id; //Уникальный номер
char Title[100]; //Название
double Cost; //Цена
В классе описано 2 конструктора:
- Goods() - конструктор по умолчанию;
- Goods(char * Title, double Cost) - конструктор с параметрами.
Спецификация методов класса приведена в таблице 3.1.
Таблица 3.1 - Спецификация методов класса Goods
Метод Type() |
||
Назначение |
Возвращает тип объета |
|
Область видимости |
public |
|
Заголовок |
virtual char Type() = 0 |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
char |
|
Возвращаемое значение |
Тип объекта |
|
Примечание |
Метод абстрактный, будет переопределен у наследников |
|
Метод getID |
||
Назначение |
Вернуть ID |
|
Область видимости |
public |
|
Заголовок |
int getID() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
int * |
|
Возвращаемое значение |
ID товара |
|
Метод setID |
||
Назначение |
Установить ID |
|
Область видимости |
public |
|
Заголовок |
void setID(int value) |
|
Параметры |
int value - знаечение |
|
Тип возвращаемого значения |
void |
|
Метод getTitle |
||
Назначение |
Вернуть название |
|
Область видимости |
public |
|
Заголовок |
char * getTitle() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
char * |
|
Возвращаемое значение |
Строка название |
|
Метод setTitle |
||
Назначение |
Присвоить название |
|
Область видимости |
public |
|
Заголовок |
void setTitle(char * value) |
|
Параметры |
char * value - название |
|
Тип возвращаемого значения |
void |
|
Метод getCost |
||
Назначение |
Вычислить цену |
|
Область видимости |
public |
|
Заголовок |
double getCost() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
Double |
|
Возвращаемое значение |
Цена |
|
Метод setCost |
||
Назначение |
Присвоить цену |
|
Область видимости |
Public |
|
Заголовок |
void setCost(double value) |
|
Параметры |
double value - цена |
|
Тип возвращаемого значения |
Void |
|
Метод Write |
||
Назначение |
Печать в поток |
|
Область видимости |
Public |
|
Заголовок |
void Write(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
Void |
|
Примечание |
Метод виртуальный |
|
Метод Read |
||
Назначение |
Чтение из потока |
|
Область видимости |
Public |
|
Заголовок |
void Read(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
Класс WeightGoods является наследником класса Goods.
Дополнительно класс имеет поле:
char Meagure[10]; //Единицы измерения (кг, тонны, граммы, караты)
В классе описано 2 конструктора:
- WeightGoods() - конструктор по умолчанию;
- WeightGoods(char * Title, double Cost, char * Meagure = "кг") - конструктор с параметрами.
Спецификация методов класса приведена в таблице 3.2.
Таблица 3.1 - Спецификация методов класса WeightGoods
Метод Type() |
||
Назначение |
Возвращает тип объета |
|
Область видимости |
public |
|
Заголовок |
virtual char Type() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
char |
|
Возвращаемое значение |
Тип объекта |
|
Метод getMeagure |
||
Назначение |
Вернуть единицы измерения |
|
Область видимости |
public |
|
Заголовок |
char * getMeagure() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
char * |
|
Возвращаемое значение |
Единицы измерения |
|
Метод setMeagure |
||
Назначение |
Установить единицы измерения |
|
Область видимости |
public |
|
Заголовок |
void setMeagure(char * value) |
|
Параметры |
int value - знаечение |
|
Тип возвращаемого значения |
void |
|
Метод getTitle |
||
Назначение |
Вернуть название |
|
Область видимости |
public |
|
Заголовок |
char * getTitle() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
char * |
|
Возвращаемое значение |
Строка название |
|
Метод Write |
||
Назначение |
Печать в поток |
|
Область видимости |
public |
|
Заголовок |
void Write(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
|
Метод Read |
||
Назначение |
Чтение из потока |
|
Область видимости |
public |
|
Заголовок |
void Read(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
Класс PieceGoods является наследником класса Goods.
В классе описан конструктор:
- PieceGoods() - конструктор по умолчанию.
Спецификация методов класса приведена в таблице 3.3.
Таблица 3.3 - Спецификация методов класса PieceGoods
Метод Type() |
||
Назначение |
Возвращает тип объета |
|
Область видимости |
public |
|
Заголовок |
virtual char Type() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
char |
|
Возвращаемое значение |
Тип объекта |
|
Метод Write |
||
Назначение |
Печать в поток |
|
Область видимости |
public |
|
Заголовок |
void Write(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
|
Метод Read |
||
Назначение |
Чтение из потока |
|
Область видимости |
public |
|
Заголовок |
void Read(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
Класс GoodsPosition имеет следующие поля:
int id; //Товар (id)
double Quantity; //Количество
В классе описано 3 конструктора:
- GoodsPosition() - конструктор по умолчанию;
- GoodsPosition(int id, double Quantity = 1) - конструктор с параметрами;
- GoodsPosition(Goods * goods, double Quantity = 1): GoodsPosition(goods->getID(),Quantity) - конструктор копирования
Спецификация методов класса приведена в таблице 3.4.
Таблица 3.4 - Спецификация методов класса GoodsPosition
Метод getID |
||
Назначение |
Вернуть ID |
|
Область видимости |
public |
|
Заголовок |
int getID() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
int * |
|
Возвращаемое значение |
ID товара |
|
Метод setID |
||
Назначение |
Установить ID |
|
Область видимости |
public |
|
Заголовок |
void setID(int value) |
|
Параметры |
int value - знаечение |
|
Тип возвращаемого значения |
void |
|
Метод getQuantity |
||
Назначение |
Вернуть количество |
|
Область видимости |
public |
|
Заголовок |
double getQuantity() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
double |
|
Возвращаемое значение |
Количество |
|
Метод setQuantity |
||
Назначение |
Присвоить название |
|
Область видимости |
public |
|
Заголовок |
void setQuantity(double value) |
|
Параметры |
double value - название |
|
Тип возвращаемого значения |
void |
|
Метод Write |
||
Назначение |
Печать в поток |
|
Область видимости |
public |
|
Заголовок |
void Write(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
|
Метод Read |
||
Назначение |
Чтение из потока |
|
Область видимости |
public |
|
Заголовок |
void Read(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Примечание |
Метод виртуальный |
3.3 Проектирование управляющих классов
К управляющим в программе относится класс PositionList.
В классе описаны следующие поля:
bool foreingoods = false; //принадлежность списка
Goods * * goods = NULL; //Массив из товаров
int * goodscount = NULL; //Количество
GoodsPosition * * positions = NULL; //Массив из позиций
int positionscount = 0; //Количество
char Title[100]; //Название
char Comments[200]; //Дополнительные сведения (дата, контакты)
В классе описано 2 конструктора:
- PositionList() - конструктор по умолчанию;
- PositionList(Goods * * goods, int * goodscount) - конструктор с параметрами.
В классе описан деструктор:
~PositionList()
Спецификация методов класса приведена в таблице 3.5.
Таблица 3.5 - Спецификация методов класса PositionList
Метод goodsCount() |
||
Назначение |
Вернуть количество товаров |
|
Область видимости |
public |
|
Заголовок |
int goodsCount() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
int |
|
Возвращаемое значение |
Количество товаров |
|
Метод getgoodsCount() |
||
Назначение |
Вернуть ссылку на количество товаров |
|
Область видимости |
public |
|
Заголовок |
int * getgoodsCount() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
int * |
|
Возвращаемое значение |
Ссылка на количество товаров |
|
Метод getTitle |
||
Назначение |
Вернуть название |
|
Область видимости |
public |
|
Заголовок |
char * getTitle() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
char * |
|
Возвращаемое значение |
Строка название |
|
Метод setTitle |
||
Назначение |
Присвоить название |
|
Область видимости |
public |
|
Заголовок |
void setTitle(char * value) |
|
Параметры |
char * value - название |
|
Тип возвращаемого значения |
void |
|
Метод getComments |
||
Назначение |
Вернуть комментарий |
|
Область видимости |
public |
|
Заголовок |
char * getComments() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
char * |
|
Возвращаемое значение |
Строка комментарий |
|
Метод setComments |
||
Назначение |
Присвоить комментарий |
|
Область видимости |
public |
|
Заголовок |
void setComments(char * value) |
|
Параметры |
char * value - комментарий |
|
Тип возвращаемого значения |
void |
|
Метод Add |
||
Назначение |
Добавить товар |
|
Область видимости |
public |
|
Заголовок |
void Add(Goods * g) |
|
Параметры |
Goods * g - товар |
|
Тип возвращаемого значения |
void |
|
Метод Add |
||
Назначение |
Добавить позицию |
|
Область видимости |
public |
|
Заголовок |
bool Add(GoodsPosition * gp) |
|
Параметры |
GoodsPosition * gp - товарная позиция |
|
Тип возвращаемого значения |
bool |
|
Возвращаемое значение |
Признак успешного добавления |
|
Метод Add |
||
Назначение |
Изменить количество |
|
Область видимости |
public |
|
Заголовок |
bool Add(int id, double Quantity) |
|
Параметры |
int id - номер позиции double Quantity - количество |
|
Тип возвращаемого значения |
bool |
|
Возвращаемое значение |
Признак успешного добавления |
|
Метод IndexOf |
||
Назначение |
Поиск по индексу |
|
Область видимости |
public |
|
Заголовок |
int IndexOf(int id) |
|
Параметры |
int id - номер позиции |
|
Тип возвращаемого значения |
int |
|
Возвращаемое значение |
Индекс найденного элемента |
|
Метод getGoods |
||
Назначение |
Доступ к товарам по индексу |
|
Область видимости |
public |
|
Заголовок |
Goods * getGoods(int index) |
|
Параметры |
int index - номер позиции |
|
Тип возвращаемого значения |
Goods * |
|
Возвращаемое значение |
Ссылка на товар |
|
Метод getGoods |
||
Назначение |
Доступ к списку товаров |
|
Область видимости |
public |
|
Заголовок |
Goods ** getGoods() |
|
Параметры |
Нет |
|
Тип возвращаемого значения |
Goods ** |
|
Возвращаемое значение |
Ссылка на массив товаров |
|
Метод getPosition |
||
Назначение |
Доступ к позиции |
|
Область видимости |
public |
|
Заголовок |
GoodsPosition * getPosition(int index) |
|
Параметры |
int index - номер позиции |
|
Тип возвращаемого значения |
GoodsPosition * |
|
Возвращаемое значение |
Ссылка на позицию |
|
Метод IndexOf |
||
Назначение |
Поиск по названию |
|
Область видимости |
public |
|
Заголовок |
int IndexOf(char * Title) |
|
Параметры |
char * Title - название |
|
Тип возвращаемого значения |
int |
|
Возвращаемое значение |
Индекс найденного элемента |
|
Метод WriteGoods |
||
Назначение |
Печать в поток списка товаров |
|
Область видимости |
public |
|
Заголовок |
void WriteGoods(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Метод WritePositions |
||
Назначение |
Печать в поток списка позиций |
|
Область видимости |
public |
|
Заголовок |
void WritePositions(ofstream &f) |
|
Параметры |
ofstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Метод ReadGoods |
||
Назначение |
Чтение из потока списка товаров |
|
Область видимости |
public |
|
Заголовок |
void ReadGoods(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
|
Метод ReadPositions |
||
Назначение |
Чтение из потока списка позиций |
|
Область видимости |
public |
|
Заголовок |
void ReadPositions(ifstream &f) |
|
Параметры |
ifstream &f - поток |
|
Тип возвращаемого значения |
void |
3.4 Проектирование интерфейсных классов
В программе реализовано 3 интерфейсных класса:
- Menu - реализует текстовое меню для взаимодействия с пользователем;
- Print - реализует вывод на консоль информации о различных объектах системы;
- Input - реализует ввод с консоли информации о различных объектах системы.
Класс Menu имеет одно закрытое поле описанное как:
char valid[256]
содержащее в себе массив допустимых обозначений команд.
В классе описано 2 конструктора:
- Menu() - конструктор по умолчанию;
- Menu(char * symbols) - конструктор с параметрами.
Спецификация методов класса приведена в таблице 3.6.
Таблица 3.6 - Спецификация методов класса Menu
Метод IsValid |
||
Назначение |
Проверка, допустим ли введенный символ (является ли командой) |
|
Область видимости |
private |
|
Заголовок |
bool IsValid(char c) |
|
Параметры |
char c - введенный символ |
|
Тип возвращаемого значения |
bool |
|
Возвращаемое значение |
Истина, если символ допустим и ложь в ином случае |
|
Метод Helper |
||
Назначение |
Вывод меню на экран |
|
Область видимости |
public |
|
Заголовок |
void Helper() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
void |
|
Метод setValid |
||
Назначение |
Установить разрешенные символы |
|
Область видимости |
public |
|
Заголовок |
void setValid(char * symbols) |
|
Параметры |
char * symbols - разрешенные символы |
|
Тип возвращаемого значения |
void |
|
Метод get |
||
Назначение |
Вернуть символ, введенный пользователем |
|
Область видимости |
public |
|
Заголовок |
char get() |
|
Параметры |
нет |
|
Тип возвращаемого значения |
void |
Класс Print не имеет полей.
Спецификация методов класса приведена в таблице 3.7.
Таблица 3.7 - Спецификация методов класса Print
Метод print |
||
Назначение |
Печать на экране информации об объекте |
|
Область видимости |
public |
|
Примечание |
Метод имеет 5 перегрузок |
|
Все перегрузки описаны как static |
||
Заголовок |
void print(GoodsPosition * g, PositionList * p) |
|
Параметры |
GoodsPosition * g - товарная позиция PositionList * p - список товаров |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void print(PieceGoods * g) |
|
Параметры |
PieceGoods * g - штучный товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void print(WeightGoods * g) |
|
Параметры |
WeightGoods * g - весовой товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void print(Goods * g) |
|
Параметры |
Goods * g - товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void print(PositionList * g, bool goods=true) |
|
Параметры |
PositionList * g, - список товаров bool goods=true - товар |
|
Тип возвращаемого значения |
void |
|
Метод printGoods |
||
Назначение |
Вывод списка товаров |
|
Область видимости |
private |
|
Примечание |
Метод объявлен как static |
|
Заголовок |
void printGoods(PositionList * g) |
|
Параметры |
PositionList * g - список товаров |
|
Тип возвращаемого значения |
void |
|
Метод printPositions |
||
Назначение |
Вывод списка позиций |
|
Область видимости |
private |
|
Примечание |
Метод объявлен как static |
|
Заголовок |
void printPositions(PositionList * g) |
|
Параметры |
PositionList * g - список товаров |
|
Тип возвращаемого значения |
void |
Класс Input не имеет полей.
Спецификация методов класса приведена в таблице 3.8.
Таблица 3.8 - Спецификация методов класса Input
Метод input |
||
Назначение |
Ввод информации об объекте с клавиатуры |
|
Область видимости |
public |
|
Примечание |
Метод имеет 4 перегрузки |
|
Все перегрузки описаны как static |
||
Заголовок |
static void input(Goods * g) |
|
Параметры |
Goods * g - товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void input(PieceGoods * g) |
|
Параметры |
PieceGoods * g - штучный товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
void input(WeightGoods * g) |
|
Параметры |
WeightGoods * g - весовой товар |
|
Тип возвращаемого значения |
void |
|
Заголовок |
bool input(GoodsPosition * g, PositionList * p) |
|
Параметры |
Goods * g - товар |
|
Тип возвращаемого значения |
void |
4. Экспериментальная часть
4.1 Цели тестирования
Объект тестирования: программа «Orders».
Цель тестирования: убедится в корректной работе программы и выполнении ей всех заявленных функций.
Метод тестирования: функциональное тестирование.
4.2 Структура тестирующей программы
Для выбора функции в программе предусмотрено меню показанное на рисунке 4.1.
Рисунок 4.1 - Меню программы
Для добавления товара необходимо указать его вид, название и цену (рисунок 4.2).
Рисунок 4.2 - Добавление товара
На рисунке 4.3 показан вывод списка товаров на складе.
Рисунок 4.3 - Вывод списка товаров на складе
Для поиска необходимо ввести название товара (рисунок 4.4).
Рисунок 4.4 - Поиск товара на складе
Для создания заказа необходимо ввести его название и описание (рисунок 4.5.)
Рисунок 4.5 - Создание заказа
На рисунке 4.6 показаны примеры добавления товаров в заказ (рисунок 4.6).
Рисунок 4.6 - Добавления товаров в заказ
На рисунке 4.7 показан пример просмотра содержимого текущего заказа.
Рисунок 4.7 - Просмотр текущего заказа
Также можно просмотреть список заказов (рисунок 4.8).
Рисунок 4.8 - Просмотр списка заказов
4.3 Тесты
Результаты тестирования приведены в таблице 4.1.
Таблица 4.1 - Результаты тестирования
Тест |
Ожидаемый результат |
Результат теста |
|
Вывод списка товаров на складе |
Выводится список товаров на складе |
Успешно |
|
Добавление нового товара на склад |
Товар добавлен |
Успешно |
|
Изменение количества товара на складе |
Позиция отредактирована |
Успешно |
|
Вывод списка заказов |
Выводится список заказов |
Успешно |
|
Выбор текущего заказа |
Заказ выбран |
Успешно |
|
Вывод списка товаров в заказе |
Выводится список товаров в заказе |
Успешно |
|
Добавление нового товара в заказ |
Товар добавлен в заказ |
Успешно |
|
Изменение количества товара заказе |
Позиция отредактирована |
Успешно |
По результатам тестирования можно сделать вывод, что программа работает корректно и выполняет функции в полном объеме.
Список использованных источников
1. Грейди Буч. UML. Руководство пользователя / Буч Горейди, Джеймс Рамбо, Айвар Джекобсон. -- М. : ДМК, 2000. -- 432 с.
2. Жарков В. Visual C++ на практике / Валерий Жарков - Москва.: Лаборатория компьютерных знаний, 2002 - 424с.
3. Леоненков A. Самоучитель UML 2 / А. Леоненков. - Санкт-Петербург.: БХВ-Петербург, 2007 - 576с.
4. Липпман С. Язык программирования C++. Базовый курс / Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му - М.:Вильямс, 2017 - 1120с.
5. Пахомов Б. C/C++ и MS Visual C++ 2012 для начинающих / Борис Пахомов -СПб.: БХВ-Петербург, 2015 - 518с.
6. Страуструп Б. Язык программирования С++ / Бьерн Страуструп - М.:Бином, 2015 - 1136с.
7. Хогенсон Г. C++/CLI. Язык Visual C++ для среды .NET/ Гордон Хогенсон - Москва.:Вильямс, 2007 - 464с.
8. Холзнер С. Visual C++ 6. Учебный курс / Стивен Холзнер -СПб.:Питер, 2007 - 570с.
9. Фаулер М. UML. Основы. Краткое руководство по стандартному языку объектного моделирования / М. Фаулер - Москва.: Символ-Плюс, 2011-162с.
Приложение
Исходный код программы
Модуль Goods.h
#pragma once
#include <string.h>
#include <fstream>
using namespace std;
//Базовый класс "товар"
class Goods
{
protected:
static int ID; //Генератор id
int id; //Уникальный номер
char Title[100]; //Название
double Cost; //Цена
public:
Goods()
{
id = ID++;
}
Goods(char * Title, double Cost):Goods()
{
setTitle(Title);
setCost(Cost);
}
virtual char Type() = 0; //Абстрактный
//Сообщить id
int getID() { return id; }
//Установить id
void setID(int value) { id = value; }
//Прочитать название
char * getTitle() { return Title; }
//Записать название
void setTitle(char * value) { strcpy(Title, value); }
//Прочитать цену
double getCost() { return Cost; }
//Записать цену
void setCost(double value) { if (value >= 0) Cost = value; }
//Записать в выходной поток
virtual void Write(ofstream &f)
{
f << id << endl;
f << Title << endl;
f << Cost << endl;
}
//Прочитать из входного потока
virtual void Read(ifstream &f)
{
char Buffer[100];
f.getline(Buffer,sizeof(Buffer));
id = atoi(Buffer);
if (id > ID) ID = id;
f.getline(Title, sizeof(Title));
f.getline(Buffer, sizeof(Buffer));
Cost = atof(Buffer);
}
};
Модуль GoodsPosition.h
#pragma once
#include "Goods.h"
#include "PieceGoods.h"
#include "WeightGoods.h"
#include <string.h>
#include <fstream>
using namespace std;
//Класс "позиция" товара (на складе или в заказе)
class GoodsPosition
{
int id; //Товар (id)
double Quantity; //Количество
public:
GoodsPosition()
{
}
GoodsPosition(int id, double Quantity = 1)
{
this->id = id;
setQuantity(Quantity);
}
GoodsPosition(Goods * goods, double Quantity = 1):GoodsPosition(goods->getID(),Quantity)
{
}
int getID() { return id; }
void setID(int value) { id = value; }
double getQuantity() { return Quantity; }
void setQuantity(double value) { Quantity = value; } //Может быть отрицательным, например, возврат
//Записать в выходной поток
virtual void Write(ofstream &f)
{
f << id << endl;
f << Quantity << endl;
}
//Прочитать из входного потока
virtual void Read(ifstream &f)
{
char Buffer[100];
f.getline(Buffer, sizeof(Buffer));
id = atoi(Buffer);
f.getline(Buffer, sizeof(Buffer));
Quantity = atof(Buffer);
}
};
Модуль PieceGoods.h
#pragma once
#include "Goods.h"
#include <string.h>
#include <fstream>
using namespace std;
//Штучный товар.
//Наследник от "товар вообще"
class PieceGoods:public Goods
{
protected:
public:
PieceGoods()
{
}
virt...
Подобные документы
Определение программного модуля. Принципы использования dll-библиотеки. Преимущества и недостатки использования dll-библиотек. Описание коэффициентов моделей. Разработка структуры классов. Реализация библиотеки классов в среде разработки MS Visual Studio.
дипломная работа [676,6 K], добавлен 16.06.2015Разработка иерархии классов, содержащей не менее трех уровней. Определение базовых и производных классов. Анализ технического задания. Проектирование структуры программы и базовых алгоритмов. Программная реализация разработанной структуры и алгоритмов.
курсовая работа [34,9 K], добавлен 11.01.2011Разработка структуры класса "Экран курсового проектирования", которая будет основой для хранения информации о студентах, выполняющих курсовые работы. Реализация визуального приложения для тестирования иерархии классов на языке программирования С++.
курсовая работа [3,3 M], добавлен 18.03.2011Ознакомление с программой проведения сборки компьютера из деталей, имеющихся в базе данных. Рассмотрение правил создания иерархии классов. Описание основных методов и пользовательского интерфейса. Изучение системных требований и текстов основных классов.
курсовая работа [710,2 K], добавлен 26.07.2014Подбор игрового движка и описание его основных характеристик. Разработка структуры, алгоритма и интерфейса программы. Проектирование иерархии классов. Выделение типового приема визуализации. Тестирование правильности работы программного обеспечения.
курсовая работа [3,1 M], добавлен 19.01.2017Проектирование программного продукта для использования в организации учета медикаментов в аптеке. Построение функциональной модели автоматизированной системы; разработка и тестирование иерархии классов в соответствии с объектно-ориентированным подходом.
курсовая работа [1,5 M], добавлен 21.02.2013Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.
дипломная работа [1,0 M], добавлен 09.08.2016Иерархия основных классов MFC (базовой библиотеки классов). Структура простой MFC программы. Работа с текстом в MFC. Функции вывода текста, установки цветов, режимов отображения, получение метрик. Применение контекста устройства, обработка сообщений.
контрольная работа [27,8 K], добавлен 11.08.2010Анализ нейронных сетей и выбор их разновидностей. Модель многослойного персептрона с обучением по методу обратного распространения ошибки. Проектирование библиотеки классов для реализации нейросети и тестовой программы, описание тестирующей программы.
курсовая работа [515,4 K], добавлен 19.06.2010Разработка набора взаимосвязанных классов для реализации Hash-поиска как специализированного контейнера. Поиск с использованием Хэш-функций. Объектная технология. Описание пользовательского интерфейса. Листинг и описание всех классов библиотеки на DP.
курсовая работа [231,2 K], добавлен 15.10.2008Разработка простейших классов на примере разработки моделей элементарных объектов и динамических информационных структур (одно и двунаправленных списков). Разработка простых классов. Вызывающая программа (main). Информационные динамические структуры.
творческая работа [17,5 K], добавлен 08.12.2007Изучение принципов объектно-ориентированного программирования. Понятие класса в Delphi, в основе которых лежат три фундаментальные принципы - инкапсуляция, наследование и полиморфизм. Разработка классов транспортных средств и структур классов (кошки).
курсовая работа [29,7 K], добавлен 29.10.2011Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.
курсовая работа [1,4 M], добавлен 07.08.2013Создание библиотеки классов на основе C-строк и управляемую пользователем программу с псевдографическим интерфейсом, тестирующую её работу и отображающую результат. Упрощённая структура библиотек, взаимодействие классов и объектов, основные алгоритмы.
курсовая работа [37,5 K], добавлен 15.08.2012Диаграмма прецедентов взаимодействия игрока и программного продукта. Требования к пользовательскому интерфейсу. Диаграмма состояний проектируемого приложения. Выбор инструментальных средств разработки. Проектирование алгоритмов и иерархии классов.
дипломная работа [9,9 M], добавлен 20.03.2017Иерархия и типы классов в программе, особенности обеспечения наследования. Наследование по принципу подчиненности. Включение в другие классы или делегирование. Понятие изолированных классов. Конструкторы и деструкторы. Иерархия классов NET Framework.
презентация [91,8 K], добавлен 09.12.2013Классы и свойства объектно-ориентированного пространства. Методика создания новых классов в delphi: выбор родительского класса, изменение существующих компонентов, создание подклассов для элементов управления windows. Создание новой ветви классов.
контрольная работа [13,0 K], добавлен 07.07.2012Реализация абстрактных методов демонстрации иерархии классов: постановка задачи, имитирующей жизнь двух племен муравьев, создание класса-родителя "муравей", определяющего методы и свойства, которые унаследуют потомки. Программное и аппаратное обеспечение.
курсовая работа [630,0 K], добавлен 19.03.2012Описание классов данных. Основное меню программы. Добавление и удаление объектов. Вывод устройств хранения в указанном ПК. Устройство хранения, класс ноутбук, класс жёсткий диск, класс персональный компьютер, класс планшет и класс Flash-память.
курсовая работа [1,8 M], добавлен 30.03.2014Разработка программы, позволяющей проверить знания таблицы умножения у учеников начальных классов. Проектирование программы в среде DEV-C++. Структурная схема программы и ее описание. Контрольный пример и анализ результатов, инструкция пользователя.
курсовая работа [1,8 M], добавлен 24.06.2015