目录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(structquestion));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课程设计总结:经过编写程序,检验了我们的编程的水平,从这次编程中,我发现我才学到了一点点的知识,有好多的东西都不够熟练,还需要好好的努力学习,在编写这个程序时,出现了好多的问题,经过别人的帮助和自己的认真的调试才完成,这个程序还有好多的不足,还不够美观。