#define _CRT_SECURE_NO_WARNINGS #include #include #include #define MAX_STUDENTS 100 typedef struct { char id[10]; char class[10]; char name[20]; double score1; double score2; double score3; double score; } Student; Student students[MAX_STUDENTS]; int studentCount = 0; void inputStudent() { while (1) { Student newStudent; char option[10]; printf("Id "); scanf("%s", newStudent.id); printf("class "); scanf("%s", newStudent.class); printf("name "); scanf("%s", newStudent.name); printf("score1 "); scanf("%lf", &newStudent.score1); printf("score2 "); scanf("%lf", &newStudent.score2); printf("score3 "); scanf("%lf", &newStudent.score3); newStudent.score = (newStudent.score1 + newStudent.score2 + newStudent.score3); students[studentCount++] = newStudent; printf("continue?\n"); scanf("%s", &option); if (strcmp(option, "no") == 0) { break; } } } void outputStudents() { for (int i = 0; i < studentCount; i++) { printf("%s, %s, %s, %.1f, %.1f, %.1f, %.1f\n", students[i].id, students[i].class, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].score); } } void deleteStudent() { while (studentCount > 1) { char id[10]; scanf("%s", id); char option[10]; for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].id, id) == 0 || strcmp(students[i].name, id) == 0) { for (int j = i; j < studentCount - 1; j++) { students[j] = students[j + 1]; } studentCount--; } } outputStudents(); printf("continue?\n"); scanf("%s", &option); if (strcmp(option, "no") == 0) { break; } } } void selectStudent() { while (1) { char id[10]; scanf("%s", id); int flag = 0; char option[10]; for (int i = 0; i < studentCount; i++) { if (strcmp(students[i].id, id) == 0 || strcmp(students[i].class, id) == 0) { printf("%s, %s, %s, %.1f, %.1f, %.1f, %.1f\n", students[i].id, students[i].class, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].score); flag = 1; } } if (flag == 0) { printf("there is no eligible student\n"); } printf("continue?\n"); scanf("%s", &option); if (strcmp(option, "no") == 0) { break; } } } int compare(const void* a, const void* b) { Student* studentA = (Student*)a; Student* studentB = (Student*)b; if (strcmp(studentA->class, studentB->class) == 0) { return (studentB->score - studentA->score > 0) ? 1 : -1; } return strcmp(studentA->class, studentB->class); } void orderStudents() { qsort(students, studentCount, sizeof(Student), compare); outputStudents(); } int main() { int option; do { printf("1.input\n"); printf("2.delete\n"); printf("3.select\n"); printf("4.order\n"); printf("5.output\n"); printf("6.quit\n"); printf("Please input your option\n"); scanf("%d", &option); switch (option) { case 1: inputStudent(); break; case 2: deleteStudent(); break; case 3: selectStudent(); break; case 4: orderStudents(); break; case 5: outputStudents(); break; case 6: break; } } while (option != 6); return 0; }