/* Justin Clouse * SS# XXX-XX-XXXX * * Assignment #8 * This program helps manage a checking account by calculating the balance * and service charges when a transaction takes place. * * Algorithm * 1. Display program's purpose / Declare variables * 2. Open input/output files * 3. Read initial balance * 3.1 Printf("Initial Balance: %.2f", balance); * --- Function DataChecking --- * 4. If transaction code does not equal 0, 1, or 2, print error message * 5. If amount is negative, print error message * --- Function Transaction --- * 6. If transaction code equals 1 * 6.1 Transaction is a check. Amount should be subtracted (sign = '-') * 6.2 Printf("Transaction: Check in amount of %.2f\n", trans_amt); * 6.3 Balance -= trans_amt; * 6.4 Printf("Current Balance: $%.2f\n", balance); * 7. If transaction code equals 2 * 7.1 Transaction is a deposit. Amount should be added (sign = '+') * 7.2 Printf("Transaction: Deposit in amount of $%.2f\n", trans_amt); * 7.3 Balance += trans_amt; * 7.4 Printf("Current Balance: $%.2f\n", balance); * 8. If transaction code equals 0 * 8.1 End of month * 8.2 Printf("Transaction: End\n"); * 8.3 Printf("Current Balance: $%.2f\n", balance); * --- Function BalanceManipulation --- * 9. Perform balance manipulation * 9.1 Balance = balance (+ or -) trans_amt * 9.2 Printf("Current Balance: $%.2f\n", balance); * --- Function ServiceCharge --- * 10. If trans_code = 1 * 10.1 Add $0.15 to serv_charge * 10.2 Printf("Service Charge: Check --- Charge $0.15\n"); * 10.3 If balance is less than $500 * 10.3.1 Add 1 to lessthan500 * 10.3.2 If lessthan500 equals 1 * 10.3.2.1 Add $5 to serv_charge * 10.3.2.2 Printf("Service Charge: Below $500 --- Charge "); * 10.3.2.3 Printf("$5.00\n"); * 11. If trans_code = 2 * 11.1 Add $0.10 to serv_charge * 11.2 Printf("Service Charge: Deposit --- Charge $0.10\n"); * 12. If balance is less than $50 * 12.1 Printf("Warning: Your balance is below $50.00\n"); * 12.3.3 If balance is less than $0 and sign = '-' * 12.3.4 Add $10 to serv_charge * 12.3.5 Printf("Service Charge: Negative Balance --- $10.00\n"); * 13. Printf("Total Service Charge: %.2f\n\n", serv_charge); * ------ * 14. Close data files * 15. End */ #include <stdio.h> /* Displays program purpose */ void instruct(FILE *outp) { fprintf(outp, "\n\nThis program helps manage a checking account \n"); fprintf(outp, "by calculating the balance and service charges \n"); fprintf(outp, "when a transaction takes place. \n\n"); } /* Function To Check Data Validity */ int datacheck(int trans_code, float trans_amt, FILE *outp){ if (trans_code != 0 && trans_code != 1 && trans_code != 2){ fprintf(outp, "Your file contains an invalid transaction code.\n"); return(1); } else if (trans_amt < 0){ fprintf(outp, "Your file contains negative numbers which\n"); fprintf(outp, "are not allowed.\n"); return(1); } else return(0); } /* Function To Determine Transaction */ void transaction(int trans_code, float trans_amt, float *balance, FILE *outp){ if (trans_code = 1){ fprintf(outp, "Transaction: Check in amount of %.2f\n", trans_amt); *balance -= trans_amt; } if (trans_code = 2){ fprintf(outp, "Transaction: Deposit in amount of $%.2f\n", trans_amt); *balance += trans_amt; } if (trans_code = 0){ fprintf(outp, "Transaction: End\n"); } } /* Function To Calculate Service Charge */ void servicecharge(int trans_code, float *balance, float serv_charge, int *lessthan500, FILE *outp){ if (trans_code = 1){ serv_charge += .15; fprintf(outp, "Service Charge: Check --- Charge $0.15\n"); if (*balance < 500){ *lessthan500 += 1; if (*lessthan500 = 1){ serv_charge += 5; fprintf(outp, "Service Charge: Below $500 --- Charge "); fprintf(outp, "$5.00\n"); } } } if (trans_code = 2){ serv_charge += .10; fprintf(outp, "Service Charge: Deposit --- Charge $0.10\n"); } if (*balance < 50){ fprintf(outp, "Warning: Your balance is below $50.00\n"); if (trans_code = 1){ serv_charge += 10; fprintf(outp, "Service Charge: Negative Balance --- $10.00\n"); } } fprintf(outp, "Total Service Charge: %.2f\n\n", serv_charge); } /* Main Function */ void main(void) { /* Declare variables */ int trans_code, lessthan500 = 0, all_clear; float balance, trans_amt, serv_charge; /* Pointer to input file */ FILE *inp, *outp; /* Open input file */ inp = fopen("account.dat", "r"); outp = fopen("transactions.dat", "w"); /* Call function to display program's purpose */ instruct(outp); /* Initial balance */ fscanf(inp, "%lf", &balance); fprintf(outp, "Initial Balance: %.2f", balance); /* Get Input And Output Data */ while (fscanf(inp,"%lf", &trans_code) && fscanf(inp,"%lf", &trans_amt) != EOF){ fscanf(inp, "%lf", &trans_code); fscanf(inp, "%lf", &trans_amt); all_clear = datacheck(trans_code, trans_amt, outp); if (all_clear != 1){ transaction(trans_code, trans_amt, &balance, outp); servicecharge(trans_code, &balance, serv_charge, &lessthan500, outp); fprintf(outp, "Final Balance: %.2f", balance); } } fclose(inp); fclose(outp); } |