Объектно-ориентированное программирование на языке С++

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Институт Информационных технологий

Кафедра Математическое и программное обеспечение ЭВМ

КУРСОВАЯ РАБОТА

по дисциплине Объектно-ориентированное программирование

на тему «Объектно-ориентированное программирование на языке С++»

Выполнил

студент группы 1ИС 310

Шидловская Валерия Игоревна

Череповец, 2014

Оглавление

  • Введение
    • 1. Общие сведения
    • 2. Функциональное назначение
    • 3. Объектно-ориентированный анализ предметной области
    • 4. Описание логической структуры программы
    • 5. Используемые технические средства
    • 6. Вызов и загрузка
    • 7. Входные данные
    • 8. Выходные данные
    • 9. Тестирование программы
  • Заключение
  • Список используемой литературы
  • Приложения

Введение

Данный программный продукт предназначен для обработки предметной области «Бытовая техника». В ходе разработки были использованы принципы и возможности объектно-ориентированного программирования. При его разработке была создана иерархия родственных классов предметной области, реализована работа виртуальных и чисто виртуальных функций, а также класс интерфейс.

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

1. Общие сведения

Программа предназначена для обработки информации об объектах предметной области «Бытовая техника».

В программе использовались следующие концепции ООП:

· механизм наследования;

· принцип инкапсуляции;

· перегрузка операторов.

Для обработки объектов в программе предусмотрены функции добавления, удаления, сортировки, копирования и поиска по полям, выбранным пользователем.

Разработка программного продукта была произведена с использованием средств языка С++ в среде визуального программирования C++ Builder 6.0 в операционной системе Windows 7.

2. Функциональное назначение

Программа предназначена для обработки данных, относящихся к предметной области «Бытовая техника» и выполняет следующие возможности:

— ввод данных с клавиатуры;

— сохранение данных в файл;

— загрузка данных из файла;

— просмотр данных об объектах выбранного класса;

— сортировка данных по полю «Цена"(по возрастанию/убыванию);

— сравнение объектов класса по полю «Цена»;

— копирование данных;

— поиск данных по названию элемента интерьера.

3. Объектно-ориентированный анализ предметной области

Для описания предметной области разработана следующая иерархия классов (рис. 1):

Рис. 1. Иерархия родственных классов

Класс-интерфейс (абстрактный базовый класс) содержит объявление чисто виртуальных функций (или отложенных методов). В данном случае, это функция печати print (). Объявляется такая функция в открытой части класса.

Производный от АБК класс — базовый класс Бытовая техника — содержит общие характеристики элементов бытовой техники, такие как название, мощность, цена.

Эти поля размещены в защищенном блоке protected для того, чтобы быть доступными для всех классов-потомков. Доступ к полям базового класса осуществляется с помощью методов, объявленных в блоке public. В базовом классе реализованы: конструктор по умолчанию, с параметрами и копирующий конструктор, функция вывода данных на экран.

Классы Замораживающая техника, Пылесосы, Микроволновые печи являются производными для БК. Механизм наследования — одиночный. Каждый производный класс содержит элементы родительского класса и при этом включает собственные, присущие только ему характеристики.

Класс Замораживающая техника содержит 2 числовые характеристики — «Максим. температура» и «Количество камер» и в свою очередь имеет 2 производных класса со своими характеристиками:

-Морозильные камеры («Расположение»);

-Холодильники («Схема компоновки»);

Класс Пылесосы имеет числовые характеристики «Объём пылесборника», «Мощность всасывания», «Количество насадок» и не имеет производных классов.

Класс Микроволновые печи (СВЧ) содержит одну строковую характеристику — «Тип».

В программе создаются объекты классов Морозильные камеры, Холодильники, Пылесосы, Микроволновые печи. Внутри этих классов содержатся функции файлового ввода / вывода, перегруженные операторы присваивания, сравнения, а виртуальная функция вывода описана в соответствии с компонентными данными каждого класса.

4. Описание логической структуры программы

Программа одномодульная, содержащая в себе описание классов, создание объектов и осуществление работы с ними.

Для создания иерархии родственных типов используется механизм одиночного наследования. Количество уровней в иерархии — 4.

В программе предусмотрены следующие компонентные функции:

· load - загрузка из файла, при этом необходимо передать в качестве формального параметра файл — источник, таблица для вывода, номер строки;

· save — сохранение в файл, в качестве формального параметра указывается файл — приемник;

· clear — очищает файл перед записью;

· operator = — перегруженный оператор присваивания, используется для присвоения объектов;

· оperator == — перегруженный оператор сравнения[1];

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

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

При нажатии на кнопку «Сортировать» производится сортировка по возрастанию / убыванию по полю «Цена».

Кнопка «Сравнить» позволяет сравнить выведенные в таблицу объекты по «Цене» с заданными номерами.

При вызове функции print вызываются виртуальная функция print из класса interf. Так как данная функция — виртуальная, то работает механизм замещения, поэтому виртуальная функция замещается соответствующей функцией для производного класса.

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

5. Используемые технические средства

Системные средства:

1) операционные системы:

· Windows XP;

· Windows 7;

· Windows 8.

2) аппаратные средства:

· клавиатура;

· мышь;

· монитор.

6. Вызов и загрузка

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

7. Входные данные

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

Таблица 1.

Морозильные камеры.

Входные данные

Тип данных

Название

String

Мощность

Integer

Цена

Integer

Максим. Температура

Integer

Количество камер

Integer

Расположение

String

Таблица 2.

Холодильники.

Входные данные

Тип данных

Название

String

Мощность

Integer

Цена

Integer

Максим. Температура

Integer

Количество камер

Integer

Схема компоновки

String

Таблица 3.

Пылесосы.

Входные данные

Тип данных

Название

String

Мощность

Integer

Цена

Integer

Объём пылесборника

Integer

Мощность всасывания

Integer

Количество насадок

Integer

Таблица 4.

Микроволновые печи.

Входные данные

Тип данных

Название

String

Мощность

Integer

Цена

Integer

Тип

String

8. Выходные данные

Выходной информацией является информация сохраняемая в файл и выводимая на экран.

9. Тестирование программы

Тестирование программы оформлено в виде таблиц. Тестированию каждого класса соответствует отдельная таблица (табл.5 — табл. 8).

Таблица 5.

Морозильные камеры.

Дата

Тестируемая функция

Входные данные

Результат работы

27. 05. 2014

Создание объекта класса

Нет

Успех

29. 05. 2014

Save — сохранение в файл

moroz_kamera. txt

Успех

