学生信息管理 系统之增,删,改,查
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 100 // 最大学生数量
#define MAX_NAME_LENGTH 50 // 姓名最大长度// 学生结构体
typedef struct {char name[MAX_NAME_LENGTH];int studentId;float scores[3]; // 三门课程的成绩
} Student;// 学生信息表
Student students[MAX_STUDENTS];
int numStudents = 0; // 学生数量// 函数声明void displayAllStudents();
void readFromFile();
void searchByName();
void searchByCourse();
void addStudent();
void deleteStudent();
void sortScoresByCourse();
void sortScoresByTotal();
void saveToFile();int main() {int choice;// 从文件读取数据readFromFile();do {// 菜单显示printf("\n=== 学生信息管理系统 ===\n"); printf("0. 显示所有人信息\n");printf("1. 增加学生信息\n");printf("2. 检索某个同学的所有成绩\n");printf("3. 检索某一门课程的所有同学成绩\n"); printf("4. 删除学生信息\n");printf("5. 对某门课程的成绩进行升序排序\n");printf("6. 对所有同学的总成绩进行升序排序\n");printf("7. 保存信息到磁盘文件\n");printf("8. 统计共有多少人\n");printf("9. 退出系统\n");printf("请输入你的选择: ");scanf("%d", &choice);switch (choice) {case 0:displayAllStudents();break;case 1:addStudent();break;case 2:searchByName();break;case 3:searchByCourse();break; case 4:deleteStudent();break;case 5:sortScoresByCourse();break;case 6:sortScoresByTotal();break;case 7:saveToFile();break;case 8:printf("总人数是:%d\n",numStudents);break;case 9:printf("感谢使用学生信息管理系统!\n");return;default:printf("无效的选择,请重新输入。\n");break;}} while (1);return 0;
}// 从磁盘文件读取数据
void readFromFile() {FILE* file = fopen("students.txt", "r");if (file) {// 清空原有数据numStudents = 0;// 逐行读取数据char line[100];while (fgets(line, sizeof(line), file)) {sscanf(line, "%s %d %f %f %f",students[numStudents].name,&students[numStudents].studentId,&students[numStudents].scores[0],&students[numStudents].scores[1],&students[numStudents].scores[2]);numStudents++;}fclose(file);printf("成功从文件中读取学生信息。\n");}else {printf("未找到学生信息文件,将创建新文件。\n");}
}// 检索某个同学的所有成绩
void searchByName() {char name[MAX_NAME_LENGTH];printf("请输入要检索的同学姓名: ");scanf("%s", name);int i;for (i = 0; i < numStudents; i++) {if (strcmp(students[i].name, name) == 0) {printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2]);}}
}// 检索某一门课程的所有同学成绩
void searchByCourse() {int course;printf("请输入要检索的课程编号(1-3): ");scanf("%d", &course);int i;for (i = 0; i < numStudents; i++) {printf("姓名:%s 学号:%d 成绩:%.2f\n",students[i].name,students[i].studentId,students[i].scores[course - 1]);}
}// 增加学生信息
void addStudent() {int count, i;numStudents = 0;printf("请输入要新的学生人数: ");scanf("%d", &count);if (numStudents + count > MAX_STUDENTS) {printf("学生数量超过系统容量,请增加合适数量的学生。\n");return;}for (i = 0; i < count; i++) {printf("请输入第 %d 个学生的信息(姓名 学号 成绩1 成绩2 成绩3): ", i + 1);scanf("%s %d %f %f %f",students[numStudents].name,&students[numStudents].studentId,&students[numStudents].scores[0],&students[numStudents].scores[1],&students[numStudents].scores[2]);numStudents++;}printf("成功增加 %d 个学生信息。\n", count);
}// 删除学生信息
void deleteStudent() {int index;printf("请输入要删除的学生索引号(1-%d): ", numStudents);scanf("%d", &index);if (index < 1 || index > numStudents) {printf("无效的索引号,请重新输入。\n");return;}int i;for (i = index - 1; i < numStudents - 1; i++) {students[i] = students[i + 1];}numStudents--;printf("成功删除学生信息。\n");
}// 对某门课程的成绩进行升序排序
void sortScoresByCourse() {int course;printf("请输入要排序的课程编号(1-3): ");scanf("%d", &course);int i, j;for (i = 0; i < numStudents - 1; i++) {for (j = 0; j < numStudents - i - 1; j++) {if (students[j].scores[course - 1] > students[j + 1].scores[course - 1]) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("成功对第 %d 门课程的成绩进行排序。\n", course);
}// 对所有同学的总成绩进行升序排序
void sortScoresByTotal() {int i, j;for (i = 0; i < numStudents - 1; i++) {for (j = 0; j < numStudents - i - 1; j++) {float total1 = students[j].scores[0] + students[j].scores[1] + students[j].scores[2];float total2 = students[j + 1].scores[0] + students[j + 1].scores[1] + students[j + 1].scores[2];if (total1 > total2) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("成功对所有同学的总成绩进行排序。\n");
}// 保存信息到磁盘文件
void saveToFile() {FILE* file = fopen("students.txt", "w");if (file) {int i;for (i = 0; i < numStudents; i++) {fprintf(file, "%s %d %.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2]);}fclose(file);printf("成功保存学生信息到文件。\n");}else {printf("无法创建学生信息文件,保存失败。\n");}
}// 显示所有人信息
void displayAllStudents() {if (numStudents == 0) {printf("暂无学生信息。\n");return;}printf("所有学生信息如下:\n");int i;for (i = 0; i < numStudents; i++) {printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2], students[i].scores[0]+ students[i].scores[1]+ students[i].scores[2]);}}