C++ 单项选择题标准化考试系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1.课程设计目的 (1)
2.课程设计题目描述和要求 (1)
2.1课程题目 (1)
2.2课程要求 (1)
3.课程设计报告内容 (1)
3.1算法描述 (1)
3.2 源程序 (2)
4.课程设计总结: (6)
5.参考书目 (7)
1 课程设计目的
练习自己的动手能力,在学习理论的同时增强自己的编程能力,使理论与实践相结合,在学习书本的同时扩展自己的课外知识.
2 课程设计题目描述和要求
2.1课程题目
单项选择题标准化考试系统
2.2课程要求
(一)功能要求:
(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)(2)试题录入:可随时增加试题到试题库中
(3)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)
(4)答题:用户可实现输入自己的答案
(5)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档.
3 课程设计报告内容
3.1算法描述
定义题目数组,选向数组,输入题目的及选向并给定正确答案。
输入所要答的题目数,然后进行答题。
输入的答案与标准答案进行比较,如果一致,则正确,否则错误。
最后根据题目数及答对题目数进行输出得分。
3.2 源程序
#include <iostream>
#include <fstream>
#include "dos.h"
using namespace std;
struct question {
char ask[200];/*选择题题目*/
char answer[4][80];/*选择题选项*/
int right;/*正确答案*/
struct question *next;
};
//函数声明
int MenuChoice(void); //选择菜单
struct question *charu_timu(struct question *fst, const struct question *ad); //向列表中插入试题函数
struct question *da_an_weizhi(struct question *seek, long len, long max); //确定一个读取答案的位置的函数
void GetQuestion(struct question *src); //获取问题,选项,以及正确答案函数
void bao_cun(const struct question *ed, FILE *saf); //将列表中的试题保存在文件中的函数
struct question *LoadFile(struct question *td, FILE *laf); //从文件中读取题目,将题目添加到列表中的函数
int GetAnswer(void); //输入选择题的答案
void huida_Question(const struct question *que, int n); //回答问题函数
main()
{
struct question *start = NULL, temp;
long choice, line = 0, c;
FILE *fp = fopen("wangkun.dat", "a+");
while ((choice = MenuChoice()) != 3)
if (choice == 1)
{
GetQuestion(&temp);
start = charu_timu(start, &temp);
++line;/*统计列表的长度*/
system("cls");
}
else if (choice == 2)
{
c =8;
while (c > 6 || c > line) {
cout<<"请输入要回答的问题数量: ";
cin>>c;
}
huida_Question(start, line);
}
return 0;
}
/*da_an_weizhi函数确定一个读取答案的位置,len代表要读取的答案数,max 代表列表的长度*/
struct question *da_an_weizhi(struct question *seek, long len, long max) {
int i;
while (i--)
seek = seek->next;//找到指定的位置
return seek;
}
//向列表中插入试题
struct question *charu_timu(struct question *fst, const struct question *ad)
{
struct question *newPtr = (struct question *)malloc(sizeof(struct question));
if (newPtr == NULL)
exit(0);
*newPtr = *ad;
newPtr->next = fst;
return newPtr;
}
/*获取问题,选项,以及正确答案*/
void GetQuestion(struct question *src)
{
int i = 0;
cout<<"请输入选择题题目:"<<endl;
cin>>src->ask;
while (i < 4) {
cout<<"请输入选项"<<char(i + 'A')<<"的答案:"<<endl;
cin>>src->answer[i++];
}
src->right = GetAnswer();
}
/*从文件中读取题目,将题目添加到列表中*/
struct question *LoadFile(struct question *td, FILE *laf)
{
struct question temp;
while (fread(&temp, 1, sizeof(struct question), laf))
td = charu_timu(td, &temp);
return td;
}
/*将列表中的试题保存在文件中*/
void bao_cun(const struct question *ed, FILE *saf)
{
fclose(saf);
if ((saf = fopen("wankun.dat", "w")) == NULL)//以写的方式重新打开文件 return ;
while (ed) {
fwrite(ed, 1, sizeof(struct question), saf);
ed = ed->next;
}
}
//得到选择题的答案(不保证是正确的答案)
int GetAnswer(void)
{
char c=0 ;//必须进行初始化,避免出现偶然性的错误
fflush(stdin);
while (c < 'A' || c > 'D') //确保输入的答案是A, B, C, D中的一个
{
cout<<"请输入正确的答案: "<<endl;
cin>> c;
}
return c;
}
//回答问题,并统计答对题目数,显示得分
void huida_Question(const struct question *que, int n)
{
int i = 0, t = n;
char result[1001], *p = result;
for (i = 0; n--; que = que->next) {
cout<<que->ask<<endl;
cout<<que->answer[0]<<endl;
cout<<que->answer[1]<<endl;
cout<<que->answer[2]<<endl;
cout<<que->answer[3]<<endl;
if ((*p = que->right) == (*(p + 1) = GetAnswer()))
++i;
}
*p = '\0';
cout<<"标准答案"<<" 您的答案 "<<endl;
for (p = result; *p != '\0'; )
cout<<*p<<" "<<*(p+1)<<endl;
cout<<"您回答了"<<t<<"道题, 答对"<<i<<"道题目, 得分:"<< (float)i / t * 100.00<<endl;
}
//选择菜单
int MenuChoice(void)
{
int value;
cout<<" **********************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1 :添加选择题 *"<<endl;
cout<<" * 2 :回答选择题 *"<<endl;
cout<<" * 3 :退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" **********************************"<<endl;
cin>>value;
return value;
}
4 课程设计总结:
经过编写程序,检验了我们的编程的水平,从这次编程中,我发现我才学到了一点点的知识,有好多的东西都不够熟练,还需要好好的努力学习,在编写这个程序时,出现了好多的问题,经过别人的帮助和自己的认真的调试才完成,这个程序还有好多的不足,还不够美观。
有的地方还有漏洞。
这个程序我使用的是链表,使我从中掌握了链表的使用方法,积累了经验,这些经验在以后的学习生活中会有很大的帮助的。
5 参考书目:
[1]谭浩强,《C++程序设计》,北京,清华大学出版社,2006年.。