修改学生信息管理系统以及查询
// 修改学生信息实现
void modifyStudent(StudentManager *manager)
{
if (manager->count == 0)
{
printf("没有学生信息可修改\n");
return;
}
int id;
printf("请输入要修改的学生学号: ");
scanf("%d", &id);
getchar(); // 清除输入缓冲区
int found = 0;
for (int i = 0; i < manager->count; i++)
{
if (manager->students[i].id == id)
{
printf("请输入新姓名: ");
fgets(manager->students[i].name, MAX_NAME_LENGTH, stdin);
manager->students[i].name[strcspn(manager->students[i].name, "\n")] = 0;
printf("请输入新的三门课成绩: ");
scanf("%f %f %f",
&manager->students[i].scores[0],
&manager->students[i].scores[1],
&manager->students[i].scores[2]);
// 重新计算总分和平均分
manager->students[i].total = 0;
for (int j = 0; j < 3; j++)
{
manager->students[i].total += manager->students[i].scores[j];
}
manager->students[i].average = manager->students[i].total / 3;
found = 1;
printf("学生信息修改成功\n");
break;
}
}
if (!found)
{
printf("未找到该学号的学生\n");
}
}
//查询学生以及实现
void querryStudent(StudentManager*manager)
{
if(manager->count=0)
{
printf("没有学生信息可查询\n");
return;
}
int id;
printf("请输入要查询的学生学号: ");
scanf("%d", &id);
getchar(); // 清除输入缓冲区
int found = 0;
for (int i = 0; i < manager->count; i++)
{
if (manager->students[i].id == id)
{
printf("学号: %d\n", manager->students[i].id);
printf("姓名: %s\n", manager->students[i].name);
printf("成绩: %.1f %.1f %.1f\n",
manager->students[i].scores[0],
manager->students[i].scores[1],
manager->students[i].scores[2]);
printf("总分: %.1f\n", manager->students[i].total);
printf("平均分: %.1f\n", manager->students[i].average);
found = 1;
break;
}
}
if (!found)
{
printf("未找到该学号的学生\n");
}
}
// 排序学生实现 (按总分降序)
void sortStudents(StudentManager *manager)
{
if (manager->count <= 1)
{
printf("无需排序\n");
return;
}
// 冒泡排序实现
for (int i = 0; i < manager->count - 1; i++)
{
for (int j = 0; j < manager->count - i - 1; j++)
{
if (manager->students[j].total < manager->students[j + 1].total)
{
// 交换两个学生
Student temp = manager->students[j];
manager->students[j] = manager->students[j + 1];
manager->students[j + 1] = temp;
}
}
}
printf("学生已按总分降序排列\n");
}
// 显示所有学生实现
void displayAll(StudentManager *manager)
{
if (manager->count == 0)
{
printf("没有学生信息可显示\n");
return;
}
printf("\n所有学生信息:\n");
printf("学号\t姓名\t\t成绩1\t成绩2\t成绩3\t总分\t平均分\n");
for (int i = 0; i < manager->count; i++)
{
printf("%d\t%-15s%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
manager->students[i].id,
manager->students[i].name,
manager->students[i].scores[0],
manager->students[i].scores[1],
manager->students[i].scores[2],
manager->students[i].total,
manager->students[i].average);
}
}
// 文件保存示例
void saveToFile(StudentManager *manager)
{
FILE *file = fopen(FILENAME, "wb");
if (file == NULL)
{
printf("无法打开文件\n");
return;
}
// 写入学生数量
fwrite(&manager->count, sizeof(int), 1, file);
// 写入所有学生数据
fwrite(manager->students, sizeof(Student), manager->count, file);
fclose(file);
}
// 文件读取示例
void loadFromFile(StudentManager *manager)
{
FILE *file = fopen(FILENAME, "rb");
if (file == NULL)
{
printf("无法打开文件,将使用空数据\n");
return;
}
// 读取学生数量
fread(&manager->count, sizeof(int), 1, file);
// 读取所有学生数据
fread(manager->students, sizeof(Student), manager->count, file);
fclose(file);
}