C语言课程设计-单项选择题标准考试系统

2023-11-16

需求分析

1.设计题目:单项选择题标准考试系统

2.系统功能需求分析:能够答题,插入试题,查看题库试题,删除题库试题,最后退出系统五个功能

二:概要设计:

2.1系统总体设计框架:

功能模块说明

答题模块

2.3插入试题模块:

确定插入题目数,选择需要插入的题目类型,打开文件,插入题目,关闭文件.

2.4删除试题模块:

确定删除题号,选择需要删除的题目类型,读出文件,删除题目,并创建一个新的文件覆盖原文件,把剩下的试题读入文件.

2.4系统设计

主要结构体

题目,选项A,B,C,D,答案

struct Test{

char question[200];

char option1[100];

char option2[100];

char option3[100];

char option4[100];

char key;

}

2.5主要功能函数

int addtest()//增加试题

void answerq()//答题

void changeface()//选择试题类型界面

int changeopenfile()//选择打开文件

int compare(char a,char b)//答案对照

void readfile(int i,Test p)//显示题目

void showtest(int n,int m)//展示题目或删除结构体元素

void startinterface()//开始界面

4  系统调试

(1)操作界面

程序代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<conio.h>
#define MAX 50
typedef struct Test{
char question[200];
char option1[100];
char option2[100];
char option3[100];
char option4[100];
char key;
}Test;
FILE *fp;
void changeface()//选择试题类型界面
{
printf("\n\n\n\n\n");
 printf("\t\t--------------------------------------\n");
     printf("\t\t|        选择试题类型                |\n");
 printf("\t\t|                                    |\n");
 printf("\t\t|            1.数据结构              |\n");
 printf("\t\t|                                    |\n");
 printf("\t\t|            2.c/c++                 |\n");
 printf("\t\t|                                    |\n");
 printf("\t\t--------------------------------------\n");
}
int addtest()//增加试题
{
int i, num;
Test title[MAX]={"\0"};
FILE *fp;
changeface();
 do
{
 scanf("%d",&i);
 fflush(stdin);
switch(i)
{
case 1:fp=fopen("questionbank1.txt","a+");break;
case 2:fp=fopen("questionbank2.txt","a+");break;
default:printf("你输入的指令不正确,请重新输入\n");
}
   }while(i!=1&&i!=2);
 system("cls");
while(1)
{
        printf("请输入要插入的题目数(<=50)\n");
        scanf("%d",&num);
fflush(stdin);
         if(num<=MAX&&num>0)break;
else printf("输入有误,请重新输入题目数\n");
}

for(i=0;i<num;i++)
{
printf("请输入第%d道题题目,选项和答案:\n",i+1);//输入结构体元素内容
printf("请输入题目\n");
     gets(title[i].question);
printf("请输入选项A:");
  gets(title[i].option1);
printf("\n请输入选项B:");
gets(title[i].option2);
 printf("\n请输入选项C:");
gets(title[i].option3);
 printf("\n请输入选项D:");
gets(title[i].option4);
fflush(stdin);
printf("\n请输入答案:\n");
scanf("%1c",&title[i].key);
fflush(stdin);
system("cls");
}
  for(i=0;i<num;i++)
  {
         printf("%d.%s\n%s\t%s\t",i+1,title[i].question,title[i].option1,title[i].option2);
         printf("%s\t%s\n答案:%c\n",title[i].option3,title[i].option4,title[i].key);
  }
  if(fp==NULL)return 0;
  else  
{
for(i=0;i<num;i++)        fprintf(fp,"%s\t%c\n%s\t%s\t%s\t%s\n",title[i].question,title[i].key,title[i].option1,title[i].option2,title[i].option3,title[i].option4);
fclose(fp);
}return 1;
}
void startinterface()//开始界面
{
     printf("\n\n\n\n\n");
 printf("\t\t  --------------------------------------\n");
     printf("\t\t  |       单项选择题标准化考试系统     |\n");
 printf("\t\t  |                                    |\n");
 printf("\t\t  |              1.答题                |\n");
 printf("\t\t  |                                    |\n");
 printf("\t\t  |              2.试题插入            |\n");
 printf("\t\t  |                                    |\n");
 printf("\t\t  |              3.显示题库题目        |\n");
 printf("\t\t  |                                    |\n");
     printf("\t\t  |              4.删除试题            |\n");
 printf("\t\t  |                                    |\n");
 printf("\t\t  |              5.退出系统            |\n");
 printf("\t\t  --------------------------------------\n");
}
int changeopenfile()//选择打开文件
{
int i;
do{
 scanf("%d",&i);
 fflush(stdin);
switch(i)
{
case 1:fp=fopen("questionbank1.txt","r+");break;
case 2:fp=fopen("questionbank2.txt","r+");printf("rrrrrrrrr\n");break;
default:printf("你输入的指令不正确,请重新输入\n");
}
 }while(i!=1&&i!=2);
 system("cls");
return i;
}
int compare(char a,char b)//答案对照
{
if(a==b||(a-32)==b)
{printf("答对了\n");return 1;}
else {printf("答错了\n正确答案是%c\n",b);return 0;}
}
void readfile(int i,Test p)//显示题目
{
      printf("%d.%s\n",i+1,p.question);
      printf("A.%s\t",p.option1);
      printf("B.%s\n",p.option2);
      printf("C.%s\t",p.option3);
      printf("D.%s\n",p.option4);
}
void answerq()//答题
{
Test title[MAX];
int n,i,j,k,num[MAX],score,sum=0;char h;
if(fp==NULL)
{
printf("\n不能打开questionbank.dat文件,按任何键退出程序!\n");
getch();
exit(-1);
}
   for(j=0;!feof(fp);j++)//统计文件中的结构体项数
   {
fscanf(fp,"%s\t%c\n%s\t%s\t%s\t%s\n",&title[j].question,&title[j].key,&title[j].option1,&title[j].option2,&title[j].option3,&title[j].option4);
  
   }
fclose(fp);
while(1)
{
printf("请输入需要答题的题目数\n");
scanf("%d",&n);//n必须小于j
fflush(stdin);
if(n>j)
printf("输入的题目数大于题库的题目数,请重新输入\n");
else break;
}
for(i=0;i<n;i++)//产生n个不同的随机数
{
srand(time(NULL));
    num[i]=rand()%j;
    while(1)
{
       for(k=0;k<i;k++)//排除相同随机数
       if(num[k]==num[i])break;
       if(k==i)break;
   num[i]=rand()%j;
}
readfile(i,title[num[i]]);
  printf("输入答案:");
scanf("%c",&h);
fflush(stdin);
score=compare(h,title[num[i]].key);
sum+=score;
}
printf("答对%d题\n",sum);
printf("按任意键返回主界面\n");
getch();
}
void showtest(int n,int m)//展示题目或删除结构体元素
{
int i,j,k;
Test title[MAX];
if(fp==NULL)
{
printf("\n不能打开questionbank.dat文件,按任何键退出程序!\n");
getch();
exit(-1);
}
for(j=0;!feof(fp);j++)//统计文件中的结构体项数
    {
fscanf(fp,"%s\t%c\n%s\t%s\t%s\t%s\n",&title[j].question,&title[j].key,&title[j].option1,&title[j].option2,&title[j].option3,&title[j].option4);
    }
fclose(fp);
for(i=0;i<j;i++)
readfile(i,title[i]);
if(n==1)
{
 printf("按任意键返回主界面\n");
             getch();
             system("cls") ;
}
else
{
printf("输入需要删除的题号:\n");
    scanf("%d",&k);
        switch(m)
{
       case 1:fp=fopen("questionbank1.txt","w+");break;
       case 2:fp=fopen("questionbank2.txt","w+");break;
}
for(i=0;i<j;i++)
{
if(k-1==i)continue;
        fprintf(fp,"%s\t%c\n%s\t%s\t%s\t%s\n",title[i].question,title[i].key,title[i].option1,title[i].option2,title[i].option3,title[i].option4);
}
fclose(fp);
printf("删除成功\n\n按任意键返回主界面\n");
             getch();
             system("cls") ;
}
}


