Вы находитесь на странице: 1из 9

ЛАБОРАТОРНАЯ РАБОТА №1

«ИССЛЕДОВАНИЕ ОТЛИЧИЙ МЕЖДУ СТРУКТУРНЫМ И


ОБЪЕКТНЫМ ПОДХОДОМ»
Цель: Исследование основных средств определения класса, создания
объектов класса. Исследование отличий структурного и объектного
подходов.
Задание:
Описать тип данных с именем clerk, содержащий следующие поля:
порядковый номер, фамилия, имя, должность, стаж, подразделение, оклад.
Способ обработки – вывод на дисплей фамилии служащего, если он работает
в должности, название которой задает пользователь, иначе вывести
соответствующее сообщение.

Текст программы :
1. Первый вариант программы на языке С++ с использованием ООП:
#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

class clerk {
public:
string number, lastname, name, dolzhnost, stazh,
podrazdelenie, oklad;

void input() {
cin.ignore();
cout<< "\nВведите порядковый номер:";
getline(cin, number);
cout<< "\nВведите фамилию:";
getline(cin, lastname);
cout<< "\nВведите имя:";
getline(cin, name);
cout<< "\nВведите должность:";
getline(cin, dolzhnost);
cout<< "\nВведите стаж:";
getline(cin, stazh);
cout<< "\nВведите подразделение:";
getline(cin, podrazdelenie);
cout<< "\nВведите оклад:";
getline(cin, oklad);
}

void output() {
cout<< "\nПорядковый номер:"<< number<< endl;
cout<< "\nФамилия:"<< lastname<< endl;
cout<< "\nИмя:"<< name<< endl;
cout<< "\nДолжность:"<< dolzhnost<< endl;
cout<< "\nСтаж:"<< stazh<< endl;
cout<< "\nПодразделение:"<< podrazdelenie<< endl;
cout<< "\nОклад:"<< oklad<< endl;
}

void process(clerk clerk_first, clerk clerk_second) {


string dolzhnost;
cin.ignore();
cout << "Введите должность: ";
getline(cin, dolzhnost);

if (clerk_first.dolzhnost == dolzhnost) {
cout << "\nФамилия: " << clerk_first.lastname << endl;
} else if (clerk_second.dolzhnost == dolzhnost) {
cout << "\nФамилия: " << clerk_second.lastname <<
endl;
} else {
cout << "\nСлужащий не найден" << endl;
}
}
};

int main() {
SetConsoleOutputCP(65001);
clerk clerk_first, clerk_second;
int c;
while (1) {
cout<< "\nМеню:\n";
cout<< "1. Ввод данных о clerk\n";
cout<< "2. Вывод данных о clerk\n";
cout<< "3. Обработка данных о clerk\n";
cout<< "4. Выход\n";
cout<< "\nВыберите действие:";
cin>>c;

switch (c) {

case 1:
clerk_first.input();
clerk_second.input();
break;
case 2:
clerk_first.output();
clerk_second.output();
break;
case 3:
clerk_first.process(clerk_first, clerk_second);
break;
case 4:
return 0;
default:
cout<< "\nНеверный выбор, попробуйте снова.\n";
}
}
return 0;
}

2. Второй вариант программы на языке С++ с использованием


структурного подхода:
#include <iostream>
#include <string>
#include <windows.h>

using namespace std;


struct clerk {
string number, lastname, name, dolzhnost, stazh,
podrazdelenie, oklad;
};

void input(clerk &clerk1 ) {


cin.ignore();
cout<< "\nВведите порядковый номер:";
getline(cin, clerk1.number);
cout<< "\nВведите фамилию:";
getline(cin, clerk1.lastname);
cout<< "\nВведите имя:";
getline(cin, clerk1.name);
cout<< "\nВведите должность:";
getline(cin, clerk1.dolzhnost);
cout<< "\nВведите стаж:";
getline(cin, clerk1.stazh);
cout<< "\nВведите подразделение:";
getline(cin, clerk1.podrazdelenie);
cout<< "\nВведите оклад:";
getline(cin, clerk1.oklad);
}

