c语言编写链表结构的学籍管理系统,学生学籍库包括:学号、姓名、性别、出生年月、第二学期大学英语和数据结构的成绩。系统菜单(即先输出提示信息序号1、2、3…,分别实现什么功能,输入序号后,调用相应的功能函数)。学生信息录入功能。学生信息删除功能。显示学生信息。学生信息查找。依据总分成绩对学生信息进行排序。
时间: 2024-03-12 08:49:15 浏览: 73
c语言:学生学籍信息管理系统(链表类)
5星 · 资源好评率100%
好的,我可以为您解答这个问题。以下是一个简单的C语言链表结构的学籍管理系统代码示例,实现了您所提到的菜单功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char id[20];
char name[20];
char gender[5];
char birth[20];
float english;
float data_structure;
float total_score;
struct student *next;
} Student;
// 全局变量,指向头节点
Student *head = NULL;
// 函数声明
void add_student();
void delete_student();
void display_student();
void search_student();
void sort_student();
int main() {
int choice;
while (1) {
// 输出菜单
printf("\n学籍管理系统\n");
printf("1. 学生信息录入\n");
printf("2. 学生信息删除\n");
printf("3. 显示学生信息\n");
printf("4. 学生信息查找\n");
printf("5. 按总分排序\n");
printf("0. 退出系统\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("感谢使用学籍管理系统!\n");
exit(0);
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
display_student();
break;
case 4:
search_student();
break;
case 5:
sort_student();
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
// 添加学生信息
void add_student() {
// 创建新节点
Student *new_student = (Student *)malloc(sizeof(Student));
// 输入学生信息
printf("\n请输入学生学号:");
scanf("%s", new_student->id);
printf("请输入学生姓名:");
scanf("%s", new_student->name);
printf("请输入学生性别:");
scanf("%s", new_student->gender);
printf("请输入学生出生日期:");
scanf("%s", new_student->birth);
printf("请输入学生第二学期大学英语成绩:");
scanf("%f", &new_student->english);
printf("请输入学生第二学期数据结构成绩:");
scanf("%f", &new_student->data_structure);
new_student->total_score = new_student->english + new_student->data_structure;
// 插入链表
if (head == NULL) {
head = new_student;
new_student->next = NULL;
} else {
Student *tmp = head;
while (tmp->next != NULL) {
tmp = tmp->next;
}
tmp->next = new_student;
new_student->next = NULL;
}
printf("学生信息添加成功!\n");
}
// 删除学生信息
void delete_student() {
if (head == NULL) {
printf("学生信息为空,无法删除!\n");
return;
}
char id[20];
printf("\n请输入要删除的学生学号:");
scanf("%s", id);
Student *tmp = head;
if (strcmp(tmp->id, id) == 0) {
head = tmp->next;
free(tmp);
printf("学生信息删除成功!\n");
return;
}
while (tmp->next != NULL) {
if (strcmp(tmp->next->id, id) == 0) {
Student *delete_node = tmp->next;
tmp->next = delete_node->next;
free(delete_node);
printf("学生信息删除成功!\n");
return;
}
tmp = tmp->next;
}
printf("未找到该学生信息!\n");
}
// 显示学生信息
void display_student() {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
Student *tmp = head;
printf("\n学号\t姓名\t性别\t出生日期\t大学英语\t数据结构\t总分\n");
while (tmp != NULL) {
printf("%s\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n", tmp->id, tmp->name,
tmp->gender, tmp->birth, tmp->english, tmp->data_structure, tmp->total_score);
tmp = tmp->next;
}
}
// 查找学生信息
void search_student() {
if (head == NULL) {
printf("学生信息为空!\n");
return;
}
char id[20];
printf("\n请输入要查找的学生学号:");
scanf("%s", id);
Student *tmp = head;
while (tmp != NULL) {
if (strcmp(tmp->id, id) == 0) {
printf("学号\t姓名\t性别\t出生日期\t大学英语\t数据结构\t总分\n");
printf("%s\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n", tmp->id, tmp->name,
tmp->gender, tmp->birth, tmp->english, tmp->data_structure, tmp->total_score);
return;
}
tmp = tmp->next;
}
printf("未找到该学生信息!\n");
}
// 按总分排序
void sort_student() {
if (head == NULL) {
printf("学生信息为空,无法排序!\n");
return;
}
Student *tmp1, *tmp2;
float score;
for (tmp1 = head; tmp1 != NULL; tmp1 = tmp1->next) {
for (tmp2 = tmp1->next; tmp2 != NULL; tmp2 = tmp2->next) {
if (tmp1->total_score < tmp2->total_score) {
score = tmp1->total_score;
tmp1->total_score = tmp2->total_score;
tmp2->total_score = score;
score = tmp1->english;
tmp1->english = tmp2->english;
tmp2->english = score;
score = tmp1->data_structure;
tmp1->data_structure = tmp2->data_structure;
tmp2->data_structure = score;
char str[20];
strcpy(str, tmp1->id);
strcpy(tmp1->id, tmp2->id);
strcpy(tmp2->id, str);
strcpy(str, tmp1->name);
strcpy(tmp1->name, tmp2->name);
strcpy(tmp2->name, str);
strcpy(str, tmp1->gender);
strcpy(tmp1->gender, tmp2->gender);
strcpy(tmp2->gender, str);
strcpy(str, tmp1->birth);
strcpy(tmp1->birth, tmp2->birth);
strcpy(tmp2->birth, str);
}
}
}
printf("学生信息排序成功!\n");
}
```
注意,在菜单选择中,如果输入的不是数字,则会出现死循环,需要加入输入错误的处理。此外,该代码只实现了简单的链表结构,还有很多细节需要考虑,例如输入的数据格式、内存泄漏等。
阅读全文