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

📄 examdlg.cpp

📁 一个在线考试系统的代码。功能包括考试科目管理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ExamDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ExmOnline.h"
#include "ExamDlg.h"

#include "ExmOnlineDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CExamDlg dialog


CExamDlg::CExamDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CExamDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CExamDlg)
	m_iSSelect = -1;
	m_strAnsA = _T("");
	m_strAnsC = _T("");
	m_strAnsB = _T("");
	m_strAnsD = _T("");
	m_strQstion = _T("");
	m_strBlkAns = _T("");
	m_iJudgement = -1;
	//}}AFX_DATA_INIT
}


void CExamDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CExamDlg)
	DDX_Radio(pDX, IDC_RADIO_ANSA, m_iSSelect);
	DDX_Text(pDX, IDC_RICHEDIT_ANSA, m_strAnsA);
	DDX_Text(pDX, IDC_RICHEDIT_ANSC, m_strAnsC);
	DDX_Text(pDX, IDC_RICHEDIT_ANSB, m_strAnsB);
	DDX_Text(pDX, IDC_RICHEDIT_ANSD, m_strAnsD);
	DDX_Text(pDX, IDC_RICHEDIT_QSTION, m_strQstion);
	DDX_Text(pDX, IDC_EDIT_BLKANS, m_strBlkAns);
	DDX_Radio(pDX, IDC_RADIO_TRUE, m_iJudgement);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CExamDlg, CDialog)
	//{{AFX_MSG_MAP(CExamDlg)
	ON_BN_CLICKED(IDC_BUTTON_SEL, OnButtonSel)
	ON_BN_CLICKED(IDC_BUTTON_BLK, OnButtonBlk)
	ON_BN_CLICKED(IDC_BUTTON_PRE, OnButtonPre)
	ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)
	ON_BN_CLICKED(IDC_BUTTON_JUDGE, OnButtonJudge)
	ON_BN_CLICKED(IDC_BUTTON_SUBMIT, OnButtonSubmit)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CExamDlg message handlers

