单项选择课设.docx
《单项选择课设.docx》由会员分享,可在线阅读,更多相关《单项选择课设.docx(22页珍藏版)》请在冰豆网上搜索。
单项选择课设
学号11710201
数据结构A课程设计
设计说明书
单选选择题标准化考试系统
起止日期:
2013年12月30日至2014年1月3日
学生姓名
班级
计算机2班
成绩
指导教师(签字)
计算机系
2014年1月3日
课程设计任务书
2013—2014学年第1学期
计算机系计算机科学与技术专业11计算机2班级
课程设计名称:
数据结构课程设计
设计题目:
单项选择题标准化考试系统
完成期限:
自2013年12月30日至2014年1月3日共1周
设计依据、要求及主要内容(可另加附页):
1、单项选择题标准化考试系统
1)问题描述
设计一单项选择题标准化考试系统,实现考试的标准化管理。
2)基本要求
功能要求:
(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)
(2)试题录入:
可随时增加试题到试题库中
(3)试题抽取:
每次从试题库中可以随机抽出N道题(N由键盘输入)
(4)答题:
用户可实现输入自己的答案
(5)自动判卷:
系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
指导教师(签字):
教研室主任(签字):
郝琨
批准日期:
2013年12月30日
目录
一、设计目的1
二、设计要求1
三、设计内容1
3.1需求分析1
3.2问题求解1
3.3总体设计2
3.4详细设计3
四、核心源程序清单和执行结果4
4.1源程序4
4.2运行结果11
五、实验总结14
六、实验心得15
七、参考文献15
一、设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼,全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
二、设计要求
在本课程设计过程中要求学生:
(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩。
(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表。
(4)认真编写课程设计报告。
三、设计内容
3.1需求分析
设计一个单项选择题标准化考试系统,该系统能够实现保存试题、录入试题、答题、系统判卷的功能。
3.2问题求解
(1)用文件保存试题库。
(每个试题包括题干、4个备选答案、标准答案)
(2)试题录入:
可随时增加试题到试题库中
(3)试题抽取:
每次从试题库中可以随机抽出N道题(N由键盘输入)
(4)答题:
用户可实现输入自己的答案
(5)自动判卷:
系统可根据用户答案与标准答案的对比实现判卷并给出成绩
(6)退出,返回源程序。
3.3总体设计
1、用来保存试题库,可以用到”StructTestNodeTestquestions”结构体数组,将试题一一对应的保留下来,放在相应的文件里;
2、试题的录入,可以定义一个voidwrite函数将试题录入;
3、试题的抽取,可以定义一个voidrade的函数,用到”Rand”函数进行随机抽取;
4、答题方面,,则定义一个voidanswer函数用于答题者的输入答案;
5、自动判卷,则可以定义一个Statusmark函数,用来对比答题者答案和正确答案,给出判断正确与否;
6、用一个main函数将上述各个函数功能块连接起来,实现”单项选择题标准化考试系统”的各个方面的功能,完成设计。
3.4详细设计
N
Y
YN
四、核心源程序清单和执行结果
4.1源程序
#include
usingnamespacestd;
#include
#include"string.h"
#defineLENsizeof(structtest)
structtest/*定义结构体*/
{
charask[100];//存题干
chara[100];//存选项a
charb[100];//选项b
charc[100];//选项c
chard[100];//选项d
charrightanswer;//正确答案
intk;//存题号
structtest*next;
};
structtest*head,*h;/*全局变量:
头指针*/
intn;intm;intno;chars;/*全局变量*/
intnumber;
intrec[1000];charfuc[1000];
/*全局变量:
结点数目*/
structtest*creat(void)/*返回值为head*/
{structtest*p1,*p2;n=0;head=NULL;inta=1;
p1=p2=(structtest*)malloc(LEN);/*强制转换*/
while(a)
{
{
cout<<"请输入题号:
"<cin>>p1->k;//题号
cout<<"请输入题目:
"<cin>>p1->ask;//题干
cout<<"请输入选项a:
"<cin>>p1->a;//选项a
cout<<"请输入选项b:
"<cin>>p1->b;//选项b
cout<<"请输入选项c:
"<cin>>p1->c;//选项c
cout<<"请输入选项d:
"<cin>>p1->d;//选项d
cout<<"请输入正确的答案:
"<cin>>p1->rightanswer;//正确的答案
n++;
if(n==1)
h=head=p1;
elsep2->next=p1;
p2=p1;
(*p2).next=NULL;
p1=(structtest*)malloc(LEN);//给p1一个空的内存
}
cout<<"pleaseinput1or0"<cin>>a;
}
p2->next=NULL;
return(head);
}
voidwrite()//录入文件
{
FILE*fp=fopen("test.txt","ab+");
structtest*p1=head;
while(p1!
=NULL)
{
fwrite(p1,sizeof(structtest),1,fp);
p1=p1->next;
}
fclose(fp);
}
voidread()//从文件读取数据
{
FILE*fp=fopen("test.txt","rb");//从文件读取数据
structtest*p1=(structtest*)malloc(LEN);
intflag=fread(p1,sizeof(structtest),1,fp);
while(flag!
=0)
{
cout<k<<"."<ask<<""
<<"a."<a<<""<<"b."<b<<""<<"c."<c<<""<<"d."<d<flag=fread(p1,sizeof(structtest),1,fp);
}
fclose(fp);
}
test*load()//返回head的值
{
FILE*fp=fopen("test.txt","rb");
structtest*p1,*p2,*head=NULL,*tail;
p1=(structtest*)malloc(LEN);/*强制转换*/
while(fread(p1,sizeof(structtest),1,fp))
{
p2=(structtest*)malloc(LEN);
*p2=*p1;
if(head==NULL)
head=tail=p2;
else
{
tail->next=p2;
tail=p2;
}
tail->next=NULL;
}
fclose(fp);
return(head);
}
voidget()//随机抽取试题
{
test*p,*head=load();//调用load()函数来载入head的值
FILE*fp=fopen("test.txt","rb");//从文件读出数据
cout<<"请输入抽取的数目:
"<cin>>m;
p=head;
number=0;
while(p!
=NULL&&++number)
p=p->next;
p=head;
intvis[500];
memset(vis,0,sizeof(vis));//标记函数,使数组的值都为0
for(inti=0;i{
no=rand()%number;//随即数
if(no==0)no=number;
while(vis[no]==1)
{
no=rand()%number;
if(no==0)no=number;
}
rec[i]=no;//将no记录到rec[]的全局数组中
while(p!
=NULL)
{
if(p->k==no)
{
cout<ask<cout<<""<<"a."<a<<""<<"b."<b<<""<<"c."<c<<""<<"d."<d<i++;
vis[no]=1;
break;
}
p=p->next;
}
p=head;
}
system("pause");
}
voidanswer()//答题
{
test*p,*head=load();//载入head的值
FILE*fp=fopen("test.txt","rb");p=head;//从文件读取数据到内存中
for(inti=0;i{
no=rec[i];//将前面所选题号送到no中
while(p!
=NULL)
{
if(p->k==no)//判断题号是否和no相符
{
cout<ask<cout<<"a."<a<<""<<"b."<b<<""<<"c."<c<<""<<"d."<d<break;
}
p=p->next;
}
p=head;
cout<<"请输入答案:
";
cin>>s;
fuc[i]=s;//将你所输入的答案s送到全局数组中
}
}
voidmark()//评分
{
intx=0;inty=0;
test*p,*head=load();
FILE*fp=fopen("test.txt","rb");p=head;
for(inti=0;i{
no=rec[i];
s=fuc[i];
while(p!
=NULL)
{
if(p->k==no)
{
cout<ask<a<<""<<"b."<b<<""<<"c."<c<<""<<"d."<d<if(s==p->rightanswer)//判断输入的答案和试题库中的正确答案是否一致
{
cout<<"答案正确"<x++;//正确的题目数
}
else{
cout<<"答案错误"<y++;}//错误的题目数
break;
}
p=p->next;
}
p=head;
}
cout<<"答对的题目数:
"<cout<<"答错的题目数:
"<cout<<"总得分:
"<<100*x/m<
system("pause");
}
intmain()
{charx;
while
(1)
{
system("cls");//清屏
cout<<"+---------------------------------------------------------------------+"<cout<<"|1.查看试题2.录入新的试题|"<cout<<"+---------------------------------------------------------------------+"<cout<<"|3.随机抽取试题|"<cout<<"+---------------------------------------------------------------------+"<cout<<"|4.请输入你的答案5.自动判卷|"<cout<<"+---------------------------------------------------------------------+"<cout<<"|0.退出系统|"<cout<<"+---------------------------------------------------------------------+"<cout<cout<<"请输入操作代码:
";
cin>>x;
switch(x)
{
case'1':
read();system("pause");break;
case'2':
creat();write();break;
case'3':
get();break;
case'4':
answer();break;
case'5':
mark();break;
case'0':
exit(0);
default:
cout<<"代码错误,请重输:
"<}
}
return0;
}
4.2运行结果
1.初始界面
2.录入试题
3.随机抽取试题
4.开始答题
5.自动判卷
五、实验总结
本次课设运行过程存在着或多或少的问题,在此简单说明一下所存在的问题:
1.在开始录入试题时,结构体类型写入文件,那么保存的必然是二进制数据,直接看文件肯定是乱码的。
所以我们在查看test.txt文件时所看到的是乱码,如果想文件内容是直接可看的,那么不要直接存储结构体,应该自己设计这个文件的文本格式,按文本方式存储数据。
2.在录取试题成功后,我们需要再录入新试题我们是用"pleaseinput1or0"来表示是否再继续下去,'1'表示继续,'0'表示结束。
3.在试题的抽取中,定义一个voidrade的函数,用到”Rand”函数进行随机抽取,C++里的随机数是由一个种子按照固定的算法生成的随机数的序列,如果种子不变,那么随机数序列不变,你每次运行都是取到同一个随机数序列的第一个随机数,所以结果一样。
在所写的程序中没有时间种子,每次产生的随机数都是一样的。
设了时间种子以后,可以根据当前系统的时间来产生随机数,这样随机数每次执行都会不同。
4.在选取试题的时候,没有去判断所输入的题目数目是否再已建立的题库中找到相应的数目,为解决这个问题我们可以在获取试题前加入IFELSE条件语句进行提前判断。
六、实验心得
C++本身就学的不好,数据结构更没有学好,做起这个课设来说表示压力好大,什么都不会,抽到的一元一次的乘法运算自己运行了三天,错误改了一个又一个还是不得其法,很是心烦,一个一个错误的改,这个错误解决了,另一个错误又出来了,总之,做这个课设太辛苦了,都怪当初没学好,现在只能慢慢的去找方法去解决这些问题,在解决的日子中,不说有多大进步吧,还是有所收获的,以后有机会的话,希望能重新再做做这些题目。
七、参考文献
1、王红梅,数据结构,清华大学出版社
2、王红梅,数据结构学习辅导与实验指导,清华大学出版社
3、严蔚敏、吴伟民,《数据结构C语言版》,清华大学出版社(配题集)