/* TMA02 Q3d */
/* Program by Selina Sze Min Na */

/***************************************************
    Skeleton for MT258 TMA02 Oct 2000
    Question 3 (d) and (e)
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 2048
/* A structure for holding student records
*/
struct TMARecord {
	char studentid[8];
	int   group;
	int	daysLate;
	int	articlesRead;
	int	articlesPosted;
};

struct TMARecord records[SIZE];  /* the actual store */
int recordCount = 0;             /* number of records currently in the store */

/* Implement this for Question 3 (d) */
void LateAndEarlyGroups(struct TMARecord records[], int size){

    int lateCount[25];
    int totalLate[25];
    int max = 0;
    int maxGroupNo = 0;

    printf("\t\t>>> LateAndEarlyGroups <<<\n");
    printf("\n");

    for (int i = 1; i <= 24; i++)
    {
        lateCount[i] = 0;
        totalLate[i] = 0;
    }

    for (int i = 0; i < size; i++)
    {
        if (records[i].daysLate > 0)
        {
        lateCount[records[i].group]++;
            totalLate[records[i].group] += records[i].daysLate;

        }
    }

    for (int i = 1; i <= 24; i++)
    {
        if (lateCount[i] > 0)
        {
            printf("Group %d has %d late submission students.\n", i, lateCount[i]);
            printf("Group %d has %0.1f average number of days late.\n",
                   i, (float)totalLate[i]/(float)lateCount[i]);

        }
     }
    for (int i = 1; i <= 24; i++)
    {
        if (lateCount[i] > max)
	    {
		max = lateCount[i];
		maxGroupNo = i; }
    }
        printf("\nGroup number %d has the largest number of late submission students.\n\n",
                maxGroupNo);

}

/* Implement this for Question 3 (d) */
void AnalyseDiscussion(struct TMARecord records[], int size) {

        printf("\t\t>>> AnalyseDiscussion <<<\n\n");

        int largestArticlesRead = 0, largestArticlesPosted = 0;
        char studentid1[8], studentid2[8];
        int sumOfArticlesRead = 0, sumOfArticlesPosted = 0;

        for (int i = 0; i < size; i++)
        {
            if (records[i].articlesRead > largestArticlesRead)
            {
                largestArticlesRead = records[i].articlesRead;
                strcpy(studentid1, records[i].studentid);
            }

            if (records[i].articlesPosted > largestArticlesPosted)
            {
                largestArticlesPosted = records[i].articlesPosted;
                strcpy(studentid2, records[i].studentid);
            }
            if (records[i].articlesRead > 0)
            {
                sumOfArticlesRead += records[i].articlesRead;
            }
            if (records[i].articlesPosted > 0)
            {
                sumOfArticlesPosted += records[i].articlesPosted;
            }
        }

        printf("Student ID %s has the largest Articles Read.\n", studentid1);
        printf("Student ID %s has the largest Articles Posted.\n", studentid2);
        printf("The sum of articles read of all records is %d.\n", sumOfArticlesRead);
        printf("The sum of articles posted of all records is %d.\n", sumOfArticlesPosted);
        printf("The average number of articles read per student is %0.1f.\n",
                (float)sumOfArticlesRead/(float)size);
        printf("The average number of articles posted per student is %0.1f.\n",
                (float)sumOfArticlesPosted/(float)size);
}

/* Implement this for Question 4 */
void AnalyseAdvanced(struct TMARecord records[], int size)    {
    printf("\n\t\t>>> A-Challenge Question <<<\n");
    printf("\t>>> AnalyseAdvanced not implementd. <<<\n\n");
}
/* Prints all the records currently stored in the array records */
void printRecords() {
    for (int i=0; i<recordCount; i++)   {
        printf("%s %d %d %d %d\n",
            records[i].studentid,
            records[i].group,
            records[i].daysLate,
            records[i].articlesRead,
            records[i].articlesPosted);
    }
}

/* Loads records from a file and stores in the array records */
void loadRecordFile(char* f) {
    FILE* infile;
    char buffer[256];
    /* open the file first and report errors if necessary */
    if ((infile = fopen(f, "r")) == NULL)    {
        fprintf(stderr, "Error in loading '%s'.\n", f);
        getchar();
        exit(1);
    }
    /* read the file line by line and add every record to the array */
    while (fgets(buffer, 256, infile) != NULL)    {
        if (sscanf(buffer, "%s %d %d %d %d",
            records[recordCount].studentid,
            &(records[recordCount].group),
            &(records[recordCount].daysLate),
            &(records[recordCount].articlesRead),
            &(records[recordCount].articlesPosted)) != 5)   {
        fprintf(stderr, "Error in reading file at record line %d.\n", recordCount);
        getchar();
        exit(1);
        }
        recordCount++;
    }
    fclose(infile);
}

/* main driving program */
int main()
{
    loadRecordFile("q3ddata.txt");
    /* printRecords();  */
    LateAndEarlyGroups(records, recordCount);
    AnalyseDiscussion(records, recordCount);
    AnalyseAdvanced(records, recordCount);
    getchar();
    return 0;
}