Показать сообщение отдельно
Старый 24.10.2017, 03:17   #1 (permalink)
dfgh
Новичок
 
Регистрация: 24.10.2017
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию C++ доработать функции

Доброй ночи!
Кто может гляньте пожалуйста
Цитата:
#include "stdafx.h"
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include <clocale>
#include<math.h>
#include <string>
#include <iostream>
#include <windows.h>
#include <vector>

using namespace std;

class Credit
{
private:
int num; //номер
int sumcred; //сумма кредита
int vypl;//сколько выплачено
public:
Credit();// Конструктор по умолчанию
// Конструкторы инициализаторы
Credit(int i);
Credit(int num, int sumcredit, int vypl);

~Credit();// Деструктор
void Input();
void Print();

//Методы для работы с атрибутами класса
int GetNumber() { return num; };
int GetSumcred() { return sumcred; };
int GetVypl() { return vypl; };

void SetSumcred()
{
cout << "Введите сумму кредита клиента\n";
cin >> sumcred;
};
void SetVypl()
{
cout << "Введите сколько выплачено\n";
cin >> vypl;
};
void SetNumber(int number)
{
num = number;
};



};
Credit::Credit(int i)
{ // Конструктор инициализатор
if (i == 1)
Input();
cout << "Конструктор инициализатор класса Кредит\n";
}
Credit::Credit(int number, int Sumcred, int Vypl)
{// Конструктор инициализатор (перегруженный)
num = number;
sumcred = Sumcred;
vypl = Vypl;
cout << "Конструктор инициализатор (перегруженный) класса Кредит\n";
}
void Credit::Input()
{// Метод ввода данных
cout << "Введите номер клиента\n";
do { cin >> num; } while (num != 1 && num != 2);
cout << "Введите сумму кредита клиента\n";
cin >> sumcred;
cout << "Введите сколько выплачено\n";
cin >> vypl;
}
Credit::Credit()
{// Конструктор по умолчанию
num = 1;
sumcred = 0;
vypl = 0;
cout << "Конструктор по умолчанию класса Кредит\n";
}
void Credit::Print()
{// Метод вывода
cout << "Номер кредита: " << num << "". Сумма кредита: " << sumcred << "". Выплачено: " << vypl << ".\n";
}
Credit::~Credit()
{ // Деструктор
cout << "Деструктор класса Кредит\n";
}

class Client
{
private:
Credit **FCreditArray; // Класс часть
//int FCreditCount;//кол-во строк
int FCreditsCount;
int FCurrentIndex;
string name;
string surname;
int ClientNumber;//номер клиента
public:
Client(); // Конструктор по умолчанию
Client(int n, int f); // Конструктор инициализатор
Client(const Client&);// Конструктор копирования
Client getClient();
void PrintAll();
void Print_i() { FCreditArray[FCurrentIndex]->Print(); }
string GetSurname() { return surname; };
string GetName() { return name; };
void SetSurname() {
cout << "Введите фмилию клиента\n";
getline(cin, surname);
};
void SetName() {
cout << "Введите имя клиента\n";
getline(cin, name);
};
void SetSurname(string surname);
void SetName(string name);

virtual ~Client();// Деструктор класса
// Методы для работы с атрибутами класса
void AddCredit(Credit* CreditBuf);
void DelCreditFromArray(int num);
void SetN(int n) { FCreditsCount = n; };
int GetN() { return FCreditsCount; }
int GetNumber() { return ClientNumber; }
int SetNumber(int number)
{
return ClientNumber = number;
};
// Методы для работы с «частью»
Credit* GetMas(int i) const
{
return FCreditArray[i];
}
void SetMas(int i, Credit *f) { FCreditArray[i] = f; }
public:
static int count; //количество созданных объектов
};
Client::Client()
{// Конструктор по умолчанию
count++;
FCreditsCount = 0;
FCurrentIndex = 0;
FCreditArray = NULL;
ClientNumber = count;
cout << "Конструктор по умолчанию класса Клиент\n";
};
Client::Client(int n, int f)
{//Конструктор инициализатор
int i;
FCreditsCount = n;
FCreditArray = new Credit*[n];
for (i = 0; i < FCreditsCount; i++)
{
//cout << "\n %d кредит: " << (i + 1);
FCreditArray[i] = new Credit(f);
}
cout << "Конструктор инициализатор класса Клиент\n";
}
void Client::SetSurname(string Surname)
{//Конструктор инициализатор(перегруженный)
this->surname = Surname;
}
void Client::SetName(string Name)
{//Конструктор инициализатор(перегруженный)
this->name = Name;
}

