课程设计题目

小学生数学测试系统设计

姓名

 

学号

 

专业班级

 

课程设计目的

1、培养学生综合运用所学的知识,通过上机实践,提高分析和解决问题的能力。

2、通过实践训练,提高学生在理论计算、结构设计、查阅设计资料、运用标准与规范编程能力。

课程设计环境

硬件:装有Windows操作系统的计算机

软件:Visual C++6.0

课程设计任务和要求

面向小学生随机选择两个整数形成四则运算算式要求学生解答,最后生成作答试卷保存到文本文件。

1、电脑随机出10道题,每题10分,程序结束时显示学生得分;

2、每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则给出正确答案;

3、对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;

4、总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”。

参考

文献

1) 刘欣亮,李敏 主编.C语言程序设计.第二版.北京:电子工业出版社,2018.

2)谭浩强主编.C程序设计学习辅导.第五版.北京:清华大学出版社,2017.

3)  张卫国,朱宁洪 主编.C语言程序设计实践教程.西安:西安电子科技大学出版社,2019.

时 间 进 度 安 排

序号

起止日期

工  作  内  容

1

5.11-5.15

学习结构体、结构体数组的知识,学习文件的概念、文件的打开、关闭以及各种读写操作的知识。

2

5.18-5.22

学生熟悉题目背景,查阅资料;学生进行功能模块设计、实现算法的程序设计。

3

5.25-5.29

编码、测试、综合调试程序、程序验收。

4

5.30-6.07

根据设计内容形成课程设计文档,撰写课程设计报告.

5

6.08

上交课程设计报告。

 

代码如下:

#include <stdio.h>
#include <stdlib.h> //生成随机数用
#include <time.h> //利用时间生成种子

int a, b, c; //两个整数和结果

void formula(); //随机生成1道题
int calculateScore(int a, int b, int c); //计算得分
void printScore(int score); //打分

int main() {
int n = 10; // 10道题
int i;
int score = 0; //设置学生初始得分为零

for (i = 0; i < n; i++) {
formula();
score += calculateScore(a, b, c);
}
printScore(score);

printf(“\nscore = %d\n”, score); //根据情况注释掉
return 0;

// formula();
}
void formula() {
int sign;

srand(time(NULL)); //生成种子
a = rand() % 10;
b = rand() % 10;
sign = rand() % 4;

printf(“%d “, a);
switch (sign) {
case 0:
c = a + b;
printf(“+”);
break;
case 1:
c = a – b;
printf(“-“);
break;
case 2:
c = a * b;
printf(“*”);
break;
case 3:
c = a / b;
printf(“/”);
break;
default:
break;
}
printf(” %d = ?\n”, b);
}
int calculateScore(int a, int b, int c) {
int i = 3, answer;

for (i = 0; i < 3; i++) {
scanf(“%d”, &answer);
if (answer == c)
break;
printf(“You are error!\n”);
}
switch (i) {
case 0:
return 10;
case 1:
return 7;
case 2:
return 5;
default:
return 0;
}
}
void printScore(int score) {
if (score >= 90) {
printf(“SMART\n”);
} else if (score >= 80) {
printf(“GOOD\n”);
} else if (score >= 70) {
printf(“OK\n”);
} else if (score >= 60) {
printf(“PASS\n”);
} else {
printf(“TRY AGAIN\n”);
}
}

 

 

 

目录

1、设计题目 2

2设计目的 2

3、问题描述 2

4需求分析 2

5功能介绍 3

6、运行环境 4

7、概要设计 4

8详细设计 9

9、调试分析 15

10、总结 23

附录:源程序清单 23

 

 

1、 设计题目

小学生数学测试系统设计

 

2、 设计目的

1、培养学生综合运用所学的知识,通过上机实践,提高分析和解决问题的能力。

2、通过实践训练,提高学生在理论计算、结构设计、查阅设计资料、运用标准与规范编程能力。

 

3、问题描述

本系统对加、减、乘、除测试以选择题、填空题和计算题的形式分别对用户进行测试,借此来进一步提高数学能力,节省传统测试的一系列不必要的开支和麻烦。

 

4需求分析

面向小学生随机选择两个整数形成四则运算算式要求学生解答,最后生成作答试卷保存到文本文件。

1、电脑随机出10道题,每题10分,程序结束时显示学生得分;

2、每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则给出正确答案;

3、对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;

4、总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”。

 

5功能介绍

1、出题:电脑随机出题。

2、答题:用户答题,每个用户有三次机会。如果三次都没有回答正确,则系统显示正确答案。

3、评分:系统根据用户的答题情况,自动对其打分,并根据其成绩将其归类。

 

 

6、运行环境

