📄 paperdialog.cpp
字号:
UpdateData(false);
//根据记录指针位置设置记录切换按钮状态
if (m_recno>1)
{ //当前记录不是第一条记录,启用向前和第一条记录按钮
m_movefirst.EnableWindow(true);
m_moveprev.EnableWindow(true);
}
else
{ //当前记录是第一条记录,则禁用向前和第一条记录按钮
m_movefirst.EnableWindow(false);
m_moveprev.EnableWindow(false);
}
if (m_recno==m_reccount)
{ //当前记录是最后一条记录,禁用向后和最后一条记录按钮
m_movenext.EnableWindow(false);
m_movelast.EnableWindow(false);
}
else
{ if(m_recno>=0)
{ //若当前记录不是最后一条记录,则启用向后和最后一条记录按钮
m_movenext.EnableWindow(true);
m_movelast.EnableWindow(true);
}
}
}
void CPaperDialog::OnDestroy()
{
CDialog::OnDestroy();
//删除对话框中使用的各个记录集指针
if(m_pSetChapter)
delete m_pSetChapter;
if(m_pSetJudge)
delete m_pSetJudge;
if(m_pSetSpace)
delete m_pSetSpace;
if(m_pSetSingle)
delete m_pSetSingle;
if(m_pSetMore)
delete m_pSetMore;
if(m_pSetPaper)
delete m_pSetPaper;
if(m_pSetPaperData)
delete m_pSetPaperData;
}
void CPaperDialog::OnAddtest()
{
CString str;
m_type.GetWindowText(str);
UpdateData(true);
if("判断题"==str){//添加判断题
if (m_judgecount==m_seljudge){
MessageBox("判断题已选够!");
return;
}
str.Format("%d",m_pSetJudge->m_id);
if(LB_ERR == m_ctrjudge.FindStringExact(-1,str)){
//若试题编号不重复,则加入列表框
m_ctrjudge.AddString(str);
m_seljudge++;
}else
MessageBox("已选择了该题!");
}
if("填空题"==str){
if (m_spacecount==m_selspace){
MessageBox("填空题已选够!");
return;
}
str.Format("%d",m_pSetSpace->m_id);
if(LB_ERR ==m_ctrspace.FindStringExact(-1,str)){
//若试题编号不重复,则加入列表框
CString stra;
stra=m_pSetSpace->m_answer2;
//根据试题是否有两个空执行不同的操作
if(""==stra){
m_ctrspace.AddString(str);
m_selspace++;
}else{
//试题有两个空,需进一步检查是否可添加两个空的试题
if((m_spacecount-m_selspace)==1){
MessageBox("只能再添加一道只有一个的填空题!");
return;
}else{
m_ctrspace.AddString(str);
m_selspace+=2;
}
}
}else
MessageBox("已选择了该题!");
}
if("单选题"==str){
if (m_singlecount==m_selsingle){
MessageBox("单选题已选够!");
return;
}
str.Format("%d",m_pSetSingle->m_id);
if(LB_ERR ==m_ctrsingle.FindStringExact(-1,str)){
//若试题编号不重复,则加入列表框
m_ctrsingle.AddString(str);
m_selsingle++;
}else
MessageBox("已选择了该题!");
}
if("多选题"==str){
if (m_morecount==m_selmore) {
MessageBox("多选题已选够!");
return;
}
str.Format("%d",m_pSetMore->m_id);
if(LB_ERR ==m_ctrmore.FindStringExact(-1,str)){
//若试题编号不重复,则加入列表框
m_ctrmore.AddString(str);
m_selmore++;
}else
MessageBox("已选择了该题!");
}
UpdateData(false);
}
void CPaperDialog::OnDblclkListJudge()
{
int n=m_ctrjudge.GetCurSel();//获得双击项目的序号
m_ctrjudge.DeleteString(n); //删除项目
}
void CPaperDialog::OnDblclkListMore()
{
int n=m_ctrmore.GetCurSel();//获得双击项目的序号
m_ctrmore.DeleteString(n); //删除项目
}
void CPaperDialog::OnDblclkListSingle()
{
int n=m_ctrsingle.GetCurSel();//获得双击项目的序号
m_ctrsingle.DeleteString(n);//删除项目
}
void CPaperDialog::OnDblclkListSpace()
{
int n=m_ctrspace.GetCurSel();//获得双击项目的序号
m_ctrspace.DeleteString(n); //删除项目
}
void CPaperDialog::OnSelendokComboChapter()
{
CString str;
m_chapter.GetWindowText(str);//获得章节名称
m_pSetChapter->m_strFilter="name='" + str + "'";
m_pSetChapter->Requery();
str.Format("%d",m_pSetChapter->m_id);//获得章节编号
//使用获得的章节编号筛选各个记录集
m_pSetJudge->m_strFilter="chapterid=" + str;
m_pSetJudge->Requery();
m_pSetSpace->m_strFilter="chapterid=" + str;
m_pSetSpace->Requery();
m_pSetSingle->m_strFilter="chapterid=" + str;
m_pSetSingle->Requery();
m_pSetMore->m_strFilter="chapterid=" + str;
m_pSetMore->Requery();
//滚动记录集,使GetRecordCount函数返回总记录数
while(!m_pSetJudge->IsEOF())
m_pSetJudge->MoveNext();
m_pSetJudge->MoveFirst();
while(!m_pSetSpace->IsEOF())
m_pSetSpace->MoveNext();
m_pSetSpace->MoveFirst();
while(!m_pSetSingle->IsEOF())
m_pSetSingle->MoveNext();
m_pSetSingle->MoveFirst();
while(!m_pSetMore->IsEOF())
m_pSetMore->MoveNext();
m_pSetMore->MoveFirst();
m_recno=1;
ShowData("FISRT");//显示当前题型中的第一条记录试题内容
}
void CPaperDialog::OnSelchangeListJudge()
{
int n=m_ctrjudge.GetCurSel();//获得选中的判断题试题编号
m_type.SelectString(-1,"判断题");
CString str,id;
m_ctrjudge.GetText(n,id);
//在填空题记录集中找到该试题
m_pSetJudge->m_strFilter="id="+id;
m_pSetJudge->Requery();
//获得试题章节编号
n=m_pSetJudge->m_chapterid;
//获得章节名称
str.Format("%d",n);
m_pSetChapter->m_strFilter="id="+str;
m_pSetChapter->Requery();
//设置当前章节名称
m_chapter.SelectString(-1,m_pSetChapter->m_name);
//使用章节编号筛选判断题记录集
m_pSetJudge->m_strFilter="chapterid="+str;
m_pSetJudge->Requery();
while(!m_pSetJudge->IsEOF())
m_pSetJudge->MoveNext();
m_recno=1;
m_reccount=m_pSetJudge->GetRecordCount();
m_pSetJudge->MoveFirst();
while(!m_pSetJudge->IsEOF())
{ str.Format("%d",m_pSetJudge->m_id);
if(str!= id)
{
m_pSetJudge->MoveNext();
m_recno++;
}
else
{ break; }
}
//显示试题信息
m_content=m_pSetJudge->m_content;
str.Format("%d/%d",m_recno,m_reccount);
m_recnews=str;
UpdateData(false);
}
void CPaperDialog::OnSelchangeListMore()
{
int n=m_ctrmore.GetCurSel();//获得选中的多选题试题编号
m_type.SelectString(-1,"多选题");
CString str,id;
m_ctrmore.GetText(n,id);
//在单选题记录集中找到该试题
m_pSetMore->m_strFilter="id="+id;
m_pSetMore->Requery();
//获得试题章节编号
n=m_pSetMore->m_chapterid;
//获得章节名称
str.Format("%d",n);
m_pSetChapter->m_strFilter="id="+str;
m_pSetChapter->Requery();
//设置当前章节名称
m_chapter.SelectString(-1,m_pSetChapter->m_name);
//使用章节编号筛选多选题记录集
m_pSetMore->m_strFilter="chapterid="+str;
m_pSetMore->Requery();
while(!m_pSetMore->IsEOF())
m_pSetMore->MoveNext();
m_recno=1;
m_reccount=m_pSetMore->GetRecordCount();
m_pSetMore->MoveFirst();
while(!m_pSetMore->IsEOF())//根据试题编号定位记录
{ str.Format("%d",m_pSetMore->m_id);
if(str!= id)
{
m_pSetMore->MoveNext();
m_recno++;
}
else
{ break; }
}
//显示试题信息
m_content=m_pSetMore->m_content;
m_content+="\x00D\x00A(A)" +m_pSetMore->m_option1;
m_content+="\x00D\x00A(B)" +m_pSetMore->m_option2;
m_content+="\x00D\x00A(C)" +m_pSetMore->m_option3;
m_content+="\x00D\x00A(D)" +m_pSetMore->m_option4;
str.Format("%d/%d",m_recno,m_reccount);
m_recnews=str;
UpdateData(false);
}
void CPaperDialog::OnSelchangeListSingle()
{
int n=m_ctrsingle.GetCurSel();//获得选中的单选题试题编号
m_type.SelectString(-1,"单选题");
CString str,id;
m_ctrsingle.GetText(n,id);
//在单选题记录集中找到该试题
m_pSetSingle->m_strFilter="id="+id;
m_pSetSingle->Requery();
//获得试题章节编号
n=m_pSetSingle->m_chapterid;
//获得章节名称
str.Format("%d",n);
m_pSetChapter->m_strFilter="id="+str;
m_pSetChapter->Requery();
//设置当前章节名称
m_chapter.SelectString(-1,m_pSetChapter->m_name);
//使用章节编号筛选单选题记录集
m_pSetSingle->m_strFilter="chapterid="+str;
m_pSetSingle->Requery();
while(!m_pSetSingle->IsEOF())
m_pSetSingle->MoveNext();
m_recno=1;
m_reccount=m_pSetSingle->GetRecordCount();
m_pSetSingle->MoveFirst();
while(!m_pSetSingle->IsEOF()) //根据试题编号定位记录
{ str.Format("%d",m_pSetSingle->m_id);
if(str!= id)
{
m_pSetSingle->MoveNext();
m_recno++;
}
else
{ break; }
}
//显示试题信息
m_content=m_pSetSingle->m_content;
m_content+="\x00D\x00A(A)" +m_pSetSingle->m_option1;
m_content+="\x00D\x00A(B)" +m_pSetSingle->m_option2;
m_content+="\x00D\x00A(C)" +m_pSetSingle->m_option3;
m_content+="\x00D\x00A(D)" +m_pSetSingle->m_option4;
str.Format("%d/%d",m_recno,m_reccount);
m_recnews=str;
UpdateData(false);
}
void CPaperDialog::OnSelchangeListSpace()
{
int n=m_ctrspace.GetCurSel();//获得选中的填空题试题编号
m_type.SelectString(-1,"填空题");
CString str,id;
m_ctrspace.GetText(n,id);
//在填空题记录集中找到该试题
m_pSetSpace->m_strFilter="id="+id;
m_pSetSpace->Requery();
//获得试题章节编号
n=m_pSetSpace->m_chapterid;
//获得章节名称
str.Format("%d",n);
m_pSetChapter->m_strFilter="id="+str;
m_pSetChapter->Requery();
//设置当前章节名称
m_chapter.SelectString(-1,m_pSetChapter->m_name);
//使用章节编号筛选填空题记录集
m_pSetSpace->m_strFilter="chapterid="+str;
m_pSetSpace->Requery();
while(!m_pSetSpace->IsEOF())
m_pSetSpace->MoveNext();
m_recno=1;
m_reccount=m_pSetSpace->GetRecordCount();
m_pSetSpace->MoveFirst();
while(!m_pSetSpace->IsEOF()) //根据试题编号定位记录
{ str.Format("%d",m_pSetSpace->m_id);
if(str!= id)
{
m_pSetSpace->MoveNext();
m_recno++;
}
else
{ break; }
}
//显示试题信息
m_content=m_pSetSpace->m_content;
str.Format("%d/%d",m_recno,m_reccount);
m_recnews=str;
UpdateData(false);
}
void CPaperDialog::DoAutoSelect()
//自动随机选择试题
{ BeginWaitCursor();
srand( (unsigned)time( NULL ) );//设置随机数种子,使每次运行得到的随机数不同
CString id;
//滚动记录集,使GetRecordCount返回准确记录总数
while(!m_pSetJudge->IsEOF())
m_pSetJudge->MoveNext();
m_pSetJudge->MoveFirst();
while(!m_pSetSpace->IsEOF())
m_pSetSpace->MoveNext();
m_pSetSpace->MoveFirst();
while(!m_pSetSingle->IsEOF())
m_pSetSingle->MoveNext();
m_pSetSingle->MoveFirst();
while(!m_pSetMore->IsEOF())
m_pSetMore->MoveNext();
m_pSetMore->MoveFirst();
//选择判断题
m_reccount=m_pSetJudge->GetRecordCount();
while(m_judgecount!=m_seljudge)
{
m_recno=rand() % m_reccount;//获得随机的记录指针
m_pSetJudge->MoveFirst();
m_pSetJudge->Move(m_recno);//定位记录
//检查该试题是否已经选择
id.Format("%d",m_pSetJudge->m_id);
if(LB_ERR == m_ctrjudge.FindStringExact(-1,id))
{ //该试题还没有选择,则将其加入试题列表框
m_ctrjudge.AddString(id);
m_seljudge++;
}
}
//选择填空题
m_reccount=m_pSetSpace->GetRecordCount();
while(m_spacecount!=m_selspace)
{
m_recno=rand() % m_reccount;//获得随机的记录指针
m_pSetSpace->MoveFirst();
m_pSetSpace->Move(m_recno);//定位记录
id.Format("%d",m_pSetSpace->m_id);
if(LB_ERR ==m_ctrspace.FindStringExact(-1,id))
{ //该试题还没有选择,则将其加入试题列表框
//首先检查该题是否有两个空
CString stra;
stra=m_pSetSpace->m_answer2;
if(""==stra)
{ //只有一个空,选择该题
m_ctrspace.AddString(id);
m_selspace++;
}
else
{ //有两个空,检查是否还可选择两个空的题
if(2<=(m_spacecount-m_selspace))
{ //还可选择两个空的题,选择该题
m_ctrspace.AddString(id);
m_selspace+=2;
}
}
}
}
//选择单选题
m_reccount=m_pSetSingle->GetRecordCount();
while(m_singlecount!=m_selsingle)
{
m_recno=rand() % m_reccount;//获得随机的记录指针
m_pSetSingle->MoveFirst();
m_pSetSingle->Move(m_recno);//定位记录
id.Format("%d",m_pSetSingle->m_id);
if(LB_ERR ==m_ctrsingle.FindStringExact(-1,id))
{ //该试题还没有选择,则将其加入试题列表框
m_ctrsingle.AddString(id);
m_selsingle++;
}
}
//选择多选题
m_reccount=m_pSetMore->GetRecordCount();
while(m_morecount!=m_selmore)
{
m_recno=rand() % m_reccount;//获得随机的记录指针
m_pSetMore->MoveFirst();
m_pSetMore->Move(m_recno);//定位记录
id.Format("%d",m_pSetMore->m_id);
if(LB_ERR ==m_ctrmore.FindStringExact(-1,id))
{ //该试题还没有选择,则将其加入试题列表框
m_ctrmore.AddString(id);
m_selmore++;
}
}
UpdateData(false);
EndWaitCursor();
}
int CPaperDialog::StringToInt(CString str)
{//将一个CString变量转换为对应的数
int index,length,result;
char c;
index=0;
result=0;
length=str.GetLength();
while(index<length)
{
c=str[index];
if (c>='0' && c<='9')
{
result=result *10 +c-48;//'0'的ASCII码为48
index++;
}
else
break;
}
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -