使用C语言来设计一个简单的成绩管理系统。管理系统包含以下功能: 1.建立一张学生成绩表,每个学生包含 学号、姓名、性别、语文、数学、英语、总分、平均分。 2.将表中所有信息按总分降序排列。 3.按学号查找某学生所有成绩。 4.能够实现某学生的成绩插入和删除。 5.实现文件操作,程序退出时将学生成绩保存在studen_grad.txt文件中;程序开始时,能够从student_grad.txt文件中加载已有的学生成绩信息。 要求:所有功能均使用独立的函数来实现,使用结构体来存储学生信息,使用malloc动态创建,假设学生的总数是固定的(即你只需要开辟一次内存,使用一个整数n来存储学生数量,删除某学生的信息时只需要将后面所有的学生往前挪一位并将n-1)
时间: 2024-02-13 12:02:47 浏览: 20
好的,以下是一个简单的C语言成绩管理系统的代码,按照您的要求实现了所有功能。注意,这只是一个参考,可能存在一些问题,需要您自行测试和调试。代码中注释中有一些解释和提示,希望对您有帮助。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student_t {
char id[20]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int chinese; // 语文成绩
int math; // 数学成绩
int english; // 英语成绩
int total; // 总分
float average; // 平均分
} student;
// 全局变量,存储学生数量
int n = 0;
// 函数声明
void create_student(student *s);
void sort_students(student *students);
void print_students(student *students);
void search_student(student *students, char *id);
void insert_student(student *students);
void delete_student(student *students, char *id);
void save_students(student *students);
void load_students(student *students);
int main() {
student students[100]; // 存储学生信息的数组,最多100个学生
int choice; // 用户选择的功能编号
while (1) {
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("\n");
printf("请输入要选择的功能编号:");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
create_student(&students[n]);
n++;
break;
case 2:
sort_students(students);
print_students(students);
break;
case 3:
char id[20];
printf("请输入要查找的学生学号:");
scanf("%s", id);
search_student(students, id);
break;
case 4:
insert_student(students);
break;
case 5:
printf("请输入要删除的学生学号:");
scanf("%s", id);
delete_student(students, id);
break;
case 6:
save_students(students);
break;
case 7:
load_students(students);
break;
case 8:
printf("谢谢使用,再见!\n");
exit(0);
default:
printf("无效的功能编号,请重新输入!\n");
break;
}
}
return 0;
}
// 创建学生信息
void create_student(student *s) {
printf("请输入学生学号:");
scanf("%s", s->id);
printf("请输入学生姓名:");
scanf("%s", s->name);
printf("请输入学生性别:");
scanf("%s", s->gender);
printf("请输入学生语文成绩:");
scanf("%d", &(s->chinese));
printf("请输入学生数学成绩:");
scanf("%d", &(s->math));
printf("请输入学生英语成绩:");
scanf("%d", &(s->english));
s->total = s->chinese + s->math + s->english;
s->average = (float)s->total / 3.0;
}
// 按总分排序
void sort_students(student *students) {
student temp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].total < students[j].total) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
// 输出所有学生信息
void print_students(student *students) {
printf("学号\t姓名\t性别\t语文\t数学\t英语\t总分\t平均分\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].gender, students[i].chinese, students[i].math, students[i].english, students[i].total, students[i].average);
}
}
// 按学号查找学生信息
void search_student(student *students, char *id) {
for (int i = 0; i < n; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号\t姓名\t性别\t语文\t数学\t英语\t总分\t平均分\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].gender, students[i].chinese, students[i].math, students[i].english, students[i].total, students[i].average);
return;
}
}
printf("未找到学号为%s的学生信息!\n", id);
}
// 插入学生信息
void insert_student(student *students) {
int pos;
char id[20];
printf("请输入要插入的位置(从1开始编号):");
scanf("%d", &pos);
if (pos < 1 || pos > n + 1) {
printf("无效的位置,请重新输入!\n");
return;
}
printf("请输入学生学号:");
scanf("%s", id);
for (int i = n - 1; i >= pos - 1; i--) {
students[i + 1] = students[i];
}
create_student(&students[pos - 1]);
n++;
}
// 删除学生信息
void delete_student(student *students, char *id) {
int pos = -1;
for (int i = 0; i < n; i++) {
if (strcmp(students[i].id, id) == 0) {
pos = i;
break;
}
}
if (pos == -1) {
printf("未找到学号为%s的学生信息!\n", id);
return;
}
for (int i = pos; i < n - 1; i++) {
students[i] = students[i + 1];
}
n--;
printf("学号为%s的学生信息已删除!\n", id);
}
// 保存学生信息到文件
void save_students(student *students) {
FILE *fp;
fp = fopen("student_grad.txt", "w");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %s %d %d %d %d %.2f\n", students[i].id, students[i].name, students[i].gender, students[i].chinese, students[i].math, students[i].english, students[i].total, students[i].average);
}
fclose(fp);
printf("学生信息已保存到文件student_grad.txt中!\n");
}
// 从文件中加载学生信息
void load_students(student *students) {
FILE *fp;
fp = fopen("student_grad.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
char line[100];
while (fgets(line, 100, fp) != NULL) {
sscanf(line, "%s %s %s %d %d %d %d %f", students[n].id, students[n].name, students[n].gender, &(students[n].chinese), &(students[n].math), &(students[n].english), &(students[n].total), &(students[n].average));
n++;
}
fclose(fp);
printf("已从文件student_grad.txt中加载%d个学生信息!\n", n);
}
```