设计一个菜单驱动的学生成绩管理程序,实现对学生成绩的各种管理按要求定义结构体数据类型,包括num(学号)name(姓名)score[5](5门课成绩),aver(5门课平均成绩),和sum(5门课总成绩),要求将下面功能都编写成独立
时间: 2024-03-07 20:48:08 浏览: 214
设计一个菜单驱动的学生成绩管理程序
的函数并在主函数中通过菜单驱动方式进行调用:
1. 添加学生信息
2. 删除学生信息
3. 修改学生信息
4. 查询学生信息
5. 统计学生信息
6. 退出程序
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 100
struct student {
char num[10];
char name[20];
int score[5];
double aver;
double sum;
int valid;
};
struct student students[MAX_STUDENT];
int count = 0;
void add_student() {
struct student s;
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", s.num);
printf("姓名:");
scanf("%s", s.name);
printf("5门课成绩:");
for (int i = 0; i < 5; i++) {
scanf("%d", &s.score[i]);
}
s.sum = s.score[0] + s.score[1] + s.score[2] + s.score[3] + s.score[4];
s.aver = s.sum / 5.0;
s.valid = 1;
students[count++] = s;
printf("添加成功!\n");
}
void delete_student() {
char num[10];
printf("请输入要删除的学生学号:");
scanf("%s", num);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].num, num) == 0) {
students[i].valid = 0;
found = 1;
break;
}
}
if (found) {
printf("删除成功!\n");
} else {
printf("未找到该学生!\n");
}
}
void modify_student() {
char num[10];
printf("请输入要修改的学生学号:");
scanf("%s", num);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].num, num) == 0) {
printf("请输入修改后的学生信息:\n");
printf("学号:");
scanf("%s", students[i].num);
printf("姓名:");
scanf("%s", students[i].name);
printf("5门课成绩:");
for (int j = 0; j < 5; j++) {
scanf("%d", &students[i].score[j]);
}
students[i].sum = students[i].score[0] + students[i].score[1] + students[i].score[2] + students[i].score[3] + students[i].score[4];
students[i].aver = students[i].sum / 5.0;
found = 1;
break;
}
}
if (found) {
printf("修改成功!\n");
} else {
printf("未找到该学生!\n");
}
}
void query_student() {
char num[10];
printf("请输入要查询的学生学号:");
scanf("%s", num);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].num, num) == 0 && students[i].valid) {
printf("学号:%s 姓名:%s 成绩:", students[i].num, students[i].name);
for (int j = 0; j < 5; j++) {
printf("%d ", students[i].score[j]);
}
printf("平均分:%.2lf 总分:%.2lf\n", students[i].aver, students[i].sum);
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生!\n");
}
}
void statistic_student() {
double min_aver = 100, max_aver = 0, sum_aver = 0;
int fail_count = 0;
for (int i = 0; i < count; i++) {
if (!students[i].valid) {
continue;
}
double aver = students[i].aver;
if (aver < min_aver) {
min_aver = aver;
}
if (aver > max_aver) {
max_aver = aver;
}
sum_aver += aver;
if (aver < 60) {
fail_count++;
}
}
double avg_aver = count > 0 ? sum_aver / count : 0;
printf("学生总数:%d 最高平均分:%.2lf 最低平均分:%.2lf 平均平均分:%.2lf 不及格人数:%d\n", count, max_aver, min_aver, avg_aver, fail_count);
}
int main() {
while (1) {
printf("菜单:\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 统计学生信息\n");
printf("6. 退出程序\n");
printf("请选择操作:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
query_student();
break;
case 5:
statistic_student();
break;
case 6:
return 0;
default:
printf("无效的操作!\n");
}
}
return 0;
}
```
这个程序实现了菜单驱动的学生成绩管理系统,可以通过菜单进行添加、删除、修改、查询和统计学生信息。注意,在添加、删除和修改学生信息时,需要遍历所有有效的学生信息来查找目标学生,时间复杂度为 O(n),在学生数量较大时可能会影响性能,可以考虑使用哈希表等数据结构来优化。
阅读全文