以下是使用 C 语言实现选修课学生信息管理的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 typedef struct { int id; char name[50]; char college[50]; float usualScore; float finalScore; float totalScore; } Student; // 比较函数,用于按学院排序 int compareByCollege(const void *a, const void *b) { Student *studentA = (Student *)a; Student *studentB = (Student *)b; return strcmp(studentA->college, studentB->college); } // 初始化学生信息 void initStudents(Student *students, int *numStudents) { printf("请输入学生信息(格式:学号 姓名 学院,输入-1结束):\n"); int id; char name[50], college[50]; *numStudents = 0; while (1) { scanf("%d", &id); if (id == -1) { break; } scanf("%s %s", name, college); students[*numStudents].id = id; strcpy(students[*numStudents].name, name); strcpy(students[*numStudents].college, college); students[*numStudents].usualScore = 0; students[*numStudents].finalScore = 0; students[*numStudents].totalScore = 0; (*numStudents)++; } qsort(students, *numStudents, sizeof(Student), compareByCollege); } // 补充新学生信息 void addStudent(Student *students, int *numStudents) { Student newStudent; printf("请输入新学生信息(格式:学号 姓名 学院):\n"); scanf("%d %s %s", &newStudent.id, newStudent.name, newStudent.college); newStudent.usualScore = 0; newStudent.finalScore = 0; newStudent.totalScore = 0; int i; for (i = 0; i < *numStudents; i++) { if (strcmp(newStudent.college, students[i].college) < 0) { break; } } for (int j = *numStudents; j > i; j--) { students[j] = students[j - 1]; } students[i] = newStudent; (*numStudents)++; } // 删除学生信息 void deleteStudent(Student *students, int *numStudents) { int id; printf("请输入要删除的学生学号:\n"); scanf("%d", &id); int found = 0; for (int i = 0; i < *numStudents; i++) { if (students[i].id == id) { found = 1; for (int j = i; j < *numStudents - 1; j++) { students[j] = students[j + 1]; } (*numStudents)--; break; } } if (!found) { printf("未找到该学生!\n"); } } // 录入成绩并计算总评成绩 void inputScores(Student *students, int numStudents) { int id; printf("请输入学生学号:\n"); scanf("%d", &id); int found = 0; for (int i = 0; i < numStudents; i++) { if (students[i].id == id) { found = 1; printf("请输入平时成绩和期末成绩:\n"); scanf("%f %f", &students[i].usualScore, &students[i].finalScore); students[i].totalScore = (students[i].usualScore + students[i].finalScore) / 2; break; } } if (!found) { printf("未找到该学生!\n"); } } // 生成成绩单文件 void generateReportFile(Student *students, int numStudents) { FILE *fp = fopen("last.txt", "w"); if (fp == NULL) { printf("文件创建失败!\n"); return; } for (int i = 0; i < numStudents; i++) { fprintf(fp, "%d %s %s %.2f %.2f %.2f\n", students[i].id, students[i].name, students[i].college, students[i].usualScore, students[i].finalScore, students[i].totalScore); } fclose(fp); } // 按学号查询学生信息 void queryStudent(Student *students, int numStudents) { int id; printf("请输入要查询的学生学号:\n"); scanf("%d", &id); int found = 0; for (int i = 0; i < numStudents; i++) { if (students[i].id == id) { found = 1; printf("%d %s %s %.2f %.2f %.2f\n", students[i].id, students[i].name, students[i].college, students[i].usualScore, students[i].finalScore, students[i].totalScore); break; } } if (!found) { printf("未找到该学生!\n"); } } int main() { Student students[100]; int numStudents = 0; initStudents(students, &numStudents); int choice; while (1) { printf("1. 补充新学生\n"); printf("2. 删除学生\n"); printf("3. 录入成绩\n"); printf("4. 生成成绩单文件\n"); printf("5. 按学号查询\n"); printf("6. 退出\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: addStudent(students, &numStudents); break; case 2: deleteStudent(students, &numStudents); break; case 3: inputScores(students, numStudents); break; case 4: generateReportFile(students, numStudents); break; case 5: queryStudent(students, numStudents); break; case 6: return 0; default: printf("无效的选择,请重新输入!\n"); } } return 0; } ``` [2024-09-26 08:04:58 | AI写代码神器 | 1583点数解答]