请用c语言实现一个学生信息管理系统并每一行写上注释实现功能(以函数方式实现):学生信息链表创建、学生信息输入、学生信息 查询、学生信息修改、学生信息删除、学生信息输出,学生成绩排序(用快速排序)
时间: 2023-12-20 21:07:38 浏览: 59
学生信息管理系统C语言
首先,我们需要定义一个学生信息的结构体,包含学号、姓名、年龄、性别、成绩等信息:
```c
typedef struct Student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
char sex[10]; // 性别
float score; // 成绩
struct Student *next; // 链表指针
} Student;
```
接下来,我们需要实现以下函数:
1. `void createList(Student **head)`:创建学生信息链表,传入头指针的地址。
2. `void insert(Student *head)`:插入学生信息。
3. `void search(Student *head)`:查询学生信息。
4. `void update(Student *head)`:修改学生信息。
5. `void delete(Student *head)`:删除学生信息。
6. `void display(Student *head)`:输出学生信息。
7. `void quickSort(Student *head)`:使用快速排序算法对学生信息按成绩排序。
下面是具体实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
char sex[10]; // 性别
float score; // 成绩
struct Student *next; // 链表指针
} Student;
// 创建学生信息链表
void createList(Student **head) {
*head = NULL;
}
// 插入学生信息
void insert(Student *head) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
Student *newNode = (Student *)malloc(sizeof(Student));
printf("请输入学号:");
scanf("%d", &newNode->id);
printf("请输入姓名:");
scanf("%s", newNode->name);
printf("请输入年龄:");
scanf("%d", &newNode->age);
printf("请输入性别:");
scanf("%s", newNode->sex);
printf("请输入成绩:");
scanf("%f", &newNode->score);
newNode->next = NULL;
p->next = newNode;
printf("插入成功!\n");
}
// 查询学生信息
void search(Student *head) {
int id;
printf("请输入要查询的学号:");
scanf("%d", &id);
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%s\n成绩:%.2f\n", p->id, p->name, p->age, p->sex, p->score);
return;
}
p = p->next;
}
printf("未找到该学生信息!\n");
}
// 修改学生信息
void update(Student *head) {
int id;
printf("请输入要修改的学号:");
scanf("%d", &id);
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
printf("请输入新的姓名:");
scanf("%s", p->name);
printf("请输入新的年龄:");
scanf("%d", &p->age);
printf("请输入新的性别:");
scanf("%s", p->sex);
printf("请输入新的成绩:");
scanf("%f", &p->score);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该学生信息!\n");
}
// 删除学生信息
void delete(Student *head) {
int id;
printf("请输入要删除的学号:");
scanf("%d", &id);
Student *p = head->next;
Student *prev = head;
while (p != NULL) {
if (p->id == id) {
prev->next = p->next;
free(p);
printf("删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到该学生信息!\n");
}
// 输出学生信息
void display(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("学号:%d\n姓名:%s\n年龄:%d\n性别:%s\n成绩:%.2f\n\n", p->id, p->name, p->age, p->sex, p->score);
p = p->next;
}
}
// 使用快速排序算法对学生信息按成绩排序
void quickSort(Student *head) {
if (head->next == NULL || head->next->next == NULL) {
return;
}
Student *p = head->next;
Student *left = (Student *)malloc(sizeof(Student));
Student *right = (Student *)malloc(sizeof(Student));
Student *leftTail = left;
Student *rightTail = right;
float pivot = p->score;
p = p->next;
while (p != NULL) {
if (p->score < pivot) {
leftTail->next = p;
leftTail = p;
} else {
rightTail->next = p;
rightTail = p;
}
p = p->next;
}
leftTail->next = NULL;
rightTail->next = NULL;
quickSort(left);
quickSort(right);
head->next = left->next;
leftTail->next = head->next;
rightTail->next = NULL;
leftTail->next->next = right->next;
free(left);
free(right);
}
int main() {
Student *head;
createList(&head);
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");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
insert(head);
break;
case 2:
search(head);
break;
case 3:
update(head);
break;
case 4:
delete(head);
break;
case 5:
display(head);
break;
case 6:
quickSort(head);
printf("排序完成!\n");
break;
case 7:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
阅读全文