30. 05. 2014

Load — загрузка из файла

moroz_kamera. txt

Успех

30. 05. 2014

Print — вывод на экран

StringGrid1

Успех

30. 05. 2014

Сравнение

Объекты данного класса

Успех

Таблица 6.

Холодильники.

Дата

Тестируемая функция

Входные данные

Результат работы

27. 05. 2014

Создание объекта класса

Нет

Успех

29. 05. 2014

Save — сохранение в файл

holodilniki. txt

Успех

30. 05. 2014

Load — загрузка из файла

holodilniki. txt

Успех

30. 05. 2014

Print — вывод на экран

StringGrid2

Успех

30. 05. 2014

Сравнение

Объекты данного класса

Успех

Таблица 7.

Пылесосы.

Дата

Тестируемая функция

Входные данные

Результат работы

29. 05. 2014

Создание объекта класса

Нет

Успех

01. 06. 2014

Save — сохранение в файл

pilesos. txt

Успех

01. 06. 2014

Load — загрузка из файла

pilesos. txt

Успех

01. 06. 2014

Print — вывод на экран

StringGrid4

Успех

01. 06. 2014

Сравнение

Объекты данного класса

Успех

Таблица 8.

Микроволновая печь.

Дата

Тестируемая функция

Входные данные

Результат работы

27. 05. 2014

Создание объекта класса

Нет

Успех

04. 06. 2014

Save — сохранение в файл

microv_pechi. txt

Успех

04. 06. 2014

Load — загрузка из файла

microv_pechi. txt

Успех

04. 06. 2014

Print — вывод на экран

StringGrid3

Успех

04. 06. 2014

Сравнение

Объекты данного класса

Успех

Заключение

В результате проделанной работы был закреплен материал, изученный в курсе дисциплины «Объектно-ориентированное программирование». Приобретены навыки программирования в среде C++ Builder, также было разработано приложение, которое отвечает всем требованиям, описанным в техническом задании (Приложение 1).

Список используемой литературы

1. Лаптев В. В. «С++. Объектно — ориентированное программирование: Учебное пособие. — СПб.: Питер, 2008. — 464 с.: ил. — (Серия „Учебное пособие“)»

2. Р. Лафоре «Объектно-Ориентированное Программирование в С++. «: 4-е издание.; - М. :Питер, — 2004. — 902 с.

Приложение 1. Техническое задание

Одной из самых значительных проблем в программировании является сложность. Чем больше и сложнее программа, тем важнее становится разбить ее на небольшие, четко очерченные части. Чтобы побороть сложность, необходимо абстрагироваться от мелких деталей. В этом смысле классы представляют собой весьма удобный инструмент.

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

1. Основание для разработки.

Основанием для разработки является задание на курсовую работу по дисциплине «Объектно-ориентированное программирование» по теме «Объектно-ориентированное программирование на языке C++».

Задание: программирование визуальный класс файловый

A. Разработайте иерархию родственных типов, корневой класс которой абстрактный базовый класс (класс-интерфейс), для моделирования и обработки данных предметной области набором отложенных методов — полиморфная обработка родственных объектов (согласно варианта А.х. х).

B. Реализуйте функции обработки данных (сортировка и поиск по выбранным полям и задаваемым диапазонам значений, другие функции, в том числе перегруженные).

C. Реализуйте файловый ввод/вывод и ввод данных с клавиатуры, вывод данных на дисплей.

D. Предусмотрите обработку различных исключительных ситуаций.

Е. Работа всех функций должна быть проверена и результаты проверки оформлены протоколом тестирования.

2. Назначение.

Основным назначением программного продукта является осуществление работы с данными о бытовой техники.

Пользователю предоставляются возможности:

— просмотр информации о элементах бытовой техники;

— добавление данных о элементах бытовой техники;

— чтение данных из файла;

— сохранение данных в файл;

— сортировка элементов по стоимости;

— сравнение предметов интерьера по стоимости.

3. Требования к программе.

4.1. Требования к функциональным характеристикам.

Программа должна включать в себя:

1. Иерархию родственных типов, корневой класс которой абстрактный базовый класс — класс интерфейс, для моделирования предметной области «Бытовая техника». Абстрактные классы используются в качестве обобщенных концепций, на основе которых можно создавать более конкретные производные классы. Невозможно создать объект типа абстрактного класса; однако можно использовать указатели и ссылки на типы абстрактного класса. Класс, содержащий хотя бы одну чисто виртуальную функцию, считается абстрактным. Классы, производные от абстрактного класса, должны реализовать все его чисто виртуальные функции, иначе они также будут абстрактными классами.

2. Реализацию файлового ввода/вывода и ввод данных с клавиатуры, вывод данных на дисплей. Файловый ввод-вывод позволяет считывать данные из множества различных файлов, и выводить их в другие (или те же) файлы; для каждого класса создается свой файл, в который построчно записываются данные объектов этого класса. Ввод данных с клавиатуры осуществляется при заполнении соответствующих полей и нажатии на кнопку, при этом вызывается конструктор с параметрами для создания объектов класса. Вывод данных на дисплей осуществляется с помощью отложенного метода класса интерфейса.

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

4. Реализацию функции обработки данных (сортировка и поиск по полю «Название», перегруженная оператор сравнения на равенство по полю «Цена»). Перегрузка операторов -- один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.

4.2. Требования к надежности.

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

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

— Добавление элемента с некорректными данными (вместо букв введены цифры или наоборот). При этом выводится сообщение об ошибке.

— Добавление пустого элемента (заполнены не все поля). При этом выводится сообщение об ошибке. Для корректного добавления необходимо заполнить все поля.

4.3. Требования к составу и параметрам технических средств.

Система предназначена для работы на IBM-совместимых персональных компьютерах с ОС Windows 98/ME/2000/XP/Vista/7/8.

Минимальная конфигурация:

— тип процессора PentiumIII / PentiumIV;

— объем оперативного запоминающего устройства 16 Мб и более;

— объем свободного места на жестком диске 5 Мб.

Для работы программы требуются внешние устройства — монитор, клавиатура, мышь.

4.4. Требования к информационной и программной совместимости.

Программа будет разработана на языке C++ в среде C++ Builder 6 и должна работать под управлением операционной системы семейства Windows (Windows 98/ME/2000/XP/Vista/7/8). Дополнительного программного обеспечения для функционирования программы не требуется.

5. Требования к программной документации.

Программная документация будет содержать:

· расчетно-пояснительную записку;

· текст программы;

· руководство пользователя.

6. Стадии и этапы разработки.

