其实本来设计这个小学生考试系统的时候没想设计的那么复杂,但是经过我可爱的老师(嗯~ o(* ̄▽ ̄*)o!)的劝说下(劝说?!)还是一鼓作气好好做做吧!
首先我的小学生考试系统分为4个年级的考试模式,每个年级记得试题难度有所不同。
结合小学生目前所学内容:
一年级为100以内加减法
二年级为九九乘法表,另加500以内加减。
三年级多了一个除法,加减乘的数值也稍微变了一点。
四年级则包含了小数的加减法。
另外,最重要的一点,所有的加减乘除的运算都是计算机给随机出来的,这需要用到 rand()函数,不知道的盆友可以查一查,我也写了类似的文章,需要的话看看吧!~~
下面是我的主页面,按照要求操作
源代码:
********************************************************************
烟台大学 计算机与控制工程学院 殷会东
********************************************************************
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string>
#include <cstring>
using namespace std;
double answer[100];
void writeData(int ,int ,char ,int ,double );
void writeData(int ,double ,char,double ,double );
void one(int n );
void two(int n);
void three(int n);
void four(int n);
int m;
float zheng;
FILE *file;
int main()
{
int n,pan=1;
srand((unsigned)time(NULL));//使每一次的随机数不同
int a;
while(1)
{
system("cls");
if(pan==2)
break;
printf("**********************欢迎进入小学生考试系统!**************************\n");
printf("\n请选择您的您的年级:\n");
cout <<"\t\t\t\t 1-------一年级\n";
cout <<"\t\t\t\t 2-------二年级\n";
cout <<"\t\t\t\t 3-------三年级\n";
cout <<"\t\t\t\t 4-------四年级\n";
scanf("%d",&a);
printf("以下是小学生运算题,请输入题的数量:\n");
scanf("%d",&n);
switch(a)
{
case 1: one(n);break;
case 2: two(n);break;
case 3: three(n);break;
case 4: four(n);break;
}
printf("\n请选择:\n1-继续测试\n2-退出\n");
scanf("%d",&pan);
}
return 0;
}
void one(int n )
{
int a,b,c,i,d,p=0;
void result(int ,int );
for(i=0; i<n; i++)
{
char arr[4]={'+','-'};
void result(int ,int );
for(i=0; i<n; i++)
{
d=rand()%2;
a=rand()%(50+1);
do
{
b=rand()%(50+1);
}while(b<a);
printf("\n第%d题:\n",i+1);
printf("%d%c%d=",b,arr[d],a);
scanf("%d",&c);
if(arr[d]=='+')
answer[i]=a+b;
else
answer[i]=b-a;
if (answer[i]==c)
{ if(i!=n-1)
printf ("\n答案正确,请继续下一题\n");
else
{
printf ("\n答案正确,请继续下一题\n");
printf ("\n测试完毕!请看您的正确率\n");
}
p++;
}
else
{
printf("\n您的答案不正确,正确答案是:%.0lf \n",answer[i]);
writeData(1,b,arr[d],a,answer[i]);
}
}
result(n,p);
}
}
void two(int n) //二年级
{
char arr[3]={'+','-','*'}; //运算符号保存到数组中,目的为随机给出
int a,b,c;
int i,p=0,d;
void result(int ,int );
for(i=0; i<n; i++)
{
d=rand()%3;
if(d==2) //进行乘法
{
a=rand()%(10+1); //rand ()给出随机数
do
{
b=rand()%(10+1);
}while(b<a); //保证b>a,避免减法出现复数,此处不起作用,小编是复制的下边的,懒得改了!嘿嘿!
}
else
{
do
{
a=rand()%(500+1);
}while(a==0);
do
{
b=rand()%(1000+1);
}while(b<a); //保证b>a,避免减法出现复数
}
printf("\n第%d题:\n",i+1);
printf("%d%c%d=",b,arr[d],a);
scanf("%d",&c);
if(arr[d]=='+')
answer[i]=a+b;
else if(arr[d]=='-')
answer[i]=b-a;
else
answer[i]=a*b;
if (answer[i]==c)
{ if(i!=n-1)
printf ("\n答案正确,请继续下一题\n");
else
{
printf ("\n答案正确,请继续下一题\n");
printf ("\n测试完毕!请看您的正确率\n");
}
p++;
}
else
{
printf("\n您的答案不正确,正确答案是:%.0lf\n",answer[i]);
writeData(2,b,arr[d],a,answer[i]);
}
}
result(n,p);
}
void three(int n)
{
char arr[4]={'+','-','*','/'};
int a,b,c;
int i,p=0,d;
void result(int ,int );
for(i=0; i<n; i++)
{
d=rand()%4;
if(d==2)
{
a=rand()%(100+1);
do
{
b=rand()%(100+1);
}while(b<a);
}
else if(d==3)
{
do
{
a=rand()%(10+1);
}while(a==0);
do
{
b=rand()%(10+1)*a;
}while(b<a);
}
else
{
do
{
a=rand()%(500+1);
}while(a==0);
do
{
b=rand()%(1000+1);
}while(b<a);
}
printf("\n第%d题:\n",i+1);
printf("%d%c%d=",b,arr[d],a);
scanf("%d",&c);
if(arr[d]=='+')
answer[i]=a+b;
else if(arr[d]=='-')
answer[i]=b-a;
else if(arr[d]=='*')
answer[i]=a*b;
else
answer[i]=b/a;
if (answer[i]==c)
{ if(i!=n-1)
printf ("\n答案正确,请继续下一题\n");
else
{
printf ("\n答案正确,请继续下一题\n");
printf ("\n测试完毕!请看您的正确率\n");
}
p++;
}
else
{
printf("\n您的答案不正确,正确答案是:%.0lf\n",answer[i]);
writeData(3,b,arr[d],a,answer[i]);
}
}
result(n,p);
}
void result (int n,int d)
{
zheng=(double )d/n;//正确率
printf("\n\n你做对了 %d 道题\n正答率为: %.2f%%\n",d,zheng*100);
if(zheng*100<60)
printf("\n不及格!\n");
if(zheng*100==100)
printf("\n满分!!!\n");
}
void four (int n )
{
int i,d,p=0;
//char s[10],c[10];
double c;
double a,b;
void result(int ,int );
for(i=0; i<n; i++)
{
char arr[4]={'+','-'};
for(i=0; i<n; i++)
{
d=rand()%2;
a=((rand()%30)*1.0)/((rand()%50)*1.0); //给出小数
a=a*100;
a=(floor(a)*1.0)/100; //向上取整,避免出现很长的的小数部分
do
{
b=((rand()%(50+1))*1.0)/((rand()%(50+1))*1.0);
b=b*100;
b=(floor(b)*1.0)/100;
}while(b<a);
printf("\n第%d题(小数点后保留两位小数):\n",i+1);
printf("%.2lf%c%.2lf=",b,arr[d],a);
// scanf("%s",&c);
cin >>c;
if(arr[d]=='+')
{
answer[i]=a+b;
answer[i]=floor(answer[i]*100)/100;
// gcvt(answer[i],2,s);
}
else
{
answer[i]=b-a;
answer[i]=floor(answer[i]*100)/100;
// gcvt(answer[i],2,s);
}
//if (strcmp(s,c)==0)
if (answer[i]==c)
{ if(i!=n-1)
printf ("\n答案正确,请继续下一题\n");
else
{
printf ("\n答案正确,请继续下一题\n");
printf ("\n测试完毕!请看您的正确率\n");
}
p++;
}
else
{
printf("\n您的答案不正确,正确答案是:%.2lf \n",answer[i]);
writeData(4,b,arr[d],a,answer[i]);
}
}
result(n,p);
}
}
void writeData(int i,double b,char c,double a,double d)//写程序
{
//打开文件
file=fopen("account.txt","a");
if(file==NULL)
{
cout<<"文件打开失败"<<endl;
return ;
}
fprintf(file,"%i年级错误题目:%.2lf%c%.2lf=%0.2lf\n",i,b,c,a,d);
fclose(file);
// return 1;
}
void writeData(int i,int b,char c,int a,double d)//写程序
{
//打开文件
file=fopen("account.txt","a");
if(file==NULL)
{
cout<<"文件打开失败"<<endl;
return ;
}
fprintf(file,"%i年级错误题目:%d%c%d=%0.lf\n",i,b,c,a,d);
fclose(file);
// return 1;
}
<span style="color:#cc0000">有些部分我只是简单带过,个人建议自己把代码看懂后,自己打一遍,怎么说呢,编码学起来不是那麽容易的,只有自己去消化才能被吸收,</span>
<span style="color:#cc0000">当然如果有不懂得可以给小编留言,小编看到后第一时间为您解答</span>