From 5a11161d66955911e02d9ebae39e579d8065c989 Mon Sep 17 00:00:00 2001 From: pypzov7ui <2137546866@qq.com> Date: Sat, 23 Nov 2024 02:24:20 +0800 Subject: [PATCH] ADD file via upload --- final_step.c | 185 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 final_step.c diff --git a/final_step.c b/final_step.c new file mode 100644 index 0000000..66af4d2 --- /dev/null +++ b/final_step.c @@ -0,0 +1,185 @@ +#include +#include +#include + +#define MAX_STUDENTS 100 + +typedef struct { + char id[20]; + char clas[20]; + char name[20]; + double score1; + double score2; + double score3; + double total_score; +} Student; + +Student students[MAX_STUDENTS]; +int student_count = 0; + +void display_menu(); +void input_students(); +void delete_student(); +void select_student(); +void order_students(); +void output_students(); +int compare_students(const void *a, const void *b); + +int main() { + char option; + + while (1) { + display_menu(); + printf("please input your option\n"); + scanf(" %c", &option); + + switch (option) { + case '1': + input_students(); + break; + case '2': + delete_student(); + break; + case '3': + select_student(); + break; + case '4': + order_students(); + break; + case '5': + output_students(); + break; + case '6': + printf("Exiting the program.\n"); + return 0; + default: + printf("Invalid option. Please try again.\n"); + } + } + return 0; +} + +void display_menu() { + printf("1.input\n"); + printf("2.delete\n"); + printf("3.select\n"); + printf("4.order\n"); + printf("5.output\n"); + printf("6.quit\n"); +} + +void input_students() { + char cont[4]; + do { + if (student_count >= MAX_STUDENTS) { + return; + } + + printf("id "); + scanf("%s", students[student_count].id); + printf("class "); + scanf("%s", students[student_count].clas); + printf("name "); + scanf("%s", students[student_count].name); + printf("score1 "); + scanf("%lf", &students[student_count].score1); + printf("score2 "); + scanf("%lf", &students[student_count].score2); + printf("score3 "); + scanf("%lf", &students[student_count].score3); + + students[student_count].total_score = students[student_count].score1 + + students[student_count].score2 + + students[student_count].score3; + student_count++; + + printf("continue? "); + scanf("%s", cont); + } while (strcmp(cont, "yes") == 0); +} + +void delete_student() { + char input[20]; + char cont[4]; + do{ + scanf("%s", input); + + int i, found = 0; + for (i = 0; i < student_count; i++) { + if (strcmp(students[i].id, input) == 0 || strcmp(students[i].name, input) == 0) { + found = 1; + break; + } + } + + if (found) { + for (int j = i; j < student_count - 1; j++) { + students[j] = students[j + 1]; + } + student_count--; + } else { + output_students(); + } + printf("continue?\n"); + scanf("%s",cont); + }while (strcmp(cont, "yes") == 0); +} + +void select_student() { + char input[20]; + scanf("%s", input); + + int found = 0; + for (int i = 0; i < student_count; i++) { + if (strcmp(students[i].id, input) == 0 || strcmp(students[i].clas, input) == 0) { + found = 1; + printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n", + students[i].id, + students[i].clas, + students[i].name, + students[i].score1, + students[i].score2, + students[i].score3, + students[i].total_score); + } + } + + if (!found) { + printf("there is no eligible student\n"); + } +} + +void order_students() { + qsort(students, student_count, sizeof(Student), compare_students); + printf("Students ordered successfully.\n"); +} + +void output_students() { + for (int i = 0; i < student_count; i++) { + printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n", + students[i].id, + students[i].clas, + students[i].name, + students[i].score1, + students[i].score2, + students[i].score3, + students[i].total_score); + } +} + +int compare_students(const void *a, const void *b) { + Student *studentA = (Student *)a; + Student *studentB = (Student *)b; + + int class_cmp = strcmp(studentA->clas, studentB->clas); + if (class_cmp != 0) { + return class_cmp; + } + + if (studentA->total_score > studentB->total_score) { + return -1; + } else if (studentA->total_score < studentB->total_score) { + return 1; + } + return 0; +}