Лаб. 3 ООП (Вариант 1)
.docx
#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;
}