1.准备两个文件:EX.txt文件保存试题;CEX.txt文件保存用户名和密码。


说明:这个你看到的这个试题是我随便加的,根据自己需要添加。
2.功能说明:
单项选择题标准化考试系统设计
功能说明:
1.实现用户登录:用文件保存用户的用户名和用户密码;
2.随机的试题录入:可随时增加试题到题库中,但是需要注意一点的是加入的试题前面不需要有试题号,当你在查询的时候程序会给你标上,直接录入自己的试题即可,不用管试题标号
3.答题:用户可以根据题目给定的选项输入自己的答案;
4.自动判卷:系统可根据用户的答案和标准答案进行评判成绩并输出分数;
5.试题使用文件保存:包括试题题目和选项;
具体的功能实现:
关于增加题库的试题时,管理员可根据题目的实际需要输出选项,例如选项有A,B,C三种或者A,B,C,D四种等;
关于怎么设置标准答案的问题:在输入完该题的选项之后就可以设置该题的答案了,怎么实现:主要是通过在每一个选项的前面打标记,可以在保存的文件中看到,每一个选项的前面都有一个1或者0,1-表示正确答案,0-表示错误答案;但是用户在查看这个试题库时,是看不到这个标记的,只有在文件中才显示出来,这样更加的清晰认识题目。
注意:这个功能只是实现单项选择题,不包括多项选择题。我实现的这个功能本身存在很多的不足之处,也是在不断的修改和完善。
3.代码实现:

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iomanip>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxx=105;
string password="123456";
string username="TOM";
int sum_grade=0;
int score=10;
fstream fout;
fstream fin;
int Second;
string subj[maxx];//题目
string subject[maxx];//存储题目;
struct node{string s;int id;
}num[maxx];
map<string,string>mp;
set<string>st;
struct user{string username;string password;
}dba[maxx];void Menu(){system("color F0"); cout<<"********************************************"<<endl;cout<<"*       L-录入试题到题库中                 *"<<endl;cout<<"*       R-随机抽取试题答题                 *"<<endl;cout<<"*       Q-查询当前题库的状况(包含题数和试题)"<<endl;cout<<"********************************************"<<endl;
}
//输出文件中的题目数量
int CNT(){fstream fins;fins.open("D:\\EX.txt",ios_base::in);char et[maxx];int k=0;while(fins.getline(et,100)){if(et[1]>='A'&&et[1]<='Z'){continue;}else{k++;}}fins.close();return k;
}
//随机抽取n道题 (本程序抽取的题是只考虑在100以内的)
void random_ex(int logs[maxx],int n){srand((unsigned)time(NULL));for(int i=0;i<n;i++){logs[i]=rand()%Second;}//将要抽取的试题进行排序,方便后面输出试题进行抽取 sort(logs,logs+n);
}
//输出文件中有多少行数
int CNT_K(){fstream fins;fins.open("D:\\EX.txt",ios_base::in);char et[maxx];int k=0;while(fins.getline(et,100)){k++;}fins.close();return k;
}
//将文件中的试题保存在字符数组中
void SUBJECT(){fstream fins;fins.open("D:\\EX.txt",ios_base::in);char et[maxx];int k=0;while(fins.getline(et,100)){for(int i=0;i<strlen(et);i++){subj[k]+=et[i];}k++;}fins.close();
}
string data[maxx];
//将文件中试题保存在字符数组data中,不包含每一个选项前面的0/1,主要是为了用户查看和答题用
void Read(){system("color F0");fin.open("D:\\EX.txt",ios_base::in);char et[maxx];int k=0;while(fin.getline(et,100)){data[k]="";if(et[1]>='A'&&et[1]<='Z'){for(int i=1;i<strlen(et);i++){data[k]+=et[i];}}else{for(int i=0;i<strlen(et);i++){data[k]+=et[i];}}k++;}int j=0;for(int i=0;i<k;i++){subject[i]=data[i];if(data[i][0]>='0'&&data[i][0]<='9'){++j;num[j].id=j;num[j].s=data[i];}}fin.close();
}
//查询当前的题库数和当前的题目具体的情况
void query(){system("color F0");int k=CNT_K();int num_K=CNT();cout<<"当前库题数: "<<num_K<<endl;cout<<"当前题库试题: "<<endl; for(int i=0;i<k;i++){cout<<data[i]<<endl;}
}
//随机抽取试题答题
void Sample(){system("color F0");cout<<"请输入抽取的题数: ";int n;cin>>n;int first=CNT_K();int logs[maxx];random_ex(logs,n);int last_index=0;sum_grade=0; SUBJECT();for(int i=0;i<n;i++){int index=0;cout<<"************************************"<<endl;for(int j=0;j<first;j++){int postion=num[logs[i]+1].id;//抽取的题目 if(subject[j]==num[postion].s){index=j;last_index=j;cout<<subject[j]<<endl; break;}}index++;while(subject[index][0]>='A'&&subject[index][0]<='Z'){cout<<subject[index++]<<endl;}cout<<"************************************"<<endl;cout<<"根据选项请输入您的答案: ";char answer[2];cin>>answer;last_index++;int flag=0;while(subj[last_index][1]>='A'&&subj[last_index][1]<='Z'){if(answer[0]==subj[last_index][1]&&subj[last_index][0]=='1'){flag=1;sum_grade+=score;cout<<"回答正确"<<endl;}last_index++;}if(flag==0){cout<<"回答错误"<<endl; }cout<<endl;}cout<<"本次测试得分: "<<sum_grade<<endl;
}
//录入试题
void Addsubject(){system("color F0");fout.open("D:\\EX.txt",ios_base::app);string t[maxx];while(true){string st;cout<<"请录入试题题目: ";cin>>st;string st_s="";Second++;if(Second>=10){//当试题数大于两位时进行计算 int x=Second/10;st_s+=char(x+'0');int y=Second%10;st_s+=char(y+'0');}else{st_s+=char(Second+'0');}st_s+=".";st_s+=st;fout<<st_s<<endl;int i=0;while(true){int flag;string g;cout<<"请录入试题选项: ";cin>>g;t[i]=g;cout<<"是否继续录入选项(1-yes 0-no): "; cin>>flag;i++;if(flag==0)break;else{continue;}}cout<<"请设置正确选项: ";char correct[2];cin>>correct;for(int j=0;j<i;j++){string fut="";//通过在选项前面添加0或1来标识正确选项 if(correct[0]==t[j][0]){fut+="1";fut+=t[j];}else{fut+="0";fut+=t[j];}t[j]=fut;}for(int j=0;j<i;j++){fout<<t[j]<<endl;}int flag;cout<<"否是继续录入试题(1-yes 0-no): ";cin>>flag;if(flag==0)break;}fout.close();
}
//将文件中的数据存储到数组中
int subj_num=0;
void Switch(){system("color F0");char data[100];string passwords="";string usernames="";fstream fint;fint.open("D:\\CEX.txt",ios_base::in);while(fint.getline(data,100)){passwords="";usernames="";for(int i=0;i<6;i++){passwords+=data[i];}for(int i=7;i<strlen(data);i++){if(data[i]!=' '){usernames+=data[i];}}dba[++subj_num].password=passwords;dba[subj_num].username=usernames;mp[username]=passwords;st.insert(passwords);}fint.close();
}
//判断用户试题库登录是否成功
int Log(string usernames,string passwords){Switch();system("color F0");for(int i=1;i<=subj_num;i++){if(dba[i].username==usernames&&dba[i].password==passwords){cout<<"登录成功!"<<endl;return 1;}}return 0;
}
//进入(登录)
int Enter(){system("color F0");int log_flag=0;int log_num=0;while(true){cout<<"                   用户登录                 "<<endl;string usernames;string passwords;cout<<"用户名: ";cin>>usernames;cout<<"用户密码: ";cin>>passwords;log_num++;if(3-log_num==0){log_flag=1;cout<<"抱歉!您不能再登录题库系统!"<<endl;break;}if(Log(usernames,passwords)){break;}else{cout<<"您还有"<<3-log_num<<"次登录机会!"<<endl;}}if(log_flag==1)return 0;else return 1;
}
int main(){system("color F0");int log_flag=Enter();Second=CNT();while(log_flag){Read();char flag;Menu();cout<<"请选择您的操作: ";cin>>flag;switch(flag){case 'L':Addsubject();break;case 'R':Sample();break;case 'Q':query();break;default:cout<<"输入方式错误!请重新输入!"<<endl;break;}}return 0;
}

最后就是运行结果:



今天是2021年12月12日,我发表这篇文章的时候是2021年7月10日。
关于我的文章中程序存在一定的问题,我今天已修改完毕,感谢大佬发现我的程序Bug。对于这些问题,我已经在24小时之内回复相关问题并且解决,之前看过我程序的同学,我在这里声明一下,这个程序存在的问题,我已经修改。但是需要注意一点的是加入的试题前面不需要有试题号,当你在查询的时候程序会给你标上,直接录入自己的试题即可,不用管试题标号。`这一点我已经在文章开头声明了。
修改的地方:

以下是我修改之后的使用界面。


如果还存在什么问题,可以直接私信我,我会及时修改过来。谢谢!

使用C++实现单项选择题标准化考试系统设计相关推荐

  1. c语言课程设计自动答题系统,C语言课程设计-单项选择题标准化考试系统设计.doc...

    PAGE 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:C语言课程设计 课程设计题目:单项选择题标准化考试系统设计 院(系): 计算机学院 专 业: 计算机科学与技术 班 级: 学 号: 姓 ...

  2. C语言源代码系列-管理系统之单项选择题标准化考试系统设计

    往期文章分享 点击跳转=><导航贴>- Unity手册,系统实战学习 点击跳转=><导航贴>- Android手册,重温移动开发

  3. c语言考试系统设计报告,C语言课程设计(单项选择题标准化考试系统)报告

    <C语言课程设计(单项选择题标准化考试系统)报告>由会员分享,可在线阅读,更多相关<C语言课程设计(单项选择题标准化考试系统)报告(15页珍藏版)>请在人人文库网上搜索. 1. ...

  4. c语言考试系统设计报告,c语言课程设计报告单项选择题标准化考试系统.doc

    c语言课程设计报告单项选择题标准化考试系统.doc <C语言程序设计>课程设计题目:单项选择题标准化考试系统专业:计算机科学与技术班级:计科1001目录<C语言程序设计>课程设 ...

  5. c语言标准化考试系统课程设计,C语言课程设计单项选择题标准化考试系统.doc

    . ... 仲恺农业工程学院 课程设计报告 单项选择题标准化考试系统 课程名称 C 语言程序设计 姓 名 院(系) 信息科学与技术学院 专业班级 学 号 指导教师 目 录 TOC \o "1 ...

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

    单项选择题标准化考试系统 1.问题描述 设计一个单项选择题标准化考试系统,该系统要求能自动组卷和评分. 2.功能要求 (1)用文件保存试题库.(每个试题包括题干.4个备选答案.标准答案). (2)试题 ...

  7. 单项选择题 安卓课程设计_单项选择题标准化考试系统课程设计论文.doc

    单项选择题标准化考试系统课程设计论文.doc 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 蝿腿 ...

  8. 课程设计 单项选择题标准化考试系统

    include<stdio.h> #include<string.h> int N; typedef struct question //定义结构体类型 { int num; ...

  9. MFC单项选择题标准化考试系统

    2 总体方案设计 2.1 设计任务及要求 本次设计的主要功能要求: 试题录入:可随时对题库中的题目实现增删改查,要求题库中不少于50个题目: 试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入) ...

最新文章

  1. Python3中内置函数callable介绍
  2. 开源化学信息学库 :ScaffoldGraph
  3. BML CodeLab重磅更新:在Windows上可原生Linux AI开发
  4. Redis三种特殊数据类型
  5. listview刷新,延迟加载,用单行刷新取代notifyDataSetChanged
  6. 双击程序后系统弹框“您无权访问此程序”的解决办法
  7. Python是什么?Python能干什么?一篇文章让你对Python了如指掌!!
  8. android 拨打电话与发送短信
  9. stm32GPIO8种模式
  10. Unity 面试经验汇总
  11. 软件项目开发中各岗位职责
  12. webdriver设置浏览器全屏及设置浏览器窗口为特定大小的方法
  13. 国际象棋绘制java_java使用swing绘制国际象棋棋盘
  14. ⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️
  15. 分享125个ASP源码,总有一款适合您
  16. 计算机丢失d3dcompile,电脑d3dcompiler43.dll文件丢失怎么办 文件丢失解决方法
  17. php取消滑动条,小程序中button以及滚动条默认样式如何清除(代码)
  18. ST电机库v5.4.4源代码分析(3): α、β方向的电流值与三相PWM 波形的联系
  19. eclipse从git拉去出现红色方块的解决办法
  20. 腾讯严打第三方QQ机器人:多家QQ机器人暂停服务

热门文章

  1. python判断一个数是整数、浮点数还是字符串
  2. 网页中 哪些是 GET 请求,哪些是 POST 请求
  3. 虚拟机VMware14安装kali-linux-2019.1-amd64
  4. ACMNO.25 C语言-间隔输出 写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出1 9 9 0。 输入 一个四位数 输出 增加空格输出
  5. CSDN如何删除自己不用的分类(亲测有效!)
  6. 一文看懂自动驾驶关键技术
  7. 【OpenCV 4开发详解】图像金字塔
  8. 小程序:位置信息(Location)及微信小程序LBS解决方案实践
  9. java项目的逻辑结构
  10. Linux编程_Shell脚本练习题