| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 446 人关注过本帖
标题:请大神看看那里有问题,为什么执行时查找学生信息,输出不正确呢?
只看楼主 加入收藏
阳光的安慰
Rank: 1
等 级:禁止访问
帖 子:12
专家分:0
注 册:2013-12-24
结帖率:20%
收藏
已结贴  问题点数:20 回复次数:7 
请大神看看那里有问题,为什么执行时查找学生信息,输出不正确呢?
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
# define SIZE 100
typedef struct{
char name[10];              //*学生姓名*//
char no[20];                 //*学号由20个字符组成*//
int score;                  //*学生成绩*//               
}Stu;                        //*元素类型*//
typedef struct{
Stu elem[100];
int Length;
int size;
}Mylist;
int init_list(Mylist&la)
{la.Length=0;
la.size=100;
return 1;}
int List_insert(Mylist &la,int i,Stu e)
{Stu *p,*q;
    if ((i<1) || (i>la.Length+1))
       return 0;
    p=&(la.elem[i-1]);
    q=&(la.elem[la.Length-1]);
    for (;q>=p;q--)
    {
        *(q+1)=*q;
    }
    *p=e;
    la.Length++;
    return 1;
}

int Find1(Mylist &la,char * name) /*查找并显示一个记录*/
{int i;
for (i=0;i<la.Length;i++)
{if (strcmp(la.elem[i].name,name)==0)
return i+1;}
return 0;}
int Find2(Mylist la,char * no) /*查找并显示一个记录*/
{int i;
for (i=0;i<la.Length;i++)
{if (strcmp(la.elem[i].no,no)==0)
return i+1;}
return 0;}

int Find3(Mylist la, int &score) /*查找并显示一个记录*/
{int i;
for (i=0;i<la.Length;i++)
{if (la.elem[i].score==score)
return i+1;}
return 0;}

//输出
void print(Stu e)
{printf("%s\t%s\t%d",e.no,e.name,e.score);}
void Output(Mylist &la)
{
int i;
for(i=0;i<la.Length;i++)
print(la.elem[i]);
}
void count(Mylist la)
{
int i,a=0,q=0,w=0,e=0,r=0,t=0,y=0; 

for(i=0;i<la.Length-1;i++)
{ a=la.elem[i].score/10; 

 switch(a)   
//对成绩分段 


 { case 10:q++;break; 
  case 9:w++;break; 
  case 8:e++;break; 
  case 7:r++;break;  
   case 6:t++;break;  
  default:y++;break;   
} 

 } 
printf("成绩为100有%d人\n",q); 
printf("成绩为90~99有%d人\n",w);  
printf("成绩为80~89有%d人\n",e); 
printf("成绩为70~79有%d人\n",r); 
printf("成绩为60~69有%d人\n",t);
printf("不及格的有%d人\n\n",y); 
}
void Max (Mylist la)
{int i;
int max;
max= la.elem[0].score;
for(i=0;i<=la.Length-1;i++)
{
if(max<la.elem[i].score)   max=la.elem[i].score;
printf("\n最高分:%d",max);
}
}
void Min(Mylist la)
{int i;
int min;
min=la.elem[0].score;
for(i=0;i<=la.Length-1;i++)
{
if(min>la.elem[i].score)  
  min=la.elem[i].score;
}
printf("\n 最低分:%d",min);
} 
//平均分
void Ave(Mylist la)
{int sum,aver;

 int i;
for(i=0;i<la.Length;i++)
{
   sum+=la.elem[i].score;
}

 aver=sum/(la.Length-1);
printf("%d",aver);
}
//输出

//统计学生成绩
void tongji(Mylist la)
{int choose1;
    printf("--------------------------------------\n");
    printf("|           查找学生信息       |\n");
    printf("|     1.... 查找最高分                |\n");
    printf("|     2.... 查找最低分      |\n");    
    printf("|     3.... 统计平均分       |\n");    
    printf("|     4.... 统计各分数段人数       |\n"); 
    printf("|     5.... 按任意键退出            |\n");
    printf("--------------------------------------");
    printf("请输入您要进行的操作:");
    scanf("%d",&choose1);
    switch(choose1)
    {case 1 :
            Max(la);                          
            break ;
        case 2 :
            Min(la);                           
            break ;
        case 3 :
           Ave(la);                        
            break ;   
        case 4 :
           count(la);                        
            break ;                          
        case 5:
            exit(0);}}



