From a76f47acba36973371ea50af291e897a9591e064 Mon Sep 17 00:00:00 2001 From: pc9ha2xvl <2119910569@qq.com> Date: Fri, 22 Nov 2024 17:43:15 +0800 Subject: [PATCH] Update step5.c --- step5.c | 202 +++++++++++++++++++++++++++----------------------------- 1 file changed, 98 insertions(+), 104 deletions(-) diff --git a/step5.c b/step5.c index 1dd7284..a09bf58 100644 --- a/step5.c +++ b/step5.c @@ -1,104 +1,98 @@ -#include -#include -#include - -// 定义一个结构体来存储学生的信息 -typedef struct { - char id[7]; - char class_num[3]; - char name[20]; - float math_score; - float physics_score; - float english_score; -} Student; - -// 比较函数,用于qsort排序 -int compare_students(const void *a, const void *b) { - Student *studentA = (Student *)a; - Student *studentB = (Student *)b; - int class_cmp = strcmp(studentA->class_num, studentB->class_num); - if (class_cmp == 0) { - float total_A = studentA->math_score + studentA->physics_score + studentA->english_score; - float total_B = studentB->math_score + studentB->physics_score + studentB->english_score; - if (total_B - total_A > 0) return -1; - else if (total_B - total_A < 0) return 1; - else return 0; - } else { - return class_cmp; - } -} - -// 查找学生函数 -Student* find_student(Student students[], int count, const char *key) { - for (int i = 0; i < count; i++) { - if (strcmp(students[i].id, key) == 0 || strcmp(students[i].name, key) == 0) { - return &students[i]; - } - } - return NULL; -} - -// 删除学生函数 -void delete_student(Student students[], int *count, Student *to_delete) { - for (int i = 0; i < *count; i++) { - if (students[i].id == to_delete->id) { - for (int j = i; j < *count - 1; j++) { - students[j] = students[j + 1]; - } - (*count)--; - break; - } - } -} - -// 打印学生函数 -void print_students(Student students[], int count) { - for (int i = 0; i < count; i++) { - printf("%s %s %s %.1f %.1f %.1f\n", students[i].id, students[i].class_num, students[i].name, - students[i].math_score, students[i].physics_score, students[i].english_score); - } -} - -int main() { - // 初始化学生信息数组(已排序) - Student students[3] = { - {"10001", "11", "Zhang", 99.5, 88.5, 89.5}, - {"10002", "12", "Yang", 77.9, 56.5, 87.5}, - {"10003", "11", "Liang", 92.5, 99.0, 60.5} - }; - int student_count = 3; - - // 确保学生数组是按要求排序的 - qsort(students, student_count, sizeof(Student), compare_students); - - // 用户输入待删除学生的学号或姓名 - char input[50]; - printf("请输入要删除学生的学号或姓名:"); - scanf("%s", input); - // 清除输入缓冲区中的换行符 - while (getchar() != '\n'); - - // 查找学生信息 - Student *found_student = find_student(students, student_count, input); - if (found_student) { - printf("找到学生信息,准备删除...\n"); - char confirmation[10]; - printf("Are you sure? (yes/no): "); - scanf("%s", confirmation); - // 清除输入缓冲区中的换行符 - while (getchar() != '\n'); - if (strcmp(confirmation, "yes") == 0 || strcmp(confirmation, "y") == 0) { - delete_student(students, &student_count, found_student); - printf("学生信息已删除。\n"); - } else { - printf("已取消删除操作。\n"); - } - } else { - printf("未找到该学生信息。\n"); - } - - // 显示剩余学生信息 - print_students(students, student_count); - - return 0; -} +#include +#include +#include + +typedef struct { + char id[7]; + char class_num[3]; + char name[20]; + float math_score; + float physics_score; + float english_score; +} Student; + +int compare_students(const void *a, const void *b) { + Student *studentA = (Student *)a; + Student *studentB = (Student *)b; + int class_cmp = strcmp(studentA->class_num, studentB->class_num); + if (class_cmp == 0) { + float total_A = studentA->math_score + studentA->physics_score + studentA->english_score; + float total_B = studentB->math_score + studentB->physics_score + studentB->english_score; + if (total_B - total_A > 0) return -1; + else if (total_B - total_A < 0) return 1; + else return 0; + } else { + return class_cmp; + } +} + +Student* find_student(Student students[], int count, const char *key) { + for (int i = 0; i < count; i++) { + if (strcmp(students[i].id, key) == 0 || strcmp(students[i].name, key) == 0) { + return &students[i]; + } + } + return NULL; +} + + +void delete_student(Student students[], int *count, Student *to_delete) { + for (int i = 0; i < *count; i++) { + if (students[i].id == to_delete->id) { + for (int j = i; j < *count - 1; j++) { + students[j] = students[j + 1]; + } + (*count)--; + break; + } + } +} + + +void print_students(Student students[], int count) { + for (int i = 0; i < count; i++) { + printf("%s %s %s %.1f %.1f %.1f\n", students[i].id, students[i].class_num, students[i].name, + students[i].math_score, students[i].physics_score, students[i].english_score); + } +} + +int main() { + + Student students[3] = { + {"10001", "11", "Zhang", 99.5, 88.5, 89.5}, + {"10002", "12", "Yang", 77.9, 56.5, 87.5}, + {"10003", "11", "Liang", 92.5, 99.0, 60.5} + }; + int student_count = 3; + + qsort(students, student_count, sizeof(Student), compare_students); + + char input[50]; + printf(""); + scanf("%s", input); + + while (getchar() != '\n'); + + + Student *found_student = find_student(students, student_count, input); + if (found_student) { + printf("\n"); + char confirmation[10]; + printf("Are you sure? (yes/no): "); + scanf("%s", confirmation); + + while (getchar() != '\n'); + if (strcmp(confirmation, "yes") == 0 || strcmp(confirmation, "y") == 0) { + delete_student(students, &student_count, found_student); + printf("n"); + } else { + printf("\n"); + } + } else { + printf("n"); + } + + print_students(students, student_count); + + return 0; +}