Сформировать ведомость результатов сессии (5 экзаменов) в виде целочисленной матрицы - C (СИ)
Формулировка задачи:
Решение задачи: «Сформировать ведомость результатов сессии (5 экзаменов) в виде целочисленной матрицы»
#include <stdio.h> #include <stdlib.h> #define EXAM_COUNT 5 #define FILE_NAME "students" typedef enum { VERY_BAD, BAD, NORMAL, GOOD } result; typedef struct { int exams[5]; result result; } session; typedef struct { char lastName[100]; session session; } studentInfo; typedef struct student{ studentInfo student; struct student *nextStudent; } student; void addStudent(student **head, studentInfo data) { student *tmp = (student*) malloc(sizeof(student)); tmp->student = data; tmp->nextStudent = (*head); (*head) = tmp; } void removeStudent(student **head) { student* prev = NULL; if (head == NULL) { exit(-1); } prev = (*head); (*head) = (*head)->nextStudent; free(prev); } void clearStudent(student **head) { while ((*head)->nextStudent) { removeStudent(head); *head = (*head)->nextStudent; } free(*head); } void ViewStudent(student **head, studentInfo data) { student *tmp = (student*) malloc(sizeof(student)); tmp->student = data; tmp->nextStudent = *head; *head = tmp; } void qwwqqw(student **head) { // student* tmp = head; // // do { // printf("Ввод оценок за экзамен...\n"); // // for (int j=0; j< 5; j++) { // printf("Введите оценки %s за %d-й предмет:", tmp->student.lastName, j); // scanf("%i", &tmp->student.session.exams[j]); // } // // tmp = tmp->nextStudent; // } while (tmp); } void loadStudentsFrom(student **head) { FILE *fp; studentInfo tmp; if((fp=fopen(FILE_NAME, "rb"))==NULL) { printf("Ошибка при открытии файла.\n"); return; } for(int i=0; i<5; i++) { if(fread(&tmp, sizeof(studentInfo), 1, fp)!=1) { if(feof(fp)) break; printf("Ошибка при чтении файла.\n"); } addStudent(&head, tmp); } fclose(fp); printf("Данные из файла успешно загружены.\n"); }; void saveStudents(student *head) { FILE *fp; student *group = head; if((fp=fopen(FILE_NAME, "wb"))==NULL) { printf("Ошибка при открытии файла.\n"); return; } while (group) { printf("1"); if(fwrite(&group->student, sizeof(studentInfo), 1, fp)!=1) printf("Ошибка при записи файла.\n"); group = group->nextStudent; } fclose(fp); printf("Данные успешно записаны в файл.\n"); }; result sessionResult(int *exams){ result mark = GOOD; for (int i=0; i<sizeof(exams)/sizeof(int); i++) { if (exams[i] < 5) mark = NORMAL; else if (exams[i] < 5) mark = BAD; else if (exams[i] < 2) mark = VERY_BAD; } return mark; } int main(int argc, const char * argv[]) { studentInfo tempStudentInfo; student *group = NULL; int const stud_count = 5; for (int i=0; i< stud_count; i++) { printf("Введите Фамилию Cтудента:"); scanf("%s", tempStudentInfo.lastName); addStudent(&group, tempStudentInfo); } saveStudents(group); clearStudent(&group); loadStudentsFrom(&group); //qwwqqw(group); clearStudent(&group); return 0; }
Объяснение кода листинга программы
В данном коде реализована система управления данными студентов в виде структуры данных, представленной в виде списка.
Список состоит из узлов, каждый из которых содержит информацию о студенте, включая его ФИО и оценки за экзамены.
Код включает в себя функции для добавления, удаления и очистки списка студентов.
Также в коде присутствуют функции для загрузки и сохранения данных студентов из и в файл.
Функция qwwqqw(student **head)
используется для ввода оценок за экзамены для каждого студента.
Функция sessionResult(int *exams)
используется для определения общей оценки студента на основе оценок за каждый экзамен.
В основной функции программы происходит ввод данных о студентах, их сохранение в файл, загрузка данных из файла и вывод результатов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д