void Client::AddCredit(Credit* CreditBuf)
{//Метод добавления
CreditBuf->SetNumber(GetNumber());
Credit **CreditArray;
CreditArray = new Credit*[this->GetN() + 1];
for (FCurrentIndex = 0; FCurrentIndex < this->GetN(); FCurrentIndex++)
{
CreditArray[FCurrentIndex] = this->GetMas(FCurrentIndex);
}
CreditArray[FCurrentIndex] = CreditBuf;

delete[] FCreditArray;
FCreditArray = new Credit*[this->GetN() + 1];
this->SetN(this->GetN() + 1);
for (FCurrentIndex = 0; FCurrentIndex < this->GetN(); FCurrentIndex++)
{
FCreditArray[FCurrentIndex] = CreditArray[FCurrentIndex];
}

};
void Client:elCreditFromArray(int num) ///DelCreditFromArray(int num)
{// Метод удаления кредита под номером num
int j, k = 0;
// Копируем кредит из клиента в буферную переменную
Credit *CreditBuf;
CreditBuf = this->GetMas(num - 1);
// Копируем все кредиты кроме с номером num
Credit **CreditArray;
CreditArray = new Credit*[this->GetN() - 1];
for (j = 0; j<this->GetN(); j++)
{
if (j != (num - 1))
{
CreditArray[k] = this->GetMas(j);
k++;
}
}
// Заносим все кредиты в свойство
for (j = 0; j<this->GetN() - 1; j++)
{
FCreditArray[j] = CreditArray[j];
}
this->SetN(this->GetN() - 1);
// Освобождаем память из под кредита с номером num
delete CreditBuf;
};
void Client::PrintAll()
{// Метод вывода перечня клиентов
for (FCurrentIndex = 0; FCurrentIndex < FCreditsCount; FCurrentIndex++)
{
FCreditArray[FCurrentIndex]->Print();
}

}
Client::Client(const Client& client)//конструктор копирования
{
FCreditsCount = client.FCreditsCount;//кол-во строк
FCurrentIndex = 0;//номер строки
ClientNumber = client.ClientNumber;//номер клиента
for (FCurrentIndex; FCurrentIndex < FCreditsCount; FCurrentIndex++)
{
SetMas(FCurrentIndex, client.GetMas(FCurrentIndex));
}
}

Client Client::getClient()
{
Client tempClient;
tempClient.SetSurname(this->GetSurname());
tempClient.SetName(this->GetName());
for (int i = 0; i < this->GetN(); i++)
{
tempClient.AddCredit(this->GetMas(i));
}
tempClient.SetNumber(this->GetNumber());
tempClient.count = this->count;

return tempClient;
}

Client::~Client()
{// Деструктор
for (int i = 0; i < FCreditsCount; i++)
delete FCreditArray[i];
delete[] FCreditArray;
cout << " Деструктор класса Клиент\n";
}
vector <Client*> mas;

class Handler
{
public:
void SetOnClient(Credit *CreditOnDesk);//установка кредита по номеру
void Dolg(Client *FCurrentClient);//Поиск клиентов с долгом
void DolgShow();
void FindMinDolg();//поиск клиента с минимальной задолженностью
void MoveCredit();//перевод кредита с одного клиента на другого
void ShowAllCredit();
~Handler();//деструктор
};
void Handler::MoveCredit()
{
int Client1, Client2, CreditForMove;
cout << "Введите номер клиента с которого хотите перевести кредит";
do {
cin >> Client1;
} while (Client1 < 1 || Client1 > Client::count);

cout << "Введите номер кредита, который вы хатите переместить";
do
{
cin >> CreditForMove;
} while (CreditForMove < 1 || CreditForMove > mas[Client1 - 1]->GetN());
CreditForMove--;
cout << "Введите номер клиента на которого хотите перевести кредит";
do
{
cin >> Client2;
} while (Client2<1 || Client2 > Client::count || Client1 == Client2);
Client1--;
Client2--;
Credit *CreditMove;
CreditMove = mas[Client1]->GetMas(CreditForMove);
Credit *CreditBuf;
CreditBuf = new Credit(CreditMove->GetNumber(), CreditMove->GetSumcred(), CreditMove->GetVypl());

mas[Client1]->DelCreditFromArray(CreditForMove);
mas[Client2]->AddCredit(CreditBuf);
}

