帮我写个学生管理系统代码,用c语言写,要用到单链表,实现的功能包含按总分排名次
时间: 2024-05-07 07:16:55 浏览: 7
好的,我可以帮您编写一个学生管理系统,以下是代码示例:
```
#includestdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int id; // 学号
char name[20]; // 姓名
int math; // 数学成绩
int english; // 英语成绩
int total; // 总分
struct Student *next; // 指向下一节点的指针
};
typedef struct Student Student;
// 创建头节点
void createHead(Student **head) {
*head = (Student *)malloc(sizeof(Student));
(*head)->next = NULL;
}
// 添加学生信息
void addStudentInfo(Student *head) {
int id, math, english;
char name[20];
printf("请输入学号、姓名、数学成绩、英语成绩:\n");
scanf("%d %s %d %d", &id, name, &math, &english);
Student *p = (Student *)malloc(sizeof(Student));
p->id = id;
strcpy(p->name, name);
p->math = math;
p->english = english;
p->total = math + english;
p->next = NULL;
Student *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = p;
}
// 按总分排名
void sortStudents(Student *head) {
Student *p = head->next;
Student *q;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (p->total < q->total) {
Student temp = *p;
*p = *q;
*q = temp;
}
q = q->next;
}
p = p->next;
}
}
// 输出学生信息
void printStudents(Student *head) {
Student *p = head->next;
printf("学号\t姓名\t数学\t英语\t总分\n");
while (p != NULL) {
printf("%d\t%s\t%d\t%d\t%d\n", p->id, p->name, p->math, p->english, p->total);
p = p->next;
}
}
int main() {
Student *head;
createHead(&head);
int choice;
while (1) {
printf("\n1. 添加学生信息\n");
printf("2. 按总分排名\n");
printf("3. 输出学生信息\n");
printf("4. 退出程序\n");
printf("请输入选项:\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudentInfo(head);
break;
case 2:
sortStudents(head);
printf("按总分排序成功!\n");
break;
case 3:
printStudents(head);
break;
case 4:
return 0;
default:
printf("输入有误,请重新输入。\n");
break;
}
}
return 0;
}
```
上述代码中,我们定义了一个 `Student` 结构体,属性包括学号、姓名、数学成绩、英语成绩、总分以及一个指向下一节点的指针。我们使用单链表来存储学生信息。
在 `main` 函数中,我们首先创建了头节点,然后提供了四个用户选项,包括添加学生信息、按总分排名、输出学生信息和退出程序。
在 `addStudentInfo` 函数中,我们通过 `scanf` 函数获取用户输入的信息,然后动态分配内存来创建一个新节点,并将其添加到链表末尾。
在 `sortStudents` 函数中,我们使用冒泡排序来按总分排名,排名后的信息将以降序的形式存储在链表中。
在 `printStudents` 函数中,我们遍历整个链表以输出学生信息。
您可以通过选择相应的功能来操作学生管理系统,包括添加学生信息、按总分排名、输出学生信息和退出程序。
希望这份代码能够帮助您完成您的任务,如有任何疑问或需要进一步的帮助,请随时与我联系。