小学数学测试程序,主函数代码分析
//求大神教教怎么来写这个主函数,后面是几个功能函数。1、void welcome()//欢迎界面
{
printf("##################################################\n");
printf("##################################################\n");
printf("##################################################\n");
printf("\n");
printf(" 欢迎使用该测验系统! \n");
printf(" welcome to use the test system!\n");
printf("\n");
printf("##################################################\n");
printf("##################################################\n");
printf("##################################################\n");
}
2( 主菜单函数
void mainMenu(FILE *fp) //主菜单
{
int i;
printf("************************************************** \n");
printf(" 浏览菜单\n");
printf("************************************************** \n");
printf("------------------------------------------\n");
printf(" 1.输入个人信息\n" );
printf("------------------------------------------\n");
printf(" 2.开始测验\n" );
printf("------------------------------------------\n");
printf(" 3.查看测验结果\n");
printf("------------------------------------------\n");
printf(" 0.退出\n");
printf("------------------------------------------\n");
printf("请选择功能...\n");
scanf("%d",&i); //输入要选择的功能
while(i)
{
while (!(i>=0 && i<=3)) //当超出功能范围时,提示输入错误
{
printf("超出功能范围,请重新选择(0-3)...\n");
scanf("%d",&i);
}
switch (i) //语句选择执行功能
{
case 1:
input(fp); //调用输入学生信息函数
mainMenu(fp);
break;
case 2:
startTest(fp);//调用开始测验函数
mainMenu(fp);
break;
case 3:
showResult();//调用输出测验结果信息函数
mainMenu(fp);
case 0:
exit(0); //退出系统
break;
}
}
}
3( 测试前须知函数
void testNotice() //测试须知
{
printf("==============测试须知================\n");
printf("在开始测验前请保证已经输入你的姓名和年龄等信息\n");
printf("考试结束后就可以马上看到正确答案、得分等信息\n");
printf("祝你考试愉快~\n");
printf("======================================\n");
printf("本次测试信息:\n");
printf("*无时间限制\n");
printf("*测试范围:1~100之间的运算数进行加、减、乘或除中的某一
种运算\n");
printf("*题目数:10题\n");
printf("*题目类型:混合运算");
printf("\n准备好了吗?回车键进入考试\n");
getchar();
getchar();
}
4( 输入学生信息函数
void input(FILE *fp) //输入学生信息
{
struct Student stu;
printf("请输入个人信息:姓名 年龄\n");
printf("姓名:");
scanf("%s",&stu.name);
printf("年龄:");
scanf("%d",&stu.age);
printf("\n");
Sleep(1200);
system("cls");
//将学生信息等写入文件:
fp=fopen("用户测试结果信息.txt","a+");
if((fp=fopen("用户测试结果信息.txt","a+"))==NULL)
{
printf("不能正常打开文件");
exit(0);
}
fprintf(fp,"姓名:%s 年龄:%d\n",stu.name,stu.age);//将学生姓名,
年龄写入文件
fclose(fp);
}
5( 开始测验函数
void startTest(FILE *fp) //开始测验
{
struct Student stu;
int i,a,b,result;
char c;
struct Test t;
stu.rights=0;
srand((unsigned)time(NULL)); //初始化随机数,如果没有此语句,则每
次运行程序时的随机数是一样的
testNotice(); //在测试前显示测试须知内容
system("cls"); //清屏,一下开始测试
for(i=0;i<10;i++)
{
a = rand()%100+1;//产生随机数a,b
b = rand()%100+1;
switch(rand()%4)
{
case 0:
c='+';
t.trueAns[i]=a + b; //把正确答案存到trueAns[]数组中
sprintf(t.test[i],"%d+%d=%d",a,b,t.trueAns[i]); //把测验
的题目及标准答案存入数组test[][]中
break;
case 1:
c='-';
while(a-b<0)//保证两数相减大于0
{
a = rand()%100+1;
b = rand()%100+1;
}
t.trueAns[i]=a - b;
sprintf(t.test[i], "%d-%d=%d", a,b,t.trueAns[i]);
break;
case 2:
c='*';
t.trueAns[i]=a * b;
sprintf(t.test[i], "%d*%d=%d", a,b,t.trueAns[i]);
break;
case 3:
c='/';
b=rand()%10+1;//产生随机数b
while(b==0) //保证除数b不能为0
b=rand()%10+1;
a=b*int(rand()%10+1); // 保证a/b能除清
t.trueAns[i]=a / b;
sprintf(t.test[i], "%d/%d=%d", a,b,t.trueAns[i]);
break;
default:
printf("错误!");
}
printf("%d%c%d=\n",a,c,b);
printf("请输入计算结果:");
scanf("%d",&result);
stu.ans[i]=result;//把学生给出的结果存入数组ans[]中
if(stu.ans[i]==t.trueAns[i]) //统计学生答对的题数
{
stu.rights++;
}
}
stu.score=10*stu.rights;//计算学生总成绩
printf("\n你的最后得分为:%d\n",stu.score);
getTips(stu.score);//根据成绩给出得分
Sleep(2000);
system("cls"); //清屏
//将测试结果等信息写入文件:
fprintf(fp,"\n你本次练习统计如下:\n做对了%d题\n得
分:%d\n",stu.rights,stu.score);
fprintf(fp,"你的答案依次为:");
for(i=0;i<10;i++)
fprintf(fp,"%d ",stu.ans[i]); //将学生的答案写入文件
fprintf(fp,"\n本次测验题目及答案为:\n");
for(i=0;i<10;i++)
fprintf(fp,"%s\n",t.test[i]); //将测验题目写入文件
fclose(fp);
}
6( 显示学生测验结果信息函数
void showResult()//显示测试结果函数
{
printf("\n本次你的测验结果如下:\n");
FILE *fp;
fp=fopen("用户测试结果信息.txt","a+");
if((fp=fopen("用户测试结果信息.txt","a+"))==NULL)
{
printf("不能正常打开文件");
exit(0);
}
char ch;
ch=fgetc(fp);//文件开头字符
while(ch!=EOF)//当文件没有到尾时,一直循环
{
putchar(ch);//输出字符
ch=fgetc(fp);
}
fclose(fp);
}
7( 根据测试得分给出评价函数
void getTips(int score) //根据测试得分给出评价
{
printf("小贴士:");
if (score<30)
printf("做的太差了点吧,要加油啦~\n");
if (score>=30 && score<50)
printf("离及格还有段距离~多练练哦\n");
if (score>=50 && score<60)
printf("不会吧~差点就及格啦~气的话就努力~\n");
if (score>=60 && score<90)
printf("做的不错,继续努力~\n");
if (score>=90)
printf("做的太棒了~\n");
}