小学生考试系统 课程设计

其实本来设计这个小学生考试系统的时候没想设计的那么复杂,但是经过我可爱的老师(嗯~ 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;
}
有些部分我只是简单带过,个人建议自己把代码看懂后,自己打一遍,怎么说呢,编码学起来不是那麽容易的,只有自己去消化才能被吸收,
当然如果有不懂得可以给小编留言,小编看到后第一时间为您解答

猜你喜欢

转载自blog.csdn.net/qq_41199502/article/details/81063529