小學生數學測試系統設計


課程設計題目

小學生數學測試系統設計

姓名

 

學號

 

專業班級

 

課程設計目的

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");

 }

}

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM