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

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

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

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

}