массивы — Банковское приложение C ++, не имеющее более одного аккаунта

Здравствуйте, я работал над банковским приложением C ++, которое должно иметь возможность хранить более одной учетной записи со всеми связанными полями. Я столкнулся с несколькими проблемами:

  • При отображении информации об учетной записи в функциях Display или ShowInfo первая буква имени и средняя начальная буква не отображаются.
  • При создании учетной записи только самая последняя учетная запись может быть найдена и отображена в отображаемых данных. Я знаю, что для этого необходим массив, я просто не уверен, правильно ли это реализовано.

Спасибо за помощь. Любой вклад приветствуется!

#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;

class BankAccount{
double Balance = 0.0;
char ans;
public:struct Name{
char Last_Name[50];
char First_Name[50];
char Middle_Initial[5];
}Name;
public:struct Account{
char Type[1];
int Account_Number;
}Account;
public:
void CreateAccount();
void Withdraw();
void Deposit();
void Display();
void ShowInfo();
int Menu();

};

void BankAccount::CreateAccount(){
do
{
cout << "\nEnter account number: ";
cin >> Account.Account_Number;
cout << "\nEnter the last name for the account: ";
cin.ignore();
cin.getline(Name.Last_Name, 50);
cout << "\nEnter the first name for the account: ";
cin.ignore();
cin.getline(Name.First_Name, 50);
cout << "\nEnter the Middle initial for the account: ";
cin.ignore();
cin.getline(Name.Middle_Initial, 5);
cout << "\nEnter the type of account (C/S) : ";
cin >> Account.Type;
cout << "\nEnter the initial balance of the account: ";
cin >> Balance;
cout << "\n\nAccount Created.";
cout << "\n\nCreate new account? (Y/N) : ";
cin >> ans;

while (ans != 'Y' && ans != 'N'){
cout << "Invalid input. Create new account? (Y/N) : ";
cin >> ans;
}
cout << endl;
} while (ans != 'N');
};
void BankAccount::Withdraw(){
int actNum;
double amount;
cout << "Enter the account number for the account that you wish to withdraw funds: ";
cin >> actNum;
if (actNum == Account.Account_Number){
cout << "Enter the amount you would like to withdraw: ";
cin >> amount;
Balance = Balance - amount;
}
else if (actNum != Account.Account_Number){
cout << "No account found under that number! Try again!";
}

}
void BankAccount::Deposit(){
int actNum;
double amount;
cout << "Enter the account number for the account that you wish to deposit funds: ";
cin >> actNum;
if (actNum == Account.Account_Number){
cout << "Enter the amount you would like to deposit: ";
cin >> amount;
Balance = Balance + amount;
}
else if (actNum != Account.Account_Number){
cout << "No account found under that number! Try again!";
}
}
void BankAccount::Display(){
int actNum;
cout << "Enter the account number for the account that you wish to display account information for: ";
cin >> actNum;
if (actNum == Account.Account_Number){
cout << "Account details for " << Name.First_Name << " " << Name.Middle_Initial << " " << Name.Last_Name << "'s account: " << endl;
cout << "Account Number: " << Account.Account_Number << endl;
cout << "Account Type (Checking / Savings): " << Account.Type << endl;
cout << "Account Balance:  $" << Balance << endl;
}
else if (actNum != Account.Account_Number){
cout << "No account found under that number! Try again!";
}

}
void BankAccount::ShowInfo(){
cout << "Account details for " << Name.First_Name << " " << Name.Middle_Initial << " " << Name.Last_Name << "'s account: " << endl;
cout << "Account Number: " << Account.Account_Number << endl;
cout << "Account Type (Checking / Savings): " << Account.Type << endl;
cout << "Account Balance:  $" << Balance << endl;

}

int main(int argc, char *argv){
BankAccount ob;
char ch;

cout << "Welcome to Console Banking Application V 1.0!";
cout << "\nSelect an item from the list below by entering the corresponding letter.";
do{
cout << "\n\n A. Create Account \n B. Withdraw \n C. Deposit \n D. Show Account Details \n\n Q. Exit Application\n\n";
ch = ob.Menu();
switch (ch){
case 'A':
case 'a': ob.CreateAccount();
ob.ShowInfo();
break;
case 'B':
case 'b': ob.Withdraw();
break;
case 'C':
case 'c': ob.Deposit();
break;
case 'D':
case 'd': ob.Display();
break;
case 'Q':
case 'q': ob.ShowInfo();
exit(1);
break;
}

} while (1);
}
int BankAccount::Menu(){
char ch;
cout << "Select an option: ";
cin >> ch;
return ch;
}

0

Решение

Простой ответ: У вас есть только один банковский счет.

Если вы посмотрите на свою основную функцию, вы создаете один и только один Банковский счет. Как вы, вероятно, догадываетесь, один BankAccount не может быть использован для представления нескольких BankAccount (кроме SoAs).

Поэтому вам нужно массив банковских счетов. Это выглядит примерно так:

BankAccount obs[10];

Теперь у вас есть 10 банковских счетов, не более. Поэтому каждый раз, когда вы хотите создать новый BankAccount, просто убедитесь, что вы создаете его для BankAccount в массиве, который в данный момент не используется.

obs[0].CreateAccount();
obs[0].ShowInfo();
obs[0].Deposit();
//Make a new account
obs[1].CreateAccount();
...

Чтобы пойти еще дальше, давайте рассмотрим тот факт, что у вас есть 10 банковских счетов, и только 10. Это не очень обширно сейчас, не так ли? В каком банке доступно всего 10 счетов? Вероятно, в свое время обанкротился.

Наивным решением было бы просто добавить больше. 50, 100, даже 1000. Но вы действительно хотите вернуться и обновить это число каждый раз? Это слишком утомительно.

К счастью, есть удобный контейнер, который мы можем использовать:

#include <vector>
...
std::vector<BankAccount> obs;
...

В основном это массив, который автоматически расширяется при необходимости. Я не буду вдаваться в подробности о том, как использовать векторы, потому что я уверен, что вы можете легко научиться делать это самостоятельно. Я, однако, оставлю вас с этим ссылка на сайт так что вы знаете, с чего начать.

1

Другие решения

Других решений пока нет …