Browse Source
hot fix: Add use of pointer in order to combine parts of our program.
remotes/origin/Alpha
hot fix: Add use of pointer in order to combine parts of our program.
remotes/origin/Alpha
fdai7207
2 years ago
40 changed files with 1552 additions and 21 deletions
-
5.gitignore
-
2build-project.sh
-
8project.yml
-
21src/.vscode/c_cpp_properties.json
-
70src/CustomerData.txt
-
2src/_file_information.h
-
30src/checkLoanEligibility.c
-
10src/checkLoanEligibility.h
-
20src/currencyExchange.c
-
18src/currencyExchange.h
-
65src/currentCustomerAccountBalance.c
-
16src/currentCustomerAccountBalance.h
-
13src/customerMenu.c
-
6src/customerMenu.h
-
77src/depositMoney.c
-
9src/depositMoney.h
-
20src/displayDisclaimer.c
-
7src/displayDisclaimer.h
-
28src/employeesCredentialsList.txt
-
56src/employeesData.txt
-
162src/interestCalculator.c
-
11src/interestCalculator.h
-
11src/lineReplacer.h
-
5src/loginCustomer.c
-
1src/loginCustomer.h
-
120src/sendMoney.c
-
14src/sendMoney.h
-
169src/updateCustomerAccountBalance.c
-
15src/updateCustomerAccountBalance.h
-
103src/withdrawMoney.c
-
14src/withdrawMoney.h
-
6team.md
-
11tests/test_CustomerMenu.c
-
57tests/test_checkLoanEligibility.c
-
58tests/test_currencyExchange.c
-
87tests/test_currentCustomerAccountBalance.c
-
36tests/test_depositMoney.c
-
50tests/test_interestCalculator.c
-
67tests/test_updateCustomerAccountBalance.c
-
93tests/test_withdrawMoney.c
@ -0,0 +1,5 @@ |
|||
*.DS_Store |
|||
*.vscode |
|||
a.out |
|||
build/ |
|||
*.DSYM |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"configurations": [ |
|||
{ |
|||
"name": "Win32", |
|||
"includePath": [ |
|||
"${workspaceFolder}/**" |
|||
], |
|||
"defines": [ |
|||
"_DEBUG", |
|||
"UNICODE", |
|||
"_UNICODE" |
|||
], |
|||
"windowsSdkVersion": "10.0.19041.0", |
|||
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe", |
|||
"cStandard": "c17", |
|||
"cppStandard": "c++17", |
|||
"intelliSenseMode": "windows-msvc-x64" |
|||
} |
|||
], |
|||
"version": 4 |
|||
} |
@ -1,7 +1,69 @@ |
|||
4675275=1234 |
|||
ID=4675275 |
|||
Forename=Frank |
|||
Surname=Burkhardt |
|||
1234=example |
|||
ID=1234 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=150.5 |
|||
|
|||
1235=example |
|||
ID=1235 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=290 |
|||
|
|||
1236=example |
|||
ID=1236 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=194.5 |
|||
|
|||
1237=example |
|||
ID=1237 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=340 |
|||
|
|||
1238=example |
|||
ID=1238 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=1200 |
|||
|
|||
1666=example |
|||
ID=1237 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=340 |
|||
|
|||
1327=example |
|||
ID=1238 |
|||
forename=Test |
|||
Surname=Testermann |
|||
password=example |
|||
balance=1200 |
|||
2189837=1234 |
|||
ID=2189837 |
|||
Forename=Mark |
|||
Surname=Karlsen |
|||
Password=1234 |
|||
Balance=50.0000€ |
|||
|
|||
6984947=okdsjhasdjhksdj |
|||
ID=6984947 |
|||
Forename=Karl |
|||
Surname=Marx |
|||
Password=okdsjhasdjhksdj |
|||
Balance=600.0000€ |
|||
|
|||
7765335=123 |
|||
ID=7765335 |
|||
Forename=Friedrich |
|||
Surname=Moller |
|||
Password=123 |
|||
Balance=50.0000€ |
|||
|
@ -0,0 +1,2 @@ |
|||
#define MAX_LENGTH 200 |
|||
#define CUSTOMER_DATA_FILE "src/CustomerData.txt" |
@ -0,0 +1,30 @@ |
|||
#include "checkLoanEligibility.h" |
|||
#include "_file_information.h" |
|||
|
|||
bool checkLoanEligibility(int user_id) { |
|||
|
|||
// Eligible only when user is present in CustomerDataFile |
|||
|
|||
bool keep_reading = true; |
|||
bool eligibility = false; |
|||
char buffer[MAX_LENGTH]; |
|||
|
|||
FILE *file = fopen(CUSTOMER_DATA_FILE, "r"); |
|||
|
|||
while(keep_reading) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
|
|||
if (feof(file)) { |
|||
keep_reading = false; |
|||
} |
|||
if(user_id == atoi(buffer)) { |
|||
eligibility = true; |
|||
keep_reading = false; |
|||
} |
|||
|
|||
} |
|||
|
|||
fclose(file); |
|||
return eligibility; |
|||
|
|||
} |
@ -0,0 +1,10 @@ |
|||
#ifndef CHECKLOANELIGIBILITY_H_ |
|||
#define CHECKLOANELIGIBILITY_H_ |
|||
|
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <stdlib.h> |
|||
|
|||
bool checkLoanEligibility(int user_id); |
|||
|
|||
#endif |
@ -0,0 +1,20 @@ |
|||
#include "currencyExchange.h" |
|||
|
|||
float convert(float euro, int newCurrencyCode) { |
|||
switch(newCurrencyCode) { |
|||
case CURRENCY_CODE_USD: |
|||
return ( euro * USD_RATE_OF_ONE_EURO ); |
|||
|
|||
case CURRENCY_CODE_GBP: |
|||
return ( euro * GBP_RATE_OF_ONE_EURO ); |
|||
|
|||
case CURRENCY_CODE_JAPANESE_YEN: |
|||
return ( euro * JAPANESE_YEN_RATE_OF_ONE_EURO ); |
|||
|
|||
case CURRENCY_CODE_CHINESE_YUAN: |
|||
return ( euro * CHINESE_YUAN_RATE_OF_ONE_EURO ); |
|||
|
|||
} |
|||
|
|||
return -1; |
|||
} |
@ -0,0 +1,18 @@ |
|||
#ifndef CURRENCYEXCHANGE_H_ |
|||
#define CURRENCYEXCHANGE_H_ |
|||
|
|||
#include <stdio.h> |
|||
|
|||
#define USD_RATE_OF_ONE_EURO 1.07 |
|||
#define GBP_RATE_OF_ONE_EURO 0.89 |
|||
#define JAPANESE_YEN_RATE_OF_ONE_EURO 140.9 |
|||
#define CHINESE_YUAN_RATE_OF_ONE_EURO 7.29 |
|||
|
|||
#define CURRENCY_CODE_USD 1 |
|||
#define CURRENCY_CODE_GBP 2 |
|||
#define CURRENCY_CODE_JAPANESE_YEN 3 |
|||
#define CURRENCY_CODE_CHINESE_YUAN 4 |
|||
|
|||
float convert(float euro, int newCurrencyCode); |
|||
|
|||
#endif |
@ -0,0 +1,65 @@ |
|||
#include "currentCustomerAccountBalance.h" |
|||
//#include "_file_information.h" |
|||
|
|||
|
|||
float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]) { |
|||
float balance = 0; |
|||
char *token = strtok(balance_String, "="); // separates string to two parts |
|||
while (token != NULL) { |
|||
if (atoi(token) != 0) { |
|||
balance = atof(token); // converts string to float |
|||
break; |
|||
} |
|||
token = strtok(NULL, "="); |
|||
} |
|||
return balance; |
|||
} |
|||
|
|||
float readFileAndGetAvailableBalance(FILE *file, char stringID[MAX_LENGTH]) { |
|||
float balance = 0; |
|||
bool keep_reading = true; |
|||
char buffer[MAX_LENGTH]; |
|||
char balance_String[MAX_LENGTH]; |
|||
|
|||
while(keep_reading) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
if (feof(file)) { |
|||
keep_reading = false; |
|||
} |
|||
else if(strstr(buffer, stringID)) { |
|||
for (int i = 0; i < 4; i++) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
} |
|||
strcpy(balance_String, buffer); |
|||
balance = fetchBalanceFromBalanceString(balance_String); |
|||
keep_reading = false; |
|||
} |
|||
|
|||
} |
|||
return balance; |
|||
} |
|||
|
|||
float getAvailableAccountBalance(int user_id) { |
|||
float availableBalance = 0; |
|||
char stringID[MAX_LENGTH] = "ID="; |
|||
char user_id_as_string[MAX_LENGTH]; |
|||
|
|||
sprintf(user_id_as_string, "%d", user_id); // converts user_id to string |
|||
strcat(stringID, user_id_as_string); |
|||
// Now stringID is "ID=user_id" |
|||
|
|||
FILE *file = fopen(CUSTOMER_DATA_FILE, "r"); |
|||
if(file == 0) { |
|||
printf("Error: customer data file cannot be opened!\n"); |
|||
return 0; |
|||
} |
|||
else { |
|||
availableBalance = readFileAndGetAvailableBalance(file, stringID); |
|||
} |
|||
|
|||
|
|||
fclose(file); |
|||
|
|||
return availableBalance; |
|||
|
|||
} |
@ -0,0 +1,16 @@ |
|||
#ifndef CurrentCustomerAccountBalance_H |
|||
#define CurrentCustomerAccountBalance_H |
|||
|
|||
|
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "_file_information.h" |
|||
|
|||
float getAvailableAccountBalance(int user_id); |
|||
float fetchBalanceFromBalanceString(char balance_String[MAX_LENGTH]); |
|||
float readFileAndGetAvailableBalance(FILE *file, char stringID[MAX_LENGTH]); |
|||
|
|||
#endif |
@ -0,0 +1,77 @@ |
|||
#include "depositMoney.h" |
|||
#include "updateCustomerAccountBalance.h" |
|||
#include "currentCustomerAccountBalance.h" |
|||
|
|||
void askToTryAgain(bool afterError, int customerID){ |
|||
char choice; |
|||
|
|||
printf("\n"); |
|||
if(afterError){ |
|||
printf("Would you like to try again? [y] yes [n] no: "); |
|||
}else{ |
|||
printf("Would you like to make another deposit? [y] yes [n] no: "); |
|||
} |
|||
scanf(" %c", &choice); |
|||
switch(choice){ |
|||
case 'y': |
|||
depositMoney(customerID); |
|||
break; |
|||
case 'n': |
|||
break; |
|||
} |
|||
|
|||
} |
|||
|
|||
bool depositMoney(int customerID){ |
|||
|
|||
float availableAccountBalance=getAvailableAccountBalance(customerID); |
|||
if(availableAccountBalance<0){ |
|||
printf("\nCould not retreive account balance. Please contact staff.\n"); |
|||
} |
|||
float amountToDeposit = 0; |
|||
|
|||
printf("\nPlease enter the amount you want to deposit: "); |
|||
scanf("%f", &amountToDeposit); |
|||
|
|||
if(amountToDeposit>=0 && amountToDeposit>MINIMUM_DEPOSIT_AMOUNT){ |
|||
if(updateAvailableAccountBalance(customerID, availableAccountBalance+amountToDeposit)){ |
|||
printf("\nYou have successfully deposited %.2f. New account balance is %.2f", amountToDeposit, availableAccountBalance+amountToDeposit); |
|||
askToTryAgain(false,customerID); |
|||
return true; |
|||
}else{ |
|||
printf("Something went wrong. Please contact staff."); |
|||
return false; |
|||
} |
|||
}else if(amountToDeposit>0){ |
|||
printf("The amount you entered is lower than the minimum amount."); |
|||
askToTryAgain(true,customerID); |
|||
return false; //amount lower than minimum deposit amount |
|||
}else{ |
|||
printf("Invalid input."); |
|||
askToTryAgain(true,customerID); |
|||
return false; //invalid input |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
bool depositSpecificAmount(int customerID, float amount){ |
|||
|
|||
float availableAccountBalance=getAvailableAccountBalance(customerID); |
|||
|
|||
if(amount>0){ |
|||
if(updateAvailableAccountBalance(customerID, availableAccountBalance+amount)){ |
|||
return true; |
|||
}else{ |
|||
return false; |
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/* |
|||
int main(){ |
|||
depositSpecificAmount(1234,5000); |
|||
//depositMoney(1234); |
|||
return 0; |
|||
} |
|||
*/ |
@ -0,0 +1,9 @@ |
|||
#include <stdio.h> |
|||
#include "customerProperties.h" |
|||
#include <stdbool.h> |
|||
#define MINIMUM_DEPOSIT_AMOUNT 5 |
|||
|
|||
|
|||
bool depositMoney(int customerID); |
|||
void askToTryAgain(bool afterError, int customerID); |
|||
bool depositSpecificAmount(int customerID, float amount); |
@ -0,0 +1,20 @@ |
|||
#include "displayDisclaimer.h" |
|||
|
|||
void displayDisclaimer(){ |
|||
printf(" W E L C O M E T O \n"); |
|||
printf(" .______ .___ ___. _______.\n"); |
|||
printf(" | _ \\ | \\/ | / |\n"); |
|||
printf(" | |_) | | \\ / | | (----`\n"); |
|||
printf(" | _ < | |\\/| | \\ \\ \n"); |
|||
printf(" | |_) | | | | | .----) | \n"); |
|||
printf(" |______/ |__| |__| |_______/ \n"); |
|||
printf(" \n"); |
|||
printf("B A N K M A N A G E M E N T S Y S T E M\n"); |
|||
printf(":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:\n"); |
|||
printf("Created by Atharva, Can, Haytham, Julius, Shivam, and Yahya for AI1001.\n"); |
|||
} |
|||
|
|||
// int main(){ |
|||
// displayDisclaimer(); |
|||
// return 1; |
|||
// } |
@ -0,0 +1,7 @@ |
|||
#ifndef DISPLAYDISCLAIMER_H_ |
|||
#define DISPLAYDISCLAIMER_H_ |
|||
#include <stdio.h> |
|||
|
|||
void displayDisclaimer(); |
|||
|
|||
#endif |
@ -0,0 +1,162 @@ |
|||
#include "interestCalculator.h" |
|||
|
|||
|
|||
void troubleshoot(int errorCode){ |
|||
printf("Error! The requested operation was terminated because of an issue. Here are some details about the error:\n---------------\n"); |
|||
|
|||
switch(errorCode){ |
|||
case 0: |
|||
printf("Principal amount not valid. Make sure it is a valid number over the value of zero."); |
|||
break; |
|||
case 1: |
|||
printf("Interest rate not valid. Make sure it is a valid number over the value of zero."); |
|||
break; |
|||
case 2: |
|||
printf("Duration not valid. Make sure it is a valid number over the value of zero."); |
|||
break; |
|||
case 3: |
|||
printf("Invalid option. Aborting."); |
|||
break; |
|||
case 4: |
|||
printf("Your goal cannot be smaller than your principal funds. Aborting."); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void askForSavingGoal(float principalAmount, float accInterestPerYear) { |
|||
char c; |
|||
float goal; |
|||
float timeForGoal; |
|||
|
|||
printf("\nWould you like to set a saving goal? [y/n]: "); |
|||
scanf(" %c", &c); |
|||
|
|||
if (c != 'y' && c != 'Y') { |
|||
return; |
|||
} |
|||
|
|||
printf("\nPlease enter your goal amount in €: "); |
|||
scanf("%f", &goal); |
|||
|
|||
if (goal < principalAmount) { |
|||
troubleshoot(4); |
|||
return; |
|||
} |
|||
|
|||
timeForGoal = (goal - principalAmount) / accInterestPerYear; |
|||
printf("\nIn %.1f years you will reach your goal of %.2f.\n", timeForGoal, goal); |
|||
} |
|||
|
|||
|
|||
float initiateInterest(float principalAmount, float interest, float time){ |
|||
return principalAmount*(1+(interest*time)); |
|||
} |
|||
|
|||
void calculateYearlyInterest(){ |
|||
float principalAmount; |
|||
float interestPerYear; |
|||
float timeInYears; |
|||
int choice; |
|||
|
|||
printf("Please enter the principal amount:"); |
|||
if (scanf("%f", &principalAmount) != 1 || principalAmount <= 0) { |
|||
troubleshoot(0); |
|||
return; |
|||
} |
|||
|
|||
printf("\nPlease enter interest per year (percentage):"); |
|||
if (scanf("%f", &interestPerYear) != 1 || interestPerYear <= 0) { |
|||
troubleshoot(0); |
|||
return; |
|||
} |
|||
printf("\nWould you like to enter the time in [1]months or in [2]years?\n"); |
|||
scanf("%d",&choice); |
|||
if(choice==1){ |
|||
printf("\nPlease enter interest time in months:"); |
|||
if (scanf("%f", &timeInYears) != 1 || timeInYears <= 0) { |
|||
troubleshoot(2); |
|||
return; |
|||
} |
|||
timeInYears=timeInYears/12; |
|||
|
|||
}else if(choice==2){ |
|||
printf("\nPlease enter interest time in years:"); |
|||
if (scanf("%f", &timeInYears) != 1 || timeInYears <= 0) { |
|||
troubleshoot(2); |
|||
return; |
|||
} |
|||
}else{ |
|||
troubleshoot(2); |
|||
} |
|||
|
|||
|
|||
|
|||
float interestDecimal=interestPerYear/100; |
|||
|
|||
float result= initiateInterest(principalAmount,interestDecimal,timeInYears); |
|||
printf("\nAmount with the interest is %.2f€.",result); |
|||
askForSavingGoal(principalAmount,principalAmount*interestDecimal); |
|||
} |
|||
void calculateMonthlyInterest(){ |
|||
float principalAmount; |
|||
float interestPerMonth; |
|||
float timeInMonths; |
|||
|
|||
printf("Please enter the principal amount:"); |
|||
if (scanf("%f", &principalAmount) != 1 || principalAmount <= 0) { |
|||
troubleshoot(0); |
|||
return; |
|||
} |
|||
|
|||
printf("\nPlease enter interest per month (percentage):"); |
|||
if (scanf("%f", &interestPerMonth) != 1 || interestPerMonth <= 0) { |
|||
troubleshoot(0); |
|||
return; |
|||
} |
|||
|
|||
printf("\nPlease enter interest time in months:"); |
|||
if (scanf("%f", &timeInMonths) != 1 || timeInMonths <= 0) { |
|||
troubleshoot(2); |
|||
return; |
|||
} |
|||
|
|||
float interestDecimal=interestPerMonth/100; |
|||
|
|||
float result= initiateInterest(principalAmount,interestDecimal,timeInMonths); |
|||
printf("\nAmount with the interest is %.2f€.",result); |
|||
} |
|||
|
|||
void initiateCalculator() { |
|||
int input; |
|||
char c; |
|||
|
|||
printf("Welcome to the interest calculator. Please select an option:\n" |
|||
"[1] Calculate yearly interest\n" |
|||
"[2] Calculate monthly interest\n"); |
|||
scanf("%d", &input); |
|||
|
|||
switch (input) { |
|||
case 1: |
|||
calculateYearlyInterest(); |
|||
break; |
|||
case 2: |
|||
calculateMonthlyInterest(); |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
|
|||
printf("\nThank you for using our services. Would you like to do another calculation? [y/n]: "); |
|||
scanf(" %c", &c); |
|||
|
|||
if (c == 'y' || c == 'Y') { |
|||
initiateCalculator(); |
|||
} |
|||
} |
|||
|
|||
|
|||
// int main(){ |
|||
|
|||
// initiateCalculator(); |
|||
|
|||
// } |
@ -0,0 +1,11 @@ |
|||
#ifndef INTERESTCALCULATOR_H_ |
|||
#define INTERESTCALCULATOR_H_ |
|||
|
|||
#include <stdio.h> |
|||
|
|||
void calculateYearlyInterest(); |
|||
void calculateMonthlyInterest(); |
|||
void askForSavingGoal(float principalAmount, float accInterestPerYear); |
|||
float initiateInterest(float principalAmount, float interest, float time); |
|||
void troubleshoot(int errorCode); |
|||
#endif |
@ -0,0 +1,11 @@ |
|||
#ifndef LINEREPLACER_H_ |
|||
#define LINEREPLACER_H_ |
|||
|
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
|
|||
void replaceLineInFile(const char* file_name, int line, const char* new_line); //replaces the line at "line" on the file "file_name", with the new line "new_line". |
|||
|
|||
#endif |
@ -0,0 +1,120 @@ |
|||
#include "sendMoney.h" |
|||
#include "depositMoney.h" |
|||
#include "withdrawMoney.h" |
|||
#include "currencyExchange.h" |
|||
#include "currentCustomerAccountBalance.h" |
|||
#include "updateCustomerAccountBalance.h" |
|||
|
|||
|
|||
|
|||
void showBalance(int customerID){ |
|||
float balance=getAvailableAccountBalance(customerID); |
|||
printf("\n:.:.:.:.:.:"); |
|||
printf("\nYour current balance is %.2f.\n",balance); |
|||
printf(":.:.:.:.:.:\n"); |
|||
} |
|||
|
|||
float askToConvert(float input, int customerID){ |
|||
char c; |
|||
char symbol[]=""; |
|||
int id; |
|||
float converted; |
|||
printf("\nWould you like to convert the amount from € to another currency?[y] yes [any] no\n"); |
|||
scanf(" %c",&c); |
|||
if(c=='y'||c=='Y'){ |
|||
printf("\nPlease select from one of the following currencties to convert to:"); |
|||
printf("\n[1] USD"); |
|||
printf("\n[2] GBP"); |
|||
printf("\n[3] YEN"); |
|||
printf("\n[4] YUAN\n"); |
|||
scanf("%d",&id); |
|||
|
|||
if(id>0&&id<5){ |
|||
converted=convert(input,id); |
|||
}else{ |
|||
return 0; |
|||
} |
|||
switch(id){ |
|||
case 1: |
|||
symbol[0]='$'; |
|||
break; |
|||
case 2: |
|||
symbol[0]='P'; |
|||
break; |
|||
case 3: |
|||
symbol[0]='Y'; |
|||
break; |
|||
case 4: |
|||
symbol[0]='X'; |
|||
break; |
|||
} |
|||
printf("\nYou have successfuly transfered %.2f%s to [%d]",converted, symbol,customerID); |
|||
return converted; |
|||
}else{ |
|||
return 0; |
|||
} |
|||
} |
|||
|
|||
void askToShowBalance(int customerID){ |
|||
char c; |
|||
printf("\nWould you like to see your remaining balance? [y] yes [any] no\n"); |
|||
scanf(" %c",&c); |
|||
if(c=='y' || c=='Y'){ |
|||
showBalance(customerID); |
|||
} |
|||
return; |
|||
} |
|||
|
|||
bool sendMoney(int customerID){ |
|||
float availableAccountBalance=getAvailableAccountBalance(customerID); |
|||
float amountToSend; |
|||
int recID; |
|||
|
|||
showBalance(customerID); |
|||
printf("\nHow much would you like to send?\n"); |
|||
scanf("%f",&amountToSend); |
|||
if(amountToSend>0 && amountToSend<availableAccountBalance){ |
|||
printf("\nYour input was %.2f€. Please enter the recipient id.\n",amountToSend); |
|||
scanf("%d",&recID); |
|||
if(recID>1000){ |
|||
bool recExists=checkCustomerExists(recID); |
|||
if(recExists){ |
|||
if(recID==customerID){ |
|||
printf("\nYou cannot send money to yourself. Aborting. \n"); |
|||
return false; |
|||
} |
|||
else{ |
|||
if(withdrawSpecificAmount(customerID, amountToSend)){ |
|||
if(depositSpecificAmount(recID, amountToSend)){ |
|||
askToConvert(amountToSend, recID); |
|||
//printf("\nYou have successfuly transfered %.2f€ to [%d]",amountToSend,recID); |
|||
askToShowBalance(customerID); |
|||
return true; |
|||
} |
|||
else{ |
|||
printf("\nSomething went wrong with the transfer. Please contact staff."); |
|||
} |
|||
} |
|||
} |
|||
|
|||
}else{ |
|||
printf("\nThis ID is not from a customer of our bank. A transfer fee of %.2f€ will be taken.\n", TRANSFER_FEE); |
|||
if(withdrawSpecificAmount(customerID, amountToSend+TRANSFER_FEE)){ |
|||
askToConvert(amountToSend, recID); |
|||
//printf("\nYou have successfuly transfered %.2f€ to [%d]\n",amountToSend,recID); |
|||
askToShowBalance(customerID); |
|||
return true; |
|||
} |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
printf("\nThe ID you have entered is not valid. Aborting. \n"); |
|||
} |
|||
|
|||
}else{ |
|||
//error |
|||
return false; |
|||
} |
|||
return false; |
|||
} |
@ -0,0 +1,14 @@ |
|||
#ifndef SENDMONEY_H |
|||
#define SENDMONEY_H |
|||
#include <stdlib.h> |
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
|
|||
#define TRANSFER_FEE 0.8 |
|||
void showBalance(int customerID); |
|||
float askToConvert(float input, int customerID); |
|||
void askToShowBalance(int customerID); |
|||
bool sendMoney(int customerID); |
|||
|
|||
#endif // SENDMONEY_H |
@ -0,0 +1,169 @@ |
|||
#include "updateCustomerAccountBalance.h" |
|||
#include "lineReplacer.h" |
|||
#include "_file_information.h" |
|||
|
|||
void troubleShoot(int errorCode){ |
|||
printf("Error! The requested operation was terminated because of an issue. Here are some details about the error:\n---------------\n"); |
|||
|
|||
switch(errorCode){ |
|||
case 0: |
|||
printf("Requested file could not be opened. Are you sure it exists or that the program has the required permissions?"); |
|||
break; |
|||
case 1: |
|||
printf("A temporary file could not be generated. Are you sure the bank management system has the required authorization to create new files?"); |
|||
break; |
|||
case 2: |
|||
printf("Replacement of the old file failed. Are you sure the bank management system has the required authorization to delete files?"); |
|||
break; |
|||
case 3: |
|||
printf("Renaming of a file failed. Are you sure the bank management system has the required authorization to rename files?"); |
|||
break; |
|||
case 4: |
|||
printf("Could not find the customer. Please contact customer support."); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
void replaceLineInFile(const char* file_name, int line, const char* new_line){ |
|||
FILE* file = fopen(file_name, "r"); |
|||
if (file == NULL) { |
|||
troubleShoot(0); |
|||
return; |
|||
} |
|||
char current_string[1024]; |
|||
int current_line = 1; |
|||
char *temp_file_name = "temp.txt"; |
|||
FILE* temp_file = fopen(temp_file_name, "w"); |
|||
if (temp_file == NULL) { |
|||
troubleShoot(1); |
|||
fclose(file); |
|||
return; |
|||
} |
|||
while (fgets(current_string, sizeof(current_string), file) != NULL) { |
|||
if (current_line == line) { |
|||
fprintf(temp_file, "%s", new_line); |
|||
fputs("\n", temp_file); |
|||
} else { |
|||
fprintf(temp_file, "%s", current_string); |
|||
} |
|||
current_line++; |
|||
} |
|||
fclose(file); |
|||
fclose(temp_file); |
|||
if(remove(file_name)!=0){ |
|||
troubleShoot(2); |
|||
} // Remove the original file |
|||
if(rename(temp_file_name, file_name)!=0){ |
|||
troubleShoot(3); |
|||
} // Rename the temp file to the original file |
|||
} |
|||
|
|||
void replaceBalanceInString(float replacementBalance, int currentLine) { |
|||
char newBalanceLine[MAX_LENGTH] = "balance="; |
|||
char balance_as_string[MAX_LENGTH]; |
|||
sprintf(balance_as_string, "%g", replacementBalance); //converts replacement balance to string |
|||
strcat(newBalanceLine, balance_as_string); |
|||
replaceLineInFile(CUSTOMER_DATA_FILE,currentLine,newBalanceLine); |
|||
} |
|||
|
|||
bool updateAvailableAccountBalance(int user_id, float newBalance){ |
|||
bool keep_reading = true; |
|||
bool customer_found=false; |
|||
char buffer[MAX_LENGTH]; |
|||
char stringID[MAX_LENGTH] = "ID="; |
|||
char user_id_as_string[MAX_LENGTH]; |
|||
char balance_String[MAX_LENGTH]; |
|||
int currentLine=0; |
|||
|
|||
sprintf(user_id_as_string, "%d", user_id); // converts user_id to string |
|||
strcat(stringID, user_id_as_string); |
|||
|
|||
FILE *file = fopen(CUSTOMER_DATA_FILE, "r+"); |
|||
if (file == NULL) { |
|||
troubleShoot(0); |
|||
return false; |
|||
} |
|||
while(keep_reading) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
currentLine++; |
|||
if (feof(file)) { |
|||
keep_reading = false; |
|||
} |
|||
else if(strstr(buffer, stringID)) { //found the customer |
|||
|
|||
for (int i = 0; i < 4; i++) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
} |
|||
|
|||
strcpy(balance_String, buffer); |
|||
currentLine+=4; |
|||
keep_reading = false; |
|||
customer_found=true; |
|||
} |
|||
|
|||
} |
|||
|
|||
fclose(file);; |
|||
if(customer_found){ |
|||
replaceBalanceInString(newBalance,currentLine); |
|||
return true; |
|||
}else{ |
|||
troubleShoot(4); |
|||
} |
|||
return false; |
|||
|
|||
} |
|||
bool checkCustomerExists(int customerID){ |
|||
bool keep_reading = true; |
|||
bool customer_found=false; |
|||
char buffer[MAX_LENGTH]; |
|||
char stringID[MAX_LENGTH] = "ID="; |
|||
char user_id_as_string[MAX_LENGTH]; |
|||
char balance_String[MAX_LENGTH]; |
|||
int currentLine=0; |
|||
|
|||
sprintf(user_id_as_string, "%d", customerID); // converts user_id to string |
|||
strcat(stringID, user_id_as_string); |
|||
|
|||
FILE *file = fopen(CUSTOMER_DATA_FILE, "r+"); |
|||
if (file == NULL) { |
|||
return false; |
|||
} |
|||
while(keep_reading) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
currentLine++; |
|||
if (feof(file)) { |
|||
keep_reading = false; |
|||
} |
|||
else if(strstr(buffer, stringID)) { //found the customer |
|||
|
|||
for (int i = 0; i < 4; i++) { |
|||
fgets(buffer, MAX_LENGTH, file); |
|||
} |
|||
|
|||
strcpy(balance_String, buffer); |
|||
currentLine+=4; |
|||
keep_reading = false; |
|||
customer_found=true; |
|||
} |
|||
|
|||
} |
|||
|
|||
fclose(file);; |
|||
if(customer_found){ |
|||
return true; |
|||
}else{ |
|||
return false; |
|||
} |
|||
return false; |
|||
|
|||
} |
|||
|
|||
//traditional testing section |
|||
/* |
|||
int main(int argc, char *argv[]) |
|||
{ |
|||
updateAvailableAccountBalance(1327,70); |
|||
return 0; |
|||
} |
|||
*/ |
@ -0,0 +1,15 @@ |
|||
#ifndef UpdateCustomerAccountBalance_H |
|||
#define UpdateCustomerAccountBalance_H |
|||
|
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <stdlib.h> |
|||
#include <string.h> |
|||
|
|||
|
|||
|
|||
bool updateAvailableAccountBalance(int user_id, float newBalance); |
|||
bool checkCustomerExists(int customerID); |
|||
void replaceBalanceInString(float replacementBalance, int currentLine); |
|||
|
|||
#endif |
@ -0,0 +1,103 @@ |
|||
#include "withdrawMoney.h" |
|||
#include "updateCustomerAccountBalance.h" |
|||
#include "currentCustomerAccountBalance.h" |
|||
|
|||
|
|||
void notifyCustomer(float amountToWithdraw, float remainingAccountBalance, int user_id) { |
|||
char c; |
|||
|
|||
printf("You have successfully withdrawn %.2f €.\n", amountToWithdraw); |
|||
printf("Remaining account balance: %.2f €\n\n", remainingAccountBalance); |
|||
printf("Would you like to do another withdrawal? [y] yes [any] no\n"); |
|||
scanf(" %c", &c); |
|||
|
|||
if (c=='y'||c=='Y') { |
|||
withdraw(user_id); |
|||
}else{ |
|||
return; |
|||
} |
|||
} |
|||
|
|||
float initiateWithdraw(float amountToWithdraw, float availableAccountBalance) { |
|||
float remainingAccountBalance = (availableAccountBalance - amountToWithdraw); |
|||
|
|||
return remainingAccountBalance; |
|||
} |
|||
|
|||
bool withdraw(int user_id) { |
|||
float amountToWithdraw; |
|||
char tryDifferentAmount; |
|||
float remainingAccountBalance; |
|||
bool updateSuccess = false; |
|||
|
|||
float availableAccountBalance = getAvailableAccountBalance(user_id); |
|||
|
|||
printf("\n:.:.:.:.:.:"); |
|||
printf("\nYour current balance is %.2f.\n",availableAccountBalance); |
|||
printf(":.:.:.:.:.:\n"); |
|||
|
|||
printf("Enter amount to withdraw: "); |
|||
scanf("%f", &amountToWithdraw); |
|||
|
|||
|
|||
if (amountToWithdraw > 0) { |
|||
if (amountToWithdraw <= availableAccountBalance) { |
|||
|
|||
if(amountToWithdraw>MAX_AMOUNT){ |
|||
printf("\nYou cannot withdraw more than %d€.",MAX_AMOUNT); |
|||
return false; |
|||
} |
|||
|
|||
remainingAccountBalance = initiateWithdraw(amountToWithdraw, availableAccountBalance); |
|||
updateSuccess = updateAvailableAccountBalance(user_id, remainingAccountBalance); |
|||
if( updateSuccess ) { |
|||
notifyCustomer(amountToWithdraw, remainingAccountBalance, user_id); |
|||
} |
|||
else { |
|||
printf("Some error occured! Sorry for the inconvenience caused.\n"); |
|||
} |
|||
return updateSuccess; |
|||
|
|||
} |
|||
else { |
|||
printf("You don't have sufficient money to withdraw. Do you want to try different amount?\n[y]: Yes, any other key : exit"); |
|||
scanf("%c", &tryDifferentAmount); |
|||
if (tryDifferentAmount == 'Y' || tryDifferentAmount == 'y') { |
|||
withdraw(user_id); |
|||
} |
|||
else { |
|||
//showAllMenuEntries(); |
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
else { |
|||
printf("Invalid Input! Please try again.\n"); |
|||
withdraw(user_id); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
bool withdrawSpecificAmount(int user_id, float amountToWithdraw) { |
|||
float remainingAccountBalance; |
|||
|
|||
|
|||
float availableAccountBalance = getAvailableAccountBalance(user_id); |
|||
if (amountToWithdraw > 0) { |
|||
|
|||
if (amountToWithdraw <= availableAccountBalance) { |
|||
|
|||
remainingAccountBalance = initiateWithdraw(amountToWithdraw, availableAccountBalance); |
|||
if(updateAvailableAccountBalance(user_id, remainingAccountBalance)){ |
|||
return true; |
|||
} |
|||
|
|||
} |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
// int main(){ |
|||
// withdraw(1234); |
|||
// return 1; |
|||
// } |
@ -0,0 +1,14 @@ |
|||
#ifndef WITHDRAWMONEY_H_ |
|||
#define WITHDRAWMONEY_H_ |
|||
|
|||
#include <stdio.h> |
|||
#include <stdbool.h> |
|||
|
|||
#define MAX_AMOUNT 10000 |
|||
|
|||
bool withdraw(int user_id); |
|||
float initiateWithdraw(float amountToWithdraw, float availableAccountBalance); |
|||
void notifyCustomer(float amountToWithdraw, float remainingAccountBalance, int user_id); |
|||
bool withdrawSpecificAmount(int user_id, float amountToWithdraw); |
|||
|
|||
#endif |
@ -0,0 +1,6 @@ |
|||
- Can Hacioglu, fdlt3817 |
|||
- Atharva Kishor Naik, fdai7514 |
|||
- Julius Philipp Engel, fdai7057 |
|||
- Shivam Chaudhary, fdlt3781 |
|||
- Mohamed Yahya Dahi, fdai6618 |
|||
- Haytham Daoula, fdai7207 |
@ -0,0 +1,57 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "../src/checkLoanEligibility.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_checkLoanEligibilitySuccess(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int user_id[3] = {1234, 1327, 1666}; // user_ids from file for testing |
|||
|
|||
bool result[3]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
result[i] = checkLoanEligibility(user_id[i]); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
TEST_ASSERT_TRUE(result[i]); // Pass if user_id is found in the file |
|||
} |
|||
} |
|||
|
|||
void test_checkLoanEligibilityFailure(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int user_id[3] = {12314, 127, 166}; // Random wrong user_ids |
|||
|
|||
bool result[3]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
result[i] = checkLoanEligibility(user_id[i]); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
TEST_ASSERT_FALSE(result[i]); // Pass if the returned result is false |
|||
} |
|||
} |
|||
|
|||
|
|||
#endif // TEST |
@ -0,0 +1,58 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "../src/currencyExchange.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_convert(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int length = 10; |
|||
float euro[] = {34, 233, 400, 100, 45, 344, 767.32, 122, 435, 899}; |
|||
|
|||
float expectedUSD[length]; |
|||
float expectedGBP[length]; |
|||
float expectedYEN[length]; |
|||
float expectedYUAN[length]; |
|||
|
|||
float resultUSD[length]; |
|||
float resultGBP[length]; |
|||
float resultYEN[length]; |
|||
float resultYUAN[length]; |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
expectedUSD[i] = euro[i] * USD_RATE_OF_ONE_EURO; |
|||
expectedGBP[i] = euro[i] * GBP_RATE_OF_ONE_EURO; |
|||
expectedYEN[i] = euro[i] * JAPANESE_YEN_RATE_OF_ONE_EURO; |
|||
expectedYUAN[i] = euro[i] * CHINESE_YUAN_RATE_OF_ONE_EURO; |
|||
} |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
resultUSD[i] = convert(euro[i], CURRENCY_CODE_USD); |
|||
resultGBP[i] = convert(euro[i], CURRENCY_CODE_GBP); |
|||
resultYEN[i] = convert(euro[i], CURRENCY_CODE_JAPANESE_YEN); |
|||
resultYUAN[i] = convert(euro[i], CURRENCY_CODE_CHINESE_YUAN); |
|||
} |
|||
|
|||
/* Assert*/ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedUSD[i], resultUSD[i]); |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedGBP[i], resultGBP[i]); |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedYEN[i], resultYEN[i]); |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedYUAN[i], resultYUAN[i]); |
|||
} |
|||
} |
|||
|
|||
|
|||
#endif // TEST |
@ -0,0 +1,87 @@ |
|||
#ifdef TEST |
|||
|
|||
#include <float.h> |
|||
#include "unity.h" |
|||
#include "../src/currentCustomerAccountBalance.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_fetchBalanceFromBalanceString(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
char balanceString[5][100] = { |
|||
"balance=0", |
|||
"balance=100", |
|||
"balance=200", |
|||
"balance=300", |
|||
"balance=400" |
|||
}; |
|||
|
|||
/* Act */ |
|||
|
|||
float balance = 0; |
|||
float result[5]; |
|||
float expected[5]; |
|||
|
|||
for (int i = 0; i < 5; i++) { |
|||
result[i] = fetchBalanceFromBalanceString(balanceString[i]); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < 5; i++) { |
|||
expected[i] = balance; |
|||
balance += 100; |
|||
} |
|||
|
|||
for (int i =0; i < 5; i++) { |
|||
TEST_ASSERT_EQUAL_FLOAT(expected[i],result[i]); |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
void test_checkFileOpen(void) { |
|||
|
|||
/* Act and assert */ |
|||
|
|||
FILE *file = fopen(CUSTOMER_DATA_FILE, "r"); |
|||
|
|||
TEST_ASSERT_TRUE(file); |
|||
|
|||
fclose(file); |
|||
} |
|||
|
|||
void test_failOpenFile(void) { |
|||
|
|||
/* Act and assert */ |
|||
|
|||
FILE *file = fopen("false_file_name", "r"); |
|||
|
|||
TEST_ASSERT_FALSE(file); |
|||
|
|||
} |
|||
|
|||
void test_getAvailableAccountBalance(void) { |
|||
|
|||
/* Act and assert */ |
|||
|
|||
int user_id = 1234; // Random user_id (because idea is to read the file and get a float value) |
|||
float max = FLT_MAX; |
|||
int result = getAvailableAccountBalance(user_id); |
|||
|
|||
TEST_ASSERT_TRUE(result < max); // Pass if function is successfully called and a float value (balance) is returned |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
#endif // TEST |
@ -0,0 +1,36 @@ |
|||
#include "unity.h" |
|||
#include "../src/currentCustomerAccountBalance.c" |
|||
#include "../src/depositMoney.c" |
|||
#include "../src/updateCustomerAccountBalance.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_depositSpecificAmount(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int length = 5; |
|||
int userIDs[] = {1234,1235,1236,1237,1238}; |
|||
float amountToDeposit[] = {200.5, 340, 244.5, 340, 1200}; |
|||
|
|||
bool result[length]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
result[i] = depositSpecificAmount( userIDs[i], amountToDeposit[i] ); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
TEST_ASSERT_TRUE(result[i]); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,50 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "../src/interestCalculator.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_initiateInterest(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int length = 10; |
|||
float startAmount[] = {34, 233, 4400, 1600, 245, 34544, 3767.32, 1422, 5435, 8199}; |
|||
float yearlyInterest=12; |
|||
float durationInYears=2.5; |
|||
|
|||
float monthlyInterest=8; |
|||
float durationInMonths=3.9; |
|||
|
|||
float resultsYearly[length]; |
|||
float resultsMonthly[length]; |
|||
|
|||
float expectedYearly[]={44.2,302.9,5720,2080,318.5,44907.2,4897.516,1848.6,7065.5,10658.7}; |
|||
float expectedMonthly[]={44.608,305.696,5772.8,2099.2,321.44,45321.73,4942.724,1865.664,7130.72,10757.09}; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
resultsYearly[i]=initiateInterest(startAmount[i],yearlyInterest/100, durationInYears); |
|||
} |
|||
for (int i = 0; i < length; i++) { |
|||
resultsMonthly[i]=initiateInterest(startAmount[i],monthlyInterest/100, durationInMonths); |
|||
} |
|||
|
|||
/* Assert*/ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedYearly[i], resultsYearly[i]); |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedMonthly[i], resultsMonthly[i]); |
|||
} |
|||
} |
|||
|
|||
|
|||
#endif // TEST |
@ -0,0 +1,67 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
|
|||
#include "../src/updateCustomerAccountBalance.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_updateAvailableAccountBalanceSuccess(void){ |
|||
|
|||
/* |
|||
int id1 = 1234; |
|||
int id2 = 1327; |
|||
int id3 = 1666; |
|||
|
|||
int newBalance1=500; |
|||
int newBalance2=800; |
|||
int newBalance3=700; |
|||
|
|||
bool results1=updateAvailableAccountBalance(id1,newBalance1); |
|||
bool results2=updateAvailableAccountBalance(id2,newBalance2); |
|||
bool results3=updateAvailableAccountBalance(id3,newBalance3); |
|||
|
|||
TEST_ASSERT_TRUE(results1); |
|||
TEST_ASSERT_TRUE(results2); |
|||
TEST_ASSERT_TRUE(results3); |
|||
*/ |
|||
|
|||
/* Arrange */ |
|||
|
|||
int length = 5; |
|||
|
|||
float amountToUpdate[] = {200.5, 340, 244.5, 340, 1200}; |
|||
int userIDs[] = {1234,1235,1236,1237,1238}; |
|||
|
|||
float expectedValue[length]; |
|||
bool result[length]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
result[i] = updateAvailableAccountBalance(userIDs[i],amountToUpdate[i]); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
TEST_ASSERT_TRUE(result[i]); |
|||
} |
|||
|
|||
} |
|||
void test_failOpenFile(void) { |
|||
|
|||
/* Act and assert */ |
|||
|
|||
FILE *file = fopen("false_file_name", "r"); |
|||
|
|||
TEST_ASSERT_FALSE(file); |
|||
|
|||
} |
|||
#endif |
@ -0,0 +1,93 @@ |
|||
#ifdef TEST |
|||
|
|||
#include "unity.h" |
|||
#include "../src/withdrawMoney.c" |
|||
#include "../src/updateCustomerAccountBalance.c" |
|||
#include "../src/currentCustomerAccountBalance.c" |
|||
|
|||
void setUp(void) |
|||
{ |
|||
} |
|||
|
|||
void tearDown(void) |
|||
{ |
|||
} |
|||
|
|||
void test_initiateWithdraw(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int length = 10; |
|||
|
|||
float amountToWithdraw[] = {200.5, 340, 244.5, 340, 1200, 3232, 1123, 460.5, 900, 1005}; |
|||
float availableAccountBalance[] = {2000, 3400, 2445, 3400, 6000, 5000, 1000, 2000, 2000, 9000}; |
|||
|
|||
float expectedValue[length]; |
|||
float result[length]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
result[i] = initiateWithdraw( amountToWithdraw[i], availableAccountBalance[i] ); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
expectedValue[i] = ( availableAccountBalance[i] - amountToWithdraw[i] ); |
|||
} |
|||
|
|||
for (int i = 0; i < length; i++) { |
|||
TEST_ASSERT_EQUAL_FLOAT(expectedValue[i],result[i]); |
|||
} |
|||
|
|||
} |
|||
|
|||
void test_withdrawSpecificAmountSuccess(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int user_id[3] = {1234, 1235, 1236}; // user_ids from file for testing |
|||
|
|||
bool result[3]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
result[i] = withdrawSpecificAmount(user_id[i], 50); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
TEST_ASSERT_TRUE(result[i]); // Pass if withdrawal is successful |
|||
} |
|||
|
|||
} |
|||
|
|||
void test_withdrawSpecificAmountFailure(void) { |
|||
|
|||
/* Arrange */ |
|||
|
|||
int user_id[3] = {12934, 13027, 16606}; // Random wrong user_ids |
|||
|
|||
bool result[3]; |
|||
|
|||
/* Act */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
result[i] = withdrawSpecificAmount(user_id[i], 50); |
|||
} |
|||
|
|||
/* Assert */ |
|||
|
|||
for (int i = 0; i < 3; i++) { |
|||
TEST_ASSERT_FALSE(result[i]); // Pass if withdrawal fails and function returns false |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
#endif // TEST |
Write
Preview
Loading…
Cancel
Save
Reference in new issue