Таблица П1. 1.

Этапы разработки

Этапы разработки

Плановая дата

Фактическая дата

Объектно-ориентированный анализ предметной области

Проектирование необходимых динамических структур

Разработка и реализация алгоритмов

Разработка интерфейса программы

Отладка и тестирование

Составление программной документации

7. Порядок контроля и приемки.

Основная процедура контроля и приема работы будет происходить путем защиты курсовой работы.

Приложение 2. Текст программы

//---------------------------------------------------------------

//AБК — ИНТЕРФЕЙС

//---------------------------------------------------------------

class interf

{

public:

virtual void print (TStringGrid*, int&) const=0;

interf (){};

virtual ~interf (){};

};

//-----------------------

// БК БЫТОВАЯ ТЕХНИКА 2

//---------------------------------------------------------------

class bit_texnica: public interf

{protected:

AnsiString name; // название

int power; // мощность

int cena; //стоимоть

public:

bit_texnica (); //конструктор по умолчанию

bit_texnica (AnsiString n, int mo, int p); // констр c параметрами

bit_texnica (const bit_texnica & m); //копирующий конструктор

void print (TStringGrid*, int&)const; //печать

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка

bit_texnica& operator=(const bit_texnica & m); //перегрузка присваивания

friend bool operator==(const bit_texnica& m1, bit_texnica& m2); //перегрузка сравнения

};

bit_texnica: :bit_texnica () // конструктор по умолчанию !

{ name="Ariston";

power=123;

cena=11 500; }

//конструктор с параметрами !

bit_texnica: :bit_texnica (AnsiString n, int mo, int p)

{ name=n;

power=mo;

cena=p;

}

//копирующий конструктор !

bit_texnica: :bit_texnica (const bit_texnica & m)

{if (this≠& m)

{ name=m. name;

power= m. power;

cena=m. cena; }

}

void bit_texnica: :print (TStringGrid *k, int & j) const //печать

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

}; //-------------------------------------------------------------

//ПК1 ЗАМОРАЖИВАЮЩАЯ ТЕХНИККА 3. 1//----------------------------------------------------------

class zamor_tehnica: public bit_texnica

{public:

zamor_tehnica ();

zamor_tehnica (AnsiString n, int mo, int p, int maxt, int s); //maxt-максим темп, s-кол-во камер

zamor_tehnica (const zamor_tehnica & m); //копирующий конструктор

~zamor_tehnica (){}; //деструктор

void print (TStringGrid *k, int & j) const; //печать

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка из файла

zamor_tehnica& operator=(const zamor_tehnica & m); //перегрузка присваивания

friend bool operator==(const zamor_tehnica& m1, zamor_tehnica& m2); //перегрузка сравнения

protected: //доступ ограничен, но наследуются!

int max_temp;

int kol_kamer;

private: //не наследуются!

}; zamor_tehnica:zamor_tehnica ():bit_texnica () // конструктор по умолчанию !

{

max_temp=20;

kol_kamer=4;

}

//конструктор с параметрами !

zamor_tehnica: :zamor_tehnica (AnsiString n, int mo, int p, int maxt, int s): bit_texnica (n, mo, p)

{

max_temp=maxt;

kol_kamer=s;

}

//копирующий конструктор

zamor_tehnica: :zamor_tehnica (const zamor_tehnica& m): bit_texnica (m)

{

max_temp=m. max_temp;

kol_kamer=m. kol_kamer;

}

//печать !

void zamor_tehnica: :print (TStringGrid *k, int & j) const

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

k-> Cells[3][j] = IntToStr (max_temp);

k-> Cells[4][j] = IntToStr (kol_kamer);

}//------------------------------------------------

//------ МОРОЗИЛЬНЫЕ КАМЕРЫ 3.1. 1

class moroz_kamera: public zamor_tehnica

{ public:

moroz_kamera ();

moroz_kamera (AnsiString n, int mo, int p, int maxt, int s, AnsiString c); //c — расположение

~moroz_kamera (){};

void print (TStringGrid *k, int & j) const;

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка

moroz_kamera& operator=(const moroz_kamera & m); //перегрузка присваивания

friend bool operator==(const moroz_kamera& m1, moroz_kamera& m2); //перегрузка сравнения

protected:

AnsiString raspoloshenie;

}

//очистка перед записью

void moroz_kamera: :clear (char* s)

{

FILE* f1;

f1=fopen (s,"w");

fclose (f1);

}

//сохранеине в файл

void moroz_kamera: :save (char *s)

{

FILE* f1;

f1=fopen (s,"a"); //a — открывает файл для добавления

fprintf (f1,"%sn", name);

fprintf (f1,"%in", power);

fprintf (f1,"%in", cena);

fprintf (f1,"%in", max_temp);

fprintf (f1,"%in", kol_kamer);

fprintf (f1,"%sn", raspoloshenie);

fclose (f1);

}

// загрузка из файла

void moroz_kamera: :load (char* s, TStringGrid* s1, int& j)

{ AnsiString fn=s;

ifstream fin (s);

string ss;

while (!fin. eof ())

{moroz_kamera m;

getline (fin, ss,'n'); //читает целую строку

if (ss≠"")

{ m. name=ss. c_str (); }

getline (fin, ss,'n');

if (ss≠"")

{

m. power=StrToInt (ss. c_str ()); }

getline (fin, ss,'n');

if (ss≠"")

{

m. cena=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. max_temp=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. kol_kamer=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. raspoloshenie=ss. c_str ();

m. print (s1,j); }

}

fin. close ();

}

//конструктор по умолчанию!

moroz_kamera: :moroz_kamera ():zamor_tehnica ()

{

raspoloshenie="вертикальная";

}

moroz_kamera: :moroz_kamera (AnsiString n, int mo, int p, int maxt, int s, AnsiString c): zamor_tehnica (n, mo, p, maxt, s)

{

raspoloshenie=c;

}

//перегрузка присваивания !

moroz_kamera& moroz_kamera: operator=(const moroz_kamera & m) //объекты =

{ if (this≠& m)

{

name=m. name;

power= m. power;

cena=m. cena;

max_temp=m. max_temp;

kol_kamer=m. kol_kamer;

raspoloshenie=m. raspoloshenie;

}

return *this;

}

//перегрузка сравнения

bool operator == (const moroz_kamera& m1, moroz_kamera& m2)

{

bool srav;

if (m1. cena == m2. cena)

{srav=true;} else

{srav=false; };

return srav;

}

//печать

void moroz_kamera: :print (TStringGrid *k, int & j) const

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

