c语言学生管理系统用链表
时间: 2023-12-24 12:03:31 浏览: 38
C语言学生管理系统主要是由链表实现的学生信息增、删、改、查等功能。链表是一种数据结构,它由一系列节点组成,每个节点包含两个部分:数据和指向下一个节点的指针。在学生管理系统中,每个节点存储一个学生的信息,如姓名、学号、成绩等。通过指针将这些节点连接起来,就形成了一个链表。链表的优点是可以动态地添加、删除节点,而不需要像数组一样预先分配固定大小的内存空间。如果你想要实现文件保存等功能,可以学习相关的文件操作知识,将链表中的数据保存到文件中,以便下次程序运行时可以读取这些数据。
相关问题
C语言学生宿舍管理系统链表
链表是一种常用的数据结构,可以用来实现学生宿舍管理系统。下面是一个简单的C语言实现,包括添加学生信息、删除学生信息、查询学生信息和显示学生信息等功能。
首先,定义一个结构体来存储学生信息:
```c
typedef struct student {
char name[20]; // 姓名
char id[10]; // 学号
char gender[5]; // 性别
char dorm[10]; // 宿舍号
struct student *next; // 下一个节点指针
} Student;
```
然后,定义一个函数来创建新的节点:
```c
Student* newNode() {
Student *node = (Student*)malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", node->name);
printf("请输入学生学号:");
scanf("%s", node->id);
printf("请输入学生性别(男/女):");
scanf("%s", node->gender);
printf("请输入学生宿舍号:");
scanf("%s", node->dorm);
node->next = NULL;
return node;
}
```
接下来,定义一个函数来添加新节点:
```c
void addNode(Student **head) {
Student *node = newNode();
if (*head == NULL) { // 如果链表为空
*head = node; // 直接将新节点作为头结点
} else {
Student *p = *head;
while (p->next != NULL) { // 找到链表的尾节点
p = p->next;
}
p->next = node; // 将新节点添加到尾部
}
printf("添加成功!\n");
}
```
然后,定义一个函数来删除节点:
```c
void deleteNode(Student **head, char *id) {
if (*head == NULL) { // 如果链表为空
printf("没有找到该学生!\n");
return;
}
Student *p = *head;
if (strcmp((*head)->id, id) == 0) { // 如果要删除的节点是头结点
*head = (*head)->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL && strcmp(p->next->id, id) != 0) { // 找到要删除的节点
p = p->next;
}
if (p->next == NULL) { // 如果没有找到
printf("没有找到该学生!\n");
return;
}
Student *q = p->next;
p->next = q->next; // 删除节点
free(q);
printf("删除成功!\n");
}
```
接下来,定义一个函数来查询节点:
```c
void searchNode(Student *head, char *id) {
if (head == NULL) { // 如果链表为空
printf("没有找到该学生!\n");
return;
}
Student *p = head;
while (p != NULL && strcmp(p->id, id) != 0) { // 找到要查询的节点
p = p->next;
}
if (p == NULL) { // 如果没有找到
printf("没有找到该学生!\n");
return;
}
printf("姓名:%s\t学号:%s\t性别:%s\t宿舍号:%s\n", p->name, p->id, p->gender, p->dorm);
}
```
最后,定义一个函数来显示所有节点:
```c
void display(Student *head) {
if (head == NULL) { // 如果链表为空
printf("链表为空!\n");
return;
}
Student *p = head;
while (p != NULL) {
printf("姓名:%s\t学号:%s\t性别:%s\t宿舍号:%s\n", p->name, p->id, p->gender, p->dorm);
p = p->next;
}
}
```
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
char name[20]; // 姓名
char id[10]; // 学号
char gender[5]; // 性别
char dorm[10]; // 宿舍号
struct student *next; // 下一个节点指针
} Student;
Student* newNode() {
Student *node = (Student*)malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", node->name);
printf("请输入学生学号:");
scanf("%s", node->id);
printf("请输入学生性别(男/女):");
scanf("%s", node->gender);
printf("请输入学生宿舍号:");
scanf("%s", node->dorm);
node->next = NULL;
return node;
}
void addNode(Student **head) {
Student *node = newNode();
if (*head == NULL) { // 如果链表为空
*head = node; // 直接将新节点作为头结点
} else {
Student *p = *head;
while (p->next != NULL) { // 找到链表的尾节点
p = p->next;
}
p->next = node; // 将新节点添加到尾部
}
printf("添加成功!\n");
}
void deleteNode(Student **head, char *id) {
if (*head == NULL) { // 如果链表为空
printf("没有找到该学生!\n");
return;
}
Student *p = *head;
if (strcmp((*head)->id, id) == 0) { // 如果要删除的节点是头结点
*head = (*head)->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL && strcmp(p->next->id, id) != 0) { // 找到要删除的节点
p = p->next;
}
if (p->next == NULL) { // 如果没有找到
printf("没有找到该学生!\n");
return;
}
Student *q = p->next;
p->next = q->next; // 删除节点
free(q);
printf("删除成功!\n");
}
void searchNode(Student *head, char *id) {
if (head == NULL) { // 如果链表为空
printf("没有找到该学生!\n");
return;
}
Student *p = head;
while (p != NULL && strcmp(p->id, id) != 0) { // 找到要查询的节点
p = p->next;
}
if (p == NULL) { // 如果没有找到
printf("没有找到该学生!\n");
return;
}
printf("姓名:%s\t学号:%s\t性别:%s\t宿舍号:%s\n", p->name, p->id, p->gender, p->dorm);
}
void display(Student *head) {
if (head == NULL) { // 如果链表为空
printf("链表为空!\n");
return;
}
Student *p = head;
while (p != NULL) {
printf("姓名:%s\t学号:%s\t性别:%s\t宿舍号:%s\n", p->name, p->id, p->gender, p->dorm);
p = p->next;
}
}
int main() {
Student *head = NULL;
int choice;
char id[10];
while (1) {
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 查询学生信息\n");
printf("4. 显示所有学生信息\n");
printf("5. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addNode(&head);
break;
case 2:
printf("请输入要删除的学生学号:");
scanf("%s", id);
deleteNode(&head, id);
break;
case 3:
printf("请输入要查询的学生学号:");
scanf("%s", id);
searchNode(head, id);
break;
case 4:
display(head);
break;
case 5:
exit(0);
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
c语言学生成绩管理系统用链表
以下是一个用链表实现的C语言学生成绩管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct Student {
int id;
char name[50];
int score_chinese;
int score_math;
int score_english;
int score_politics;
int total_score;
struct Student* next;
} Student;
// 创建学生节点
Student* createStudent(int id, char name[], int score_chinese, int score_math, int score_english, int score_politics) {
Student* student = (Student*)malloc(sizeof(Student));
student->id = id;
strcpy(student->name, name);
student->score_chinese = score_chinese;
student->score_math = score_math;
student->score_english = score_english;
student->score_politics = score_politics;
student->total_score = score_chinese + score_math + score_english + score_politics;
student->next = NULL;
return student;
}
// 插入学生节点
void insertStudent(Student** head, Student* student) {
if (*head == NULL) {
*head = student;
} else {
Student* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = student;
}
}
// 打印学生信息
void printStudent(Student* student) {
printf("学号:%d\n", student->id);
printf("姓名:%s\n", student->name);
printf("语文成绩:%d\n", student->score_chinese);
printf("数学成绩:%d\n", student->score_math);
printf("英语成绩:%d\n", student->score_english);
printf("政治成绩:%d\n", student->score_politics);
printf("总分:%d\n", student->total_score);
printf("\n");
}
// 遍历打印学生链表
void printStudentList(Student* head) {
Student* current = head;
while (current != NULL) {
printStudent(current);
current = current->next;
}
}
int main() {
Student* head = NULL;
// 添加学生节点
Student* student1 = createStudent(1, "张三", 80, 90, 85, 75);
insertStudent(&head, student1);
Student* student2 = createStudent(2, "李四", 70, 85, 90, 80);
insertStudent(&head, student2);
Student* student3 = createStudent(3, "王五", 90, 75, 80, 85);
insertStudent(&head, student3);
// 打印学生链表
printStudentList(head);
return 0;
}
```