Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 8915c2f

Browse files
committedMar 9, 2025
add deposit another
1 parent 4aff6ec commit 8915c2f

File tree

4 files changed

+146
-12
lines changed

4 files changed

+146
-12
lines changed
 

‎src/bank_api.cpp

+87-2
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,107 @@ BankAPI::BankAPI(){
66
// printf("BankAPI create! \n");
77
}
88

9-
void BankAPI::addAccount(std::string card_number,int pin_number, unsigned int balance){
9+
bool BankAPI::hasAccount(const std::string& card_number){
10+
// printf("[%s] has Account is %d",card_number.c_str(),account.find(card_number) != account.end());
11+
return account.find(card_number) != account.end();
12+
}
13+
14+
/**
15+
* @brief
16+
* addAccount.
17+
* This can be omitted if a list of accounts can be received from the server.
18+
* @param card_number
19+
* @param pin_number
20+
* @param balance
21+
*/
22+
void BankAPI::addAccount(const std::string& card_number,int pin_number, unsigned int balance){
1023
printf("addAccount [%s], pin : %d, balance: %d\n",card_number.c_str(),pin_number,balance);
1124
account[card_number] = {card_number,pin_number,balance};
1225
}
1326

27+
/**
28+
* @brief
29+
* validation check by pin
30+
* @param card_number
31+
* @param pin_number
32+
* @return true
33+
* @return false
34+
*/
1435
bool BankAPI::checkPIN(const std::string& card_number,const int& pin_number){
1536
// printf("checkPIN \n");
1637
return account.find(card_number) != account.end() &&
1738
account[card_number].pin == pin_number;
1839
}
1940

41+
/**
42+
* @brief
43+
* see the balance of my account
44+
* @param card_number
45+
* @return unsigned int
46+
*/
2047
unsigned int BankAPI::getBalance(const std::string& card_number){
2148
// printf("getBalance : %d$\n",account[card_number].balance);
2249
std::lock_guard<std::mutex> lock(mutex);
2350
return account[card_number].balance;
2451
}
2552

53+
/**
54+
* @brief
55+
* Deposit to my card
56+
* @param card_number
57+
* @param dollars
58+
* @return true
59+
* @return false
60+
*/
2661
bool BankAPI::deposit(const std::string& card_number,const unsigned int& dollars){
27-
// printf("deposit %d$\n",dollars);
62+
// printf("[%s] deposit %u$\n",card_number.c_str(),dollars);
2863
std::lock_guard<std::mutex> lock(mutex);
2964
if (dollars > MAX-getBalance(card_number))
3065
{
3166
return false;
3267
}
3368
account[card_number].balance+=dollars;
69+
// printf("[%s] deposit %u$\n",card_number.c_str(),getBalance(card_number));
3470
return true;
3571
}
3672

73+
/**
74+
* @brief
75+
* Deposit to another account
76+
* @param card_number
77+
* @param target_card
78+
* @param dollars
79+
* @return true
80+
* @return false
81+
*/
82+
bool BankAPI::deposit(const std::string& card_number,const std::string& target_card,const unsigned int& dollars){
83+
// printf("deposit %d$\n",dollars);
84+
std::lock_guard<std::mutex> lock(mutex);
85+
if(!hasAccount(target_card))
86+
{
87+
printf("%s card number cannot be found\n",target_card.c_str());
88+
return false;
89+
}
90+
if (getBalance(card_number) < dollars || dollars > MAX-getBalance(target_card))
91+
{
92+
printf("Please Check your balance: %u $.\nPlease try again.\n",getBalance(card_number));
93+
return false;
94+
}
95+
if(!deposit(target_card,dollars)){
96+
return false;
97+
}
98+
account[card_number].balance-=dollars;
99+
return true;
100+
}
101+
102+
/**
103+
* @brief
104+
*
105+
* @param card_number
106+
* @param dollars
107+
* @return true
108+
* @return false
109+
*/
37110
bool BankAPI::withdrawal(const std::string& card_number,const unsigned int& dollars){
38111
// printf("withdrawal : %d$\n",dollars);
39112
std::lock_guard<std::mutex> lock(mutex);
@@ -46,3 +119,15 @@ bool BankAPI::withdrawal(const std::string& card_number,const unsigned int& doll
46119
}
47120
return true;
48121
}
122+
123+
void BankAPI::showAllAccountInfo(){
124+
printf("===============================\n");
125+
for (auto it : account)
126+
{
127+
printf("card number : %s\n",it.first.c_str());
128+
printf("pin number : %d\n",it.second.pin);
129+
printf("balance : %u\n",it.second.balance);
130+
printf("===============================\n");
131+
}
132+
133+
}

‎src/bank_api.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,20 @@ class BankAPI{
1515
public:
1616
BankAPI();
1717
~BankAPI(){};
18-
void addAccount(std::string card_number,int pin, unsigned int balance);
18+
void addAccount(const std::string& card_number,int pin, unsigned int balance);
1919
bool checkPIN(const std::string& card_number,const int& pin_number);
2020
unsigned int getBalance(const std::string& card_number);
2121
bool deposit(const std::string& card_number,const unsigned int& dollars);
22+
bool deposit(const std::string& card_number,const std::string& target_card,const unsigned int& dollars);
2223
bool withdrawal(const std::string& card_number,const unsigned int& dollars);
24+
25+
void showAllAccountInfo(); //for test
2326
private:
2427
static std::mutex mutex;
2528
std::map<std::string,Account> account;
2629

30+
private:
31+
bool hasAccount(const std::string& card_number);
32+
2733

2834
};

‎src/controller.cpp

+48-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// #include <iostream>
22
#include "controller.h"
3+
#include "version.h"
34

4-
5-
ATMController::ATMController(BankAPI _api):api(_api) {
6-
printf("ATMController create! \n");
5+
ATMController::ATMController(BankAPI& _api):api(_api) {
6+
// printf("ATMController create! \n");
77
state = Process::IDLE;
88
}
99
unsigned int ATMController::inputOnlyInteger(){
@@ -23,8 +23,9 @@ unsigned int ATMController::inputOnlyInteger(){
2323
}
2424
return data;
2525
}
26+
2627
ATMController::Process ATMController::inputUserSelcet(){
27-
std::cout << "Select Option [1: Check Balance, 2: Deposit, 3: Withdrawal, 4: Exit] : ";
28+
std::cout << "Select Option [1: Check Balance, 2: Deposit, 3: Deposit Another, 4: Withdrawal, 5: Exit] : ";
2829
int select;
2930
std::cin >> select;
3031
ATMController::Process state;
@@ -36,6 +37,9 @@ ATMController::Process ATMController::inputUserSelcet(){
3637
case ATMController::Process::DEPOSIT:
3738
state = ATMController::Process::DEPOSIT;
3839
break;
40+
case ATMController::Process::DEPOSIT_ANOTHER:
41+
state = ATMController::Process::DEPOSIT_ANOTHER;
42+
break;
3943
case ATMController::Process::WITHDRAWAL:
4044
state = ATMController::Process::WITHDRAWAL;
4145
break;
@@ -49,11 +53,18 @@ ATMController::Process ATMController::inputUserSelcet(){
4953
return state;
5054
}
5155

56+
/**
57+
* @brief
58+
* insertCard action
59+
* Replace the card input action with the card number input.
60+
* @return true
61+
* @return false
62+
*/
5263
bool ATMController::insertCard(){
5364
std::string _card_number;
5465
int pin;
5566
std::cout << "Insert Card (Enter Card Number): ";
56-
std::cin >> _card_number;
67+
std::getline(std::cin >> std::ws, _card_number);
5768

5869
std::cout << "Enter PIN: ";
5970
std::cin >> pin;
@@ -67,6 +78,10 @@ bool ATMController::insertCard(){
6778
return true;
6879
}
6980

81+
/**
82+
* @brief
83+
* main process.
84+
*/
7085
void ATMController::start(){
7186
if(!insertCard()){
7287
printf("This card is invalid. please insert valid card.\n");
@@ -97,6 +112,22 @@ void ATMController::start(){
97112
}
98113
break;
99114
}
115+
case ATMController::Process::DEPOSIT_ANOTHER:
116+
{
117+
unsigned int amount;
118+
std::cout << "How much would you like to deposit? : ";
119+
amount = inputOnlyInteger();
120+
std::cout << "Please enter the card number to deposit : ";
121+
std::string target_card_name;
122+
std::getline(std::cin >> std::ws, target_card_name);
123+
if (api.deposit(card_number,target_card_name,amount))
124+
{
125+
printf("Success to deposit.\nThe balance of acocunt is %u $\n",api.getBalance(card_number));
126+
}else{
127+
printf("Fail to deposit.\n");
128+
}
129+
break;
130+
}
100131
case ATMController::Process::WITHDRAWAL:
101132
{
102133
unsigned int amount;
@@ -117,15 +148,26 @@ void ATMController::start(){
117148
}
118149
}
119150

151+
void makeAccountListForTest(BankAPI& api){
152+
api.addAccount("111 111 111",123,100);
153+
api.addAccount("222 222 222",456,200);
154+
api.addAccount("333 333 333",789,300);
155+
api.addAccount("444 444 444",654,400);
156+
api.addAccount("555 555 555",321,500);
157+
}
158+
120159
int main(int argc, char const *argv[])
121160
{
161+
printf("ATM_Controller Version: %s\n",ATM_CONTROLLER_VERSION_STRING);
122162
BankAPI bank_api = BankAPI();
123163

124-
bank_api.addAccount("111",123,500); //add simply account
164+
makeAccountListForTest(bank_api); //add simply account
125165

126166
ATMController controller = ATMController(bank_api);
127167

128168
controller.start();
129169

170+
bank_api.showAllAccountInfo();
171+
130172
return 0;
131173
}

‎src/controller.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
#include <iostream>
22
#include <limits>
33
#include "bank_api.h"
4-
4+
#include <vector>
55
class ATMController{
66
enum Process
77
{
88
IDLE,
99
CHECK_BALANCE,
1010
DEPOSIT,
11+
DEPOSIT_ANOTHER,
1112
WITHDRAWAL,
1213
EXIT
1314
};
1415
public:
15-
ATMController(BankAPI api);
16+
ATMController(BankAPI& api);
1617
~ATMController(){};
1718

1819
void start(); // do main routine
1920

2021
private:
2122
std::string card_number;
2223
int pin_number;
23-
BankAPI api;
24+
BankAPI& api;
2425
Process state;
2526
private:
2627
Process inputUserSelcet();

0 commit comments

Comments
 (0)
Please sign in to comment.