【问题描述】设计并实现一个简单的学生成绩管理系统,学生成绩信息包括学号、姓名和成绩(成绩为整数)。用带头结点的单链表管理学生成绩表,每个学生的信息依次从键盘输入。根据功能要求设计相应的链表基本操作函数。具体功能要求如下: (1) 输入学生信息,按输入顺序建立一个带头结点的单链表,直到输入学号为0结束,以列表的形式输出链表的所有学生信息; (2) 输入一个学生的姓名,在链表中查找该学生信息。如果存在,显示该生的所有信息;如果不存在,显示信息“No Answer”。 【输入形式】输入若干行学生信息(每个学生的基本信息之间以空格分开),每行输入一个学生基本信息,输入学号0表示输入结束,然后输入学生学号。 【输出形式】根据输入的学生信息,以列表形式输出学生信息(每个学生的基本信息之间用空格分开)。根据输入的学号查询学生信息,如果有,则输出该学生的所有信息,以空格分开;否则输出No Answer 【样例输入1】 1101 Jhon 96 1102 Tomas 85 1103 Danny 78 0 Danny 【样例输出1】 1101 Jhon 96 1102 Tomas 85 1103 Danny 78 1103 Danny 78 【样例输入2】 1101 Jhon 96 1102 Tomas 85 1103 Danny 78 0 Sam 【样例输出2】 1101 Jhon 96 1102 Tomas 85 1103 Danny 78 No Answer使用c语言编译并使用strcmp函数
时间: 2023-05-13 11:06:27 浏览: 160
以下是一个简单的学生成绩管理系统的实现,使用带头结点的单链表来管理学生信息。代码中包含了输入学生信息、建立链表、输出链表信息、查找学生信息等基本操作函数。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int score; // 成绩
struct student *next; // 指向下一个学生的指针
} Student;
// 创建一个新的学生节点
Student *createStudent(int id, char *name, int score) {
Student *newStudent = (Student *)malloc(sizeof(Student));
newStudent->id = id;
strcpy(newStudent->name, name);
newStudent->score = score;
newStudent->next = NULL;
return newStudent;
}
// 在链表末尾添加一个学生节点
void addStudent(Student *head, Student *newStudent) {
Student *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newStudent;
}
// 根据学号查找学生信息
Student *findStudentById(Student *head, int id) {
Student *p = head->next;
while (p != NULL) {
if (p->id == id) {
return p;
}
p = p->next;
}
return NULL;
}
// 输入学生信息,建立链表
void inputStudents(Student *head) {
int id, score;
char name[20];
printf("请输入学生信息(学号 姓名 成绩),以0结束:\n");
while (1) {
scanf("%d", &id);
if (id == 0) {
break;
}
scanf("%s %d", name, &score);
Student *newStudent = createStudent(id, name, score);
addStudent(head, newStudent);
}
}
// 输出链表中所有学生信息
void outputStudents(Student *head) {
Student *p = head->next;
printf("学号\t姓名\t成绩\n");
while (p != NULL) {
printf("%d\t%s\t%d\n", p->id, p->name, p->score);
p = p->next;
}
}
// 主函数
int main() {
// 创建带头结点的单链表
Student *head = (Student *)malloc(sizeof(Student));
head->next = NULL;
// 输入学生信息,建立链表
inputStudents(head);
// 输出链表中所有学生信息
outputStudents(head);
// 根据学号查找学生信息
int id;
printf("请输入要查找的学生姓名:\n");
scanf("%s", name);
Student *p = findStudentById(head, id);
if (p != NULL) {
printf("%d\t%s\t%d\n", p->id, p->name, p->score);
} else {
printf("No Answer\n");
}
// 释放链表内存
Student *q = head;
while (q != NULL) {
p = q->next;
free(q);
q = p;
}
return 0;
}
```
注意:在输入学生信息时,每行输入一个学生基本信息,输入学号0表示输入结束。在查找学生信息时,输入学生的姓名,程序会根据学号来查找学生信息。如果找到了该学生,则输出该生的所有信息;否则输出"No Answer"。