Code:
#include <stdio.h>
#define MAX_ACCOUNTS 10
#define MAX_TRANS 20
#define MAX_ITEMS 41
int AccountNumber[MAX_ACCOUNTS];
char TransactionType[MAX_TRANS];
double TransactionAmount[MAX_ITEMS];
int options(void);
int input(int counter);
int journal(int counter);
int balancesheet(int counter);
double equity(int credit, double totalequity, double TransactionAmount, int AccountNumber);
void clear();
main(){
int menu=0,quit=0,counter=0;
while(quit==0) {
menu=options();
if(menu==1){
quit=input(counter);
counter=counter+1;
}else if (menu==2){
quit=journal(counter);
}else if (menu==3){
balancesheet(counter);
}else
quit=1;
}clear();
}
int options(void){
int selectedoption=0,keeptrying=1,rc;
char after;
printf("\n");
printf(" Options available: \n\n");
printf(" 1 - Enter a transaction\n 2 - View the general ledger\n 3 - View the balance sheet\n q - Quit the program\n\n Please enter 1, 2, 3, or q: ");
do{
rc=scanf("%d%c",&selectedoption,&after);
if(rc==0){
printf(" **Invalid input\n **Please reenter : ");
clear();
}else if(after!='\n'){
printf(" **Trailing character encountered\n **Please reenter : ");
}else if (selectedoption<=0){
printf(" **Invalid input\n **Please reenter : ");
clear();
}else
keeptrying=0;
}while(keeptrying==1);
return selectedoption;
}
int input(int counter){
int rc;
char after;
printf("\n Enter an account number (between 1000 and 3999) : ");
/* Account Number validation */
while(AccountNumber[counter]<=999||AccountNumber[counter]>3999||after!='\n'||rc==0){
rc=scanf("%d%c",&AccountNumber[counter],&after);
if(rc==0){
printf(" **Invalid input\n **Please reenter : ");
clear();
}else if(AccountNumber[counter]<=999 || AccountNumber[counter]>3999){
printf(" **Out of range\n **Please reenter : ");
}else if(after!='\n'){
printf(" **Trailing character encountered\n **Please reenter : ");
clear();
}
}
if (AccountNumber[MAX_ACCOUNTS]>MAX_ACCOUNTS+2){
printf(" **Maximum number of accounts has been entered\n");
main();
}
printf("\n Enter d (debit) or c (credit): ");
/* Debit/Credit validation */
while (TransactionType[counter] != 'C' && TransactionType[counter] != 'c' &&TransactionType[counter] != 'D' && TransactionType[counter] != 'd' ||after!='\n'){
scanf (" %c%c", &TransactionType[counter],&after);
if(TransactionType[counter] != 'C' && TransactionType[counter] != 'c' &&TransactionType[counter] != 'D' && TransactionType[counter] != 'd'){
printf(" **Invalid input\n **Please reenter : ");
}else if(after!='\n'){
printf(" **Trailing character encountered\n **Please reenter : ");
}
}
if(TransactionType[MAX_TRANS+1]>MAX_TRANS){
printf(" **Maximum number of transactions has been entered\n");
main();
}
printf("\n Enter transaction amount: ");
Validation(counter);
}
/**********************Transaction Amount validation *************************/
int Validation (int counter){
int rc;
char after;
while (TransactionAmount[counter] < 0||after!='\n'||rc==0){
scanf ("%lf%c", &TransactionAmount[counter],&after);
if(after!='\n'){
printf(" **Trailing character encountered\n **Please reenter : ");
clear();
}else if(rc==0){
printf(" **Invalid input\n **Please reenter : ");
}else if(TransactionAmount[counter]<0){
printf(" **Out of range\n **Please reenter : ");
}
}return 0;
}
/***************************************/
int journal(int counter){
int counter2=0;
printf("\n\n General Journal \n");
printf(" Account Description Debit Credit \n");
printf(" ------- ------------------------------ ---------- ---------- \n");
for (counter2=0; counter2<counter; counter2=counter2+1){
if(TransactionType[counter2] == 'c' || TransactionType[counter2] == 'C'){
printf("%8d%53.2lf\n", AccountNumber[counter2], TransactionAmount[counter2]);
} else if (TransactionType[counter2] == 'd' || TransactionType[counter2] == 'D'){
printf("%8d%42.2lf\n", AccountNumber[counter2], TransactionAmount[counter2]);
}
}
return 0;
}
int balancesheet(int counter){
int counter2=0, counter3=0, check[MAX_ITEMS]={0},credit=0;
double totalassets=0.0, subassets=0.0, totalliabilities=0.0,subliabilities=0.0,totalequity=0.0,subequity=0.0,totalLiabilitiesEquity=0.0;
printf("\n Balance Sheet \n");
printf(" Account Description Debit Credit \n");
printf(" ------- ------------------------------ ---------- ---------- \n");
for (counter2=0; counter2<counter; counter2=counter2+1){
subassets=TransactionAmount[counter2];
if(AccountNumber[counter2]<= 1999 && check[counter2]== 0){
check[counter2]=1;
for(counter3=counter2+1; counter3<= counter; counter3=counter3+1){
if(AccountNumber[counter2]==AccountNumber[counter3] && check[counter3]==0){
check[counter3]=1;
if(TransactionType[counter3]=='c' || TransactionType[counter3]=='C'){
subassets=subassets-TransactionAmount[counter3];
}else if(TransactionType[counter3]=='d' || TransactionType[counter3]=='D'){
subassets=subassets+TransactionAmount[counter3];
}
}
}
printf("%8d%42.2lf\n", AccountNumber[counter2], subassets);
totalassets=totalassets+subassets;
}
}
printf(" ---------- ---------- \n");
printf(" Total Assets %7.2lf\n",totalassets);
for(counter2=0;counter2<= counter; counter2=counter2+1){
subliabilities=TransactionAmount[counter2];
if (AccountNumber[counter2] <= 2999 && AccountNumber[counter2] >=2000 && check[counter2]==0){
check[counter2]=1;
for(counter3=counter2+1; counter3<= counter; counter3=counter3+1){
if(AccountNumber[counter2]==AccountNumber[counter3] && check[counter3]== 0){
check[counter3]=1;
if(TransactionType[counter3]=='c' || TransactionType[counter3]=='C'){
subliabilities=subliabilities-TransactionAmount[counter3];
}else if(TransactionType[counter3]=='d' || TransactionType[counter3]=='D'){
subliabilities=subliabilities+TransactionAmount[counter3];
}
}
}
if(subliabilities > 0){
printf("\n\n%8d%53.2lf",AccountNumber[counter2],subliabilities);
totalliabilities=totalliabilities + subliabilities;
}else if (subliabilities < 0){
totalliabilities=totalliabilities + subliabilities;
printf("\n\n%8d%53.2lf",AccountNumber[counter2],subliabilities);
}
}
}
printf("\n ---------- ---------- \n");
printf(" Total Liabilities %7.2lf\n",totalliabilities);
for(counter2=0; counter2 <= counter; counter2=counter2+1){
subequity=TransactionAmount[counter2];
if(AccountNumber[counter2] <= 3999 && AccountNumber[counter2] >= 3000 && check[counter2]==0){
check[counter2]=1;
credit=4;
for(counter3=counter2+1; counter3<= counter; counter3=counter3+1){
if(AccountNumber[counter2] == AccountNumber[counter3] && check[counter3]== 0){
check[counter3] = 1;
if(TransactionType[counter3]=='c' || TransactionType[counter3]=='C'){
subequity=subequity + TransactionAmount[counter3];
credit=3;
}else if(TransactionType[counter3]=='d' || TransactionType[counter3]=='D'){
subequity=subequity - TransactionAmount[counter3];
credit=3;
}
}
}
if(TransactionType[counter2]=='c' || TransactionType[counter2]=='C' && credit == 4){
printf("\n%8d%53.2lf",AccountNumber[counter2],TransactionAmount[counter2]);
totalequity=totalequity + TransactionAmount[counter2];
credit=0;
}else if (TransactionType[counter2]=='d' || TransactionType[counter2]=='D' && credit == 4){
printf("\n%8d%42.2lf",AccountNumber[counter2],TransactionAmount[counter2]);
totalequity=totalequity - TransactionAmount[counter2];
credit=0;
}
}
}
printf("\n ---------- ---------- \n");
if(totalequity < 0){
totalequity = totalequity * -1;
printf(" Total Equity %7.2lf\n",totalequity);
}else {
printf(" Total Equity %7.2lf\n",totalequity);
}
printf(" ---------- ---------- \n");
totalLiabilitiesEquity=totalequity + totalliabilities;
printf(" Total Liabilities and Equity %7.2lf\n",totalLiabilitiesEquity);
}
void clear(void){
while ( getchar() != '\n' );
}