您的当前位置:首页单项选择题标准化考试系统

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

来源:锐游网


合肥学院

计算机科学与技术系

课程设计报告

2010~2011学年第二学期

2011年6月

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

一、需求分析 ⑴、课程设计目的

将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:

(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。

(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。

(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。 2、课程设计名称及内容

课程设计名称:单项选择题标准化考试系统

设计内容:设计一个单项选择题标准化考试系统,该系统要求能自动组卷和评分。

3、设计方案提示 具体的功能:

(1) 用文件保存试题库。(每个试题包括题干、4个备选答案、标准答

案)

(2) 试题录入:可随时增加试题到试题库中

(3) 试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入) (4) 答题:用户可实现输入自己的答案

(5) 自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给

出成绩 (6)退出。在界面状态下,按下“ESC”会退出该系统,返回源程序。

⑵、主要知识点     

面向对象程序设计方法

界面制作,switch的应用。 类和对象。

动态数组(链表)类模板。 文件的读写。 ⑶ 、其他

程序设计可在Microsoft VC++6.0、Borland C++ Builder环境下进行。 二. 算法设计 1. 总体概念。

1. 用来保存试题库 ,将试题一一对应的保留下来,放在相应的文件里;

2、试题的录入,可以定义一个” ifstream cin1(\"1.txt\")”和” ifstream

fin1(\"ot1.txt\")”函数将试题录入;

3、 试题的抽取, memset(mark,0,sizeof(mark));每次抽取题目时都把标记数组初始化为0

4、答题方面,,则定义一个”cin>>t”函数用于答题者的输入答案;

5、自动判卷,则可以定义一个”cout”函数,用来对比答题者答案和正确答案,给出判断正确与否;

6、用一个int函数将上述各个函数功能块连接起来,实现”单项选择题标准化考试系统”的各个方面的功能,完成设计.。 2. 大概流程

单项选择题标准化考试系统 进行答题并判卷 显示整张试卷内插入试题 保存到文件 退出系统 3. 源代码

#include \"iostream\" #include \"string\" #include \"math.h\" #include\"fstream\" #include\"time.h\" #include \"stdlib.h\" using namespace std; #define Max 100

class Text

{ //定义text类

private:

string timu;

string op1,op2,op3,op4; //类中包含题目、四个选项的内容、标准答案 char answer; int n,max;

char a[Max],b[Max]; //包括题目数量、记录参考答案的数组、记录学生答案的数组、得分 int score; public:

Text():score(100),n(0)

{ //构造函数 把保存在在文件中的试题库赋值给这个类 ,score初始化为100 并读取题目数量n ifstream in(\"试题库题目数量.txt\"); in>>n;

in.close();

ifstream pass(\"max.txt\"); pass>>max; pass.close();

}

friend class Student; //把student定义为text的友元函数,student类可以访问text类中的所有成员

int getn() {

return n; }

int getmax() {

return max; }

void Textin(int m){ //录入新的试题 m++; n=m+n;

ofstream o(\"试题库题目数量.txt\"); o<o.close();

cout<<\"----请输入题干:\"; cin>>timu; cout<<\"----请输入选项A的答案:\"; cin>>op1; cout<<\"----请输入选项B的答案:\"; cin>>op2; cout<<\"----请输入选项C的答案:\"; cin>>op3;

cout<<\"----请输入选项D的答案:\"; cin>>op4; cout<<\"----请输入参考答案:\"; cin>>answer; ofstream out(\"试题库.txt\

out<out.close(); //写入文件中

cout<<\"---------------题目已保存****\"<void Textout(int N){ //为考生显示试题 int i=0;

unsigned int *r; r=new unsigned int; for(i=0;iunsigned int seed=rand(); //用随机函数产生随机种子,随机抽取题目

srand(seed); *(r+i)=rand()%n; if(*(r+i)==0) i--; for(int j=0;j{if(*(r+i)==*(r+j)) i--; }

seed++; }

struct ku{ //定义一个ku结构体 string Timu,a,b,c,d; };

struct ku title[Max];

ifstream in(\"试题库.txt\"); for(i=1;i<=N;i++){ int p; p=*(r+i-1);

in>>title[p].Timu>>title[p].a>>title[p].b>>title[p].c>>title[p].d>>a[i-1]; cout<<\"第\"<//同时记录下原本的答案 }

in.close(); }

void Answer(int N){ //记录学生写的答案 cout<<\"答题区:\"<cout<<\"输入第\"<>b[i]; } }

void Cheak(int N){ //比对 并计算成绩

int x=0;

for(int i=0;icout<<\"-------第\"<if(x!=0 && (score%N)!=0) score--; score=score-x*(score/N);

cout<<\"您的得分为:\"<max++;

ofstream p(\"max.txt\"); p<class Student{ //定义学生类 记录学生成绩 private: int num;

string name; int cj; public:

Student(int n,string &na):name(na){ //构造函数 num=n; }

void setcj(Text &text){ cj=text.score; }

void scorein(){ //录入学生信息到文件中

ofstream o(\"学生成绩.txt\ o<void main_menu() //主菜单 {

cout<<\"- 1:试题录入 -\"<int choice(){

cout<<\"-------------选择:\"; int op; cin>>op;

system(\"cls\"); //清屏 return op; }

void t(Text &text){ //学生考试的函数 int no;string name; int N;

cout<<\"请输入你的学号、姓名:\"<>no>>name;

Student st(no,name); cout<<\"选择题目数量: 最多\"<>N; system(\"cls\"); text.Textout(N); text.Answer(N); text.Cheak(N); st.setcj(text); st.scorein(); }

void back(int f){ if(f==1){

cout<<\"-------------输入任意数字返回主菜单\"<>a; system(\"cls\");} } int main() {

int m=0; int f=1; do{

main_menu();

Text text;

int max=text.getmax(); int op; op=choice(); switch(op){

case 1: text.Textin(m); break; case 2:

t(text); break; case 3: f=0; break;

default: cout<<\"选择有误\"<back(f);

}while(f==1); return 0; }

4.运行结果

5. 经过这几天的C++课程设计的训练,我学到了很多,最主要的一点是怎样去自学一种东西,怎样去找到你所需要的资料,并在短时间把它学会,运用到你所需要的方面。这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。

在做这个C++课程设计的时候,我原先也是知之甚少,什么是面向对象程序设计方法,什么是类和对象,什么是动态数组(链表)类模板,等等,可以说是一无所知。然而,在这门课程设计中,这些方面却是特别重要的,可以说,掌握

了这个,你就完全可以完成自己的任务。这就要求我们要自己去学,自己去探索。当然,跑图书馆是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,可以学到的是一种提升自我的能力。

当然,由于个人能力所限,这份课程设计有一些别的方面还是要参考人家的的资料,在读懂别人材料的同时,自己取人所长,补己之短,经过多次的调试,总结,最后交出一份自己比较满意的答卷。

通过这次的课程设计,让我进一步的了解到C++在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。

对于在设计这个程序时我没有什么新的想法就是用普通的cin 、cout等;在c

++中常见的一些代码来编写的但在编写的过程中也出现了许多的错误如:

1. C++取精确位的写法,好像只能是double型的,原来我有用float,不行 2. while(!isdigit(d[0])) //判断输入的数据是否为整型(因为在一次运行中我不小心输入了字符型,然后程序进入死循环)

3. 每次抽取都重新创建文件ot2,原来把文件定义在全局,但就是多次抽取时会出问题,因为一次抽取完,文件指针就走到文件末尾,百度找了一下,说用fin2.clear();fin2.seekg(0,ios_base::beg);然后发现读的题数多了,那两句是说把文件指针移到文件开头处,但前面抽取的题目仍保存在文件中,所以,前面的题目就再读了遍。

一、 参考资料

[1] 郑莉 等编著《C++语言程序设计(第三版)》北京:清华大学出版社

[2] 郑莉 等编著《C++语言程序设计(第三版)学生用书》北京: 清华大学出

版社

[3] 刘振安 等编著《C++程序设计课程设计》 机械工业出版社 [4] 吴乃陵 等编著《C++程序设计》北京:高等教育出版社

[5] 李春葆 等编著《C++程序设计学习与上机实验指导》 北京:清华大学出版社

[6] 范辉 等编著《Visual C++6.0程序设计简明教程》 高等教育出版社 [7] 李龙澍《C++程序设计实训教程》北京:清华大学出版社

[8] 洪国胜 等编著 《C++ Builder程序设计轻松上手》北京:清华大学出版社 [9] 宁正元《数据结构(c语言)》 南京:东南大学出版社。2000年6月第1版 [10] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月

第1版。

[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年 第1

版。 [12] 刘大有《数据结构》(面向21世纪课程教材) 北京:高等教育出版社。2001

年6月第1版。

[13] 明日科技 编著《Visual C++程序开发范例宝典》北京:人民邮电出版社。

[14] 游洪跃等编著《C++面向对象程序设计实验和课程设计教程》北京:清华大学出版社.2009.2

因篇幅问题不能全部显示,请点此查看更多更全内容

Top