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

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

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

#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 account;

class fio {

protected:

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 account;

};

class account : protected fio {

protected:

//fio clientt;

int number;

static int count;

public:

account();

account(string fam, string name, string patron, int number);

//account(account& other);

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

//virtual void sort_alphabet(account client[]);

//friend class fio;

};

class bank : public account {

double sum;

double perc;

public:

bank();

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

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

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;

}

};

/*class deposit : protected account {

double sum;

double perc;

public:

deposit();

deposit(string fam, string name, string patron, int number, double sum, double perc);

friend ostream& operator<<(ostream& os, deposit& d);

void new_account(deposit client[]);

};

*/

int account::count = 0;

fio::fio() {

fam = " ";

name = " ";

patron = " ";

}

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

this->fam = fam;

this->name = name;

this->patron = patron;

}

account::account(): fio() {

//clientt = fio();

number = 0;

count++;

}

account::account(string fam, string name, string patron, int number):fio(fam, name, patron) {

this->number = number;

count++;

}

bank::bank()

:account() {

sum = 0;

perc = 0;

}

bank::bank(string fam, string name, string patron, int number, double sum, double perc)

:account(fam, name, patron, number) {

this->sum = sum;

this->perc = perc;

}

/*

deposit::deposit()

: account() {

sum = 0;

perc = 0;

}

deposit::deposit(string fam, string name, string patron, int number, double sum, double perc)

: account(fam, name, patron, number) {

this->sum = sum;

this->perc = perc;

}

*/

/*

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, account& a) {

os << setw(4) << a.number << "|" << setw(L) << a.fam << setw(L) << a.name << setw(L) << a.patron << "|";

return os;

}

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

os << setw(4) << b.number << "|" << setw(L)<< b.fam << setw(L) << b.name<< setw(L) << b.patron << "|" << setw(7) << b.sum << "|" << setw(7) << b.perc << "|\n";

return os;

}

/*

ostream& operator<<(ostream& os, deposit& d) {

os << setw(7) << d.sum << setw(7) << d.perc << "|\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 bank::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].number) {

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);

}

double perc;

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

cin >> perc;

if (sum < 0 || perc > 99) {

do {

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

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

cin >> perc;

} while (perc < 0 || perc > 99);

}

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

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 < 81; i++) printf("_"); printf("\n");

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

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

cout << client[i];

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

}

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

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 < 81; i++) printf("_"); printf("\n");

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

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

cout << client[i];

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

}

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

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 < 81; i++) printf("_"); printf("\n");

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

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

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

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

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

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

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

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

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

}

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

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].number) {

cout << client[i];

for (int i = 0; i < 81; 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 < 81; i++) printf("_"); printf("\n");

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

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

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

cout << client[i];

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

}

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

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:

A.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;

}