k-> Cells[3][j] = IntToStr (max_temp);

k-> Cells[4][j] = IntToStr (kol_kamer);

k-> Cells[5][j] = raspoloshenie;

//------------------------------------------------

//------ ХОЛОДИЛЬНИКИ 3.1.2 -----------------------------

class holodilniki: public zamor_tehnica

{ public:

holodilniki ();

holodilniki (AnsiString n, int mo, int p, int maxt, int s, AnsiString cx); //cx-схема

~holodilniki (){};

void print (TStringGrid *k, int & j) const;

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка из файла

holodilniki& operator=(const holodilniki & m); //перегрузка присваивания

friend bool operator==(const holodilniki& m1, holodilniki& m2); //перегрузка сравнения

protected:

AnsiString shema_komponovki;

};

//очистка перед записью

void holodilniki: :clear (char* s)

{

FILE* f1;

f1=fopen (s,"w");

fclose (f1);

}

//сохранеине в файл

void holodilniki: :save (char *s)

{

FILE* f1;

f1=fopen (s,"a"); //a — открывает файл для добавления

fprintf (f1,"%sn", name);

fprintf (f1,"%in", power);

fprintf (f1,"%in", cena);

fprintf (f1,"%in", max_temp);

fprintf (f1,"%in", kol_kamer);

fprintf (f1,"%sn", shema_komponovki);

fclose (f1);

}

// загрузка из файла

void holodilniki: :load (char* s, TStringGrid* s1, int& j)

{ AnsiString fn=s;

ifstream fin (s);

string ss;

while (!fin. eof ())

{holodilniki m;

getline (fin, ss,'n'); //читает целую строку

if (ss≠"")

{ m. name=ss. c_str (); }

getline (fin, ss,'n');

if (ss≠"")

{

m. power=StrToInt (ss. c_str ()); }

getline (fin, ss,'n');

if (ss≠"")

{

m. cena=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. max_temp=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. kol_kamer=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. shema_komponovki=ss. c_str ();

m. print (s1,j); }

}

fin. close ();

}

holodilniki: :holodilniki ():zamor_tehnica ()

{

shema_komponovki="американская";

}

holodilniki: :holodilniki (AnsiString n, int mo, int p, int maxt, int s, AnsiString cx): zamor_tehnica (n, mo, p, maxt, s)

{

shema_komponovki = cx;

}

//перегрузка присваивания !

holodilniki& holodilniki: operator=(const holodilniki & m) //объекты =

{ if (this≠& m)

{

name=m. name;

power= m. power;

cena=m. cena;

max_temp=m. max_temp;

kol_kamer=m. kol_kamer;

shema_komponovki=m. shema_komponovki;

}

return *this;

}

//перегрузка сравнения

bool operator == (const holodilniki& m1, holodilniki& m2)

{

bool srav;

if (m1. cena == m2. cena)

{srav=true;} else

{srav=false; };

return srav;

}

//печать

void holodilniki: :print (TStringGrid *k, int & j) const

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

k-> Cells[3][j] = IntToStr (max_temp);

k-> Cells[4][j] = IntToStr (kol_kamer);

k-> Cells[5][j] = shema_komponovki;

}; //-------------------------------------------------------------

//-----------------------------------------------

//----------ПЫЛЕСОСИКИ 3.2. -----

//---------------------------------------------------------------------------

class pilesos: public bit_texnica

{

public:

pilesos ();

pilesos (AnsiString n, int mo, int p, int obv, int pow1, int kol);

//obv-объём, pow1-можность всасывания, kol-количество насадок

pilesos (const pilesos & k); //копирующий конструктор

~pilesos (){}; //деструктор

void print (TStringGrid *k, int & j) const; //печать

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка из файла

pilesos& operator=(const pilesos & k); //перегрузка присваивания

friend bool operator==(const pilesos& m1, pilesos& m2);

protected: //доступ ограничен, но наследуются!

int obv1;

int pow11;

int kolnas;

private: //не наследуются!

};

//очистка перед записью

void pilesos: :clear (char* s)

{

FILE* f1;

f1=fopen (s,"w");

fclose (f1);

}

//сохранеине в файл

void pilesos: :save (char *s)

{

FILE* f1;

f1=fopen (s,"a");

fprintf (f1,"%sn", name);

fprintf (f1,"%in", power);

fprintf (f1,"%in", cena);

fprintf (f1,"%in", obv1);

fprintf (f1,"%in", pow11);

fprintf (f1,"%in", kolnas);

fclose (f1);

}

// загрузка из файла

void pilesos: :load (char* s, TStringGrid* s1, int& j)

{ AnsiString fn=s;

ifstream fin (s);

string ss;

while (!fin. eof ())

{pilesos m;

getline (fin, ss,'n'); //читает целую строку

if (ss≠"")

{ m. name=ss. c_str (); }

getline (fin, ss,'n');

if (ss≠"")

{

m. power=StrToInt (ss. c_str ()); }

getline (fin, ss,'n');

if (ss≠"")

{

m. cena=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. obv1=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. pow11=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. kolnas=StrToInt (ss. c_str ());

m. print (s1,j); }

}

fin. close ();

}

pilesos: :pilesos ():bit_texnica () // конструктор по умолчанию

{

obv1=4;

pow11=250;

kolnas=5; }

//конструктор с параметрами 2

pilesos: :pilesos (AnsiString n, int mo, int p, int obv, int pow1, int kol): bit_texnica (n, mo, p)

{

obv1=obv;

pow11=pow1;

kolnas=kol;

}

//копирующий конструктор

pilesos: :pilesos (const pilesos& k): bit_texnica (k)

{

name=k. name;

power= k. power;

cena=k. cena;

obv1=k. obv1;

pow11=k. pow11;

kolnas=k. kolnas;

}

//перегрузка присваивания 1

pilesos& pilesos: operator=(const pilesos & k) //объект =

{ if (this≠& k)

{

name=k. name;

power= k. power;

cena=k. cena;

obv1=k. obv1;

pow11=k. pow11;

kolnas=k. kolnas;

}

return *this;

}

//перегрузка сравнения

bool operator == (const pilesos& m1, pilesos& m2)

{

bool srav;

if (m1. cena == m2. cena)

{srav=true;} else

{srav=false; };

return srav;

}

//печать

void pilesos: :print (TStringGrid *k, int & j) const

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

k-> Cells[3][j] = IntToStr (obv1);

k-> Cells[4][j] = IntToStr (pow11);

k-> Cells[5][j] = IntToStr (kolnas);

}

