#include <stdio.h> #include <stdlib.h> #include <string.h> struct Student { char id[11]; char name[50]; char gender[10]; char class[20]; int data_structure; int linux_programming; int python_programming; }; void printStudent(struct Student student) { printf("%s %s %s %s %d %d %d\n", student.id, student.name, student.gender, student.class, student.data_structure, student.linux_programming, student.python_programming); } void printStudents(struct Student students[], int size) { printf("序号 学号 姓名 性别 班级 数据结构 linux编程基础 python程序设计\n"); for (int i = 0; i < size; i++) { printf("%d ", i+1); printStudent(students[i]); } } void createStudent(struct Student students[], int size, struct Student newStudent) { students[size] = newStudent; printf("插入成功!\n"); } void deleteStudent(struct Student students[], int *size, char studentId[11]) { int index = -1; for (int i = 0; i < *size; i++) { if (strcmp(students[i].id, studentId) == 0) { index = i; break; } } if (index != -1) { for (int i = index; i < *size - 1; i++) { students[i] = students[i+1]; } (*size)--; printf("删除成功!\n"); } else { printf("未找到该学生!\n"); } } void updateGrade(struct Student students[], int size, char studentId[11], int newDataStructure, int newLinuxProgramming, int newPythonProgramming) { for (int i = 0; i < size; i++) { if (strcmp(students[i].id, studentId) == 0) { students[i].data_structure = newDataStructure; students[i].linux_programming = newLinuxProgramming; students[i].python_programming = newPythonProgramming; printf("修改成功!\n"); return; } } printf("未找到该学生!\n"); } void searchGrade(struct Student students[], int size, char name[50], char subject[20]) { for (int i = 0; i < size; i++) { if (strcmp(students[i].name, name) == 0) { if (strcmp(subject, "data_structure") == 0) { printf("%s 的数据结构成绩为:%d\n", name, students[i].data_structure); } else if (strcmp(subject, "linux_programming") == 0) { printf("%s 的linux编程基础成绩为:%d\n", name, students[i].linux_programming); } else if (strcmp(subject, "python_programming") == 0) { printf("%s 的python程序设计成绩为:%d\n", name, students[i].python_programming); } return; } } printf("未找到该学生!\n"); } void sortByTotal(struct Student students[], int size) { // Bubble sort for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (students[j].data_structure + students[j].linux_programming + students[j].python_programming < students[j+1].data_structure + students[j+1].linux_programming + students[j+1].python_programming) { struct Student temp = students[j]; students[j] = students[j+1]; students[j+1] = temp; } } } printf("按总分降序排序完成!\n"); printStudents(students, size); } void sortByAverage(struct Student students[], int size) { // Insertion sort for (int i = 1; i < size; i++) { struct Student key = students[i]; int j = i - 1; while (j >= 0 && (students[j].data_structure + students[j].linux_programming + students[j].python_programming) / 3 > (key.data_structure + key.linux_programming + key.python_programming) / 3) { students[j+1] = students[j]; j = j - 1; } students[j+1] = key; } printf("按平均分增序排序完成!\n"); printStudents(students, size); } void sortInClass(struct Student students[], int size) { // Selection sort int start = 0; while (start < size) { int minIndex = start; int maxIndex = start; for (int i = start; i < size; i++) { if (students[i].data_structure + students[i].linux_programming + students[i].python_programming > students[maxIndex].data_structure + students[maxIndex].linux_programming + students[maxIndex].python_programming) { maxIndex = i; } if (students[i].data_structure + students[i].linux_programming + students[i].python_programming < students[minIndex].data_structure + students[minIndex].linux_programming + students[minIndex].python_programming) { minIndex = i; } } struct Student temp = students[start]; students[start] = students[minIndex]; students[minIndex] = temp; if (maxIndex == start) { maxIndex = minIndex; } temp = students[size - 1]; students[size - 1] = students[maxIndex]; students[maxIndex] = temp; start++; } printf("按班级总分前三名和后三名排序完成!\n"); printStudents(students, size); } int main() { struct Student students[20]; int size = 0; // Initialize student data struct Student student1 = {"2023300201", "张三", "男", "计科1班", 90, 88, 85}; struct Student student2 = {"2023300202", "李丽", "女", "计科2班", 85, 76, 80}; students[size++] = student1; students[size++] = student2; int choice; do { printf("1. 按班级顺序输出学生信息列表\n"); printf("2. 插入一条学生信息\n"); printf("3. 按学号删除一条学生记录\n"); printf("4. 修改某位学生的课程成绩\n"); printf("5. 按照学生姓名查找学生某门课程成绩\n"); printf("6. 按总分降序输出/按平均分增序输出/按班级总分前三名和后三名输出\n"); printf("7. 退出程序\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 1: printStudents(students, size); break; case 2: { struct Student newStudent; printf("请输入学号:"); scanf("%s", newStudent.id); printf("请输入姓名:"); scanf("%s", newStudent.name); printf("请输入性别:"); scanf("%s", newStudent.gender); printf("请输入班级:"); scanf("%s", newStudent.class); printf("请输入数据结构成绩:"); scanf("%d", &newStudent.data_structure); printf("请输入linux编程基础成绩:"); scanf("%d", &newStudent.linux_programming); printf("请输入python程序设计成绩:"); scanf("%d", &newStudent.python_programming); createStudent(students, size, newStudent); size++; } break; case 3: { char studentId[11]; printf("请输入要删除的学生学号:"); scanf("%s", studentId); deleteStudent(students, &size, studentId); } break; case 4: { char studentId[11]; int newDataStructure, newLinuxProgramming, newPythonProgramming; printf("请输入要修改成绩的学生学号:"); scanf("%s", studentId); printf("请输入新的数据结构成绩:"); scanf("%d", &newDataStructure); printf("请输入新的linux编程基础成绩:"); scanf("%d", &newLinuxProgramming); printf("请输入新的python程序设计成绩:"); scanf("%d", &newPythonProgramming); updateGrade(students, size, studentId, newDataStructure, newLinuxProgramming, newPythonProgramming); } break; case 5: { char name[50]; char subject[20]; printf("请输入要查找成绩的学生姓名:"); scanf("%s", name); printf("请输入要查找的科目(data_structure/linux_programming/python_programming):"); scanf("%s", subject); searchGrade(students, size, name, subject); } break; case 6: { int sortChoice; printf("选择排序方式:\n"); printf("1. 按总分降序输出\n"); printf("2. 按平均分增序输出\n"); printf("3. 按班级总分前三名和后三名输出\n"); scanf("%d", &sortChoice); switch (sortChoice) { case 1: sortByTotal(students, size); break; case 2: sortByAverage(students, size); break; case 3: sortInClass(students, size); break; default: printf("无效选择!\n"); } } break; case 7: printf("程序已退出!\n"); break; default: printf("无效选择!\n"); } } while (choice != 7); return 0; } [2024-12-15 22:10:03 | AI写代码神器 | 6408点数解答]