Разработка библиотеки классов "Заказ товаров"

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

Рубрика Программирование, компьютеры и кибернетика
Вид практическая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.