//------ МИКРОВОЛНОВАЯ ПЕЧЬ 3.3 -----------------------------

class microv_pechi: public bit_texnica

{ public:

microv_pechi ();

microv_pechi (AnsiString n, int mo, int p, AnsiString t); //t-тип

~microv_pechi (){};

void print (TStringGrid *k, int & j) const;

void save (char *s); //сохранение

void clear (char* s); //очистка файла перед записью

void load (char* s, TStringGrid*, int&); //загрузка из файла

microv_pechi& operator=(const microv_pechi & m); //перегрузка присваивания

friend bool operator==(const microv_pechi& m1, microv_pechi& m2); //перегрузка сравнения

protected:

AnsiString tip;

};

//очистка перед записью

void microv_pechi: :clear (char* s)

{

FILE* f1;

f1=fopen (s,"w");

fclose (f1);

}

//сохранеине в файл

void microv_pechi: :save (char *s)

{

FILE* f1;

f1=fopen (s,"a");

fprintf (f1,"%sn", name);

fprintf (f1,"%in", power);

fprintf (f1,"%in", cena);

fprintf (f1,"%sn", tip);

fclose (f1);

}

// загрузка из файла

void microv_pechi: :load (char* s, TStringGrid* s1, int& j)

{ AnsiString fn=s;

ifstream fin (s);

string ss;

while (!fin. eof ())

{microv_pechi m;

getline (fin, ss,'n'); //читает целую строку

if (ss≠"")

{ m. name=ss. c_str (); }

getline (fin, ss,'n');

if (ss≠"")

{

m. power=StrToInt (ss. c_str ()); }

getline (fin, ss,'n');

if (ss≠"")

{

m. cena=StrToInt (ss. c_str ());}

getline (fin, ss,'n');

if (ss≠"")

{

m. tip=ss. c_str ();

m. print (s1,j); }

}

fin. close ();

}

microv_pechi: :microv_pechi ():bit_texnica ()

{

tip="соло";

}

microv_pechi: :microv_pechi (AnsiString n, int mo, int p, AnsiString t): bit_texnica (n, mo, p)

{

tip=t;

}

//перегрузка присваивания !

microv_pechi& microv_pechi: operator=(const microv_pechi & m) //объект =

{ if (this≠& m)

{

name=m. name;

power= m. power;

cena=m. cena;

tip=m. tip;

}

return *this;

}

//перегрузка сравнения

bool operator == (const microv_pechi& m1, microv_pechi& m2)

{

bool srav;

if (m1. cena == m2. cena)

{srav=true;} else

{srav=false; };

return srav;

}

//печать

void microv_pechi: :print (TStringGrid *k, int & j) const

{

j=j+1;

k-> RowCount=j+1;

k-> Cells[0][j] = name;

k-> Cells[1][j] = IntToStr (power);

k-> Cells[2][j] = IntToStr (cena);

k-> Cells[3][j] = tip;

};

void __fastcall TForm1: :RadioGroup1Click (TObject *Sender)

{Label12-> Visible=true;

i=RadioGroup1-> ItemIndex;

if (i==0) //Морозильные камеры

{GroupBox2-> Visible=True;

GroupBox3-> Visible=False;

GroupBox4-> Visible=False;

GroupBox5-> Visible=False;

GroupBox6-> Visible=False;

GroupBox7-> Visible=False;

GroupBox8-> Visible=False;

GroupBox9-> Visible=True;

GroupBox10-> Visible=True;

GroupBox11-> Visible=True;

StringGrid1-> Visible=True;

StringGrid2-> Visible=False;

StringGrid3-> Visible=False;

StringGrid4-> Visible=False;

}

if (i==1) //Холодильники

{

GroupBox2-> Visible=False;

GroupBox3-> Visible=True;

GroupBox4-> Visible=False;

GroupBox6-> Visible=True;

GroupBox9-> Visible=False;

GroupBox10-> Visible=False;

GroupBox5-> Visible=False;

GroupBox8-> Visible=False;

GroupBox7-> Visible=False;

GroupBox11-> Visible=True;

StringGrid1-> Visible=False;

StringGrid2-> Visible=True;

StringGrid3-> Visible=False;

StringGrid4-> Visible=False;

} if (i==2) //Микроволновые печи

{GroupBox2-> Visible=False;

GroupBox3-> Visible=False;

GroupBox4-> Visible=True;

GroupBox6-> Visible=False;

GroupBox9-> Visible=False;

GroupBox10-> Visible=False;

GroupBox5-> Visible=True;

GroupBox8-> Visible=False;

GroupBox7-> Visible=False;

GroupBox11-> Visible=True;

StringGrid1-> Visible=False;

StringGrid2-> Visible=False;

StringGrid3-> Visible=True;

StringGrid4-> Visible=False;

}

if (i==3) //Пылесосы

{

GroupBox2-> Visible=False;

GroupBox3-> Visible=False;

GroupBox4-> Visible=False;

GroupBox6-> Visible=False;

GroupBox9-> Visible=False;

GroupBox10-> Visible=False;

GroupBox5-> Visible=False;

GroupBox8-> Visible=True;

GroupBox7-> Visible=True;

GroupBox11-> Visible=True;

StringGrid1-> Visible=False;

StringGrid2-> Visible=False;

StringGrid3-> Visible=False;

StringGrid4-> Visible=True;

}

}

void __fastcall TForm1: :Button1Click (TObject *Sender)

