请用c语言结构体,数组或链表编写。学生信息包含:学号、姓名、3门考试成绩(英语、数学、计算机)。并将学生信息用文件保存,并可在电脑中直接查找并打开该文件。 请设计一个学生成绩管理系统,该系统包括如下功能: 1. 添加学生信息 2. 按学号排序 3. 插入 (输入一个学生的信息,假定表按学号有序); 4. 查找 (输入一个学生学号,输出其各科成绩); 5. 删除 (按输入的学号删除该学生); 6. 退出
时间: 2024-02-12 18:07:52 浏览: 67
以下是一个使用链表实现的学生成绩管理系统的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct student {
int id;
char name[20];
int score[3];
struct student *next;
} Student;
// 定义全局变量,指向链表头部
Student *head = NULL;
// 添加学生信息
void add_student() {
// 创建新的学生信息节点
Student *new_student = (Student *)malloc(sizeof(Student));
printf("请输入学生信息:\n");
printf("学号:");
scanf("%d", &new_student->id);
printf("姓名:");
scanf("%s", new_student->name);
printf("英语成绩:");
scanf("%d", &new_student->score[0]);
printf("数学成绩:");
scanf("%d", &new_student->score[1]);
printf("计算机成绩:");
scanf("%d", &new_student->score[2]);
new_student->next = NULL;
// 将新的学生信息节点插入到链表中
if (head == NULL || new_student->id < head->id) {
new_student->next = head;
head = new_student;
} else {
Student *current = head;
while (current->next != NULL && current->next->id <= new_student->id) {
current = current->next;
}
new_student->next = current->next;
current->next = new_student;
}
printf("添加学生信息成功!\n");
}
// 按学号排序
void sort_by_id() {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
Student *new_head = NULL;
while (head != NULL) {
Student *current = head;
head = head->next;
if (new_head == NULL || current->id < new_head->id) {
current->next = new_head;
new_head = current;
} else {
Student *new_current = new_head;
while (new_current->next != NULL && new_current->next->id <= current->id) {
new_current = new_current->next;
}
current->next = new_current->next;
new_current->next = current;
}
}
head = new_head;
printf("按学号排序成功!\n");
}
// 插入学生信息
void insert_student() {
Student *new_student = (Student *)malloc(sizeof(Student));
printf("请输入需要插入的学生信息:\n");
printf("学号:");
scanf("%d", &new_student->id);
printf("姓名:");
scanf("%s", new_student->name);
printf("英语成绩:");
scanf("%d", &new_student->score[0]);
printf("数学成绩:");
scanf("%d", &new_student->score[1]);
printf("计算机成绩:");
scanf("%d", &new_student->score[2]);
new_student->next = NULL;
if (head == NULL) {
head = new_student;
} else if (new_student->id < head->id) {
new_student->next = head;
head = new_student;
} else {
Student *current = head;
while (current->next != NULL && current->next->id <= new_student->id) {
current = current->next;
}
new_student->next = current->next;
current->next = new_student;
}
printf("插入学生信息成功!\n");
}
// 查找学生信息
void find_student() {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
int id;
printf("请输入需要查找的学生学号:");
scanf("%d", &id);
Student *current = head;
while (current != NULL) {
if (current->id == id) {
printf("学生学号:%d\n", current->id);
printf("学生姓名:%s\n", current->name);
printf("英语成绩:%d\n", current->score[0]);
printf("数学成绩:%d\n", current->score[1]);
printf("计算机成绩:%d\n", current->score[2]);
return;
}
current = current->next;
}
printf("未找到该学生信息!\n");
}
// 删除学生信息
void delete_student() {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
int id;
printf("请输入需要删除的学生学号:");
scanf("%d", &id);
if (head->id == id) {
Student *temp = head;
head = head->next;
free(temp);
printf("删除学生信息成功!\n");
return;
}
Student *current = head;
while (current->next != NULL) {
if (current->next->id == id) {
Student *temp = current->next;
current->next = current->next->next;
free(temp);
printf("删除学生信息成功!\n");
return;
}
current = current->next;
}
printf("未找到该学生信息!\n");
}
// 退出程序
void exit_program() {
Student *current = head;
while (current != NULL) {
Student *temp = current;
current = current->next;
free(temp);
}
exit(0);
}
// 主函数
int main() {
int option = 0;
while (1) {
printf("请选择操作:\n");
printf("1. 添加学生信息\n");
printf("2. 按学号排序\n");
printf("3. 插入学生信息\n");
printf("4. 查找学生信息\n");
printf("5. 删除学生信息\n");
printf("6. 退出程序\n");
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
sort_by_id();
break;
case 3:
insert_student();
break;
case 4:
find_student();
break;
case 5:
delete_student();
break;
case 6:
exit_program();
break;
default:
printf("请输入正确的操作序号!\n");
}
}
return 0;
}
```
使用该程序,可以实现学生成绩信息的添加、排序、插入、查找、删除等功能,并将学生信息保存在链表中。可以通过在程序中输入不同的操作序号来调用不同的功能函数。
阅读全文
相关推荐



















