#include<iostream>
#include<iomanip>
using namespace std;
struct Student //创建结构体Student
{
int number; //学号
char name[20]; //姓名
float Chinese, Math, English; //成绩语数英
Student* next; //下一个节点
};
Student* CreateList() //创建链表
{
Student* head = NULL, * p; //head为头指针,p为当前节点指针
p = head = new Student; //开辟存储空间
do {
//输入第一个学生的学号、姓名、语数英成绩
cin >> p->number >> p->name >> p->Chinese >> p->Math >> p->English;
//若学号不存在,跳出循环
if (p->number == 0) break;
p->next = new Student; //为下一个节点开辟存储空间
p=p->next; //p指向下一个节点
} while (true);
p->next = NULL; //最后一个节点时,它的下一个节点为空
return head; //返回头指针
}
Student* Search(Student* head, int keynumber) //搜索函数,搜索某个学生
{
Student* p = head; //从头开始比对
while (p->next != NULL)
{
if (p->number == keynumber) return p; //找到该学生则返回指针p
p=p->next; //若未找到,进行下一次比对
}
return NULL; //全部比对完还未找到,返回空指针
}
void print(Student* p) //打印函数
{
if (p != NULL) //指针p不为空,即找到该学生,输出该学生的信息
{
cout << p->number << " " << p->name << " ";
cout << fixed << setprecision(1) << p->Chinese << " " << p->Math << " " << p->English << endl;
}
else //指针p为空,即找不到该学生,输出没有该学生
cout << "No such person" << endl;
}
int main()
{
Student* stu; //创建成员
stu = CreateList(); //调用链表函数
int keynumber; //需要搜索的学生
cin >> keynumber;
Student* p = Search(stu, keynumber); //调用搜索函数
print(p); //调用打印函数
return 0;
}