{

AnsiString name;

int power, cena;

AnsiString raspoloshenie;

int max_temp, kol_kamer;

AnsiString shema_komponovki;

AnsiString tip;

int obv1, pow11,kolnas;

interf *p;

if (i==0) //морозильные камеры

{

try

{

if ((Edit1-> Text=="") & & (Edit2-> Text=="")&& (Edit3-> Text=="")&& (Edit5-> Text=="")&& (Edit8-> Text=="")&& (Edit17-> Text==""))

{throw (1); }

if ((Edit1-> Text=="") || (Edit2-> Text=="")|| (Edit3-> Text=="")|| (Edit5-> Text=="")|| (Edit8-> Text=="")|| (Edit17-> Text==""))

{throw ('a'); }

name = (Edit1-> Text);

power = StrToInt (Edit2-> Text);

cena = StrToInt (Edit3-> Text);

max_temp=StrToInt (Edit5-> Text);

kol_kamer=StrToInt (Edit8-> Text);

raspoloshenie=Edit17-> Text;

moroz_kamera m (name, power, cena, max_temp, kol_kamer, raspoloshenie);

p=& m;

p-> print (StringGrid1,j);

//m. print (StringGrid1,j);

}

catch (char b)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (int a)

{MessageDlg («Заполнены не все поля! Будут выведены значения по умолчанию!», mtError, TMsgDlgButtons () < < mbOK, 0);

moroz_kamera m;

m. print (StringGrid1,j);

p=& m;

// p-> print (StringGrid1,j);

}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

if (i==1) //Холодильники

{

try

{

if ((Edit1-> Text=="") & & (Edit2-> Text=="")&& (Edit3-> Text=="")&&(Edit6->Text=="")&&(Edit18->Text=="")&&(Edit19->Text==""))

{throw (1); }

if ((Edit1-> Text=="") || (Edit2-> Text=="")|| (Edit3-> Text=="")||(Edit6->Text=="")&&(Edit18->Text=="")&&(Edit19->Text==""))

{throw ('a'); }

name = (Edit1-> Text);

power = StrToInt (Edit2-> Text);

cena = StrToInt (Edit3-> Text);

max_temp =StrToInt (Edit6-> Text);

kol_kamer=StrToInt (Edit18-> Text);

shema_komponovki=Edit19-> Text;

holodilniki m (name, power, cena, max_temp, kol_kamer, shema_komponovki);

p=& m;

p-> print (StringGrid2,j1);

// m. print (StringGrid2,j1);

}

catch (char b)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (int a)

{MessageDlg («Заполнены не все поля! Будут выведены значения по умолчанию!», mtError, TMsgDlgButtons () < < mbOK, 0);

holodilniki m;

m. print (StringGrid2,j1);}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

if (i==2) //Микроволновые печи

{

try

{

if ((Edit1-> Text=="") & & (Edit2-> Text=="")&& (Edit3-> Text=="")&&(Edit7->Text==""))

{throw (1); }

if ((Edit1-> Text=="") || (Edit2-> Text=="")|| (Edit3-> Text=="")||(Edit7->Text==""))

{throw ('a'); }

name = (Edit1-> Text);

power = StrToInt (Edit2-> Text);

cena = StrToInt (Edit3-> Text);

tip =Edit7-> Text;

microv_pechi m (name, power, cena, tip);

p=& m;

p-> print (StringGrid3,j2);

//m. print (StringGrid3,j2);

}

catch (char b)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (int a)

{MessageDlg («Заполнены не все поля! Будут выведены значения по умолчанию!», mtError, TMsgDlgButtons () < < mbOK, 0);

microv_pechi m;

m. print (StringGrid3,j2);}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

if (i==3) //Пылесосы

{

try

{

if ((Edit1-> Text=="") & & (Edit2-> Text=="")&& (Edit3-> Text=="")

& &(Edit4->Text=="")&&(Edit20->Text=="")&&(Edit21->Text==""))

{throw (1); }

if ((Edit1-> Text=="") || (Edit2-> Text=="")|| (Edit3-> Text=="")

||(Edit4-> Text=="")||(Edit20->Text=="")||(Edit21->Text==""))

{throw ('a'); }

name = (Edit1-> Text);

power = StrToInt (Edit2-> Text);

cena = StrToInt (Edit3-> Text);

obv1 = StrToInt (Edit4-> Text);

pow11=StrToInt (Edit20-> Text);

kolnas=StrToInt (Edit21-> Text);

pilesos m (name, power, cena, obv1, pow11,kolnas);

p=& m;

p-> print (StringGrid4,j3);

//m. print (StringGrid4,j3);

}

catch (char b)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (int a)

{MessageDlg («Заполнены не все поля! Будут выведены значения по умолчанию!», mtError, TMsgDlgButtons () < < mbOK, 0);

pilesos m;

m. print (StringGrid4,j3);

}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

}

//-----------------

//копирование для БК

void __fastcall TForm1: :Button2Click (TObject *Sender)

{

try

{

AnsiString q1;

AnsiString name, raspoloshenie;

int power, cena, max_temp, kol_kamer;

q1=Edit12-> Text;

if (q1 == ««) {throw (1); }

StringGrid8-> Visible=True;

Label14-> Visible=True;

int pos = StrToInt (Edit12-> Text);

name = StringGrid1-> Cells [0][pos];

power = StrToInt (StringGrid1-> Cells [1][pos]);

cena = StrToInt (StringGrid1-> Cells [2][pos]);

max_temp=StrToInt (StringGrid1-> Cells [3][pos]);

kol_kamer= StrToInt (StringGrid1-> Cells [4][pos]);

raspoloshenie=StringGrid1-> Cells [5][pos];

moroz_kamera n (name, power, cena, max_temp, kol_kamer, raspoloshenie);

moroz_kamera m (n); //в объект m копируем n

m. print (StringGrid8, x1);

}

catch (int a)

{MessageDlg («Введите № записи для копирования», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

//Сравнение для канц товаров

void __fastcall TForm1: :Button3Click (TObject *Sender)

{try

{int a1, a2;

AnsiString o1, o2;

o1=Edit10-> Text;

o2=Edit11-> Text;

if (o1 == ««) {throw (1); }

if (o2 == ««) {throw (2); }

a1=StrToInt (Edit10-> Text);

a2=StrToInt (Edit11-> Text);

pic m1(StringGrid2-> Cells[0][a1], StrToInt (StringGrid2->Cells[1][a1]), StrToInt (StringGrid2->Cells[2][a1]), StrToInt (StringGrid2->Cells[3][a1]), StrToInt (StringGrid2->Cells[4][a1]), StringGrid2->Cells[5][a1]);pic m2(StringGrid2-> Cells[0][a2], StrToInt (StringGrid2->Cells[1][a2]), StrToInt (StringGrid2->Cells[2][a2]), StrToInt (StringGrid2->Cells[3][a2]), StrToInt (StringGrid2->Cells[4][a2]), StringGrid2->Cells[5][a2]);if (m1==m2) {Edit13-> Text = «Равны»;} else {Edit13-> Text = «Не равны»;} //сравнение

}

catch (int a)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0); }

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

//Сравнение

void __fastcall TForm1: :Button3Click (TObject *Sender)

{try{

int a1, a2;

AnsiString o1, o2;

o1=Edit10-> Text;

o2=Edit11-> Text;

if (o1 == ««) {throw (1); }

if (o2 == ««) {throw (2); }

a1=StrToInt (Edit10-> Text);

a2=StrToInt (Edit11-> Text);

holodilniki ob1(StringGrid2-> Cells[0][a1], StrToInt (StringGrid2->Cells[1][a1]), StrToInt (StringGrid2->Cells[2][a1]), StrToInt (StringGrid2->Cells[3][a1]), StrToInt (StringGrid2->Cells[4][a1]), StringGrid2->Cells[5][a1]);holodilniki ob2(StringGrid2-> Cells[0][a2], StrToInt (StringGrid2->Cells[1][a2]), StrToInt (StringGrid2->Cells[2][a2]), StrToInt (StringGrid2->Cells[3][a2]), StrToInt (StringGrid2->Cells[4][a2]), StringGrid2->Cells[5][a2]);if (ob1==ob2) {Edit13-> Text = «Равны»;} else {Edit13-> Text = «Не равны»;} //сравнение (перегрузка)

}catch (int a)

{MessageDlg («Заполните поля!», mtError, TMsgDlgButtons () < < mbOK, 0); }

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

} //------------------ Edit14-> Color=clRed;

Edit15-> Color=clRed;}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

void __fastcall TForm1: :Button4Click (TObject *Sender)

{

if (RadioGroup1-> ItemIndex==0)

{

int i=1;

moroz_kamera m;

m. clear («moroz_kamera»);

while (StringGrid1-> Cells[0][i]≠"")

{

moroz_kamera ob1(StringGrid1-> Cells[0][i], StrToInt (StringGrid1->Cells[1][i]), StrToInt (StringGrid1->Cells[2][i]), StrToInt (StringGrid1->Cells[3][i]), StrToInt (StringGrid1->Cells[4][i]), StringGrid1->Cells[5][i]);

m. save («moroz_kamera»);

i=i+1;

}

}

if (RadioGroup1-> ItemIndex==1)

{

int i=1;

holodilniki m;

m. clear («holodilniki»);

while (StringGrid2-> Cells[0][i]≠"")

{

holodilniki ob1(StringGrid2-> Cells[0][i], StrToInt (StringGrid2->Cells[1][i]), StrToInt (StringGrid2->Cells[2][i]), StrToInt (StringGrid2->Cells[3][i]), StrToInt (StringGrid2->Cells[4][i]), StringGrid2->Cells[5][i]);

m. save («holodilniki»);

i=i+1;

}

}

if (RadioGroup1-> ItemIndex==2)

{

int i=1;

microv_pechi m;

m. clear («microv_pechi»);

while (StringGrid3-> Cells[0][i]≠"")

{

microv_pechi ob1(StringGrid3-> Cells[0][i], StrToInt (StringGrid3->Cells[1][i]), StrToInt (StringGrid3->Cells[2][i]), StringGrid3->Cells[3][i]);

m. save («microv_pechi»);

i=i+1;

}

}

if (RadioGroup1-> ItemIndex==3)

{

int i=1;

pilesos m;

m. clear («pilesos»);

while (StringGrid4-> Cells[0][i]≠"")

{

pilesos ob1(StringGrid4-> Cells[0][i], StrToInt (StringGrid4->Cells[1][i]), StrToInt (StringGrid4->Cells[2][i]), StrToInt (StringGrid4->Cells[3][i]), StrToInt (StringGrid4->Cells[4][i]), StrToInt (StringGrid4->Cells[5][i]));

m. save («pilesos»);

i=i+1;

}}

};

//загрузить

//---------------------------------------------------------------

void __fastcall TForm1: :Button5Click (TObject *Sender)

{

if (RadioGroup1-> ItemIndex==0)

{

moroz_kamera m;

m. load («moroz_kamera», StringGrid1, j1);

}

if (RadioGroup1-> ItemIndex==1)

{

holodilniki m;

m. load («holodilniki», StringGrid2, j2);

}

if (RadioGroup1-> ItemIndex==2)

{

microv_pechi m;

m. load («microv_pechi», StringGrid3, j3);

}

if (RadioGroup1-> ItemIndex==3)

{

pilesos m;

m. load («pilesos», StringGrid4, j4);

}}

//соритровка по убыванию

void sort_ub (TStringGrid * s, int a)

{

int b, c;

AnsiString e;

for (int i=1; s-> Cells[a][i]≠"";i++)

for (int j=i+1; s->Cells[a][j]≠"";j++)

{ b =StrToInt (s-> Cells[a][i]);

c= StrToInt (s-> Cells[a][j]);

if (c> b)

{

for (int j1=0; j1< s->ColCount;j1++) //меняются строки

{

e= s-> Cells[j1][i];

s-> Cells[j1][i] = s-> Cells[j1][j];

s-> Cells[j1][j]= e;

//Form1-> Refresh ();

}}

}

};

void sort_voz (TStringGrid * s, int a)

{

int b, c;

AnsiString e;

for (int i=1; s-> Cells[a][i]≠"";i++)

for (int j=i+1; s->Cells[a][j]≠"";j++)

{ b =StrToInt (s-> Cells[a][i]);

c= StrToInt (s-> Cells[a][j]);

if (c< b)

{

for (int j1=0; j1< s->ColCount;j1++)

{

e= s-> Cells[j1][i];

s-> Cells[j1][i] = s-> Cells[j1][j];

s-> Cells[j1][j]= e;

}}}};

// сортировка по возрастанию

void sort_voz (TStringGrid * s, int a)

{

int b, c;

AnsiString e;

for (int i=1; s-> Cells[a][i]≠"";i++)

for (int j=i+1; s->Cells[a][j]≠"";j++)

{ b =StrToInt (s-> Cells[a][i]);

c= StrToInt (s-> Cells[a][j]);

if (c< b)

{

for (int j1=0; j1< s->ColCount;j1++)

{

e= s-> Cells[j1][i];

s-> Cells[j1][i] = s-> Cells[j1][j];

s-> Cells[j1][j]= e;

// Form1-> Refresh ();

}}

}

};

void __fastcall TForm1: :Button7Click (TObject *Sender)

{

j=0;

j1=0;

j2=0;

j3=0;

j4=0;

j5=0;

j6=0;

j7=0;

for (int i = 0; i < StringGrid1-> ColCount; i++)

for (int j = 1; j < StringGrid1-> RowCount; j++)

StringGrid1-> Cells[i][j] = ««;

}

void __fastcall TForm1: :Button8Click (TObject *Sender)

{

try

{

int a1, a2;

AnsiString o1, o2;

o1=Edit9-> Text;

o2=Edit22-> Text;

if (o1 == ««) {throw (1); }

if (o2 == ««) {throw (2); }

a1=StrToInt (Edit9-> Text);

a2=StrToInt (Edit22-> Text);

microv_pechi ob1(StringGrid3-> Cells[0][a1], StrToInt (StringGrid3->Cells[1][a1]), StrToInt (StringGrid3->Cells[2][a1]), StringGrid3->Cells[3][a1]);microv_pechi ob2(StringGrid3-> Cells[0][a2], StrToInt (StringGrid3->Cells[1][a2]), StrToInt (StringGrid3->Cells[2][a2]), StringGrid3->Cells[3][a2]);if (ob1==ob2) {Edit23-> Text = «Равны»;} else {Edit23-> Text = «Не равны»;} //сравнение (перегрузка)}

catch (int a)

{MessageDlg («Заполните поля для ввода», mtError, TMsgDlgButtons () < < mbOK, 0);

Edit9-> Text=clRed;

Edit22-> Text=clRed;}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

void __fastcall TForm1: :Button9Click (TObject *Sender)

{

try

{

int a1, a2;

AnsiString o1, o2;

o1=Edit24-> Text;

o2=Edit25-> Text;

if (o1 == ««) {throw (1); }

if (o2 == ««) {throw (2); }

a1=StrToInt (Edit24-> Text);

a2=StrToInt (Edit25-> Text);

pilesos ob1(StringGrid4-> Cells[0][a1], StrToInt (StringGrid4->Cells[1][a1]), StrToInt (StringGrid4->Cells[2][a1]), StrToInt (StringGrid4->Cells[3][a1]), StrToInt (StringGrid4->Cells[4][a1]), StrToInt (StringGrid4->Cells[5][a1]));pilesos ob2(StringGrid4-> Cells[0][a2], StrToInt (StringGrid4->Cells[1][a2]), StrToInt (StringGrid4->Cells[2][a2]), StrToInt (StringGrid4->Cells[3][a2]), StrToInt (StringGrid4->Cells[4][a1]), StrToInt (StringGrid4->Cells[5][a1]));if (ob1==ob2) {Edit26-> Text = «Равны»;} else {Edit26-> Text = «Не равны»;} //сравнение (перегрузка)

}

catch (int a)

{MessageDlg («Заполните поля для ввода», mtError, TMsgDlgButtons () < < mbOK, 0);

}

catch (EConvertError & err)

{MessageDlg («Проверьте ввод данных», mtError, TMsgDlgButtons () < < mbOK, 0); }

}

void __fastcall TForm1: :Edit4KeyPress (TObject *Sender, char & Key)

(Key > '9')) & & (Key ≠ VK_BACK)) Key = NULL;

//---------------------------------------------------------------

void __fastcall TForm1: :Edit20KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit21KeyPress (TObject *Sender, char & Key)

(Key > '9')) & & (Key ≠ VK_BACK)) Key = NULL;

//---------------------------------------------------------------

void __fastcall TForm1: :Edit2KeyPress (TObject *Sender, char & Key)

if (((Key < '0')

//---------------------------------------------------------------

void __fastcall TForm1: :Edit3KeyPress (TObject *Sender, char & Key)

(Key > '9')) & & (Key ≠ VK_BACK)) Key = NULL;

//---------------------------------------------------------------

void __fastcall TForm1: :Edit24KeyPress (TObject *Sender, char & Key)

if (((Key < '0')

//---------------------------------------------------------------------------

void __fastcall TForm1: :Edit25KeyPress (TObject *Sender, char & Key)

(Key > '9')) & & (Key ≠ VK_BACK)) Key = NULL;

//---------------------------------------------------------------

void __fastcall TForm1: :Edit12KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit6KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit18KeyPress (TObject *Sender, char & Key)

if (((Key < '0')

//---------------------------------------------------------------

void __fastcall TForm1: :Edit5KeyPress (TObject *Sender, char & Key)

(Key > '9')) & & (Key ≠ VK_BACK)) Key = NULL;

//---------------------------------------------------------------

void __fastcall TForm1: :Edit8KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit9KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit22KeyPress (TObject *Sender, char & Key)

if (((Key < '0')

//---------------------------------------------------------------

void __fastcall TForm1: :Edit14KeyPress (TObject *Sender, char & Key)

//--------------------------------------------------------------

void __fastcall TForm1: :Edit15KeyPress (TObject *Sender, char & Key)

//-------------------------------------------------------------

void __fastcall TForm1: :Edit10KeyPress (TObject *Sender, char & Key)

//---------------------------------------------------------------

void __fastcall TForm1: :Edit11KeyPress (TObject *Sender, char & Key)

if (((Key < '0')

//---------------------------------------------------------------

Приложение 3. Руководство пользователя

Общие сведения о программе

Данный программный продукт предназначен для работы с объектами предметной области «Бытовая техника». В программе реализованы следующие функции:

— ввод данных с клавиатуры;

— загрузка данных из файла;

— сохранение данных в файл;

— просмотр данных об объектах выбранного класса;

— сортировка данных об объектах выбранного класса, по полю «цена»;

— сравнение объектов по цене

— копирование данных;

Описание установки

Данная программа не требует установки.

Описание запуска

Для запуска программы необходимо запустить файл с расширением. exe, находящийся в рабочем каталоге программы. После этого откроется главная форма программного продукта (Рис. 1 «Главное окно программы»).

Рис. П3.1. Главное окно программы.

Ввод данных с клавиатуры.

Для ввода данных необходимо выбрать в меню необходимую бытовую технику, заполнить поля «Название», «Мощность», «Стоимость» и соответствующие поля различных предметов интерьера. Далее нажать кнопку «Добавить», при этом предмет добавиться в таблицу.

Рис. П3.2. Ввод данных.

Файловый ввод / вывод.

Для файлового ввода / вывод необходимо воспользоваться кнопками «Сохранить» и «Загрузить».

Сортировка данных.

Сортировка осуществляется по полю «Цена», для ее осуществления необходимо выбрать вид сортировки: по возрастанию или по убыванию.

Рис. П3.3. Исходные данные.

Рис. П3.4. Сортировка по возрастанию.

Рис. П3.5. Сортировка по убыванию.

Сравнение данных.

Для сравнения данных необходимо ввести номера элементов интерьера в таблице по счету и нажать на кнопку «Сравнить».

Рис. П3.6. Сравнение по цене.

Рис. П3.7. Сравнение по цене.

Копирование данных.

Для копирования данных (строки таблицы) необходимо внести номер таблицы и нажать кнопку «Копировать», при этом появится новая таблица с результатом копирования.

Рис. П3.8. Копирование данных.

ПоказатьСвернуть
Заполнить форму текущей работой