C語言實(shí)現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、任務(wù)概述(文章僅供參考)
1、用文件保存試題庫(kù)。(每個(gè)試題包括題干、4個(gè)備選答案、標(biāo)準(zhǔn)答案)
2、試題錄入:可隨時(shí)增加試題到試題庫(kù)中
3、試題抽?。好看螐脑囶}庫(kù)中可以隨機(jī)抽出N道題(N由鍵盤輸入)
4、答題:用戶可實(shí)現(xiàn)輸入自己的答案
5、自動(dòng)判卷:系統(tǒng)可根據(jù)用戶答案與標(biāo)準(zhǔn)答案的對(duì)比實(shí)現(xiàn)判卷并給出成績(jī)。
二、功能展示
三、思維導(dǎo)圖
四、程序源碼
#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) ?? ?//把結(jié)構(gòu)體數(shù)組保存到文件"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)?? ?//從文件讀出結(jié)構(gòu)體數(shù)組的內(nèi)容,如成功讀取返回TRUE,否則返回ERROR {?? ?FILE *fp; ?? ?int i=0; ?? ?if((fp=fopen("qinhu","rb"))==NULL) return ERROR; ?? ?while(!feof(fp))// 用feof檢測(cè)文件是否結(jié)束,如果結(jié)束,返回正確 ?? ?{?? ?fread(&Testquestions[i],sizeof(TestNode),1,fp); ?? ??? ?i++; ?? ?} ? ? N=i-1; ?? ?return TRUE; } void InputTitle(int N)// 輸入N道試題數(shù)據(jù) { ?? ?int i;? ?? ?for(i=0;i<N;i++) ?? ?{ ? printf("請(qǐng)輸入第%d道題題目、題干和選項(xiàng):\n",i+1);//輸入結(jié)構(gòu)體元素內(nèi)容 ?? ??? ?printf("請(qǐng)輸入題目:"); ?? ? ? ?gets(Testquestions[i].subject); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)A:"); ?? ??? ?gets(Testquestions[i].option1); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)B:"); ?? ??? ?gets(Testquestions[i].option2); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)C:"); ?? ??? ?gets(Testquestions[i].option3); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)D:"); ?? ??? ?gets(Testquestions[i].option4); ?? ??? ?printf("請(qǐng)輸入答案:"); ?? ??? ?scanf("%c",&Testquestions[i].result);getchar(); ?? ??? ?system("cls"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//清屏 ?? ?} } Status InsertNodeA(int N) //輸入試題內(nèi)容 {?? ? ?? ?if(N>MAX) return ERROR; ?? ? ? ?printf("請(qǐng)輸入所要輸入題題目、題干和選項(xiàng):\n"); ?? ??? ?printf("請(qǐng)輸入題目:"); ?? ??? ?gets(Testquestions[N].subject); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)A:"); ?? ??? ?gets(Testquestions[N].option1); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)B:"); ?? ??? ?gets(Testquestions[N].option2); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)C:"); ?? ??? ?gets(Testquestions[N].option3); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)D:"); ?? ??? ?gets(Testquestions[N].option4); ?? ??? ?printf("請(qǐng)輸入答案:"); ?? ??? ?scanf("%c",&Testquestions[N].result);getchar(); ?? ??? ?N++; ? ? ? ? ? ? ?//N表示結(jié)構(gòu)體數(shù)組長(zhǎng)度,通過加&號(hào)使其值能返回 ?? ??? ?return TRUE; } Status InsertNodeB(int N) //插入試題內(nèi)容 {?? ? ?? ?if(N>MAX) return ERROR; ?? ? ? ?printf("請(qǐng)輸入所要插入題題目、題干和選項(xiàng):\n"); ?? ??? ?printf("請(qǐng)輸入題目:"); ?? ??? ?gets(Testquestions[N].subject); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)A:"); ?? ??? ?gets(Testquestions[N].option1); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)B:"); ?? ??? ?gets(Testquestions[N].option2); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)C:"); ?? ??? ?gets(Testquestions[N].option3); ?? ??? ?printf("請(qǐng)輸入選項(xiàng)D:"); ?? ??? ?gets(Testquestions[N].option4); ?? ??? ?printf("請(qǐng)輸入答案:"); ?? ??? ?scanf("%c",&Testquestions[N].result);getchar(); ?? ??? ?N++; ? ? ? ? ? ? ?//N表示結(jié)構(gòu)體數(shù)組長(zhǎng)度,通過加&號(hào)使其值能返回 ?? ??? ?return TRUE; } Status DeleteNode(int n)//刪除數(shù)組中的第n個(gè)元素? {?? ? ?? ?return TRUE; } ? ?? void printNode(TestNode p,int n)//輸出第n道題題目 {?? ? ?? ?printf("(%d) ",n); ?? ?printf("%s\n",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)//進(jìn)行答題 { ?? ?int i,score=0,Num; ?char r; ?? ?? ?? ?for(i=1;i<=sum;i++) ?? ?{?? ?Num= rand()%sum; ? ? ? ? ? ? ? ?//隨機(jī)函數(shù),以隨機(jī)選定何題進(jìn)行解答 ? ? ? ? printNode(Testquestions[Num],Num+1); ?? ? ? ?printf("\n請(qǐng)輸入答案:"); ?? ? ? ?scanf("%c",&r);getchar(); ?? ??? ?if( Match(Testquestions[Num],r)) //調(diào)用函數(shù)IsMatch判斷所輸入的答案與標(biāo)準(zhǔn)答案是否相同 ?? ??? ?{?? ?printf("\n答案正確!\n"); ?? ??? ??? ?score++; ?? ??? ?} ?? ? ? ?else printf("\n答案錯(cuò)誤!\n"); ?? ?} ?? ?printf("\n你的總成績(jī)?yōu)?%d\n",score); } void main() {?? ?char ?flag='N'; ?? ?int N=0,i, sum,score=0,chose; ? ?? ?printf("輸入想建立的題目文件題目數(shù):"); ?? ?scanf("%d",&N);getchar(); ?? ?InputTitle(N); ?? ?ReadNode(N); ?? ?while(flag=='N'||flag=='n') ?? ?{ printf("\t\t\t單項(xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)\n "); ? ? ? printf("\n"); ?? ? ?printf(" ?\t\t\t1 進(jìn)行答題并判卷\n"); ?? ? ?printf(" ?\t\t\t2 顯示整張?jiān)嚲韮?nèi)容\n"); ?? ? ?printf(" ?\t\t\t3 插入試題\n"); ?? ? ?printf(" ?\t\t\t4 保存到文件\n"); ?? ? ?printf(" ?\t\t\t5 退出系統(tǒng)\n"); ?? ? ?printf(" ?\t\t\t ?請(qǐng)選擇:"); ?? ? ?scanf("%d",&chose);getchar(); ?? ? ?switch(chose)? ?? ? ?{?? ? ?case 1:system("cls"); ?? ??? ?printf("請(qǐng)輸入你想要的答題數(shù)目:"); ?? ??? ? ? 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("你將退出系統(tǒng)(Y or N)?"); ?? ??? ? ? scanf("%c",&flag);getchar(); ?? ??? ? ? if(flag=='Y'||flag=='y') exit(0); ?? ??? ? ? system("cls");break; ?? ? ?default:printf("請(qǐng)輸入正確選擇!\n"); ?? ? ?} ?? ?} }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Cocos2d-x學(xué)習(xí)筆記之Hello World源碼分析
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之Hello World源碼分析,接上一篇內(nèi)容,本文著重分析源碼文件,需要的朋友可以參考下2014-09-09C++ Qt開發(fā)之ComboBox下拉組合框組件用法詳解
Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中,ComboBox(組合框)是一種常用的用戶界面控件,它提供了一個(gè)下拉列表,允許用戶從預(yù)定義的選項(xiàng)中選擇一個(gè),本文給大家介紹QComboBox類的一些常用方法,需要的朋友可以參考下2023-12-12C++ OpenCV單峰三角閾值法Thresh_Unimodal詳解
本文主要介紹了適合當(dāng)圖像的直方圖具有明顯單峰特征時(shí)使用,結(jié)合了三角法的原理而設(shè)計(jì)的圖像分割方法,感興趣的小伙伴可以了解一下2021-12-12C語言菜鳥基礎(chǔ)教程之?dāng)?shù)據(jù)類型
在 C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個(gè)廣泛的系統(tǒng)。變量的類型決定了變量存儲(chǔ)占用的空間,以及如何解釋存儲(chǔ)的位模式。2017-10-10OpenCV霍夫變換(Hough Transform)直線檢測(cè)詳解
這篇文章主要為大家詳細(xì)介紹了OpenCV霍夫變換直線檢測(cè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12簡(jiǎn)單實(shí)現(xiàn)C語言2048游戲
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)C語言2048游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05C++實(shí)現(xiàn)LeetCode(144.二叉樹的先序遍歷)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(144.二叉樹的先序遍歷),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07