首頁 > 軟體

C語言實現選擇題標準化考試系統

2022-06-02 14:05:30

本文範例為大家分享了C語言實現選擇題標準化考試系統的具體程式碼,供大家參考,具體內容如下

一、任務概述(文章僅供參考)

1、用檔案儲存試題庫。(每個試題包括題幹、4個備選答案、標準答案)
2、試題錄入:可隨時增加試題到試題庫中
3、試題抽取:每次從試題庫中可以隨機抽出N道題(N由鍵盤輸入)
4、答題:使用者可實現輸入自己的答案
5、自動判卷:系統可根據使用者答案與標準答案的對比實現判卷並給出成績。

二、功能展示

三、思維導圖

四、程式原始碼

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define TRUE 1
#define ERROR 0
#define MAX  30
typedef int Status;

typedef struct{
    char option1[30],option2[30],option3[30],option4[30],subject[150];
    char result;
}TestNode;
TestNode Testquestions[MAX];

Status SaveNode(int N)     //把結構體陣列儲存到檔案"qinhu"中,如成功儲存返回TRUE,否則返回ERROR

{    int i;
    FILE *fp;
    if((fp=fopen("qinhu","wb"))==NULL) return ERROR;
    for(i=0;i<N;i++)
        fwrite(&Testquestions[i],sizeof(TestNode),1,fp);
    fclose(fp);
    return TRUE;
}

Status ReadNode(int N)    //從檔案讀出結構體陣列的內容,如成功讀取返回TRUE,否則返回ERROR

{    FILE *fp;
    int i=0;
    if((fp=fopen("qinhu","rb"))==NULL) return ERROR;
    while(!feof(fp))// 用feof檢測檔案是否結束,如果結束,返回正確
    {    fread(&Testquestions[i],sizeof(TestNode),1,fp);
        i++;
    }
    N=i-1;
    return TRUE;
}


void InputTitle(int N)// 輸入N道試題資料
{
    int i; 
    for(i=0;i<N;i++)
    {   printf("請輸入第%d道題題目、題乾和選項:n",i+1);//輸入結構體元素內容
        printf("請輸入題目:");
        gets(Testquestions[i].subject);
        printf("請輸入選項A:");
        gets(Testquestions[i].option1);
        printf("請輸入選項B:");
        gets(Testquestions[i].option2);
        printf("請輸入選項C:");
        gets(Testquestions[i].option3);
        printf("請輸入選項D:");
        gets(Testquestions[i].option4);
        printf("請輸入答案:");
        scanf("%c",&Testquestions[i].result);getchar();
        system("cls");                                    //清屏
    }
}

Status InsertNodeA(int N) //輸入試題內容
{    
    if(N>MAX) return ERROR;
        printf("請輸入所要輸入題題目、題乾和選項:n");
        printf("請輸入題目:");
        gets(Testquestions[N].subject);
        printf("請輸入選項A:");
        gets(Testquestions[N].option1);
        printf("請輸入選項B:");
        gets(Testquestions[N].option2);
        printf("請輸入選項C:");
        gets(Testquestions[N].option3);
        printf("請輸入選項D:");
        gets(Testquestions[N].option4);
        printf("請輸入答案:");
        scanf("%c",&Testquestions[N].result);getchar();
        N++;              //N表示結構體陣列長度,通過加&號使其值能返回
        return TRUE;
}


Status InsertNodeB(int N) //插入試題內容
{    
    if(N>MAX) return ERROR;
        printf("請輸入所要插入題題目、題乾和選項:n");
        printf("請輸入題目:");
        gets(Testquestions[N].subject);
        printf("請輸入選項A:");
        gets(Testquestions[N].option1);
        printf("請輸入選項B:");
        gets(Testquestions[N].option2);
        printf("請輸入選項C:");
        gets(Testquestions[N].option3);
        printf("請輸入選項D:");
        gets(Testquestions[N].option4);
        printf("請輸入答案:");
        scanf("%c",&Testquestions[N].result);getchar();
        N++;              //N表示結構體陣列長度,通過加&號使其值能返回
        return TRUE;
}

Status DeleteNode(int n)//刪除陣列中的第n個元素 
{    
    return TRUE;
}
    
void printNode(TestNode p,int n)//輸出第n道題題目
{    
    printf("(%d) ",n);
    printf("%sn",p.subject);
    printf("  A %s  ",p.option1);
    printf("  B %s  n",p.option2);
    printf("  C %s  ",p.option3);
    printf("  D %s  ",p.option4);
}


Status  Match(TestNode p,char m)//判斷m是否為p題目的答案,若是返回TRUE,否則返回ERROR
{    
    if(m==p.result) return TRUE;
    else return ERROR;
}

void answer(int sum)//進行答題
{
  
 int i,score=0,Num;
 char r;
     
    for(i=1;i<=sum;i++)
    {    Num= rand()%sum;                //隨機函數,以隨機選定何題進行解答
        printNode(Testquestions[Num],Num+1);
        printf("n請輸入答案:");
        scanf("%c",&r);getchar();
        if( Match(Testquestions[Num],r)) //呼叫函數IsMatch判斷所輸入的答案與標準答案是否相同
        {    printf("n答案正確!n");
            score++;
        }
        else printf("n答案錯誤!n");
    }
    printf("n你的總成績為:%dn",score);
}

void main()
{    char  flag='N';
    int N=0,i, sum,score=0,chose;
 
    printf("輸入想建立的題目檔案題目數:");
    scanf("%d",&N);getchar();
    InputTitle(N);
    ReadNode(N);
    while(flag=='N'||flag=='n')
    { printf("ttt單項選擇題標準化考試系統n ");
      printf("n");
      printf("  ttt1 進行答題並判卷n");
      printf("  ttt2 顯示整張試卷內容n");
      printf("  ttt3 插入試題n");
      printf("  ttt4 儲存到檔案n");
      printf("  ttt5 退出系統n");
      printf("  ttt  請選擇:");
      scanf("%d",&chose);getchar();
      switch(chose) 
      {      case 1:system("cls");
        printf("請輸入你想要的答題數目:");
           scanf("%d",&sum);getchar();
           answer(sum);
           break;
       case 2:system("cls");
        for(i=1;i<=N;i++) 
        {      printNode(Testquestions[i-1],i);
               printf("n");
        }   
        break;
       case 3:system("cls");InsertNodeB(N);break;
       case 4:system("cls");
        if(SaveNode(N)) printf("儲存成功!n");
          else printf("儲存失敗!n");break;
       case 5:printf("你將退出系統(Y or N)?");
           scanf("%c",&flag);getchar();
           if(flag=='Y'||flag=='y') exit(0);
           system("cls");break;
      default:printf("請輸入正確選擇!n");
      }
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com