C language question

Asked 2 years ago, Updated 2 years ago, 29 views

I'm a student who transferred late and is practically self-taught. I'm writing a grade management program for my assignment, but there's a blockage, so I'm asking you a question.

typedef struct { int num; char name[MAX_NAME]; int kor; int eng; int mat; }Student;

Student *stues; int max_student; void start(); void Run();

int main(void) { start(); Run(); free(stues); return 0; }

void start() { printf("Enter the number of students:"); scanf_s("%d", &max_student); printf("%d students can be stored.\n", max_student); printf("Program Start!\n"); stues = (Student*)malloc(sizeof(Student)*max_student); memset(stues, 0, sizeof(Student)*max_student); }

int Menu(); void In(); void Del(); void Cal(); void Pri();

void Run() { int key = 0; while ((key = Menu()) != 5) { switch (key) { case 1: In(); break; case 2: Del(); break; case 3: Cal(); break; case 4: Pri(); break; default: break; } } }

int Menu() { int key = 0; printf("1. Insert a student\n2. Delete a student\n3. Calculate average\n4. Print all students\n5. Exit\n"); scanf_s("%d", &key); return key; }

void In() { for (int i = 0; i < max_student; i++) { printf("[%d] Name:", stues[i].num); scanf("%s", &stues[i].name); printf("[%d] Korean:", stues[i].num); scanf("%d", &stues[i].kor); printf("[%d] Math:", stues[i].num); scanf("%d", &stues[i].eng); printf("[%d] English:", stues[i].num); scanf("%d", &stues[i].mat); } }

void Del() { char na[MAX_NAME]; printf("Enter the name of student:"); scanf("%s", na);

for (int i = 0; i < max_student; i++) {
    if (strcmp(stues[i].name, na) == 0) {
        for (int j = i; j < max_student-1; j++); {
            stues[i] = stues[i + 1];
            max_student--;
        }
        printf("The data of %s is deleted", stues[i].name);
    }
}

}

void Cal() { char na[MAX_NAME]; printf("Enter the name of student:"); scanf("%s", na);

for (int i = 0; i < max_student; ++i) {
    double total = stues[i].kor + stues[i].eng + stues[i].mat;
    if (!strcmp(stues[i].name, na)) {
        printf("%s's average is %.1lf", stues[i].name, total/3);
    }
}

}

void Pri() { for (int i = 0; i < max_student; i++) { printf("[%d]Name:%s\n", stues[i].num, stues[i].name); printf("[%d]Korean:%d\n", stues[i].num, stues[i].kor); printf("[%d]Math:%d\n", stues[i].num, stues[i].eng); printf("[%d]English:%d\n", stues[i].num, stues[i].mat); } }

c

2022-09-22 14:20

1 Answers

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME 10

typedef struct {
    int num;
    char name[MAX_NAME];
    int kor;
    int eng;
    int mat;
} } Student;

Student *stues;
int max_student = 0;
int last_student_idx = 0;
int idx = 1;

void start();
void Run();
int Menu();
void In();
void Del();
void Cal();
void Pri();

int main(void)
{
    start();
    Run();
    free(stues);
    return 0;
}

void start()
{
    printf("Enter the number of students:");
    scanf("%d", &max_student);
    printf("%d students can be stored.\n", max_student);
    printf("Program Start!\n");
    stues = (Student*)malloc(sizeof(Student) * max_student);
    memset(stues, 0, sizeof(Student) * max_student);
}

void Run()
{
    int key = 0;
    while ((key = Menu()) != 5)
    {
        switch (key)
        {
            case 1:
                In();
                break;
            case 2:
                Del();
                break;
            case 3:
                Cal();
                break;
            case 4:
                Pri();
                break;
            default:
                break;
            }
    }
}

int Menu()
{
    int key = 0;
    printf("\n1. Insert a student\n2. Delete a student\n3. Calculate average\n4. Print all students\n5. Exit\n");
    scanf("%d", &key);
    return key;
}

void In()
{
    if(last_student_idx >= max_student)
    {
        printf ("You can't add more");
        return;
    }

    stues[last_student_idx].num = idx;

    printf("[%d] Name:", idx);
    scanf("%s", stues[last_student_idx].name);

    printf("[%d] Korean:", idx);
    scanf("%d", &stues[last_student_idx].kor);

    printf("[%d] Math:", idx);
    scanf("%d", &stues[last_student_idx].eng);

    printf("[%d] English:", idx);
    scanf("%d", &stues[last_student_idx].mat);

    idx++;
    last_student_idx++;
}

void Del()
{
    int i, j;
    char na[MAX_NAME];
    printf("Enter the name of student:");
    scanf("%s", na);

    for (i = 0; i < last_student_idx; i++)
    {
        if (strcmp(stues[i].name, na) == 0)
        {
            printf("The data of %s is deleted", stues[i].name);
            for (j = i; j < last_student_idx - 1; j++)
            {
                stues[j] = stues[j + 1];
            }
            last_student_idx--;
        }
    }
}

void Cal()
{
    int i;
    char na[MAX_NAME];
    double total;
    printf("Enter the name of student:");
    scanf("%s", na);

    for (i = 0; i < max_student; ++i)
    {
        if (!strcmp(stues[i].name, na))
        {
            total = stues[i].kor + stues[i].eng + stues[i].mat;
            printf("%s's average is %.1lf\n", stues[i].name, total/3);
        }
    }
}

void Pri()
{
    int i;
    printf("****Total %d***\n\n", last_student_idx);
    for (i = 0; i < last_student_idx; i++)
    {
        printf("[%d]Name:%s\n", stues[i].num, stues[i].name);
        printf("[%d]Korean:%d\n", stues[i].num, stues[i].kor);
        printf("[%d]Math:%d\n", stues[i].num, stues[i].eng);
        printf("[%d]English:%d\n\n", stues[i].num, stues[i].mat);
    }
    printf("*******************\n");
}

Please run it and analyze the code..


2022-09-22 14:20

If you have any answers or tips


© 2024 OneMinuteCode. All rights reserved.