Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define CLS printf("\033[2J")
#define LOCATE(r,c) printf("\033[%d;%dH",r,c)
#define PAUSE LOCATE(23,20); printf("Press Any Key to Continue");
getch();
FILE *fileptr;
FILE *stream;
float ftotal;
int i, linecount;
struct employees
{char name[20];
int pnumber;
int dnumber;
int snumber;
float amount;
}person[5];
void paintscreen(), addrecord(), enterdata();
void printheaders(), processdetail();
void printfinaltotal(), printdetailline();
void printpersontotal(float *ptotal, int *pcontrol, float *dtotal);
void printdeparttotal(float *dtotal, int *dcontrol);
void printstoretotal(float *stotal, int *scontrol);
void main()
{stream=fopen("c:\p7adv.out", "w");
addrecord();
if((fileptr=fopen("a:sales", "r"))==NULL)
{puts("Can't open file");
PAUSE;
exit(1);
}
printheaders();
processdetail();
printfinaltotal();
fclose(fileptr);
fclose(stream);
}
void addrecord()
{fileptr=fopen("a:sales", "a");
paintscreen();
while(strlen(gets(person[i].name)) != 0)
{enterdata();
paintscreen();
}
fwrite(person, sizeof(person[0]), i, fileptr);
i=0;
fclose(fileptr);
}
void paintscreen()
{CLS;
LOCATE(7,35);
puts("Data Entry Screen");
LOCATE(10,10);
puts("Employee Name: ");
LOCATE(12,10);
puts("Emp. Number: ");
LOCATE(14,10);
puts("Department Number: ");
LOCATE(16,10);
puts("Store Number: ");
LOCATE(18,10);
puts("Amount of sales: ");
LOCATE(10,26);
fflush(stdin);
}
void enterdata()
{LOCATE(12,24);
scanf("%d", person[i].pnumber);
LOCATE(14,30);
scanf("%d", person[i].dnumber);
LOCATE(16,25);
scanf("%d", person[i].snumber);
LOCATE(18,27);
scanf("%f", person[i++].amount);
}
void printheaders()
{static int pagecount = 1;
fprintf(stream, "\t Sales Report Page %d\n\n\r", pagecount++);
fprintf(stream, "\tName \t Department \t Amount");
linecount = 3;
}
void printfinaltotal()
{fprintf(stream, "Final Total %5.2f \n\r", ftotal);
}
void printdetailline()
{if(++linecount>50)
{printheaders();
linecount++;
}
fprintf(stream, "%-20s %d %d %5.2f \n\r", person[i].name, person[i].dnumber, person[i].snumber, person[i].amount);
}
void processdetail()
{
int pcontrol, dcontrol, scontrol;
float ptotal = 0.0;
float dtotal = 0.0;
float stotal = 0.0;
fread(person, sizeof(person), 1, fileptr);
pcontrol = person[i].pnumber;
dcontrol = person[i].dnumber;
scontrol = person[i].snumber;
do
if(person[i].dnumber != dcontrol)
{
printpersontotal(&ptotal, &pcontrol, &dtotal);
printdeparttotal(&dtotal, &dcontrol);
}
else
if(person[i].pnumber != pcontrol)
{
printpersontotal(&ptotal, &pcontrol, &dtotal);
printdetailline();
ptotal += person[i].amount;
}
while (fread(person, sizeof(person), 1, fileptr));
printpersontotal(&ptotal, &pcontrol, &dtotal);
printdeparttotal(&dtotal, &dcontrol);
printstoretotal(&stotal, &scontrol);
}
void printpersontotal(float *ptotal, int *pcontrol, float *dtotal)
{fprintf(stream, "\n\r Person Total %5.2f \n\n\r", *ptotal);
*dtotal += *ptotal;
*ptotal = 0.0;
*pcontrol = person[i].pnumber;
linecount += 3;
}
void printdeparttotal(float *dtotal, int *dcontrol)
{fprintf(stream, "\n\r Department Total %5.2f \n\n\r", *dtotal);
ftotal += *dtotal;
*dtotal = 0;
*dcontrol = person[i].dnumber;
linecount += 3;
}
void printstoretotal(float *stotal, int *scontrol)
{fprintf(stream, "\n\r Store Total %6.2f \n\n\r", *stotal);
ftotal += *stotal;
*stotal = 0;
*scontrol = person[i].snumber;
linecount += 3;
}
The output should look like this (I am only getting the headers):