void main()
{int k;
char choose;
Stu stud;
Mylist L;
init_list(L);
while(1)
{printf("--------------------------------------\n");
printf("|            学生成绩管理系统        |\n");
printf("|     1.... 录入学生信息                 |\n");
printf("|     2.... 查找学生信息      |\n");        
printf("|     3.... 输出学生信息              |\n");    
printf("|     4.... 成绩统计             |\n");  
printf("|     5.... 按任意键退出            |\n");
printf("--------------------------------------");
printf("\n");    
printf("\n");    
printf("请输入您要进行的操作:");
fflush(stdin);
scanf("%c",&choose);
switch(choose)
{case '1' :
printf("输入学生学号,姓名,成绩(用空格隔开)\n");

 scanf("%s%s%d",stud.no,stud.name,&stud.score);

 List_insert (L,L.Length+1,stud);                           //录入学生信息
 break ;
case '2':

 printf("--------------------------------------\n");

 printf("|           查找学生信息       |\n");

 printf("|     1.... 按姓名查找                 |\n");

 printf("|     2.... 按学号查找      |\n");    

 printf("|     3.... 查找按成绩        |\n");      

 printf("|     4.... 按任意键退出            |\n");

 printf("--------------------------------------");

 printf("请输入您要进行的操作:");

 fflush(stdin);

 char choose1;

 scanf("%c",&choose1);

 switch(choose1)
    {case '1' :

    printf("请输入姓名:");
            scanf("%s",stud.name);
            k= Find1(L,stud.name);
            if(k==0)
              printf("此学生系统中没有这个名字\n");
            else
              printf("该学生的信息 :%s  %s  %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score);
            break;
        case'2':
         printf("请输入学号:");
            scanf("%s",stud.no);
            k= Find2(L,stud.no);
            if(k==0)
              printf("此学生系统中没有这个名字\n");
            else
              printf("该学生的信息 :%s  %s  %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score);
            break;
        case '3' :
          printf("输入你要查找的分数\n");
            scanf("%s",stud.score);
        k=Find3(L,stud.score);
                if(k==0)
                    printf("此学生系统中没有这个名字\n");
                else
             printf("该学生的信息 :%s  %s  %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score);
            break ;                                                  
        case '4':
            exit(0);}


 case'3':                            //输出学生信息
Output(L);
            break ;

 case'4':                              //成绩统计
 tongji(L);
   break;
case'5':

 exit(0);

}
}
}        
搜索更多相关主题的帖子: 信息 
2013-12-24 16:54
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:10 
你这问题太模糊了。是那一部分查找有问题?不是让人全篇都看吧。。。。。怎么全是学生管理系统。。。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-24 17:43
阳光的安慰
Rank: 1
等 级:禁止访问
帖 子:12
专家分:0
注 册:2013-12-24
收藏
得分:0 
回复 2楼 so_love
在执行查找操作的时候,输入一个姓名输出结果是需要的学生信息,和全部输入的信息,不知道这么说能明白么……能否帮忙指出错误?

我是王黑黑。来捣乱的~~~~(>_<)~~~~
2013-12-24 18:23
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
考虑一下你在输入的时候 有个\n  建议你将\n赋值成\0

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2013-12-24 18:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
以下是引用so_love在2013-12-24 17:43:08的发言:

怎么全是学生管理系统。。。

學期末了,平時不燒香,臨急抱佛腳。

授人以渔,不授人以鱼。
2013-12-24 18:30
阳光的安慰
Rank: 1
等 级:禁止访问
帖 子:12
专家分:0
注 册:2013-12-24
收藏
得分:0 
回复 4楼 so_love
我的程序输入的时候没有\n,而且可以查到要查的学生信息,只不过输出那个学生信息后另一行还会输出全部的学生信息。

我是王黑黑。来捣乱的~~~~(>_<)~~~~
2013-12-24 18:46
阳光的安慰
Rank: 1
等 级:禁止访问
帖 子:12
专家分:0
注 册:2013-12-24
收藏
得分:0 
回复 5楼 TonyDeng
不是啊,平时也有好好学习,只不过非计算机专业,所以课时少,所以学的比较渣!

我是王黑黑。来捣乱的~~~~(>_<)~~~~
2013-12-24 18:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
檢查print()函數調用了多少次以及每次輸入的參數是什麼?在printf()函數中設置檢查代碼。

授人以渔,不授人以鱼。
2013-12-24 19:09
快速回复:请大神看看那里有问题,为什么执行时查找学生信息,输出不正确呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041623 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved