In this assignment you will write a small \( \mathrm{C}++ \) program. Your program should compile correctly and produce the specified output. Please note that the computer program should comply with the commenting and formatting rules as has been done in class. For example, there should be a header for the whole program that gives the author's name, class name, date, and description. End braces should be commented, and there are alignment and indenting requirements as discussed. Please ask if you have any questions. Program \#1 Write a \( \mathrm{C}++ \) program to implement a simplified Banking scheme. The information is given as an input file, named bankInfo. txt. The file has the following format: \( < \) ACCOUNT NUMBER \( > \) \( < \) TRANSATION TYPE \( > \) \( < \) BALANCE \( > \) \( <\mathrm{OWNER}> \) Where: - ACCOUNT NUMBER is a long long int, used to represent the account number of 10 digits. - TRANSACTION TYPE is an enumerated data type with two values DEPOSIT, WITHDRAWAL - BALANCE is a double indicating the dollar amount of the transaction - OWNER is a variable length c string to store the owner's full name Step 1: ( 20 points) Create a header file Bank. \( \mathrm{h} \) to define a Bank class with the following members: Data members: The program should implement data hiding, so please define data members accordingly. - long long int accountNumber - TRANSACTION_TYPE ttype - double balance - char * owner Note: The owner name means the full name (first and last name). Member functions: Include accessors and mutators (setters and getters) for each data member. Include only the declaration (prototype) of the member functions in the header file. The implementation of member functions will later be done in the Bank.cpp file. - Bank() constructor with no arguments to create a bank account with a default accountNumber as 9999999999 , balance value of 500 , and owner set to nullptr. - Bank (param1, param2) constructor with two parameters to create a bank account with a specified accountNumber and balance (as param1 and param2, respectively), set the owner data member to nullptr. - Bank (param1, param2, param3) constructor with two parameters to create a bank account with a specified accountNumber and balance (as param1 and param2, respectively), set the owner data member to param3. Notice that param 3 will be used to set the owner name. - withdraw (param1) function to withdraw a specified amount (param1) from the account. The function should first check if the current value in balance in sufficient. If the amount is sufficient, withdrawal is processed, otherwise display a message to the user that says, "Insufficient balance." and withdraw the complete balance so that balance becomes zero. - deposit(param1) function to deposit a specified amount of money (param1) to the account. This is to be added to the current balance. - \( \sim \operatorname{Bank}( \) ) destructor to release any dynamically allocated memory. Note: owner is a variable size c-string, therefore you will need to 1) release the memory dynamically allocate for it (if any); 2) get the size to 3) dynamically allocate the memory, 4) copy element by element the characters to the owner's name, and 5) make sure the owner's is a valid c string. Step 2:(10 points) Create a Bank.cpp file and implement the member functions of the Bank class. Step 3: (10 points) Define an independent di splayAccount In fo(Bank obj) function which takes a Bank object (obj) as a parameter and displays the accountNumber, balance and owner of the bank account specified by this Bank object. For this, it calls the getAccountNumber0, getBalance() and getowner ( ) member functions of the Bank class. Note: The displayAccountinfo0 function IS NOT a member function of the Bank class. It is an independent function that is called from inside the main function. Step 4: (10 points) Write a friend function called accountInfo() to display all the account parameters, without having to use the accessors as in displayAccountInfo () Step 5: a) (15 points) Write the code to count the number \( (\mathrm{N}) \) of unique accounts in the bankInfo.txt. An account is unique if the account number does not repeat. The balance, and owner may repeat but the account number cannot. b) (5 points) Dynamically allocate an array of accounts named portfolio, to store the \( \mathrm{N} \) unique accounts from bankInfo.txt c) (15 points) Write the code to read the account information from bankInfo.txt into the array portfolio defined in b). Note: depending on the transaction type, you will need to call the deposit or withdraw method. d) (5 points) Then display all the account information by calling the displayAccountInfo() function. e) (5 points) Then display all the account information by calling the accountInfo 0 function. For d) and e) use a table (5 points) with headers account number(use width 12), amount(use width 10 and precision 2), and owner (width 30 ). Deliverables You will turn in your source code file(s) and screenshots of the console, showing how the program runs. The screenshots can be multiple files, or a single word file with all the screenshots. The \( \mathrm{C}++ \) source code files should: 1) Comply with all of the formatting requirements already discussed. 2) Implement the functions as described above A sample input file: 1000258915 0 \( 456.78 \) Homer J. Simpson 1000251784 0 \( 893.67 \) Jhon Hancock 1000253791 0 \( 148.92 \) Jane Doe 1000258915 1 \( 46.58 \)