首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

考试管理系统的分数老是算不出来(C语言)

2013-06-25 
考试管理系统的分数总是算不出来(C语言)void kaoshi(student s[],exam t[])//考试函数{int count,count1i

考试管理系统的分数总是算不出来(C语言)
void kaoshi(student s[],exam t[])                   //考试函数
{   int count,count1;
    int choice,i,j,f,k,grade=0;                //nono记录抽到题目的数量
    char ch[10];                                    //姓名储存
    char ans[100],txt[1000];                          //答案、题目抽取
    int a[5];                                       //抽取题目储存
    int xuehao,xuehaojudge=0;
FILE*fp;
    fp=fopen("D:\\学生.txt","rb");
if(fp==NULL)
{
printf("file cannot be opened");
exit(1);
}
count=0;
while(fread(s,sizeof(student),1,fp)==1)
count++;
fclose(fp);

do
{
menuInput3();
printf("请选择:\n");
scanf("%d",&choice);
switch(choice)
{   case 1:                                 //输入学号
    fp=fopen("D:\\学生.txt","rb");
    if(fp==NULL)
   {
printf("file cannot be opened");
exit(1);}
            printf("请输入学号");
            scanf("%d",&xuehao);
            xuehaojudge=0;
            for(i=0;i<count;i++)
             fread(s+i,sizeof(student),1,fp);
             for(i=0;i<count;i++)
 if(s[i].id==xuehao)break;            //判断学号相等
               if(i!=count)
   xuehaojudge=1;   
   if(xuehaojudge==1)
               {strcpy(ch,s[i].name);
   printf("您的姓名是:%s\n",ch);
               printf("请抽取题目\n");}
               else
               printf("您的学号不存在,请与老师联系\n");
   fclose(fp);getchar();getchar();
               break;

             case 2:                              //随机抽取试题
             fp=fopen("D:\\试题.txt","rb");


         if(fp==NULL)
         {
      printf("file cannot be opened");
      exit(1);
         }
         count1=0;
             while(fread(t,sizeof(exam),1,fp)==1)
         count1++;
         fclose(fp);
             nono=chouqu(a,count1);
 getchar();
 getchar();
             break;

             case 3:                               //开始考试
             getchar();
             //printf("%d\n",nono);
             fp=fopen("D:\\试题.txt","rb+");
         if(fp==NULL)
        {
     printf("file cannot be opened");
     exit(1);
        }
                for(i=0;i<5;i++)                   //试题输出
              {
                  j=a[i];

                  {for(k=0;k<count1;k++)
                    {f=0;
                        fread(t+k,sizeof(exam),1,fp);
                    { if(t[k].no==j)  
f=1; 
strcpy(txt,t[k].text); 
strcpy(ans,t[k].answer);
                      if(f==1)
  break;
                      }
                    }
                     printf("%s",txt);
                     printf("请输入答案:\n");
                     grade+=jifen(ans);             //加入总分

                    }if(i==nono-1)      break;


              }printf("您的分数是%d\n\n",grade);
printf("正确答案是%s",ans);
fclose(fp);
getchar();
             fp=fopen("D:\\学生.txt","rb+");
         if(fp==NULL)
        {
     printf("file cannot be opened");
     exit(1);
        }
        for(i=0;i<count;i++)                    //分数写入
             {if(s[i].id==xuehao) break;}
             s[i].score=grade;
            for(i=0;i<count;i++)
             fwrite(s+i,sizeof(student),1,fp);
        fclose(fp);
            break;

case 0:                                 //返回上级菜单
    break;
            }
        }while(choice);
   }








int jifen(char ans0[])                               //多选计分函数
{   int static sum=0;
int n,i,len;
                                               
char alter[100],alte[100];//ans0[100];                    

    //getchar();
    printf("请输入答案,以回车结尾。\n");

                                        //循环开始的清零
n=0;
gets(alter);
strcpy(alte,alter);

len=strlen(ans0);
for(i=0;i<len;i++)
{
if(alte[i]!=ans0[i])
      break;
}
nono=1;
printf("i=%d\n",i);
if  (i==len)
sum+=100/nono;
    return sum;
}
这是考试管理系统里面的两个函数,每次分数计算总是出错,哪位大神看看是哪里出错了。。。(nono是选择的试题数),谢谢了
C语言???编程
------解决方案--------------------


单步调试和设断点调试是程序员必须掌握的技能之一。

热点排行