用c语言做一个有菜单 能实现学生数据录入 能实现数据排序 有数据输出功能 有数据读取与存储功能的成绩管理系统
时间: 2024-03-31 08:37:01 浏览: 20
好的,以下是这个成绩管理系统的基本代码实现,您可以根据需要进行修改和优化:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100 // 最多只能存储100个学生的信息
#define MAX_NAME 20 // 学生姓名最大长度为20
#define MAX_SUBJECT 5 // 最多只能有5门课程
struct student {
char name[MAX_NAME]; // 学生姓名
int id; // 学生学号
float score[MAX_SUBJECT]; // 学生成绩
float average; // 学生平均分
};
struct student students[MAX_STUDENT]; // 学生信息数组
int student_num = 0; // 学生数量
// 添加学生信息
void add_student() {
if (student_num >= MAX_STUDENT) {
printf("学生信息已满,请删除部分信息后再进行添加!\n");
return;
}
printf("请输入学生姓名:\n");
scanf("%s", students[student_num].name);
printf("请输入学生学号:\n");
scanf("%d", &students[student_num].id);
printf("请输入学生各门课程成绩:\n");
for (int i = 0; i < MAX_SUBJECT; i++) {
scanf("%f", &students[student_num].score[i]);
students[student_num].average += students[student_num].score[i];
}
students[student_num].average /= MAX_SUBJECT;
student_num++;
printf("学生信息添加成功!\n");
}
// 显示学生信息
void display_student() {
if (student_num == 0) {
printf("当前没有任何学生信息!\n");
return;
}
printf("当前学生信息如下:\n");
printf("姓名\t学号\t课程1\t课程2\t课程3\t课程4\t课程5\t平均分\n");
for (int i = 0; i < student_num; i++) {
printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].name, students[i].id,
students[i].score[0], students[i].score[1], students[i].score[2], students[i].score[3],
students[i].score[4], students[i].average);
}
}
// 按平均分排序
void sort_by_average() {
if (student_num == 0) {
printf("当前没有任何学生信息!\n");
return;
}
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (students[j].average < students[j + 1].average) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生信息已按平均分排序!\n");
}
// 保存学生信息到文件
void save_student() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(&student_num, sizeof(int), 1, fp);
fwrite(students, sizeof(struct student), student_num, fp);
fclose(fp);
printf("学生信息已保存到文件!\n");
}
// 从文件中读取学生信息
void load_student() {
FILE *fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fread(&student_num, sizeof(int), 1, fp);
fread(students, sizeof(struct student), student_num, fp);
fclose(fp);
printf("学生信息已从文件读取!\n");
}
int main() {
int choice;
while (1) {
printf("\n");
printf("学生成绩管理系统\n");
printf("1. 添加学生信息\n");
printf("2. 显示学生信息\n");
printf("3. 按平均分排序\n");
printf("4. 保存学生信息到文件\n");
printf("5. 从文件中读取学生信息\n");
printf("0. 退出程序\n");
printf("请选择操作(0-5):\n");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序已退出!\n");
return 0;
case 1:
add_student();
break;
case 2:
display_student();
break;
case 3:
sort_by_average();
break;
case 4:
save_student();
break;
case 5:
load_student();
break;
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
}
```
该程序实现了以下功能:
1. 添加学生信息
2. 显示学生信息
3. 按平均分排序
4. 保存学生信息到文件
5. 从文件中读取学生信息
您可以根据需要进行修改和优化,比如增加删除学生信息的功能等。