Yeah, I was trying to simplify it because it's gonna be lengthy, but oh well...there you go.
And sometimes, it displays
"Unhandled exception at 0x530a3330 in PCD2Assignment.exe: 0xC0000005: Access violation."
But this is not always the case. If replaced salesman_quarter[0].highest_id with another char var like id[6], it will appear the Stacked Around Variable 'id' corrupted error, or it will display
the id then followed by a bunch of junk values.
ps: Please ignore the previous codes.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define displayField "%s %14s %14s %14s %14s %21s","Salesman ID", "Qtr1", "Qtr2", "Qtr3", "Qtr4", "Total Sales"
#define qtrSales_Total salesman_quarter[i].quarter_sales_total = salesman_quarter[i].quarter_sales[0] + salesman_quarter[i].quarter_sales[1] + salesman_quarter[i].quarter_sales[2] + salesman_quarter[i].quarter_sales[3]
#define qtrSales_GrandTotal salesman_quarter[0].grand_total += salesman_quarter[i].quarter_sales_total
#define qtrSales_AvgSales salesman_quarter[0].avg_sale = salesman_quarter[0].grand_total / SIZE
#define getID_Sales salesman_quarter[i].id, &salesman_quarter[i].quarter_sales[0], &salesman_quarter[i].quarter_sales[1], &salesman_quarter[i].quarter_sales[2], &salesman_quarter[i].quarter_sales[3]
#define printID_Sales salesman_quarter[i].id, salesman_quarter[i].quarter_sales[0], salesman_quarter[i].quarter_sales[1], salesman_quarter[i].quarter_sales[2], salesman_quarter[i].quarter_sales[3],salesman_quarter[i].quarter_sales_total
int QtrReport();
typedef struct
{
char id[6];
char highest_id[6];
float quarter_sales[4];
float quarter_sales_total;
float highest_sale;
float avg_sale;
float grand_total;
}QUARTER;
int QtrReport()
{
//Local Variables
int selection;
int SIZE=2;
int salesman_num=3;
char id[6]=" ";
FILE *salesPtr;
FILE *memoryPtr;
//Open memory for reading previous SIZE
memoryPtr=fopen("memory.txt","r");
fscanf(memoryPtr, "%d", &SIZE);
fclose(memoryPtr);
//read
//Open memory for storing latest SIZE for future uses
memoryPtr= fopen("memory.txt","w");
if(salesman_num>0)
{
SIZE += salesman_num;
fprintf(memoryPtr, "%d", SIZE);
}
fclose(memoryPtr);
//write
//Open memory for reading SIZE to control the Loop for printing out information
memoryPtr=fopen("memory.txt","r");
fscanf(memoryPtr, "%d", &SIZE);
fclose(memoryPtr);
//read
//Open sales for reading in the infos & validate
salesPtr = fopen("sales.txt", "r");
if(!salesPtr)
{
printf("ERROR");
system("pause");
exit(-1);
}
printf(displayField);
while(!feof(salesPtr))
{
for(i=0;i<SIZE;i++)
{
fscanf(salesPtr, "%[^|]|RM%f|RM%f|RM%f|RM%f", getID_Sales);
qtrSales_Total;
qtrSales_GrandTotal;
qtrSales_AvgSales;
printf("\n%s %20.2f %15.2f %15.2f %15.2f%15.2f", printID_Sales);
}//for
}//while
for(j=0;j<SIZE;j++)
{
if(salesman_quarter[0].highest_sale < salesman_quarter[j].quarter_sales_total)
{
salesman_quarter[0].highest_sale = salesman_quarter[j].quarter_sales_total;
strcpy(salesman_quarter[0].highest_id,salesman_quarter[j].id);
}//if
}//for
printf("\n\nAverage sale by all salesmen is RM%.2f",salesman_quarter[0].avg_sale);
printf("\nHighest sale RM%.2f is achieved by %s\n\n", salesman_quarter[0].highest_sale,salesman_quarter[0].highest_id);
fclose(salesPtr);
system("pause");
system("cls");
return SIZE;
}
int main(void)
{
int holder;
holder=QtrReport();
return 0;
}