Code:
/*Write a a program for file matching
*/
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int masterAccount; //account from old master file
int transactionAccount; //account from transactions file
double masterBalance; //balance from old master file
double transactionBalance; //balance from transactions file
char masterName[30]; //name from master file
FILE *ofPtr; //old master file pointer
FILE *tfPtr; //transactioin file pointer
FILE *nfPtr; //new master file pointer
//terminate application if respective files cannot be opened
if((ofPtr = fopen("oldmast.dat", "r")) == NULL)
{
printf("Unable to open oldmast.dat\n");
exit(1);
}//end if
if((tfPtr = fopen("trans.dat", "r")) == NULL)
{
printf("Unable to open trans.dat\n");
exit(1);
}//end if
if((nfPtr = fopen("newmast.dat", "w")) == NULL)
{
printf("Unable to open newmast.dat\n");
exit(1);
}//end if
//display account currently being processed
printf("Processing....\n");
fscanf(tfPtr, "%d%lf", &transactionAccount, &transactionBalance);
//while not end of transactions file
while(!feof(tfPtr))
{
//read next record from old master file
fscanf(ofPtr, "%d%[^0-9-]%lf", &masterAccount, masterName, &masterBalance);
//display accounts from master file until number of new account is reached
while(masterAccount < transactionAccount && !feof(ofPtr))
{
fprintf(nfPtr, "%d %s %lf\n", masterAccount, masterName, masterBalance);
printf("%d %s %lf\n", masterAccount, masterName, masterBalance);
//read next record from old master file
fscanf(ofPtr, "%d%[^0-9-]%lf\n", &masterAccount, masterName, &masterBalance);
}//end while
//if matching account found, update balance and output account information
if ( masterAccount == transactionAccount )
{
masterBalance += transactionBalance;
fprintf( nfPtr, "%d %s %lf\n", masterAccount, masterName, masterBalance );
printf( "%d %s %lf\n", masterAccount, masterName, masterBalance );
} /* end if */
//tell user if account from transactions file does not match account from master file
else if (masterAccount > transactionAccount)
{
printf("Unmatched transaction record for account %d\n", transactionAccount);
fprintf(nfPtr, "%d %s %lf\n", masterAccount, masterName, masterBalance);
printf("%d %s %lf\n", masterAccount, masterName, masterBalance);
}//end else if
else
{
printf("Unmatched transaction record for account %d\n", transactionAccount);
}//end else
//get next account and balance from transactions file
fscanf(tfPtr, "%d%lf", &transactionAccount, &transactionBalance);
}//end while
//loop through file and display account information
while(!feof(ofPtr))
{
fscanf(ofPtr, "%d%[^0-9-]%lf", &masterAccount, masterName, &masterBalance);
fprintf(nfPtr, "%d %s %lf", masterAccount, masterName, masterBalance);
printf("%d %s %lf", masterAccount, masterName, masterBalance);
}//end while
//close all file pointers
fclose(ofPtr);
fclose(tfPtr);
fclose(nfPtr);
return 0;
}//end main
output