Microsoft VC++6.0及以上

 

7、概要设计

1、总体设计思路

【新建】建立一个新的题库,题为两位数以内加减法,并给出答案,十道题后结束,并给出评语。

【题库】建立题库,并给出答案。

【输入】每个学生有三次输入机会,并判断对错

【评分】根据评分细则,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分

【评语】将各题分数相加,总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”

【输出】输出评语和总成绩。

【保存】保存当前成绩到“试卷”文件中。

【退出】退出小学生数学测试系统设计系统。

2主函数

程序采用结构化,模块化设计。主函数是程序的入口,各模块相互独立,并且可以 分块调试,均由主函数控制调用。

3出题函数

主要完成对数字的随机抽取以及随机进行四则运算。

 

3、 计分检查函数

5、评判函数

  

6保存函数

保存当前成绩到“试卷”文件中。

FILE *fpt;

fprintf(fpt,”%d”,);   

fclose(fpt,char*format,char*arg-list);

 

8详细设计

1、预编译部分

#include <stdio.h>

#include <stdlib.h> //生成随机数用

#include <time.h>   //利用时间生成种子

 

4、 出题函数

随机出题,是试卷的题库。

void formula()

{

    int sign;

    srand(time(NULL)); //生成种子

    a = rand() % 50;

    b = rand() % 50;

    sign = rand() % 3;

    printf(“%d “, a);

    switch (sign)

{

case 0:

  c = a + b;

        printf(“+”);

fprintf(fpt,”%d+%d=?\n”,a,b);

        break;

    case 1:

        c = a – b;

        printf(“-“);

fprintf(fpt,”%d-%d=?\n”,a,b);

        break;

case 2:

        c = a * b;

printf(“*”);

fprintf(fpt,”%d*%d=?\n”,a,b);

        break;

    case 3:

        c = a / b;

        printf(“/”);

fprintf(fpt,”%d/%d=?\n”,a,b);

        break;

    default:

        break;

    }

    printf(” %d = ?\n”, b);

}

 

5、 计分检查函数

实现检查和打分的功能,模拟评卷人。

 

int calculateScore(int a, int b, int c)

{

    int i = 3, answer;

    for (i = 0; i < 3; i++)

{

     scanf(“%d”, &answer);

     if (answer == c)

 {

 fprintf(fpt,”%d\n”,c);

 break;

 }

if(answer!=c)

        printf(“You are error!\n”);

fprintf(fpt,”%d\n”,answer);

fprintf(fpt,”You are error!\n”);

    }

 if(i==3)

 {

 printf(“正确答案是%d\n”,c);

 fprintf(fpt,”正确答案是%d\n”,c);

 }

    switch (i)

{

    case 0:

        return 10;

    case 1:

        return 7;

 case 2:

        return 5;

    default:

        return 0;

    }

}

 

4、评判函数

根据所得的分数,选出优劣之分。

void printScore(int score)

{

    if (score >= 90)

{

        printf(“SMART\n”);

fprintf(fpt,”SMART”);

}

else if (score >= 80)

{

        printf(“GOOD\n”);

fprintf(fpt,”GOOD”);

    }

else if (score >= 70)

{

        printf(“OK\n”);

    fprintf(fpt,”OK”);

    }

else if (score >= 60)

{

        printf(“PASS\n”);

fprintf(fpt,”PASS”);

    }

else

{

        printf(“TRY AGAIN\n”);

fprintf(fpt,”TRY AGAIN”);

}

}

 

5、主函数

程序采用结构化,模块化设计。主函数是程序的入口,各模块相互独立,并且可以 分块调试,均由主函数控制调用。

int main()

{

    int n = 10; // 10道题

    int i;

    int score = 0; //设置学生初始得分为零

fpt = fopen(“试卷.txt”,”w”);

    for (i = 0; i < n; i++)

{

        formula();

        score += calculateScore(a, b, c);

}

    printScore(score);

    printf(“\nscore = %d\n”, score); //根据情况注释掉

    fprintf(fpt,”总成绩为%d”,score);

    fclose(fpt);

    return 0;

    // formula();

}

 

 

9、调试分析

以下为程序运行的界面

 

 

 

  

此时的程序答题有4次机会,且全部回答错误后,没有显示正确答案。故程序此时有问题。

 

 

 

此时答题机会只有一次,不符合要求,仍需调试。需要修改检查函数的部分参数。

 

 

  回答机会只有一次,且给出的答案也不对。

 

 

 

此时每次回答正确,均会显示正确答案,仍不符合要求。

 

 

 

此时虽会显示正确答案,但有4次机会。不符合要求。且不能保存。

 

  

