C语言实现选择题标准化考试系统

本文实例为大家分享了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("%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)//进行答题
{
  
 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你的总成绩为:%d\n",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("\t\t\t单项选择题标准化考试系统\n ");
      printf("\n");
      printf("  \t\t\t1 进行答题并判卷\n");
      printf("  \t\t\t2 显示整张试卷内容\n");
      printf("  \t\t\t3 插入试题\n");
      printf("  \t\t\t4 保存到文件\n");
      printf("  \t\t\t5 退出系统\n");
      printf("  \t\t\t  请选择:");
      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");
      }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言项目小学生数学考试系统参考

    [项目3-小学生数学考试系统] 1.做一个小学生考试系统,功能包括: (1)利用随机数出10道加法题: (2)小学生用户答题给出每道题的答案: (3)对小学生的答题进行评判: (4)计算出小学生答题正确率. 2. 进一步改进,提高题目质量. 要求(1)百以内算术:运算数.结果都在100以内! (2)先随机产生运算符后,针对各个运算产生运算数保证下列要求:对加法,两数之和保证不大于100:对减法,被减数大于减数,且被减数不大于100:对乘法:两数之积不超过100:对除法:被除数大于除数,且被除数不

  • C语言实现小学生考试系统

    本文实例为大家分享了C语言实现小学生考试系统的具体代码,供大家参考,具体内容如下 问题及代码: /*烟台大学计算机学院 题目描述:做一个小学生考试系统,功能包括: (1)利用随机数出10道加法题: (2)小学生用户答题给出每道题的答案: (3)对小学生的答题进行评判: (4)计算出小学生答题正确率. 作者:景怡乐 完成时间:2016年12月29日 */ #include <stdio.h> #include <stdlib.h> #include <time.h> in

  • C语言实现选择题标准化考试系统

    本文实例为大家分享了C语言实现选择题标准化考试系统的具体代码,供大家参考,具体内容如下 一.任务概述(文章仅供参考) 1.用文件保存试题库.(每个试题包括题干.4个备选答案.标准答案)2.试题录入:可随时增加试题到试题库中3.试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)4.答题:用户可实现输入自己的答案5.自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩. 二.功能展示 三.思维导图 四.程序源码 #include <stdio.h> #include <st

  • Django框架实现在线考试系统的示例代码

    1.Django的简介 Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views),称为 MTV模式.它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 模型(Model),即数据存取层 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示. 视图(View),即业务逻辑层 存取模型及调取恰当模板的相

  • php实现在线考试系统【附源码】

    说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级! 效果图如下: 题库首页展示 试题在线测试 分数统计 通过该小项目目的是练习PHP基础知识,通过对数组操作实现考题信息存储加载,引入模板文件,实现考题数据的调用布局. 1.由于小项目未使用数据库,考题以数组的形式存储在PHP文件中,部分代码如下: <?php//考试题库二return [ //题库标题 'title' => 'PHP基础语法考试题(二)', //答题时限(秒数) 'timeout' =&g

  • Java项目实战之在线考试系统的实现(系统介绍)

    1.本系统和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目.章节.老师.学生.班级等信息的管理,还有批阅试卷查看已批阅试卷等.传统的考试系统划分并不细,业务功能简单. b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域网就可以进行考试. c.从架构方面来讲,我们的系统为分布式架构,传统的考试系统没有我们的架构合

  • SpringBoot +Vue开发考试系统的教程

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 SpringBoot: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Mybatis: 一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中 Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证

  • 基于Qt实现驾校科目考试系统的示例代码

    目录 1.设置登录界面 2.登录功能实现 2.1验证邮箱地址 2.2账号密码登录 2.3密码隐藏 3.考试界面开发 3.1考试用时 3.2题目布局 3.3按钮布局 3.4提交分数 3.5窗口交互 4.发布项目 4.1更改编译路径 4.2设置图标 4.3通过dos进行项目打包 1.设置登录界面 LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDialog) { ui->setupUi(this

  • C语言实现的学生选课系统代码分享

    好久没玩过C语言了,上一次还是在大二的时候...废话不多说,这里有一个C语言实现的学生选课系统代码,分享给大家,具体如下: #include<stdio.h> #include<stdlib.h> int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student * head2; struct couse//课程信息结构体 { int num1; char name1[20]; int score; int nelepeo; /

  • C语言链表实现歌手评分系统

    本文实例为大家分享了C语言链表实现歌手评分系统的具体代码,供大家参考,具体内容如下 此程序可以添加文件操作用于保存歌手得分等信息,此程序实现了链表的增删查和链表冒泡排序交换节点功能 #include <stdio.h> #include <stdlib.h> #include <string.h> //创建结构体及其成员 typedef struct Node { int num;//编号 char name[20];//姓名 float grade[10];//评委评

随机推荐