考试系统.docx
《考试系统.docx》由会员分享,可在线阅读,更多相关《考试系统.docx(29页珍藏版)》请在冰豆网上搜索。
考试系统
//test.cpp:
Definestheentrypointfortheconsoleapplication.
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
/*题目*/
structQuestion{
intm_index;
charm_answer;
chars_answer;
charm_question[200];
charm_a_choice[50];
charm_b_choice[50];
charm_c_choice[50];
charm_d_choice[50];
Question*next;
};
/*从文件中加载所有试题*/
listload()
{
charfilename[20]="test.txt";
ifstreamfin(filename);
chartmp_str[400]={0};
listlist_q;
Question*p=newQuestion;
constchar*seperate="#";
char*result=NULL;
intnum=0;
while(fin.getline(tmp_str,400))
{
p->m_index=++num;
result=strtok(tmp_str,seperate);
strcpy(p->m_question,result);
result=strtok(NULL,seperate);
strcpy(p->m_a_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_b_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_c_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_d_choice,result);
result=strtok(NULL,seperate);
p->m_answer=result[0];
list_q.push_back(*p);
}
returnlist_q;
}
classStudent{
public:
/*学生登录*/
boollogin()
{
charid[10]={0};
charname[20]={0};
charpasswd[20]={0};
cin.ignore();
cout<<"Inputid:
";
cin.getline(id,10);
if(!
is_exist(id))
{
cout<<"youhavenotregisted,pleaseregistfirstly!
"<system("pause");
returnfalse;
}
for(inti=0;i<3;i++)
{
cout<<"Inputpassword:
";
cin.getline(passwd,20);
if(strcmp(m_passwd.c_str(),passwd))
{
cout<<"wrongpassword!
"<}
else
returntrue;
}
returnfalse;
}
/*答题
*包括获取试题
*开始答题
*判卷得分
*保存考试结果
*/
voidtest()
{
intq_num;
cout<<"inputthenumofquestionsyouwant:
";
cin>>q_num;
listlist_g;
list_g=get(q_num);
if(list_g.size()>0)
{
list_g=answer(list_g);
doublegrade=mark(list_g);
system("pause");
save(grade,list_g);
}
}
/*主菜单*/
voidmenu()
{
intx;
while
(1)
{
system("cls");
cout<cout<<"------------------------++您在学生界面++-----------------------------"<cout<cout<<"------------------------------------------------------------------------"<cout<<"*1.checkgrade*"<cout<<"------------------------------------------------------------------------"<cout<<"*2.checkquestions*"<cout<<"------------------------------------------------------------------------"<cout<<"*3.begintoanswerquestions*"<cout<<"------------------------------------------------------------------------"<cout<<"*0.exit*"<cout<<"------------------------------------------------------------------------"<cin>>x;
switch(x)
{
case1:
check_grade();
break;
case2:
check_question();
break;
case3:
test();
break;
case0:
cout<<"*youaregoingtobacktomainmenu*"<system("pause");
return;
default:
cout<<"*wronginput,pleaseinputagain*"<system("pause");
}
}
}
/*注册学生信息*/
voidregist(stringid,stringname,stringpasswd)
{
charfilename[20]="student.txt";
ofstreamfout(filename,ios:
:
app);
fout<<<}
/*判断此学生是否已经注册*/
boolis_exist(stringid)
{
charfilename[20]="student.txt";
ifstreamfin(filename);
chartmp_str[50]={0};
constchar*seperate="#";
char*result=NULL;
while(fin.getline(tmp_str,400))
{
result=strtok(tmp_str,seperate);
m_id=result;
if(m_id==id)
{
result=strtok(NULL,seperate);
m_name=result;
result=strtok(NULL,seperate);
m_passwd=result;
returntrue;
}
}
returnfalse;
}
/*查看历史得分*/
voidcheck_grade()
{
charfilename[20]="grades.txt";
ifstreamfin(filename);
chartmp_str[100]={0};
stringid;
stringname;
constchar*seperate="#";
char*result=NULL;
intnum=0;
boolhas_test=false;
while(fin.getline(tmp_str,100))
{
result=strtok(tmp_str,seperate);
id=result;
result=strtok(NULL,seperate);
name=result;
if(id==m_id)
{
has_test=true;
inttimes=0;
result=strtok(NULL,seperate);
while(result)
{
cout<<++times<<"times:
"<result=strtok(NULL,seperate);
}
break;
}
}
if(!
has_test)
cout<system("pause");
}
/*查看做过的试题*/
voidcheck_question()
{
stringfilename(m_id);
filename=filename+".txt";
ifstreamfin(filename.c_str());
chartmp_str[400]={0};
listlist_q;
Question*p=newQuestion;
constchar*seperate="#";
char*result=NULL;
intnum=0;
while(fin.getline(tmp_str,400))
{
p->m_index=++num;
result=strtok(tmp_str,seperate);
strcpy(p->m_question,result);
result=strtok(NULL,seperate);
strcpy(p->m_a_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_b_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_c_choice,result);
result=strtok(NULL,seperate);
strcpy(p->m_d_choice,result);
result=strtok(NULL,seperate);
p->m_answer=result[0];
result=strtok(NULL,seperate);
p->s_answer=result[0];
list_q.push_back(*p);
}
inti=0;
list:
:
iteratorit;
for(it=list_q.begin();it!
=list_q.end();it++)
{
cout<m_index<<')';
cout<m_question<cout<<"A."<m_a_choice<cout<<"B."<m_b_choice<cout<<"C."<m_c_choice<cout<<"D."<m_d_choice<cout<<"correctanswer:
"<m_answer<cout<<""<"<s_answer<i++;
if(i==3)
{
i=0;
system("pause");
}
}
cout<<"checkover!
"<system("pause");
}
private:
/*获取试题*/
listget(intnum)
{
listlist_q=load();
intq_size=list_q.size();
if(num>q_size)
num=q_size;
int*g_int=(int*)malloc(q_size*sizeof(int));
memset(g_int,0,sizeof(g_int)*q_size);
intno;
for(inti=0;i{
no=rand()%q_size;
while(g_int[no]==1)
{
no=rand()%q_size;
}
g_int[no]=1;
}
listlist_g;
list:
:
iteratorit;
intindex=0;
for(it=list_q.begin();it!
=list_q.end();it++)
{
if(g_int[it->m_index-1]==1)
{
cout<<++index<<')';
cout<m_question<cout<<"A."<m_a_choice<cout<<"B."<m_b_choice<cout<<"C."<m_c_choice<cout<<"D."<m_d_choice<it->m_index=index;
list_g.push_back(*it);
}
}
if(list_q.size()>0)
{
free(g_int);
cout<<"questionshavebeenreadyforyou!
pushanykeytobegintest"<}
else
cout<<"thereisnoquestionprepared,askteacheraddingquestionsfirstly"<system("pause");
returnlist_g;
}
/*答题*/
listanswer(listlist_g)
{
chara;
list:
:
iteratorit;
for(it=list_g.begin();it!
=list_g.end();it++)
{
cout<m_index<<')';
cout<m_question<cout<<"A."<m_a_choice<cout<<"B."<m_b_choice<cout<<"C."<m_c_choice<cout<<"D."<m_d_choice<cout<<"inputyouranswer:
";
cin>>a;
it->s_answer=a;
}
cout<<"youhavefinshedyourtest!
"<returnlist_g;
}
/*判卷,得出分数*/
doublemark(listlist_g)
{
intr_num=0;
list:
:
iteratorit;
for(it=list_g.begin();it!
=list_g.end();it++)
{
if(it->m_answer==it->s_answer)
r_num++;
}
cout<<"yourgradeis"<<(r_num*100.0)/list_g.size()<return(r_num*100.0)/list_g.size();
}
/*保存考试结果
*包括得分
*试题详细
*/
voidsave(doublegrade,listlist_g)
{
grade_save(grade);
stringdetail_file(m_id);
detail_file=detail_file+".txt";
ofstreamfout_detail(detail_file.c_str(),ios:
:
app);
list:
:
iteratorit;
for(it=list_g.begin();it!
=list_g.end();it++)
{
fout_detail<m_question<<'#'
<m_a_choice<<'#'
<m_b_choice<<'#'
<m_c_choice<<'#'
<m_d_choice<<'#'
<m_answer<<'#'
<s_answer<}
}
/*保存得分*/
voidgrade_save(doublegrade)
{
ostringstreamos;
os<stringgrade_file("grades.txt");
ifstreamfin(grade_file.c_str());
listlist_grade;
chartmp_str[100]={0};
constchar*seperate="#";
char*result=NULL;
stringline;
boolexist=false;
while(fin.getline(tmp_str,100))
{
line=tmp_str;
result=strtok(tmp_str,seperate);
if(!
strcmp(m_id.c_str(),result))
{
line=line+"#"+os.str();
exist=true;
}
cout<list_grade.push_back(line);
}
if(!
exist)
{
line=m_id+"#"+m_name+"#"+os.str();
list_grade.push_back(line);
}
ofstreamfout_grade(grade_file.c_str(),ios:
:
trunc);
list:
:
iteratorit;
for(it=list_grade.begin();it!
=list_grade.end();it++)
{
fout_grade<<*it<}
}
stringm_id;
stringm_name;
stringm_passwd;
};
classTeacher{
public:
Teacher(stringname="admin",stringpasswd