读书人

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

发布时间: 2013-06-25 23:45:41 作者: rapoo

考试管理系统的分数总是算不出来(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语言???编程
------解决方案--------------------


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

读书人网 >C语言

热点推荐