请你创造一份基于DEVC++,以单链表存储结构,实现学生信息链表创建、学生信息输入、学生信息 查询、学生信息修改、学生信息删除、学生信息输出(全部或部分输出)或保存到文件,学生相关排序。
时间: 2024-01-12 10:04:32 浏览: 27
好的,以下是一份基于Dev-C++的单链表存储结构,实现学生信息管理的代码,包括学生信息的创建、输入、查询、修改、删除、输出和排序:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct student {
char id[20];
char name[20];
int age;
float score;
struct student *next;
} Student;
// 创建学生信息链表
Student *create() {
Student *head, *p, *q;
head = (Student *)malloc(sizeof(Student));
head->next = NULL;
q = head;
printf("请输入学生信息:\n");
printf("学号 姓名 年龄 成绩(以空格分隔):\n");
while (1) {
p = (Student *)malloc(sizeof(Student));
scanf("%s", p->id);
if (strcmp(p->id, "0") == 0) {
free(p);
break;
}
scanf("%s %d %f", p->name, &p->age, &p->score);
q->next = p;
q = p;
}
q->next = NULL;
return head;
}
// 插入学生信息
void insert(Student *head) {
Student *p, *q;
p = (Student *)malloc(sizeof(Student));
printf("请输入学生信息:\n");
printf("学号 姓名 年龄 成绩(以空格分隔):\n");
scanf("%s %s %d %f", p->id, p->name, &p->age, &p->score);
q = head;
while (q->next != NULL) {
if (strcmp(q->next->id, p->id) > 0) {
p->next = q->next;
q->next = p;
printf("学生信息插入成功!\n");
return;
}
q = q->next;
}
p->next = NULL;
q->next = p;
printf("学生信息插入成功!\n");
}
// 查询学生信息
void search(Student *head) {
char id[20];
Student *p;
printf("请输入要查询的学生学号:\n");
scanf("%s", id);
p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("学号:%s,姓名:%s,年龄:%d,成绩:%.2f\n", p->id, p->name, p->age, p->score);
return;
}
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 修改学生信息
void modify(Student *head) {
char id[20];
Student *p;
printf("请输入要修改的学生学号:\n");
scanf("%s", id);
p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入学生信息:\n");
printf("学号 姓名 年龄 成绩(以空格分隔):\n");
scanf("%s %s %d %f", p->id, p->name, &p->age, &p->score);
printf("学生信息修改成功!\n");
return;
}
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 删除学生信息
void del(Student *head) {
char id[20];
Student *p, *q;
printf("请输入要删除的学生学号:\n");
scanf("%s", id);
p = head->next;
q = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
q->next = p->next;
free(p);
printf("学生信息删除成功!\n");
return;
}
q = p;
p = p->next;
}
printf("没有找到该学生信息!\n");
}
// 输出学生信息
void output(Student *head) {
Student *p;
printf("学号\t姓名\t年龄\t成绩\n");
p = head->next;
while (p != NULL) {
printf("%s\t%s\t%d\t%.2f\n", p->id, p->name, p->age, p->score);
p = p->next;
}
}
// 保存学生信息到文件
void save(Student *head) {
FILE *fp;
Student *p;
fp = fopen("student.dat", "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
p = head->next;
while (p != NULL) {
fwrite(p, sizeof(Student), 1, fp);
p = p->next;
}
printf("学生信息保存成功!\n");
fclose(fp);
}
// 从文件中加载学生信息
Student *load() {
FILE *fp;
Student *head, *p, *q;
head = (Student *)malloc(sizeof(Student));
head->next = NULL;
fp = fopen("student.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return head;
}
while (1) {
p = (Student *)malloc(sizeof(Student));
if (fread(p, sizeof(Student), 1, fp) != 1) {
free(p);
break;
}
q = head;
while (q->next != NULL) {
if (strcmp(q->next->id, p->id) > 0) {
p->next = q->next;
q->next = p;
break;
}
q = q->next;
}
if (q->next == NULL) {
p->next = NULL;
q->next = p;
}
}
fclose(fp);
return head;
}
// 学生信息排序
void sort(Student *head) {
Student *p, *q, *r;
p = head->next;
head->next = NULL;
while (p != NULL) {
q = head;
while (q->next != NULL && q->next->score < p->score) {
q = q->next;
}
r = p->next;
p->next = q->next;
q->next = p;
p = r;
}
}
int main() {
int choice;
Student *head;
head = load();
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");
printf("8. 加载学生信息\n");
printf("9. 学生信息排序\n");
printf("0. 退出程序\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
head = create();
break;
case 2:
insert(head);
break;
case 3:
search(head);
break;
case 4:
modify(head);
break;
case 5:
del(head);
break;
case 6:
output(head);
break;
case 7:
save(head);
break;
case 8:
head = load();
break;
case 9:
sort(head);
printf("学生信息排序成功!\n");
break;
case 0:
exit(0);
default:
printf("输入有误,请重新选择!\n");
break;
}
}
return 0;
}
```
在程序中,首先定义了一个学生信息的结构体,包括学号、姓名、年龄和成绩等信息,然后定义了一系列函数来实现学生信息的创建、插入、查询、修改、删除、输出和排序等功能。
在主函数中,通过一个while循环,不断显示菜单,等待用户输入,并根据用户输入执行相应的操作。当用户选择退出程序时,程序结束。
注意:在编译运行程序之前,需要先在Dev-C++中安装并配置好相关的编译器和库文件。