用键盘输入实现小型学生信息管理程序(不用实现界面),功能包括基本的添加学生、删除、修改和查询学生信息等操作,要求用链表实现:用户可选择五个操作之一:添加学生、修改学生、删除学生、查询学生、显示学生链表的当前状态和退出程序,测试上述所有功能。
时间: 2024-03-15 09:47:23 浏览: 59
学生 信息 管理 用链表实现
好的,我理解了你的问题。以下是一个简单的使用链表实现学生信息管理程序的代码示例,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_LEN 20
#define MAX_GRADE 100
// 定义学生结构体
typedef struct student {
char name[NAME_LEN]; // 学生姓名
int id; // 学生学号
int grade; // 学生成绩
struct student *next; // 指向下一个学生的指针
} Student;
// 初始化链表头
Student *initList() {
Student *head = (Student*)malloc(sizeof(Student));
head->next = NULL;
return head;
}
// 添加学生
void addStudent(Student *head) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
Student *newStu = (Student*)malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", newStu->name);
printf("请输入学生学号:");
scanf("%d", &newStu->id);
printf("请输入学生成绩:");
scanf("%d", &newStu->grade);
newStu->next = NULL;
p->next = newStu;
printf("添加成功!\n");
}
// 删除学生
void deleteStudent(Student *head) {
int id;
printf("请输入要删除的学生学号:");
scanf("%d", &id);
Student *p = head->next;
Student *pre = head;
while (p != NULL && p->id != id) {
pre = p;
p = p->next;
}
if (p == NULL) {
printf("未找到该学生!\n");
} else {
pre->next = p->next;
free(p);
printf("删除成功!\n");
}
}
// 修改学生信息
void modifyStudent(Student *head) {
int id;
printf("请输入要修改的学生学号:");
scanf("%d", &id);
Student *p = head->next;
while (p != NULL && p->id != id) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生!\n");
} else {
printf("请输入学生姓名:");
scanf("%s", p->name);
printf("请输入学生学号:");
scanf("%d", &p->id);
printf("请输入学生成绩:");
scanf("%d", &p->grade);
printf("修改成功!\n");
}
}
// 查询学生信息
void queryStudent(Student *head) {
int id;
printf("请输入要查询的学生学号:");
scanf("%d", &id);
Student *p = head->next;
while (p != NULL && p->id != id) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生!\n");
} else {
printf("学生姓名:%s\n", p->name);
printf("学生学号:%d\n", p->id);
printf("学生成绩:%d\n", p->grade);
}
}
// 显示学生链表的当前状态
void showList(Student *head) {
Student *p = head->next;
if (p == NULL) {
printf("学生链表为空!\n");
} else {
printf("学生链表的当前状态:\n");
while (p != NULL) {
printf("学生姓名:%s\t学生学号:%d\t学生成绩:%d\n", p->name, p->id, p->grade);
p = p->next;
}
}
}
// 释放链表内存
void freeList(Student *head) {
Student *p = head->next;
while (p != NULL) {
Student *temp = p;
p = p->next;
free(temp);
}
free(head);
}
int main() {
Student *head = initList();
int choice;
do {
printf("请选择操作:\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 修改学生信息\n");
printf("4. 查询学生信息\n");
printf("5. 显示学生链表的当前状态\n");
printf("6. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(head);
break;
case 2:
deleteStudent(head);
break;
case 3:
modifyStudent(head);
break;
case 4:
queryStudent(head);
break;
case 5:
showList(head);
break;
case 6:
break;
default:
printf("输入有误,请重新选择!\n");
break;
}
} while (choice != 6);
freeList(head);
return 0;
}
```
希望这个代码示例能够帮助你实现你的需求。
阅读全文