BOOL CExamDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	//初始化时间
	int temptime=CExmOnlineDlg::m_ptrData->ReadTime();
	CExmOnlineDlg::m_ptrData->InitTime(temptime);
	m_strTime.Format("剩余时间:%d:%d:%d",
		CExmOnlineDlg::m_ptrData->GetHour(),
		CExmOnlineDlg::m_ptrData->GetMinute(),
		CExmOnlineDlg::m_ptrData->GetSecond());
	GetDlgItem(IDC_STATIC_NOTICE)->SetWindowText(m_strTime);
	SetTimer(0,995,NULL);
	//显示选择题答题区域
	GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_SHOW);
	//隐藏其他题型答题区域
	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_BLK)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);

	//获取各题型的题量
	//int temp=		//测试用
	m_iNumSel=CExmOnlineDlg::m_ptrData->GetSelNum(CExmOnlineDlg::m_ptrData->SGetsubjct());
	m_iNumBlk=CExmOnlineDlg::m_ptrData->GetBlkNum(CExmOnlineDlg::m_ptrData->SGetsubjct());
	m_iNumJdg=CExmOnlineDlg::m_ptrData->GetJdgNum(CExmOnlineDlg::m_ptrData->SGetsubjct());

	//初始化记录选择题选项的数组
	CExmOnlineDlg::m_ptrData->InitSSelectionArr();
	CExmOnlineDlg::m_ptrData->InitSJudgementArr();

	//初始化所有题型的完成状态为未完成
	CExmOnlineDlg::m_ptrData->InitCmpltedArr();

	//初始化对话框时默认显示选择题
	CExmOnlineDlg::m_ptrData->SetQstionTypeSel();

	//初始化抽题ID数组
	CExmOnlineDlg::m_ptrData->InitSelArr();
	CExmOnlineDlg::m_ptrData->InitBlkArr();
	CExmOnlineDlg::m_ptrData->InitJdgArr();

	//生成抽题随机数
	CExmOnlineDlg::m_ptrData->GeneratRandom(CExmOnlineDlg::m_ptrData->GetSelIDArr(),
		CExmOnlineDlg::m_ptrData->GetSelNum(CExmOnlineDlg::m_ptrData->SGetsubjct()));
	CExmOnlineDlg::m_ptrData->GeneratRandomBlk(CExmOnlineDlg::m_ptrData->GetBlkIDArr(),
		CExmOnlineDlg::m_ptrData->GetBlkNum(CExmOnlineDlg::m_ptrData->SGetsubjct()));
	CExmOnlineDlg::m_ptrData->GeneratRandomJdg(CExmOnlineDlg::m_ptrData->GetJdgIDArr(),
		CExmOnlineDlg::m_ptrData->GetJdgNum(CExmOnlineDlg::m_ptrData->SGetsubjct()));
	
	//初始化各种题型的当前序号为0	
	CExmOnlineDlg::m_ptrData->InitSqnceNum();
	//设置当前考试科目所用的选择、填空和判断题题库名(未完成判断部分)
	CExmOnlineDlg::m_ptrData->GetSelBase(CExmOnlineDlg::m_ptrData->SGetsubjct());
	CExmOnlineDlg::m_ptrData->GetBlkBase(CExmOnlineDlg::m_ptrData->SGetsubjct());
	CExmOnlineDlg::m_ptrData->GetJdgBase(CExmOnlineDlg::m_ptrData->SGetsubjct());

	//显示题目
	m_strNotify.Format("选择题:共%d题,当前为第%d题",m_iNumSel,
		CExmOnlineDlg::m_ptrData->GetSelSeqnce()+1);
	GetDlgItem(IDC_STATIC_QSTION)->SetWindowText(m_strNotify);
	GetDlgItem(IDC_RICHEDIT_QSTION)->SetWindowText(
		CExmOnlineDlg::m_ptrData->GetSelQstion(CExmOnlineDlg::m_ptrData->GetSelID()));
	//从数据库中获取并设置选项
	CExmOnlineDlg::m_ptrData->SetSelAns();
	//显示四个选项
	GetDlgItem(IDC_RICHEDIT_ANSA)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsA());
	GetDlgItem(IDC_RICHEDIT_ANSB)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsB());
	GetDlgItem(IDC_RICHEDIT_ANSC)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsC());
	GetDlgItem(IDC_RICHEDIT_ANSD)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsD());

	GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(FALSE);
	if(CExmOnlineDlg::m_ptrData->GetSelSeqnce()==CExmOnlineDlg::m_ptrData->GetSelNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1)
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CExamDlg::OnButtonSel() 
{
	// TODO: Add your control notification handler code here
	//显示选择题答题区域
	GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_SHOW);
	//隐藏其他题型答题区域
	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_BLK)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);

	if(CExmOnlineDlg::m_ptrData->GetQstionType()==1)
	{
		UpdateData();
		
		CExmOnlineDlg::m_ptrData->SetSBlkAns(m_strBlkAns);
		CExmOnlineDlg::m_ptrData->WriteBlkResult();

	}
	else if(CExmOnlineDlg::m_ptrData->GetQstionType()==2)
	{
		UpdateData();
		
		CExmOnlineDlg::m_ptrData->SetSJdgAns(m_iJudgement);
		CExmOnlineDlg::m_ptrData->SetSJudgement(m_iJudgement);
		CExmOnlineDlg::m_ptrData->WriteJdgResult();
	}

	CExmOnlineDlg::m_ptrData->SetQstionTypeSel();
	m_strNotify.Format("选择题:共%d题,当前为第%d题",m_iNumSel,
		CExmOnlineDlg::m_ptrData->GetSelSeqnce()+1);
	GetDlgItem(IDC_STATIC_QSTION)->SetWindowText(m_strNotify);
	GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(TRUE);
	if (CExmOnlineDlg::m_ptrData->GetSelSeqnce()==0)
	{
		GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(FALSE);
	} 
	else if(CExmOnlineDlg::m_ptrData->GetSelSeqnce()==CExmOnlineDlg::m_ptrData->GetSelNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1)
	{
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);
	}
	else if(CExmOnlineDlg::m_ptrData->GetSelSeqnce()>0 && 
		CExmOnlineDlg::m_ptrData->GetSelSeqnce()<CExmOnlineDlg::m_ptrData->GetSelNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1)
	{
		GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(TRUE);
	}
	if(CExmOnlineDlg::m_ptrData->GetSelSeqnce()==CExmOnlineDlg::m_ptrData->GetSelNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1 || CExmOnlineDlg::m_ptrData->GetSelNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())==0)
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);

	GetDlgItem(IDC_RICHEDIT_QSTION)->SetWindowText(
		CExmOnlineDlg::m_ptrData->GetSelQstion(CExmOnlineDlg::m_ptrData->GetSelID()));
	//从数据库中获取并设置选项
	CExmOnlineDlg::m_ptrData->SetSelAns();
	//显示四个选项
	GetDlgItem(IDC_RICHEDIT_ANSA)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsA());
	GetDlgItem(IDC_RICHEDIT_ANSB)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsB());
	GetDlgItem(IDC_RICHEDIT_ANSC)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsC());
	GetDlgItem(IDC_RICHEDIT_ANSD)->SetWindowText(CExmOnlineDlg::m_ptrData->GetAnsD());	

}

