⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paperdialog.cpp

📁 VIUSAL C++实现的考试管理系统,涉及到试卷生成,成绩记录等功能.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -