
#include <stdio.h>
#include <stdlib.h>

#define MAX_STUDENTS 100


typedef struct {
    int id;
    char name[50];
    float cse103;
    float mat101;
    float eng101;
    float cgpa;
} Student;


float calculate_cgpa(float cse, float mat, float eng) {
    float total_credits = 4.5f + 3.0f + 3.0f;
    float weighted_sum = (cse * 4.5f) + (mat * 3.0f) + (eng * 3.0f);
    return weighted_sum / total_credits;
}

int main() {
    Student students[MAX_STUDENTS];
    int count = 0;


    FILE *inputFile = stdin;
    if (inputFile == NULL) {
        printf("Error: Could not open student_input.txt file.\n");
        return 1;
    }


    while (count < MAX_STUDENTS &&
           fscanf(inputFile, "%d %s %f %f %f",
                  &students[count].id,
                  students[count].name,
                  &students[count].cse103,
                  &students[count].mat101,
                  &students[count].eng101) == 5) {


        students[count].cgpa = calculate_cgpa(
            students[count].cse103,
            students[count].mat101,
            students[count].eng101
        );
        count++;
    }
    fclose(inputFile);

    FILE *outputFile = stdout;
    if (outputFile == NULL) {
        printf("Error: Could not open output.txt file for writing.\n");
        return 1;
    }


    const char *border = "\n";

    printf("%-5s %-10s %-8s %-8s %-8s %-6s\n", "ID", "Name", "CSE103", "MAT101", "ENG101", "CGPA");
    printf("%s", border);

    fprintf(outputFile, "%-5s %-10s %-8s %-8s %-8s %-6s\n", "ID", "Name", "CSE103", "MAT101", "ENG101", "CGPA");
    fprintf(outputFile, "%s", border);


    for (int i = 0; i < count; i++) {
        printf("%-5d %-10s %-8.2f %-8.2f %-8.2f %-6.2f\n",
               students[i].id, students[i].name, students[i].cse103,
               students[i].mat101, students[i].eng101, students[i].cgpa);

        fprintf(outputFile, "%-5d %-10s %-8.2f %-8.2f %-8.2f %-6.2f\n",
                students[i].id, students[i].name, students[i].cse103,
                students[i].mat101, students[i].eng101, students[i].cgpa);
    }

    printf("%s", border);
    fprintf(outputFile, "%s", border);

    fclose(outputFile);
    printf("\nSuccessfully processed %d.txt\n", count);

    return 0;
}
