Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 3 ООП (Вариант 1)

.docx
Скачиваний:
0
Добавлен:
30.08.2024
Размер:
91.17 Кб
Скачать

#include <stdio.h>

#include <clocale>

#include <iostream>

#include <cstring>

#include <string>

#include <iomanip>

#include <fstream>

#define N 999

#define L 20

using namespace std;

class bank;

class fio {

string fam;

string name;

string patron;

public:

fio();

fio(string fam, string name, string patron);

fio(fio& other);

friend ostream& operator<< (ostream& os, fio& f);

friend class bank;

};

class bank {

fio clientt;

int account;

double sum;

static int count;

public:

bank();

bank(string fam, string name, string patron, int account, double sum);

bank(bank& other);

friend void new_account(bank client[]);

void show_client(bank client[]);

void filter_sum(bank client[]);

void sort_alphabet(bank client[]);

void plus_sum(bank client[]);

bank operator+(double sum_dop) {

sum += sum_dop;

return *this;

}

friend ostream& operator<< (ostream& os, bank & b);

friend class fio;

};

int bank::count = 0;

fio::fio() {

fam = " ";

name = " ";

patron = " ";

}

fio::fio(string fam, string name, string patron) {

this->fam = fam;

this->name = name;

this->patron = patron;

}

bank::bank() {

clientt = fio();

account = 0;

sum = 0;

count++;

}

//конструктор для инициализации

bank::bank(string fam, string name, string patron, int account, double sum) {

this->account = account;

this->sum = sum;

this->clientt = fio(fam, name, patron);

count++;

}

ostream& operator<<(ostream& os, fio& f) {

os << setw(L)<<f.fam << setw(L) << f.name << setw(L) << f.patron <<"|";

return os;

}

ostream& operator<<(ostream& os, bank& b) {

os << setw(4) << b.account << "|" << b.clientt << setw(7)<< b.sum<<"|\n";

return os;

}

int menu() {

cout << "\n";

int x;

printf("Выберите команду, введя её номер:\n");

printf("1. Добавить новый счет\n");

printf("2. Показать все счета клиента\n");

printf("3. Определить всех клиентов с суммой больше заданной\n");

printf("4. Показать всех клиентов в алфавитном порядке\n");

printf("5. Увеличить сумму счёта клиента\n");

printf("6. Выход из программы\n-> ");

cin >> x;

cout << "\n";

return x;

}

void new_account(bank client[]) {

int acc_num;

cout << "Введите номер счёта (1-999): ";

cin >> acc_num;

if (acc_num < 1 || acc_num > 999 || acc_num == client[acc_num].account) {

do {

cout << "Недопустимое значение!" << "\n";

cout << "Введите номер счёта (1-999): ";

cin >> acc_num;

} while (acc_num < 1 || acc_num > 999);

}

string fam;

cout << "Введите фамилию клиента: ";

//getchar();

//fgets(fam, L, stdin);

cin >> setw(L) >> fam;

string name;

cout << "Введите имя клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> name;

string patron;

cout << "Введите отчество клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> patron;

double sum;

cout << "Введите сумму депозита: ";

cin >> sum;

if (sum < 0 || sum > 9999999) {

do {

cout << "Недопустимое значение!" << "\n";

cout << "Введите сумму депозита: ";

cin >> sum;

} while (sum < 0 || sum > 9999999);

}

client[acc_num] = bank(fam, name, patron, acc_num, sum);

cout << "\n";

cout << "Счёт успешно добавлен.\n";

}

void bank::show_client(bank client[]) {

string fam;

cout << "Введите фамилию клиента: ";

//getchar();

//fgets(fam, L, stdin);

cin >> setw(L) >> fam;

string name;

cout << "Введите имя клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> name;

string patron;

cout << "Введите отчество клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> patron;

int a = 0;

printf(" № | Фамилия Имя Отчество| Сумма |\n");

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

for (int i = 0; i < N; i++) {

if (client[i].account == i && (client[i].clientt.fam == fam) && (client[i].clientt.name == name) && (client[i].clientt.patron == patron)) {

cout << client[i];

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

}

if (i != client[i].account) {

a++;

}

}

if (a == N - 1) {

cout << "Пользователи не введены" << "\n";

}

}

void bank::filter_sum(bank client[])

{

int sm;

int a = 0;

cout << "Введите сумму: ";

cin >> sm;

if (sm < 0 || sm>9999999) {

do {

cout << "Недопустимое значение!" << "\n";

cout << "Введите процент по кредиту: ";

cin >> sm;

} while (sm < 0 || sm >9999999);

}

printf(" № | Фамилия Имя Отчество| Сумма |\n");

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

for (int i = 0; i < N; i++) {

if (i == client[i].account && sm < client[i].sum) {

cout << client[i];

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

}

if (i != client[i].account) {

a++;

}

}

if (a == N - 1) {

cout << "Пользователи не введены" << "\n";

}

cout << "\n";

}

void bank::sort_alphabet(bank client[]) {

int a = 0;

printf(" № | Фамилия Имя Отчество| Сумма |\n");

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

for (int i = 1; i < N - 1; i++) {

for (int j = i + 1; j < N; j++) {

if ((i == client[i].account && j == client[j].account) && (client[i].clientt.fam > client[j].clientt.fam)) {

swap(client[i].clientt.fam, client[j].clientt.fam);

swap(client[i].clientt.name, client[j].clientt.name);

swap(client[i].clientt.patron, client[j].clientt.patron);

swap(client[i].account, client[j].account);

swap(client[i].sum, client[j].sum);

}

if (i != client[i].account) {

a++;

}

}

}

if (a == N - 2) {

cout << "Пользователи не введены" << "\n";

}

else {

for (int i = 1; i < N; i++) {

for (int j = 1; j < N; j++) {

if (i == client[j].account) {

cout << client[i];

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

}

}

}

}

cout << "\n";

}

void bank::plus_sum(bank client[]) {

string fam;

cout << "Введите фамилию клиента: ";

//getchar();

//fgets(fam, L, stdin);

cin >> setw(L) >> fam;

string name;

cout << "Введите имя клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> name;

string patron;

cout << "Введите отчество клиента: ";

//getchar();

//fgets(name, L, stdin);

cin >> setw(L) >> patron;

double plus;

cout << "Введите сумму, которую хотите добавить к счёту: ";

cin >> setw(7) >> plus;

int a = 0;

double db;

printf(" № | Фамилия Имя Отчество| Сумма |\n");

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

for (int i = 0; i < N; i++) {

if (client[i].account == i && (client[i].clientt.fam == fam) && (client[i].clientt.name == name) && (client[i].clientt.patron == patron)) {

client[i].sum = client[i].sum + plus;

cout << client[i];

for (int i = 0; i < 73; i++) printf("_"); printf("\n");

}

if (i != client[i].account) {

a++;

}

}

if (a == N - 1) {

cout << "Пользователи не введены" << "\n";

}

cout << "\n";

}

int main() {

setlocale(LC_ALL, "Russian");

system("chcp 1251");

bank* mass = new bank[N];

bank A;

int C = 0;

do {

int x = menu();

switch (x) {

case 1:

new_account(mass);

break;

case 2:

A.show_client(mass);

break;

case 3:

A.filter_sum(mass);

break;

case 4:

A.sort_alphabet(mass);

break;

case 5:

A.plus_sum(mass);

break;

case 6:

exit(0);

default:

printf("Команды под данным номером не существует\n");

break;

}

} while (C != 1);

delete[] mass;

return 0;

}