能够帮我写一段c语言代码吗,题目是作为总复习的作业题,为了包含更多更完整的内容,也为了巩固大家的编程知识,以及动手解决实际问题的能力,使用C语言来设计一个简单的成绩管理系统。管理系统包含以下功能: 1.建立一张学生成绩表,每个学生包含 学号、姓名、性别、语文、数学、英语、总分、平均分。 2.将表中所有信息按总分降序排列。 3.按学号查找某学生所有成绩。 4.能够实现某学生的成绩插入和删除。 5.实现文件操作,程序退出时将学生成绩保存在studen_grad.txt文件中;程序开始时,能够从student_grad.txt文件中加载已有的学生成绩信息。 要求:所有功能均使用独立的函数来实现,使用结构体来存储学生信息,使用malloc动态创建,假设学生的总数是固定的(即你只需要开辟一次内存,使用一个整数n来存储学生数量,删除某学生的信息时只需要将后面所有的学生往前挪一位并将n-1)
时间: 2024-02-15 10:05:20 浏览: 71
当然可以!以下是一个简单的成绩管理系统的C语言代码,满足您的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体存储学生信息
struct student {
char id[20];
char name[20];
char sex[10];
int chinese;
int math;
int english;
int total;
float average;
};
// 全局变量,存储学生数量
int n = 0;
// 函数声明
void add_student(struct student *students);
void delete_student(struct student *students);
void search_student(struct student *students);
void sort_students(struct student *students);
void save_students(struct student *students);
void load_students(struct student *students);
int main() {
struct student *students = (struct student*)malloc(sizeof(struct student) * 100); // 假设最多有100名学生,动态分配内存
load_students(students); // 加载已有学生成绩信息
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(students);
break;
case 2:
delete_student(students);
break;
case 3:
search_student(students);
break;
case 4:
sort_students(students);
for(int i = 0; i < n; i++) {
printf("学号:%s,姓名:%s,性别:%s,语文:%d,数学:%d,英语:%d,总分:%d,平均分:%.2f\n",
students[i].id, students[i].name, students[i].sex, students[i].chinese, students[i].math, students[i].english, students[i].total, students[i].average);
}
break;
case 5:
save_students(students);
break;
case 6:
save_students(students); // 退出程序前保存学生成绩信息
printf("谢谢使用!\n");
return 0;
default:
printf("输入错误,请重新选择!\n");
break;
}
}
free(students); // 释放动态分配的内存
return 0;
}
// 添加学生信息
void add_student(struct student *students) {
printf("请输入学号:");
scanf("%s", students[n].id);
printf("请输入姓名:");
scanf("%s", students[n].name);
printf("请输入性别:");
scanf("%s", students[n].sex);
printf("请输入语文成绩:");
scanf("%d", &students[n].chinese);
printf("请输入数学成绩:");
scanf("%d", &students[n].math);
printf("请输入英语成绩:");
scanf("%d", &students[n].english);
// 计算总分和平均分
students[n].total = students[n].chinese + students[n].math + students[n].english;
students[n].average = (float)students[n].total / 3;
n++; // 学生数量加1
printf("添加成功!\n");
}
// 删除学生信息
void delete_student(struct student *students) {
printf("请输入要删除学生的学号:");
char id[20];
scanf("%s", id);
// 查找学号对应的学生索引
int index = -1;
for(int i = 0; i < n; i++) {
if(strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if(index == -1) {
printf("未找到该学生信息!\n");
return;
}
// 将后面的学生信息往前挪一位
for(int i = index; i < n - 1; i++) {
students[i] = students[i+1];
}
n--; // 学生数量减1
printf("删除成功!\n");
}
// 查找学生信息
void search_student(struct student *students) {
printf("请输入要查找学生的学号:");
char id[20];
scanf("%s", id);
// 查找学号对应的学生信息
int index = -1;
for(int i = 0; i < n; i++) {
if(strcmp(students[i].id, id) == 0) {
index = i;
break;
}
}
if(index == -1) {
printf("未找到该学生信息!\n");
return;
}
printf("学号:%s,姓名:%s,性别:%s,语文:%d,数学:%d,英语:%d,总分:%d,平均分:%.2f\n",
students[index].id, students[index].name, students[index].sex, students[index].chinese, students[index].math, students[index].english, students[index].total, students[index].average);
}
// 排序学生信息
void sort_students(struct student *students) {
for(int i = 0; i < n-1; i++) {
for(int j = i+1; j < n; j++) {
if(students[i].total < students[j].total) {
struct student tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
}
}
}
// 保存学生信息到文件
void save_students(struct student *students) {
FILE *fp = fopen("studen_grad.txt", "w");
if(fp == NULL) {
printf("文件打开失败!\n");
return;
}
for(int i = 0; i < n; i++) {
fprintf(fp, "%s %s %s %d %d %d\n", students[i].id, students[i].name, students[i].sex, students[i].chinese, students[i].math, students[i].english);
}
fclose(fp);
printf("保存成功!\n");
}
// 从文件中加载已有学生成绩信息
void load_students(struct student *students) {
FILE *fp = fopen("studen_grad.txt", "r");
if(fp == NULL) {
printf("文件打开失败!\n");
return;
}
while(!feof(fp)) {
fscanf(fp, "%s %s %s %d %d %d", students[n].id, students[n].name, students[n].sex, &students[n].chinese, &students[n].math, &students[n].english);
students[n].total = students[n].chinese + students[n].math + students[n].english;
students[n].average = (float)students[n].total / 3;
n++;
}
fclose(fp);
}
```
希望可以帮助到您!
阅读全文