Лаб. 6 ООП (Вариант 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 change: public account {
public:
virtual void new_account(class name client[]) = 0;
virtual void show_client(class name client[]) = 0;
};
*/
class bank : public account {
int sum;
int perc;
int term;
int sum_month;
public:
bank();
bank(string fam, string name, string patron, int number, int sum, int perc,int term, int sum_month);
friend ostream& operator<<(ostream& os, bank& b);
void new_credit(bank client[]);
void show_client_credit(bank client[]);
void reduce(bank client[]);
};
class deposit : protected account {
double sum;
double perc;
public:
deposit();
deposit(string fam, string name, string patron, int number, int sum, int perc);
friend ostream& operator<<(ostream& os, deposit& d);
void new_deposit(deposit client[]);
void show_client_deposit(deposit client[]);
void withdraw(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, int sum, int perc, int term, int sum_month)
: account(fam, name, patron, number) {
this->sum = sum;
this->perc = perc;
this->term = term;
this->sum_month = sum_month;
}
deposit::deposit()
: account() {
sum = 0;
perc = 0;
}
deposit::deposit(string fam, string name, string patron, int number, int sum, int 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 << "|" << setw(4) << b.term << "|" << setw(8) << b.sum_month<<"|\n";
return os;
}
ostream& operator<<(ostream& os, deposit& 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;
}
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");
printf("7. Выход из программы\n-> ");
cin >> x;
cout << "\n";
return x;
}
void bank::new_credit(bank client[]) {
string acc_num_s;
cout << "Введите номер кредита (1-999): ";
cin >> acc_num_s;
int flag = 0;
for (int i = 0; i < acc_num_s.length(); i++) {
if ((acc_num_s[i] >= '0') && (acc_num_s[i] <= '9')) {
flag += 1;
}
}
if (flag != acc_num_s.length()) {
throw 0;
}
int acc_num = stoi(acc_num_s);
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;
int flag_fam = 0;
for (int i = 0; i < fam.length(); i++) {
if (((fam[i] >= 'a') && (fam[i] <= 'z')) || ((fam[i] >= 'A') && (fam[i] <= 'Z')) || ((fam[i] >= 'а') && (fam[i] <= 'я')) || ((fam[i] >= 'А') && (fam[i] <= 'Я'))) {
flag_fam += 1;
}
}
if (flag_fam != fam.length()) {
throw 0;
}
string name;
cout << "Введите имя клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> name;
int flag_name = 0;
for (int i = 0; i < name.length(); i++) {
if (((name[i] >= 'a') && (name[i] <= 'z')) || ((name[i] >= 'A') && (name[i] <= 'Z')) || ((name[i] >= 'а') && (name[i] <= 'я')) || ((name[i] >= 'А') && (name[i] <= 'Я'))) {
flag_name += 1;
}
}
if (flag_name != name.length()) {
throw 0;
}
string patron;
cout << "Введите отчество клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> patron;
int flag_patron = 0;
for (int i = 0; i < patron.length(); i++) {
if (((patron[i] >= 'a') && (patron[i] <= 'z')) || ((patron[i] >= 'A') && (patron[i] <= 'Z')) || ((patron[i] >= 'а') && (patron[i] <= 'я')) || ((patron[i] >= 'А') && (patron[i] <= 'Я'))) {
flag_patron += 1;
}
}
if (flag_patron != patron.length()) {
throw 0;
}
string sum_s;
cout << "Введите сумму кредита: ";
cin >> sum_s;
flag = 0;
for (int i = 0; i < sum_s.length(); i++) {
if ((sum_s[i] >= '0') && (sum_s[i] <= '9')) {
flag += 1;
}
}
if (flag != sum_s.length()) {
throw 0;
}
int sum = stoi(sum_s);
if (sum < 0 || sum > 9999999) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите сумму кредита: ";
cin >> sum;
} while (sum < 0 || sum > 9999999);
}
string perc_s;
cout << "Введите процент по кредиту: ";
cin >> perc_s;
flag = 0;
for (int i = 0; i < perc_s.length(); i++) {
if ((perc_s[i] >= '0') && (perc_s[i] <= '9')) {
flag += 1;
}
}
if (flag != perc_s.length()) {
throw 0;
}
int perc = stoi(perc_s);
if (perc < 0 || perc > 99) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите процент по кредиту: ";
cin >> perc;
} while (perc < 0 || perc > 99);
}
string term_s;
cout << "Введите срок кредита в количестве месяцев(1-200): ";
cin >> term_s;
flag = 0;
for (int i = 0; i < term_s.length(); i++) {
if ((term_s[i] >= '0') && (term_s[i] <= '9')) {
flag += 1;
}
}
if (flag != term_s.length()) {
throw 0;
}
int term = stoi(term_s);
if (perc < 0 || perc > 99) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите процент по кредиту: ";
cin >> perc;
} while (perc < 0 || perc > 99);
}
if (term < 1 || term > 200) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите срок кредита в количестве месяцев(1 - 200): ";
cin >> term;
} while (term < 1 || term > 200);
}
int sum_month;
sum_month = (sum *((perc/100)+1))/term;
cout << "Ваш ежемесячны платёж сотавляет: " << sum_month <<"\n";
client[acc_num] = bank(fam, name, patron, acc_num, sum, perc, term, sum_month);
cout << "\n";
cout << "Кредит успешно добавлен.\n";
}
void deposit::new_deposit(deposit client[]) {
string acc_num_s;
cout << "Введите номер депозита (1-999): ";
cin >> acc_num_s;
int flag = 0;
for (int i = 0; i < acc_num_s.length(); i++) {
if ((acc_num_s[i] >= '0') && (acc_num_s[i] <= '9')) {
flag += 1;
}
}
if (flag != acc_num_s.length()) {
throw 0;
}
int acc_num = stoi(acc_num_s);
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;
int flag_fam = 0;
for (int i = 0; i < fam.length(); i++) {
if (((fam[i] >= 'a') && (fam[i] <= 'z')) || ((fam[i] >= 'A') && (fam[i] <= 'Z')) || ((fam[i] >= 'а') && (fam[i] <= 'я')) || ((fam[i] >= 'А') && (fam[i] <= 'Я'))) {
flag_fam += 1;
}
}
if (flag_fam != fam.length()) {
throw 0;
}
string name;
cout << "Введите имя клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> name;
int flag_name = 0;
for (int i = 0; i < name.length(); i++) {
if (((name[i] >= 'a') && (name[i] <= 'z')) || ((name[i] >= 'A') && (name[i] <= 'Z')) || ((name[i] >= 'а') && (name[i] <= 'я')) || ((name[i] >= 'А') && (name[i] <= 'Я'))) {
flag_name += 1;
}
}
if (flag_name != name.length()) {
throw 0;
}
string patron;
cout << "Введите отчество клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> patron;
int flag_patron = 0;
for (int i = 0; i < patron.length(); i++) {
if (((patron[i] >= 'a') && (patron[i] <= 'z')) || ((patron[i] >= 'A') && (patron[i] <= 'Z')) || ((patron[i] >= 'а') && (patron[i] <= 'я')) || ((patron[i] >= 'А') && (patron[i] <= 'Я'))) {
flag_patron += 1;
}
}
if (flag_patron != patron.length()) {
throw 0;
}
string sum_s;
cout << "Введите сумму депозита: ";
cin >> sum_s;
flag = 0;
for (int i = 0; i < sum_s.length(); i++) {
if ((sum_s[i] >= '0') && (sum_s[i] <= '9')) {
flag += 1;
}
}
if (flag != sum_s.length()) {
throw 0;
}
int sum = stoi(sum_s);
if (sum < 0 || sum > 9999999) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите сумму депозита: ";
cin >> sum;
} while (sum < 0 || sum > 9999999);
}
string perc_s;
cout << "Введите процент по депозиту: ";
cin >> perc_s;
flag = 0;
for (int i = 0; i < perc_s.length(); i++) {
if ((perc_s[i] >= '0') && (perc_s[i] <= '9')) {
flag += 1;
}
}
if (flag != perc_s.length()) {
throw 0;
}
int perc = stoi(perc_s);
if (perc < 0 || perc > 99) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите процент по депозиту: ";
cin >> perc;
} while (perc < 0 || perc > 99);
}
client[acc_num] = deposit(fam, name, patron, acc_num, sum, perc);
cout << "\n";
cout << "Депозит успешно добавлен.\n";
}
void bank::show_client_credit(bank client[]) {
string fam;
cout << "Введите фамилию клиента: ";
//getchar();
//fgets(fam, L, stdin);
cin >> setw(L) >> fam;
int flag_fam = 0;
for (int i = 0; i < fam.length(); i++) {
if (((fam[i] >= 'a') && (fam[i] <= 'z')) || ((fam[i] >= 'A') && (fam[i] <= 'Z')) || ((fam[i] >= 'а') && (fam[i] <= 'я')) || ((fam[i] >= 'А') && (fam[i] <= 'Я'))) {
flag_fam += 1;
}
}
if (flag_fam != fam.length()) {
throw 0;
}
string name;
cout << "Введите имя клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> name;
int flag_name = 0;
for (int i = 0; i < name.length(); i++) {
if (((name[i] >= 'a') && (name[i] <= 'z')) || ((name[i] >= 'A') && (name[i] <= 'Z')) || ((name[i] >= 'а') && (name[i] <= 'я')) || ((name[i] >= 'А') && (name[i] <= 'Я'))) {
flag_name += 1;
}
}
if (flag_name != name.length()) {
throw 0;
}
string patron;
cout << "Введите отчество клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> patron;
int flag_patron = 0;
for (int i = 0; i < patron.length(); i++) {
if (((patron[i] >= 'a') && (patron[i] <= 'z')) || ((patron[i] >= 'A') && (patron[i] <= 'Z')) || ((patron[i] >= 'а') && (patron[i] <= 'я')) || ((patron[i] >= 'А') && (patron[i] <= 'Я'))) {
flag_patron += 1;
}
}
if (flag_patron != patron.length()) {
throw 0;
}
int a = 0;
printf(" № | Фамилия Имя Отчество| Сумма |Процент|Мес.|Сум.Мес.|\n");
for (int i = 0; i < 95; 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 < 95; i++) printf("_"); printf("\n");
}
if ((client[i].fam != fam) || (client[i].name != name) || (client[i].patron != patron)) {
a++;
}
}
if (a == N) {
throw "Пользователи не введены!";
}
}
void deposit::show_client_deposit(deposit client[]) {
string fam;
cout << "Введите фамилию клиента: ";
//getchar();
//fgets(fam, L, stdin);
cin >> setw(L) >> fam;
int flag_fam = 0;
for (int i = 0; i < fam.length(); i++) {
if (((fam[i] >= 'a') && (fam[i] <= 'z')) || ((fam[i] >= 'A') && (fam[i] <= 'Z')) || ((fam[i] >= 'а') && (fam[i] <= 'я')) || ((fam[i] >= 'А') && (fam[i] <= 'Я'))) {
flag_fam += 1;
}
}
if (flag_fam != fam.length()) {
throw 0;
}
string name;
cout << "Введите имя клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> name;
int flag_name = 0;
for (int i = 0; i < name.length(); i++) {
if (((name[i] >= 'a') && (name[i] <= 'z')) || ((name[i] >= 'A') && (name[i] <= 'Z')) || ((name[i] >= 'а') && (name[i] <= 'я')) || ((name[i] >= 'А') && (name[i] <= 'Я'))) {
flag_name += 1;
}
}
if (flag_name != name.length()) {
throw 0;
}
string patron;
cout << "Введите отчество клиента: ";
//getchar();
//fgets(name, L, stdin);
cin >> setw(L) >> patron;
int flag_patron = 0;
for (int i = 0; i < patron.length(); i++) {
if (((patron[i] >= 'a') && (patron[i] <= 'z')) || ((patron[i] >= 'A') && (patron[i] <= 'Z')) || ((patron[i] >= 'а') && (patron[i] <= 'я')) || ((patron[i] >= 'А') && (patron[i] <= 'Я'))) {
flag_patron += 1;
}
}
if (flag_patron != patron.length()) {
throw 0;
}
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 (((client[i].fam != fam) || (client[i].name != name) || (client[i].patron != patron))) {
a++;
}
}
if (a == N) {
throw "Пользователи не введены!";
}
}
void bank::reduce(bank client[]) {
int a=0;
string acc_num_s;
cout << "Введите номер кредита, по которому хотите совершить платёж (1-999): ";
cin >> acc_num_s;
int flag = 0;
for (int i = 0; i < acc_num_s.length(); i++) {
if ((acc_num_s[i] >= '0') && (acc_num_s[i] <= '9')) {
flag += 1;
}
}
if (flag != acc_num_s.length()) {
throw 1.1;
}
int acc_num = stoi(acc_num_s);
if (acc_num < 1 || acc_num > 999) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите номер кредита, по которому хотите совершить платёж (1-999): ";
cin >> acc_num;
} while (acc_num < 1 || acc_num > 999);
}
string sum_s;
for (int i = 0; i < N; i++) {
if (acc_num == client[i].number) {
cout << "Введите сумму платежа: ";
cin >> sum_s;
flag = 1.1;
for (int i = 0; i < sum_s.length(); i++) {
if ((sum_s[i] >= '0') && (sum_s[i] <= '9')) {
flag += 1;
}
}
if (flag != sum_s.length()) {
throw 1.1;
}
int sum = stoi(sum_s);
if (sum == client[i].sum_month) {
client[i].sum = client[i].sum - sum;
cout << "Сумма успешно внесена!" << "\n";
}
if (sum != client[i].sum_month) {
throw 0;
}
}
if (acc_num != client[i].number) {
a++;
}
}
if (a == N) {
cout << "Пользователи не введены" << "\n";
}
}
void deposit::withdraw(deposit client[]) {
int a=0;
string acc_num_s;
cout << "Введите номер депозита, с которого хотите снять деньги (1-999): ";
cin >> acc_num_s;
int flag = 0;
for (int i = 0; i < acc_num_s.length(); i++) {
if ((acc_num_s[i] >= '0') && (acc_num_s[i] <= '9')) {
flag += 1;
}
}
if (flag != acc_num_s.length()) {
throw 1.1;
}
int acc_num = stoi(acc_num_s);
if (acc_num < 1 || acc_num > 999) {
do {
cout << "Недопустимое значение!" << "\n";
cout << "Введите номер депозита, с котоого хотите снять деньги (1-999): ";
cin >> acc_num;
} while (acc_num < 1 || acc_num > 999);
}
string sum_s;
for (int i = 0; i < N; i++) {
if (acc_num == client[i].number) {
cout << "Введите сумму снятия: ";
cin >> sum_s;
flag = 0;
for (int i = 0; i < sum_s.length(); i++) {
if ((sum_s[i] >= '0') && (sum_s[i] <= '9')) {
flag += 1;
}
}
if (flag != sum_s.length()) {
throw 1.1;
}
int sum = stoi(sum_s);
if (sum <= client[i].sum) {
client[i].sum = client[i].sum - sum;
cout << "Сумма снята внесена!" << "\n";
}
if (sum > client[i].sum) {
throw 0;
}
}
if (acc_num != client[i].number) {
a++;
}
}
if (a == N) {
cout << "Пользователи не введены" << "\n";
}
}
int main() {
setlocale(LC_ALL, "Russian");
system("chcp 1251");
bank* massB = new bank[N];
deposit* massD = new deposit[N];
bank B;
deposit D;
int C = 0;
do {
int x = menu();
switch (x) {
case 1:
try {
B.new_credit(massB);
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!";
cout << "\n";
break;
}
break;
case 2:
try {
D.new_deposit(massD);
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!";
cout << "\n";
break;
}
case 3:
try {
B.show_client_credit(massB);
break;
}
catch (const char *c) {
cout << c << "\n";
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!!";
cout << "\n";
break;
}
case 4:
try {
D.show_client_deposit(massD);
break;
}
catch (char* c) {
cout << c << "\n";
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!";
cout << "\n";
break;
}
case 5:
try {
B.reduce(massB);
break;
}
catch (int x) {
cout << "\n";
cout << "Ошибка: Введённая сумма не совпадает с ежемесячной суммой взноса!";
cout << "\n";
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!";
cout << "\n";
break;
}
case 6:
try {
D.withdraw(massD);
break;
}
catch (int x) {
cout << "\n";
cout << "Ошибка: Введённая сумма превышает сумму депозита!";
cout << "\n";
break;
}
catch (...) {
cout << "\n";
cout << "Ошибка в введённых данных!";
cout << "\n";
break;
}
case 7:
exit(0);
default:
printf("Команды под данным номером не существует\n");
break;
}
} while (C != 1);
delete[] massB;
delete[] massD;
return 0;
}