void CExamDlg::OnButtonBlk() 
{
	// TODO: Add your control notification handler code here

	//显示填空题答题区域
	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC_BLK)->ShowWindow(SW_SHOW);
	//隐藏其他题型答题区域
	GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);

	if(CExmOnlineDlg::m_ptrData->GetQstionType()==0)
	{
		UpdateData();
		
		CExmOnlineDlg::m_ptrData->SetSAns(m_iSSelect);
		CExmOnlineDlg::m_ptrData->SetSSelection(m_iSSelect);
		CExmOnlineDlg::m_ptrData->WriteSelResult();

	}
	else if(CExmOnlineDlg::m_ptrData->GetQstionType()==2)
	{
		UpdateData();
		
		CExmOnlineDlg::m_ptrData->SetSJdgAns(m_iJudgement);
		CExmOnlineDlg::m_ptrData->SetSJudgement(m_iJudgement);
		CExmOnlineDlg::m_ptrData->WriteJdgResult();
	}

	CExmOnlineDlg::m_ptrData->SetQstionTypeBlk();
	m_strNotify.Format("填空题:共%d题,当前为第%d题",m_iNumBlk,
		CExmOnlineDlg::m_ptrData->GetBlkSeqnce()+1);
	GetDlgItem(IDC_STATIC_QSTION)->SetWindowText(m_strNotify);

	GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(TRUE);


	if (CExmOnlineDlg::m_ptrData->GetBlkSeqnce()==0)
	{
		GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(FALSE);
	} 
	else if(CExmOnlineDlg::m_ptrData->GetBlkSeqnce()==CExmOnlineDlg::m_ptrData->GetBlkNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1)
	{
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);
	}
	else
	{
		GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(TRUE);
	}
	if(CExmOnlineDlg::m_ptrData->GetBlkSeqnce()==CExmOnlineDlg::m_ptrData->GetBlkNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())-1 || CExmOnlineDlg::m_ptrData->GetBlkNum(
		CExmOnlineDlg::m_ptrData->SGetsubjct())==0)
		GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(FALSE);

	GetDlgItem(IDC_RICHEDIT_QSTION)->SetWindowText(
		CExmOnlineDlg::m_ptrData->GetBlkQstion(CExmOnlineDlg::m_ptrData->GetBlkID()));

	CExmOnlineDlg::m_ptrData->SetBlkAns();
}

void CExamDlg::OnButtonPre() 
{
	// TODO: Add your control notification handler code here
	if(CExmOnlineDlg::m_ptrData->GetQstionType()==0)
	{
		//保存当前题有关信息
		UpdateData();
		
		CExmOnlineDlg::m_ptrData->SetSAns(m_iSSelect);
		CExmOnlineDlg::m_ptrData->SetSSelection(m_iSSelect);
		CExmOnlineDlg::m_ptrData->WriteSelResult();

		//显示上一题
		CExmOnlineDlg::m_ptrData->DecreaseSel();
		m_strNotify.Format("选择题:共%d题,当前为第%d题",m_iNumSel,
			CExmOnlineDlg::m_ptrData->GetSelSeqnce()+1);
		GetDlgItem(IDC_STATIC_QSTION)->SetWindowText(m_strNotify);

		m_iSSelect=CExmOnlineDlg::m_ptrData->GetSSelection();
		UpdateData(FALSE);

		int current=CExmOnlineDlg::m_ptrData->GetSelSeqnce();
		if(current==0)
		{
			GetDlgItem(IDC_BUTTON_PRE)->EnableWindow(FALSE);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -