C实现 学生成绩信息包括:学号,姓名,语文成绩、数学成绩、英语成绩。 主要功能: 1、 学生信息录入; 、 信息排序(a 按总分排序(从高到低)b 按姓名排序 ) 5、 信息删除(给定学号,删除该学生信息) 6、 信息修改(给定学号,修改该学生信息) 7、 保存信息(把当前的结构体数组内容保存 8、 读取信息(从文件student.txt中把结构体数组的内容读到结构体数组中) 0、 退出
时间: 2023-12-23 19:04:46 浏览: 64
好的,以下是一个简单的C语言实现学生成绩信息管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LEN 20 // 姓名最大长度
// 学生信息结构体
typedef struct {
char id[10]; // 学号
char name[MAX_NAME_LEN]; // 姓名
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int total; // 总分
} Student;
// 学生信息数组
Student students[MAX_STUDENT_NUM];
int student_num = 0; // 学生数
// 函数声明
void add_student();
void sort_student_by_total();
void sort_student_by_name();
void delete_student();
void modify_student();
void save_students();
void load_students();
void print_students();
// 主函数
int main() {
int choice;
do {
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");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
sort_student_by_total();
break;
case 3:
sort_student_by_name();
break;
case 4:
delete_student();
break;
case 5:
modify_student();
break;
case 6:
save_students();
break;
case 7:
load_students();
break;
case 8:
print_students();
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (choice != 0);
return 0;
}
// 添加学生信息
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数已满,不能再添加\n");
return;
}
Student s;
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", s.id);
printf("姓名:");
scanf("%s", s.name);
printf("语文成绩:");
scanf("%d", &(s.chinese));
printf("数学成绩:");
scanf("%d", &(s.math));
printf("英语成绩:");
scanf("%d", &(s.english));
s.total = s.chinese + s.math + s.english;
students[student_num] = s;
student_num++;
printf("添加成功!\n");
}
// 按总分排序
void sort_student_by_total() {
if (student_num <= 1) {
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].total < students[j + 1].total) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按总分排序成功!\n");
}
// 按姓名排序
void sort_student_by_name() {
if (student_num <= 1) {
printf("学生数不足,无法排序\n");
return;
}
// 冒泡排序
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("按姓名排序成功!\n");
}
// 删除学生信息
void delete_student() {
if (student_num <= 0) {
printf("学生数为0,无法删除\n");
return;
}
char id[10];
printf("请输入要删除的学生学号:");
scanf("%s", id);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("找不到要删除的学生\n");
} else {
for (int i = index; i < student_num - 1; i++) {
students[i] = students[i + 1];
}
student_num--;
printf("删除成功!\n");
}
}
// 修改学生信息
void modify_student() {
if (student_num <= 0) {
printf("学生数为0,无法修改\n");
return;
}
char id[10];
printf("请输入要修改的学生学号:");
scanf("%s", id);
int index = -1;
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("找不到要修改的学生\n");
} else {
printf("请输入修改后的学生信息:\n");
printf("学号:");
scanf("%s", students[index].id);
printf("姓名:");
scanf("%s", students[index].name);
printf("语文成绩:");
scanf("%d", &(students[index].chinese));
printf("数学成绩:");
scanf("%d", &(students[index].math));
printf("英语成绩:");
scanf("%d", &(students[index].english));
students[index].total = students[index].chinese + students[index].math + students[index].english;
printf("修改成功!\n");
}
}
// 保存学生信息到文件
void save_students() {
FILE *fp;
fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
fprintf(fp, "%d\n", student_num);
for (int i = 0; i < student_num; i++) {
fprintf(fp, "%s %s %d %d %d %d\n", students[i].id, students[i].name,
students[i].chinese, students[i].math, students[i].english, students[i].total);
}
fclose(fp);
printf("学生信息保存成功!\n");
}
// 从文件读取学生信息
void load_students() {
FILE *fp;
fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
fscanf(fp, "%d", &student_num);
for (int i = 0; i < student_num; i++) {
fscanf(fp, "%s %s %d %d %d %d", students[i].id, students[i].name,
&(students[i].chinese), &(students[i].math), &(students[i].english), &(students[i].total));
}
fclose(fp);
printf("学生信息读取成功!\n");
}
// 显示学生信息
void print_students() {
if (student_num <= 0) {
printf("学生数为0,无法显示\n");
} else {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
for (int i = 0; i < student_num; i++) {
printf("%s\t%s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name,
students[i].chinese, students[i].math, students[i].english, students[i].total);
}
}
}
```
这是一个简单的学生成绩信息管理系统,实现了学生信息的录入、排序、删除、修改、保存到文件、从文件读取和显示等功能。需要注意的是,这只是一个示例代码,还有很多可以优化和改进的地方。