Сформировать ведомость результатов сессии (5 экзаменов) в виде целочисленной матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите сделать задачку на С
Составить алгоритм и программу, в которой необходимо: создать файл с фамилиями студентов группы и используя его, сформировать ведомость результатов сессии (5 экзаменов) в виде целочисленной матрицы размером nx5 (n – количество студентов группы); организовать вывод списков фамилий студентов, назначенных на повышенную, обычную стипендию и получивших двойки ( с указанием предметов). Повышенная стипендия назначается, если все оценки 5, обычная – 4 и 5, и не назначается, если есть оценки ниже 4. Результаты выполнения программы вывести на экран.

Решение задачи: «Сформировать ведомость результатов сессии (5 экзаменов) в виде целочисленной матрицы»

textual
Листинг программы
#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) используется для определения общей оценки студента на основе оценок за каждый экзамен. В основной функции программы происходит ввод данных о студентах, их сохранение в файл, загрузка данных из файла и вывод результатов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы