Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Пример 7.5.3. Реализация класса cData.

///////////////////

// C++/CLI Этап 3

#include "stdafx.h"

using namespace System;

ref class CComputer // Класс компьютера

{

String ^producer; // Изготовитель компьютера

int year; // Год изготовления

public:

// Интерфейсная функция ввода данных о компьютере

void Enter()

{

Console::Write("Изготовитель>");

producer= Console::ReadLine();

try

{

Console::Write("Год изготовления>");

year= System::Convert::ToInt32(Console::ReadLine());

}

catch(Exception ^e)

{

Console::WriteLine (" Ошибка при вводе числа");

return;

}

}

// Интерфейсная функция вывода данных о компьютере

void Show ( )

{

Console::Write ("Producer= {0}", producer);

Console::WriteLine (" Year= {0}", year.ToString());

}

};

ref class CShop //Класс магазина

{

String ^place; // Указатель на строку с адресом магазина

int cost; // Стоимость компьютера

public:

// Интерфейсная функция ввода данных о магазине

void Enter()

{

try

{

Console::Write("Адрес магазина>");

place= Console::ReadLine();

Console::Write("Стоимость компьютера>");

cost= System::Convert::ToInt32(Console::ReadLine());

}

catch (Exception ^e)

{

Console::WriteLine (" Ошибка при вводе числа");

return;

}

}

// Интерфейсная функция вывода данных о магазине

void Show()

{

Console::Write ("Адрес={0}", place);

Console::WriteLine (" Стоимость={0}", cost.ToString());

}

};

ref class CData: public CShop // Класс элемента списка

{

CComputer ^pComp; // Указатель на объект типа CComputer в куче

public:

CData ^pNext;

CData() {pComp= gcnew CComputer;} // Создать объект в куче

// Интерфейсная функция ввода данных о компьютере и магазине

void Enter() {CShop::Enter(); pComp->Enter();}

// Интерфейсная функция вывода данных о компьютере и магазине

void Show() {CShop::Show(); pComp->Show();}

};

// Главная функция Inf-приложения 3 этапа

Void main()

{

CData ^pDt= gcnew CData; // Объект элемента списка

pDt->Enter(); // Ввести данные о компьютере и магазине

pDt->Show(); // Вывести данные о компьютере и магазине

Console::ReadKey();

}

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

Этап 4

Реализуем оставшуюся часть приложения, поместив в программу корневой класс CInf.

Пример 7.5.4. Реализация Inf-приложения.

///////////////

// C++/CLI Этап 4

#include "stdafx.h"

using namespace System;

ref class CComputer // Класс компьютера

{

String ^producer; // Изготовитель компьютера

int year; // Год изготовления

public:

// Интерфейсная функция ввода данных о компьютере

void Enter()

{

Console::Write("Изготовитель>");

producer= Console::ReadLine();

try

{

Console::Write("Год изготовления>");

year= System::Convert::ToInt32(Console::ReadLine());

}

catch(Exception ^e)

{

Console::WriteLine (" Ошибка при вводе числа");

return;

}

}

// Интерфейсная функция вывода данных о компьютере

void Show ( )

{

Console::Write ("Producer= {0}", producer);

Console::WriteLine (" Year= {0}", year.ToString());

}

};

ref class CShop //Класс магазина

{

String ^place; // Указатель на строку с адресом магазина

int cost; // Стоимость компьютера

public:

// Интерфейсная функция ввода данных о магазине

void Enter()

{

try

{

Console::Write("Адрес магазина>");

place= Console::ReadLine();

Console::Write("Стоимость компьютера>");

cost= System::Convert::ToInt32(Console::ReadLine());

}

catch (Exception ^e)

{

Console::WriteLine (" Ошибка при вводе числа");

return;

}

}

// Интерфейсная функция вывода данных о магазине

void Show()

{

Console::Write ("Адрес={0}", place);

Console::WriteLine (" Стоимость={0}", cost.ToString());

}

};

ref class CData: public CShop // Класс элемента списка

{

CComputer ^pComp; // Указатель на объект типа CComputer в куче

public:

CData ^pNext;

CData() {pComp= gcnew CComputer;} // Создать объект в куче

// Интерфейсная функция ввода данных о компьютере и магазине

void Enter() {CShop::Enter(); pComp->Enter();}

// Интерфейсная функция вывода данных о компьютере и магазине

void Show() {CShop::Show(); pComp->Show();}

};

ref class CInf // Класс главного объекта

{

CData ^pFirst; // Ссылка на первый элемент списка

CData ^pLast; // Ссылка на последний элементсписка

public:

CInf() {pFirst=nullptr; pLast=nullptr;} // Конструктор

void Enter(); // Ввести информацию о компьютере и магазине

void Show(); // Вывести информацию из списка

void Clear(); //Удалитьсписок

};

// Описание функций Enter(), Show() и Clear() класса CInf вне класса

void CInf::Enter() // Ввести информацию в список

{

CData ^pNew= gcnew CData; // Создать новый объект списка и

pNew -> Enter(); // ввести в него данные

pNew -> pNext=nullptr; // Установить нулевую ссылку

if(pFirst==nullptr) pFirst= pNew; // Подключить объект к списку

else pLast->pNext=pNew;

pLast= pNew; // Запомнить адрес последнего элемента списка

}

void CInf::Show() // Вывести информацию из списка

{

CData ^pTmp; // Указатель на текущий элемент списка

pTmp= pFirst; // Присвоить адрес первого элемента списка

while (pTmp) // Просмотреть список

{

pTmp->Show(); // Вывести информацию из текущего элемента

pTmp=pTmp->pNext; // Перейти к следующему элементу

}

}

void CInf::Clear() // Удалить список

{

CData ^pTmp= pFirst; // Указателю на текущий элемент списка

// присвоить адрсс первого элемента списка

while(pTmp) // Просмотреть список

{

CData ^pThis;

pThis=pTmp; // Запомнить адрес текущего элемента

pTmp=pTmp->pNext; // Перейти к следующему элементу

pThis = nullptr; // Удалить элемент с запомненным адресом

}

pFirst= nullptr; // Обнулить адрес начала списка

pLast = nullptr; // Обнулить адрес конца списка

}

// Главная функция Inf-приложения 4 этапа