void main()
{
char ch,c;int m;
while(1)
{
   startinterface();
   ch=getchar();
   system("cls");
   fflush(stdin);
    if(ch=='5')//退出系统
{
printf("是请输入Y\t否请按任意键\n");
c=getch();system("cls");
if(c=='y'||c=='Y') break;
else continue;
}
switch(ch)
{
case '1': changeface();
m=changeopenfile();answerq();system("cls");break;
case '2': if(addtest())
 printf("保存成功!\n");
else 
printf("保存失败!\n");
getch();break;
case '3': changeface();
m=changeopenfile();
showtest(1,m);
    break;
case '4':changeface();
m=changeopenfile();showtest(2,m);break;
default:
printf("你输入的指令无效,请按任意键继续执行\n");getch();break;
}
fflush(stdin);
system("cls") ;

}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言课程设计-单项选择题标准考试系统 的相关文章

  • canvas绘制气泡

    思路 使用Math random 函数绘制是个不同位置 大小 颜色的圆形 然后设置定时器 前一个状态用一个与画布相同颜色的背景图片进行覆盖 改变圆形的位置 每次改变都是在这张空白的背景图片上面重新进行重新绘制的过程 源码
  • mysql 5.7 驱动_这些 MySQL 调优配置,你都知道吗?

    关注我的头条号 获取更多运维相关知识 你想了解哪方面的运维知识 请评论区告诉我 我会尽快更新 MySQL 数据库 基本上运维都会接触到 而对于数据库的性能优化 想必是大家比较关注的 下面分享一些调优技巧 先决条件 安装 MySQL 版本大于
  • 【华为OD机试c++】九宫格游戏【2023 Q1 A卷

    题目描述 九宫格是一款广为流传的游戏 起源于河图洛书 游戏规则是 1到9九个数字放在3 3的格子中 要求每行 每列以及两个对角线上的三数之和都等于15 在金麻名著 射雕英雄传 中黃蓉曾给九宫格的一种解法 口诀 戴九恩一 左三右七 二四有肩
  • Fedora 18 的samba共享配置

    红色粗字体字为修改后内容 蓝色粗体字为特别注意内容 1 宿主机 windows 8 4G内存 2 虚拟机 VMware 9 0 1 3 虚拟主机 VMware下Fedora 18 1G内存 4 参考文章 参考文章 详解Fedora Samb
  • libevent源码学习(14):IO复用模型之epoll的封装

    目录 Libevent提供的epoll后端结构体 初始化epoll init 何时调用epoll init 事件添加epoll nochangelist add 何时调用epoll nochangelist add 事件删除epoll no
  • 监听DOM加载完成及改变MutationObserver应用

    什么是MutationObserver 接口提供了监视对DOM树所做更改的能力 它被设计为旧的MutationEvents功能的替代品 该功能是DOM3 Events规范的一部分 简单粗暴 就是监听DOM树的变动 那么 被代替的 Mutat

随机推荐

  • 牛顿法与牛顿迭代法

    文档主要分为两个部分 第一部分是对牛顿 拟牛顿方法的介绍 第二部分介绍具体的拟牛顿数值方法 pdf文档 1 非线性方程组解法 牛顿法 Newton法又称为Newton Raphson法 是采用函数的Taylor级数的前面几项来寻找方程的根
  • 数据库课程设计--人事管理系统代码

    人事管理系统 创建数据库 create database personal management system on primary name pms data 逻辑名 filename D sql server pms data mdf
  • BF算法与KMP算法

    针对串的操作 在主串s里面查找子串sub 从pos位置开始的第一个符合的子串 返回第一个字符的下标 BF算法如下 时间复杂度 O mn 当字符相等时 j i 当不等时 j需要回退到0号下标 i需要回退到之前的位置 1 int BF cons
  • 超分辨率:基于metric learning的无监督blind sr:Metric Learning based Interactive Modulation for Real-World Super

    Metric Learning based Interactive Modulation for Real World Super Resolution 1 思路介绍 关于blind sr 常规的方法是 建立各种 退化方法数据集 然后监督训
  • C语言:二维数组传参的格式(详细+总结)

    希望能帮助到你 我将无比快乐 你的点赞 是我前进的动力 初遇二维数组作函数参数 宛如自己化身为了大头儿子 很头大 不禁大声呐喊 该怎么声明定义 该怎么调用 又该怎么函数中操作元素和地址 在此 我要拨开这些问题的一些迷雾 我相信 有心人看完后
  • nextTick相关问题

    nextTick引出的问题 任务类型 JS中有两种任务类型 微任务 microtask 和宏任务 macrotask 在ES6中 microtask称为 jobs macrotask称为 task 宏任务 script 主代码块 setTi
  • ElasticSearch设置用户名密码访问

    1 启动trial license 30天试用 curl H Content Type application json XPOST http 127 0 0 1 19200 xpack license start trial acknow
  • PPTPD和PPTP client的安装指南

    PPTP是微软的 协议 被广泛采用 Linux下的服务端称为PPTPD 客户端称为PPTP PPTPD和PPTP client本身的安装并不复杂 可以说相当直观 但是如果要用到mppp加密 需要做的工作就要多一些 1 PPTPD的官方网站是
  • ECSHOP问题总结

    ecshop各个页面调用商品销售量方法 首页的推荐商品包括热销推荐和促销三个文件 只对热销商品为例 第一步 打开根目录 includes lib goods php文件 在文件末尾添加方法 function selled count goo
  • Python3,pandas自动处理exlce数据及yagmail邮件自动发送

    使用pandas来实现excel表中数据统计提取 及邮件发送功能 数据文件统计及发送 使用pandas处理Excel的数据 yagmail实现邮件自动发送 使用pandas处理Excel的数据 pandas怎么读取excel 我们已经分享了
  • Cadence Allegro学习---spin与rotate,group与room,assign color与hilight

    学习allegro的过程中 会遇到一些类似但不太相同的命令 总结一下 仅供参考 allegro类似命令比对 功能 命令 不同点 相同点 旋转 spin 旋转 是一个独立的命令 edit spin执行即可对symbol进行旋转 都可以进行器件
  • VUE不刷新页面的情况下更改浏览器链接后的query值

    在不刷新当前页面的情况下 不操作路由 但是要更改路由中的 query 参数 就好像页面只有简单路径 无 query 现在点击一下页面中的按钮 页面不刷新 但是要在浏览器的地址显示中将 query 参数修改掉 解决方法是 window his
  • 树莓派 (Raspberry pi) 中文乱码

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 树莓派的操作系统是基于Debian 默认是没有中文的 如果需要显示中文 需要安装中文库 以下内容提供树莓派安装中文库的方法 1 安装命令 进入树莓派终端方式 可以通过 pu
  • Java的 多态性

    多态分为编译时多态和运行时多态 其中编辑时多态是静态的 主要是指方法的重载 它是根据参数列表的不同来 区分不同的函数 通过编辑之后会变成两个不同的函数 在运行时谈不上多态 而运行时多态是动态的 它是通过绑定 来实现的 也就是多态 多态的实现
  • 千锋网络安全1-3days

    千锋 网络安全笔记 总篇 持续更新 服务器 Windows00 03 08 12 Linux centos 虚拟机两种架构 寄生 一般在电脑主机 原生 直接安装在硬件上 虚拟机部署准备 安装Windows xp win7 Windows s
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • Flutter 必备插件推荐

    前面两个不用说 flutter enhancement suite gt flutter代码增强提示 flutter snippets gt flutter模板快速生成代码 flutter image sync gt flutter 同步照
  • PyTorch训练LSTM时loss.backward()报错

    训练用PyTorch编写的LSTM或RNN时 在loss backward 上报错 RuntimeError Trying to backward through the graph a second time but the buffer
  • 从3dmax导出fbx格式模型的过程

    1 设置好单位 厘米 centimeters 3dmax默认导出的fbx文件导入到unity3d中的默认缩放因子是0 01 而unity3d默认单位为米 Customize unites setup metric centimeters s
  • C语言课程设计-单项选择题标准考试系统

    需求分析 1 设计题目 单项选择题标准考试系统 2 系统功能需求分析 能够答题 插入试题 查看题库试题 删除题库试题 最后退出系统五个功能 二 概要设计 2 1系统总体设计框架 功能模块说明 答题模块 2 3插入试题模块 确定插入题目数 选