学生成绩管理系统设计 学生成绩信息包括:学号,姓名,语文成绩、数学成绩、英语成绩。 主要功能: 1、 学生信息录入; 2、 学生信息浏览; 3、 信息查询(a 按学号查 b 按最高分查(查询每门课的最高分的同学信息)) 4、 信息排序(a 按总分排序(从高到低)b 按姓名排序 ) 5、 信息删除(给定学号,删除该学生信息) 6、 信息修改(给定学号,修改该学生信息) 7、 保存信息(把当前的结构体数组内容保存 8、 读取信息(从文件student.txt中把结构体数组的内容读到结构体数组中) 0、 退出C语言编程
时间: 2023-12-03 12:45:01 浏览: 126
这是一个比较典型的学生成绩管理系统,具体的设计思路如下:
1. 首先定义一个学生信息的结构体,包括学号、姓名、语文成绩、数学成绩、英语成绩和总分等字段。
```
struct student {
int id;
char name[20];
int chinese;
int math;
int english;
int total;
};
```
2. 定义一个存储所有学生信息的结构体数组,以及一个变量记录当前学生数量。
```
struct student stu[1000];
int count = 0;
```
3. 实现学生信息录入功能,包括输入学号、姓名、各科成绩,计算总分,并将新学生信息添加到结构体数组中。
```
void add_student() {
printf("请输入学号:");
scanf("%d", &stu[count].id);
printf("请输入姓名:");
scanf("%s", stu[count].name);
printf("请输入语文成绩:");
scanf("%d", &stu[count].chinese);
printf("请输入数学成绩:");
scanf("%d", &stu[count].math);
printf("请输入英语成绩:");
scanf("%d", &stu[count].english);
stu[count].total = stu[count].chinese + stu[count].math + stu[count].english;
count++;
printf("添加成功!\n");
}
```
4. 实现学生信息浏览功能,遍历结构体数组并输出每个学生的信息。
```
void view_student() {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
for (int i = 0; i < count; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].total);
}
}
```
5. 实现信息查询功能,根据用户输入的选项进行查询,支持按学号查和按最高分查两种查询方式。
```
void search_student() {
int option;
printf("请选择查询方式:\n");
printf("1. 按学号查\n");
printf("2. 按最高分查\n");
scanf("%d", &option);
switch (option) {
case 1:
int id;
printf("请输入要查询的学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (stu[i].id == id) {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("%d\t%s\t%d\t%d\t%d\t%d\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].total);
return;
}
}
printf("没有找到该学生!\n");
break;
case 2:
int max_total = 0;
for (int i = 0; i < count; i++) {
if (stu[i].total > max_total) {
max_total = stu[i].total;
}
}
printf("最高分为%d分的学生有:\n", max_total);
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
for (int i = 0; i < count; i++) {
if (stu[i].total == max_total) {
printf("%d\t%s\t%d\t%d\t%d\t%d\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].total);
}
}
break;
default:
printf("输入错误!\n");
break;
}
}
```
6. 实现信息排序功能,根据用户输入的选项进行排序,支持按总分排序和按姓名排序两种排序方式。
```
void sort_student() {
int option;
printf("请选择排序方式:\n");
printf("1. 按总分排序(从高到低)\n");
printf("2. 按姓名排序\n");
scanf("%d", &option);
switch (option) {
case 1:
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (stu[j].total < stu[j + 1].total) {
struct student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
printf("按总分排序成功!\n");
break;
case 2:
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (strcmp(stu[j].name, stu[j + 1].name) > 0) {
struct student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
printf("按姓名排序成功!\n");
break;
default:
printf("输入错误!\n");
break;
}
}
```
7. 实现信息删除功能,根据用户输入的学号删除指定学生的信息。
```
void delete_student() {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (stu[i].id == id) {
for (int j = i; j < count - 1; j++) {
stu[j] = stu[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
printf("没有找到该学生!\n");
}
```
8. 实现信息修改功能,根据用户输入的学号修改指定学生的信息。
```
void modify_student() {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (stu[i].id == id) {
printf("请输入新的姓名:");
scanf("%s", stu[i].name);
printf("请输入新的语文成绩:");
scanf("%d", &stu[i].chinese);
printf("请输入新的数学成绩:");
scanf("%d", &stu[i].math);
printf("请输入新的英语成绩:");
scanf("%d", &stu[i].english);
stu[i].total = stu[i].chinese + stu[i].math + stu[i].english;
printf("修改成功!\n");
return;
}
}
printf("没有找到该学生!\n");
}
```
9. 实现保存信息功能,将当前的结构体数组内容保存到文件student.txt中。
```
void save_student() {
FILE *fp = fopen("student.txt", "w");
for (int i = 0; i < count; i++) {
fprintf(fp, "%d %s %d %d %d %d\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english, stu[i].total);
}
fclose(fp);
printf("保存成功!\n");
}
```
10. 实现读取信息功能,从文件student.txt中读取内容到结构体数组中。
```
void load_student() {
FILE *fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("打开文件失败!\n");
return;
}
count = 0;
while (!feof(fp)) {
fscanf(fp, "%d %s %d %d %d %d\n", &stu[count].id, stu[count].name, &stu[count].chinese, &stu[count].math, &stu[count].english, &stu[count].total);
count++;
}
fclose(fp);
printf("读取成功!\n");
}
```
11. 最后,实现一个菜单功能,让用户选择需要执行的操作。
```
void menu() {
printf("欢迎使用学生成绩管理系统!\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("0. 退出\n");
}
int main() {
int option;
do {
menu();
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
view_student();
break;
case 3:
search_student();
break;
case 4:
sort_student();
break;
case 5:
delete_student();
break;
case 6:
modify_student();
break;
case 7:
save_student();
break;
case 8:
load_student();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("输入错误!\n");
break;
}
} while (option != 0);
return 0;
}
```
以上就是一个简单的学生成绩管理系统的设计思路,可以根据实际需要进行修改和完善。
阅读全文