Проверка пинкода, программа ATM

#c #arrays

#c #массивы

Вопрос:

Я пишу программу, которая имитирует банкомат, и у меня возникают проблемы с массивами учетных записей в программе. Массивы учетных записей содержат номер счета, pin-код и баланс счета. Самая первая функция в коде позволяет пользователю входить в систему с помощью своего PIN-кода и номера учетной записи, но у меня возникают проблемы при сравнении пользовательского ввода с массивом учетных записей:

 #include <iostream>
#include <string>
using namespace std;

class Account
{
 private: int accountNum;
          int accountPin;
          double accountBalance;
          int setPin();
          int setAccountNum(); 

 public: Account();
         Account(int, string, double);
         double setAccountBalance(int) ;
         int getAccountNum();
         int confirmPin(string) ;
         double updateBalance(double) ;
 };

 void confirmPin(string accountPin, int accountNum)
 {
  //confirm pin segment
  // returns true or false value, allows access to account balance information
 }



int main () {

  Account account[3] = 
  {
      {123, "abc123", 100.00}, {456, "def456", 50.00},{789, "ghi789", 500.63} 
  };
  int option;

  cout << "LOGINnEnter Account#: "<< endl;
  cin >> accountNum;
  cout << "Enter password";
  cin >> accountPin;
  //confirm pin function
  

Я закодировал столько, сколько мог на данный момент. Я понятия не имею, с чего начать с точки зрения сравнения входных данных с информацией об учетной записи. Заранее спасибо за любую помощь!

Комментарии:

1. OT: Я настоятельно рекомендую добавлять имена параметров в ваши объявления, включая конструкторы. Это действительно помогает, когда два или более последовательных параметра имеют один и тот же тип.

2. Я хотел бы поддержать то, что говорит здесь Томас. Подобные интерфейсы приводят в бешенство , поскольку одна из наиболее важных функций заголовочного файла — объяснить, что происходит. Если вы заставите меня копаться в .cpp файле только для того, чтобы узнать, какие аргументы использовать, я буду считать, что вы специально усложняете мне жизнь. Вот так ваш обед каждый раз «пропадает» из холодильника.

3. Подсказка: std::find чтобы найти запись. Совет: используйте std::vector<account> и emplace_back для его заполнения.

4. не тема этого вопроса, но перед вашим следующим вопросом: не используйте float или double для баланса счета. Используется int для представления целого числа центов.

Ответ №1:

Вот несколько примеров, которые помогут вам начать.

Сравнение равенства перегрузки

 class Account
{
  //...
  public:
     bool operator==(const Accountamp; a) const
     {
         if (accountNum != a.accountNum) return accountNum < a.accountNum;
         else
         {
            if (accountPin != a.accountPin) return accountPin < a.accountPin;
            else
            {
                 double difference = abs(accountBalance - a.accountBalance);
                 if (difference < 1.0E-6) return true;
         }
         return false;
     }
};
  

Это позволяет вам ввести один экземпляр и сравнить с другим экземпляром для равенства.

Создать функцию сравнения

Добавьте в свой класс метод, который сравнивает номера счетов:

 class Account
{
  //...
  public:
      bool is_equal_account_number(const Accountamp; a) const
      {
          return accountNum == a.accountNum;
      }
};
  

Описанный выше метод позволяет сравнивать только номера счетов. Это может быть полезно, поскольку повторяющиеся номера счетов, вероятно, не допускаются.

Сравнить по значению

Другим примером является написание метода, который будет сравнивать номер счета с заданным номером счета.

 class Account
{
  //...
  public:
    bool  same_account_number(const int acct_num) const
    {  return accountNum == acctnum);
};
  

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