此时回答错误直接给出正确答案,没有给答题者改正的机会。但不能实现保存功能。因此还需要添加fprintf函数和文件指针。

 

 

此次调试解决了回答次数和正确答案显示的问题。但不能实现保存功能。

 

  

 

 

 

 

 

 

试卷可以自动保存在文本里。

 

 

 

 

 

  

  文本内容和程序执行完成后的内容一致,调试完成。

 

 

10、总结

C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的.地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。
   只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。在我们小组有解决不了的问题时,我们会主动查阅相关的资料,或向其他同学询问,这不仅丰富了我们的知识,还增进了我们同学之间的友谊。课时不注重对文件的运用,所以在这方面有较大的困难。我先将书本认认真真地看了一-遍,又做了一下课后习题来验证和增进自己的理解,终于,经过我们的不懈努力,我们小组的程序有了突破。

课程设计到此算是基本结束,在程序设计中 暴露出的我自身的问题却是非常明显。

首先,基础掌握不牢固。许多基本语法尚没有熟练掌握,在设计过程中仍需 请教其它同学,更要重新研究课本,设计效率低。 其次,经典算法掌握不牢。在编写程序的时候常常会停下来求助于书本,查 看各种算法。 再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和 阅览,自己也易于出错。比如说少加分号,大括号,忘了先定义后使用的原则。 回顾这几天,我感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,

可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了 很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际 相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动 手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这 毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自 己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如 说结构体,指针,文件,函数…通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下。最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!

 

附录:源程序清单

#include <stdio.h>

 #include <stdlib.h> //生成随机数用

 #include <time.h>   //利用时间生成种子

 int a, b, c; //两个整数和结果

 void formula();                          //随机生成1道题

int calculateScore(int a, int b, int c); //计算得分

 void printScore(int score);              //打分

 FILE *fpt;

 //主函数

int main()

 {

     int n = 10; // 10道题

     int i;

     int score = 0; //设置学生初始得分为零

  fpt = fopen(“试卷.txt”,”w”);

     for (i = 0; i < n; i++)

  {

         formula();

        score += calculateScore(a, b, c);

    }

     printScore(score);

     printf(“\nscore = %d\n”, score); //根据情况注释掉

     fprintf(fpt,”总成绩为%d”,score);

     fclose(fpt);

     return 0;

     // formula();

}

 

//出题函数

 void formula()

 {

     int sign;

     srand(time(NULL)); //生成种子

     a = rand() % 50;

     b = rand() % 50;

    sign = rand() % 3;

   printf(“%d “, a);

     switch (sign)

  {

     case 0:

         c = a + b;

         printf(“+”);

fprintf(fpt,”%d+%d=?\n”,a,b);

break;

     case 1:

         c = a – b;

         printf(“-“);

   fprintf(fpt,”%d-%d=?\n”,a,b);

         break;

     case 2:

        c = a * b;

         printf(“*”);

   fprintf(fpt,”%d*%d=?\n”,a,b);

         break;

     case 3:

        c = a / b;

        printf(“/”);

   fprintf(fpt,”%d/%d=?\n”,a,b);

         break;

     default:

         break;

    }

     printf(” %d = ?\n”, b);

 }

 

//计分检查函数

 int calculateScore(int a, int b, int c)

 {

     int i = 3, answer;

    for (i = 0; i < 3; i++)

  {

      scanf(“%d”, &answer);

     if (answer == c)

   {

    fprintf(fpt,”%d\n”,c);

   break;

  }

 if(answer!=c)

         printf(“You are error!\n”);

  fprintf(fpt,”%d\n”,answer);

  fprintf(fpt,”You are error!\n”);

     }

   if(i==3)

   {

   printf(“正确答案是%d\n”,c);

   fprintf(fpt,”正确答案是%d\n”,c);

   }

    switch (i)

  {

    case 0:

         return 10;

     case 1:

         return 7;

     case 2:

         return 5;

    default:

       return 0;

     }

}

 

//评判函数

 void printScore(int score)

 {

    if (score >= 90)

 {

        printf(“SMART\n”);

   fprintf(fpt,”SMART”);

  }

  else if (score >= 80)

  {

         printf(“GOOD\n”);

   fprintf(fpt,”GOOD”);

     }

 else if (score >= 70)

 {

         printf(“OK\n”);

      fprintf(fpt,”OK”);

    }

 else if (score >= 60)

  {

        printf(“PASS\n”);

   fprintf(fpt,”PASS”);

     }

  else

 {

       printf(“TRY AGAIN\n”);

   fprintf(fpt,”TRY AGAIN”);

 }

}

 

 

 

 

版权声明:本文为srs7665原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/srs7665/p/13041653.html