该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
,按成绩和姓名查找成绩信息,找不到,永远输出没有找到,怎么回事,有的也找不到啊就那两个方法
#include
#include
#include
//单链表的存储结构
typedef struct LNode/*结构体是一种构造数据类型,可以由若干个成员组成*/
{
char name[20]; //姓名
char ID[30]; //学号
char sex; //性别
int c; //c语言成绩
int math; //数学成绩
int eng; //英语成绩
float average; //平均分
int sum; //总分
struct LNode *next;
}*LinkLinst;
//创建链表,输入学生信息,后插法
void inputStudent(LinkLinst &L,int n) //放入n个学生的信息
{
L=new LNode; //建立头结点
L->next=NULL;
LinkLinst p;
LinkLinst r;
r=L; //尾指针指向头指针
for(int i=1;i<=n;i++)
{ p=(LinkLinst)malloc(sizeof(LNode)); //动态分配空间,存储学生信息
printf("请输入学生的姓名:");scanf("%s",&p->name);getchar();
printf("请输入学生的学号:");scanf("%s",&p->ID);getchar();
printf("请输入学生的性别:");scanf("%c",&p->sex);getchar(); //字符的输入函数
printf("请输入学生的数学分数:");scanf("%d",&p->math);
printf("请输入学生的c语言分数:");scanf("%d",&p->c);
printf("请输入学生的英语分数:");scanf("%d",&p->eng);
p->sum=p->c+p->eng+p->math ;
printf("学生的总分是:%d\n",p->sum);
p->average=p->sum/3.0;
printf("学生的平均分是:%.2lf\n",p->average);
p->next=NULL;
r->next=p;
r=p;
}
}
//学生信息数目/链表的长度
int length(LinkLinst &L)
{
int len=0;
LinkLinst p;
p=L->next; //指向首元结点
while(p)
{
len++;
p=p->next;
//指向最后一个结点
}
return len;
}
//在表尾插入m个学生信息
void add(LinkLinst &L,int len,int m)
{
LinkLinst p;
p=L; //指向头结点
for(int j=1;j<=len;j++)
{
p=p->next;
}
for(int i=1;i<=m;i++)
{ LinkLinst w=(LinkLinst)malloc(sizeof(LNode)); //动态分配空间,存储学生信息
printf("请输入学生的姓名:");scanf("%s",&w->name);getchar();
printf("请输入学生的学号:");scanf("%s",&w->ID);getchar();
printf("请输入学生的性别:");scanf("%c",&w->sex);getchar(); //字符的输入函数
printf("请输入学生的数学分数:");scanf("%d",&w->math);
printf("请输入学生的c语言分数:");scanf("%d",&w->c);
printf("请输入学生的英语分数:");scanf("%d",&w->eng);
p->next=w;
w->next=NULL;
}
}
//按姓名查找学生成绩
void searchname(LinkLinst L) //只输出没有学生信息
{
LinkLinst p;
char ming[10];
printf("请输入学生的姓名:");
scanf("%s",&ming);
getchar();
p=L->next;
if(p&&p->name!=ming)
p=p->next;
if(p==NULL)
printf("没有该学生的成绩\n");
if(p->name==ming)
{
printf("学生姓名 学号 性别 数学分数 c语言分数 英语分数\n");
printf("\n %s %s %c %d %d %d \n",p->name,p->ID,p->sex,p->math,p->c,p->eng);
}
}
//按姓名查找学生成绩
void searchID(LinkLinst L)
{
LinkLinst p;
char id[10];
printf("输入学生的学号:");
scanf("%s",&id);
p=L->next;
if(p&&p->ID!=id)
p=p->next;
if(p==NULL)
printf("没有该学生的成绩\n");
if(p->ID==id)
{
printf("学生姓名 学号 性别 数学分数 c语言分数 英语分数\n");
printf("\n %s %s %c %d %d %d \n",p->name,p->ID,p->sex,p->math,p->c,p->eng);
}
}
void main()
{
int a; //项目序号
int n; //输入的学生信息数目
int m; //插入的学生信息数目
LinkLinst L;
while(1)
{
printf("欢迎进入学生成绩查询系统\n");
printf("\n请选择功能列表\n");
printf("\n1录入学生信息");
printf("\n2插入学生信息");
printf("\n3已经录入信息的学生人数");
printf("\n4按姓名查找学生成绩");
printf("\n5按学号查找学生成绩");
printf("\n");
printf("\n输入您要选择项目的序号:");
scanf("%d",&a);
switch(a)
{
case 1:
{
printf("您要输入的学生信息数目是?");
scanf("%d",&n);
inputStudent(L,n);
}break;
case 2:
{
printf("您要插入的学生信息数目是?");
scanf("%d",&m);
int l=length(L);
add(L,l,m);
}
break;
case 3:
{
printf("学生人数是:%d\n",length(L));
}break;
case 4:
searchname(L);
break;
case 5:
searchID(L);
}
}
}