void Handler:olg(Client *FCurrentClient) ///Dolg
{
for (int i = 0; i < FCurrentClient->GetN(); i++)
{
int sum = FCurrentClient->GetMas(i)->GetSumcred();
int vypl = FCurrentClient->GetMas(i)->GetVypl();
FCurrentClient->GetSurname();
if (sum > vypl)
{
cout << sum - vypl;

}
else
{
cout << "Кредит выплачен";
}

}
}
void Handler:olgShow()///DolgShow
{

for (int i = 0; i < mas.size(); i++)
{
cout << mas[i]->GetSurname();

for (int j = 0; j < mas[j]->GetN(); j++)
{
int sum = mas[j]->GetMas(j)->GetSumcred();
int vypl = mas[j]->GetMas(j)->GetVypl();
cout << mas[i]->GetMas(j)->GetNumber();
if (sum > vypl)
{
cout << sum - vypl;

}
else
{
cout << "Кредит выплачен";
}
}
}
}

void Handler::FindMinDolg()
{
int min;
//vector <Client*> Mas;
//bool cm[mas.size];//управляющий массив
bool *cm = new bool[mas.size()];
for (int i = 0; i < mas.size(); i++)
{
int temp = 0;
for (int j = 0; j < mas[j]->GetN(); j++)
{
int sumcred = mas[j]->GetMas(j)->GetSumcred();
int vypl = mas[j]->GetMas(j)->GetVypl();
if (sumcred>vypl)
{
temp = temp + (sumcred - vypl);
}
}
if (i == 0)
{
min = temp;
cm[i] = 1;
}
else if (min == temp)
{
cm[i] = 1;
}
else if (min>temp)
{
min = temp;
for (int k = 0; k<i; k++)
{
cm[k] = 0;
}
cm[i] = 1;
}
}
//вывод
for (int i = 0; i < mas.size(); i++)
{
if (cm[i] == 1) cout << mas[i]->GetSurname() << "имеет минимальные долги";
}
delete[]cm;
}

void Handler::ShowAllCredit()
{
for (int i = 0; i<Client::count; ++i)
{
mas[i]->PrintAll();
}
}
void Handler::SetOnClient(Credit *CreditOnDesk)//установка кредита клиента на номер
{
mas[CreditOnDesk->GetNumber() - 1]->AddCredit(CreditOnDesk);
};

Handler::~Handler()// Деструктор класса Обработчик
{
for (size_t i = 0; i < mas.size(); i++)
{
delete mas[i];
}
cout << "Деструктор класса Обработчик\n";
}
int Client::count = 0;

int Menu()// меню
{
cout << "\n________________________ Меню ______________________" << endl;
cout << "1 - Добавить клиента" << endl;
cout << "2 - Добавить клиенту кредит" << endl;
cout << "3 - Найти клиента с минимальным кол-вом задолженностей" << endl;
cout << "4 - Перевод кредита на другого клиента" << endl;
cout << "5 - Показать информацию о всех клиентах и кредитах" << endl;
cout << "6 - Выход" << endl;
int vubor;
do {
cin >> vubor;
} while (vubor < 1 || vubor>7);
return vubor;
}

int main()
{
setlocale(LC_ALL, "rus");//отображение кирилицы
SetConsoleCP(1251);//ввод кирилицы
SetConsoleOutputCP(1251);
Handler *O = new Handler();
int vubor;
do {
vubor = Menu();
if (vubor != 1 && vubor != 7 && Client::count == 0)
{
cout << "Вы не записали клиента!\n";
vubor = Menu();
}
else if (vubor == 5 && Client::count == 1)
{
cout << "Вам нужно как минимум 2 клиента! Запишите еще одного клиента! \n";
vubor = Menu();
}
else
{
if (vubor == 1)
{
Client *A = new Client;
mas.push_back(A);;
}
else if (vubor == 2)
{
int number;
cout << "Введите номер клиента\n";
do { cin >> number; } while (number <1 || number>Client::count);
Credit *CreditOnClient = new Credit(number);
O->SetOnClient(CreditOnClient);//установка кредита по номеру
}
else if (vubor == 3)
{
O->FindMinDolg();
}
else if (vubor == 4)
{
O->MoveCredit();
}
else if (vubor == 5)
{
O->ShowAllCredit();
}

}
} while (vubor != 6);
delete O;
_getch();
return 0;
}
dfgh вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070