Лаб. 4 ООП (Вариант 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 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;
}