void output(clerk clerk1) {


cout<< "\nПорядковый номер:"<< clerk1.number<< endl;
cout<< "\nФамилия:"<< clerk1.lastname<< endl;
cout<< "\nИмя:"<< clerk1.name<< endl;
cout<< "\nДолжность:"<< clerk1.dolzhnost<< endl;
cout<< "\nСтаж:"<< clerk1.stazh<< endl;
cout<< "\nПодразделение:"<< clerk1.podrazdelenie<< endl;
cout<< "\nОклад:"<< clerk1.oklad<< endl;
}

void process(clerk clerk_first, clerk clerk_second) {


string dolzhnost;
cin.ignore();
cout << "Введите должность: ";
getline(cin, dolzhnost);

if (clerk_first.dolzhnost == dolzhnost) {
cout << "\nФамилия: " << clerk_first.lastname << endl;
} else if (clerk_second.dolzhnost == dolzhnost) {
cout << "\nФамилия: " << clerk_second.lastname <<
endl;
} else {
cout << "\nСлужащий не найден" << endl;
}
}
int main() {
SetConsoleOutputCP(65001);
clerk clerk_first, clerk_second;
int c;
while (1) {
cout<< "\nМеню:\n";
cout<< "1. Ввод данных о clerk\n";
cout<< "2. Вывод данных о clerk\n";
cout<< "3. Обработка данных о clerk\n";
cout<< "4. Выход\n";
cout<< "\nВыберите действие:";
cin>>c;

switch (c) {

case 1:
input(clerk_first);
input(clerk_second);
break;
case 2:
output(clerk_first);
output(clerk_second);
break;
case 3:
process(clerk_first, clerk_second);
break;
case 4:
return 0;
default:
cout<< "\nНеверный выбор, попробуйте снова.\n";
}
}
return 0;
}
Результаты тестирования программ:

Рисунок 1.1 - Меню программы

Рисунок 1.2 - Ввод данных о clerk


Рисунок 1.3 - Вывод данных о clerk

Рисунок 1.4 - Обработка данных о clerk

Вывод:
В ходе лабораторной работы были изучены основные средства определения
класса, создания объектов класса, а также их отличия от структурного
подхода.
Задача:
Придумать свой класс.
Определить в нем 2 поля, 2 метода, 2 конструктора и деструктор (в нем
достаточно выводить сообщение «сработал деструктор»).
Вынести описание одного или нескольких методов за рамки класса.
B main( создать два объекта класса (дабы вызвать оба конструктора).
Обратиться к элементам класса с открытым доступом.
Также в main() создать два указателя и обратиться к открытым элементам
класса.
#include <iostream>
#include <string>

class Person {
private:
std::string name;
int age;

public:
// Конструктор без параметров
Person() : name("Unknown"), age(0) {
std::cout << "Default constructor called." <<
std::endl;
}

// Конструктор с параметрами
Person(const std::string& n, int a) : name(n),
age(a) {
std::cout << "Parameterized constructor
called." << std::endl;
}

// Деструктор
~Person() {
std::cout << "Destructor called." << std::endl;
}

// Метод для вывода информации


void displayInfo() const {
std::cout << "Name: " << name << ", Age: " <<
age << std::endl;
}

// Метод для изменения возраста


void setAge(int newAge) {
age = newAge;
}
};

int main() {
// Создаем объекты класса Person с использованием
обоих конструкторов
Person person1; // Вызывается конструктор без
параметров
Person person2("John", 25); // Вызывается
конструктор с параметрами

// Обращаемся к элементам класса с открытым


доступом
person1.displayInfo(); // Выводим информацию о
первом объекте
person2.setAge(30); // Изменяем возраст второго
объекта

// Создаем указатели на объекты класса Person


Person* ptrPerson1 = new Person; //
Вызывается конструктор без параметров
Person* ptrPerson2 = new Person("Alice", 22); //
Вызывается конструктор с параметрами

// Обращаемся к элементам класса через указатели


ptrPerson1->displayInfo();
ptrPerson2->setAge(28);

// Освобождаем выделенную память и вызываем


деструкторы
delete ptrPerson1;
delete ptrPerson2;

return 0;
}

Вам также может понравиться