学生信息管理?系统之增,删,改,查
#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]);
}
}