用c语言做一个学生成绩管理系统,功能包含添加学生成绩,删除学生成绩,查询学生成绩,修改学生成绩,按成绩平均分大到小排序,最后存档存档
时间: 2023-06-17 07:07:16 浏览: 139
好的,这个功能比较完整,需要一些基础的C语言知识。我大概列一下实现的步骤:
1. 定义结构体来表示学生信息,包括学生姓名、学号、各科成绩等。
```c
struct student {
char name[20]; // 学生姓名
int id; // 学号
float score1; // 成绩1
float score2; // 成绩2
float score3; // 成绩3
float avg_score; // 平均成绩
};
```
2. 定义一个数组来存储多个学生的信息。
```c
struct student students[100]; // 最多存储100个学生的信息
int count = 0; // 记录当前已经添加的学生数目
```
3. 实现添加学生成绩的功能。可以通过从标准输入(键盘)读入学生信息,然后将其添加到数组中。
```c
void add_student() {
struct student stu;
printf("请输入学生姓名:");
scanf("%s", stu.name);
printf("请输入学生学号:");
scanf("%d", &stu.id);
printf("请输入成绩1:");
scanf("%f", &stu.score1);
printf("请输入成绩2:");
scanf("%f", &stu.score2);
printf("请输入成绩3:");
scanf("%f", &stu.score3);
stu.avg_score = (stu.score1 + stu.score2 + stu.score3) / 3;
students[count++] = stu;
printf("添加成功!\n");
}
```
4. 实现删除学生成绩的功能。可以通过输入学生姓名或学号来查找该学生,并将其从数组中删除。
```c
void delete_student() {
char name[20];
int id, i, j;
printf("请输入要删除的学生姓名或学号:");
scanf("%s", name);
if (isdigit(name[0])) {
id = atoi(name);
for (i = 0; i < count; i++) {
if (students[i].id == id) {
// 找到了该学生,将其从数组中删除
for (j = i; j < count - 1; j++) {
students[j] = students[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
} else {
for (i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
// 找到了该学生,将其从数组中删除
for (j = i; j < count - 1; j++) {
students[j] = students[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
}
printf("未找到该学生!\n");
}
```
5. 实现查询学生成绩的功能。可以通过输入学生姓名或学号来查找该学生,并输出其信息。
```c
void query_student() {
char name[20];
int id, i;
printf("请输入要查询的学生姓名或学号:");
scanf("%s", name);
if (isdigit(name[0])) {
id = atoi(name);
for (i = 0; i < count; i++) {
if (students[i].id == id) {
// 找到了该学生,输出其信息
printf("姓名:%s\n", students[i].name);
printf("学号:%d\n", students[i].id);
printf("成绩1:%g\n", students[i].score1);
printf("成绩2:%g\n", students[i].score2);
printf("成绩3:%g\n", students[i].score3);
printf("平均成绩:%g\n", students[i].avg_score);
return;
}
}
} else {
for (i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
// 找到了该学生,输出其信息
printf("姓名:%s\n", students[i].name);
printf("学号:%d\n", students[i].id);
printf("成绩1:%g\n", students[i].score1);
printf("成绩2:%g\n", students[i].score2);
printf("成绩3:%g\n", students[i].score3);
printf("平均成绩:%g\n", students[i].avg_score);
return;
}
}
}
printf("未找到该学生!\n");
}
```
6. 实现修改学生成绩的功能。可以通过输入学生姓名或学号来查找该学生,并修改其成绩。
```c
void modify_student() {
char name[20];
int id, i;
printf("请输入要修改的学生姓名或学号:");
scanf("%s", name);
if (isdigit(name[0])) {
id = atoi(name);
for (i = 0; i < count; i++) {
if (students[i].id == id) {
// 找到了该学生,修改其成绩
printf("请输入新的成绩1:");
scanf("%f", &students[i].score1);
printf("请输入新的成绩2:");
scanf("%f", &students[i].score2);
printf("请输入新的成绩3:");
scanf("%f", &students[i].score3);
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
printf("修改成功!\n");
return;
}
}
} else {
for (i = 0; i < count; i++) {
if (strcmp(students[i].name, name) == 0) {
// 找到了该学生,修改其成绩
printf("请输入新的成绩1:");
scanf("%f", &students[i].score1);
printf("请输入新的成绩2:");
scanf("%f", &students[i].score2);
printf("请输入新的成绩3:");
scanf("%f", &students[i].score3);
students[i].avg_score = (students[i].score1 + students[i].score2 + students[i].score3) / 3;
printf("修改成功!\n");
return;
}
}
}
printf("未找到该学生!\n");
}
```
7. 实现按平均成绩排序的功能。可以通过冒泡排序算法来实现。
```c
void sort_student() {
int i, j;
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - i - 1; j++) {
if (students[j].avg_score < students[j + 1].avg_score) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("排序成功!\n");
}
```
8. 最后实现存档存档功能。可以通过将数组中的学生信息写入文件中来实现。
```c
void save_student() {
FILE *fp = fopen("students.dat", "wb");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fwrite(students, sizeof(struct student), count, fp);
fclose(fp);
printf("存档成功!\n");
}
```
上面是一个简单的学生成绩管理系统的实现,可以根据自己的需求进行功能的增删改。
阅读全文