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

📄 qstionmodifydlg.cpp

📁 一个在线考试系统的代码。功能包括考试科目管理
💻 CPP
字号:
// QstionModifyDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ExmOnline.h"
#include "QstionModifyDlg.h"

#include "ExmOnlineDlg.h"
#include "ADOConn.h"

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

/////////////////////////////////////////////////////////////////////////////
// CQstionModifyDlg dialog


CQstionModifyDlg::CQstionModifyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQstionModifyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQstionModifyDlg)
	m_iFlag=0;
	m_iSelAns = -1;
	m_iJdgAns = -1;
	m_strBlkAns = _T("");
	m_strSelectionA = _T("");
	m_strSelectionB = _T("");
	m_strSelectionC = _T("");
	m_strSelectionD = _T("");
	m_strQstion = _T("");
	//}}AFX_DATA_INIT
}


void CQstionModifyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQstionModifyDlg)
	DDX_Control(pDX, IDC_COMBO_QSTIONTYPE, m_ctrQstionType);
	DDX_Control(pDX, IDC_LIST_QSTIONS, m_ctrQstionList);
	DDX_Control(pDX, IDC_COMBO_SUBJCT, m_ctrSubjct);
	DDX_Radio(pDX, IDC_RADIO_ANSA, m_iSelAns);
	DDX_Radio(pDX, IDC_RADIO_FALSE, m_iJdgAns);
	DDX_Text(pDX, IDC_EDIT_BLKANS, m_strBlkAns);
	DDX_Text(pDX, IDC_RICHEDIT_ANSA, m_strSelectionA);
	DDX_Text(pDX, IDC_RICHEDIT_ANSB, m_strSelectionB);
	DDX_Text(pDX, IDC_RICHEDIT_ANSC, m_strSelectionC);
	DDX_Text(pDX, IDC_RICHEDIT_ANSD, m_strSelectionD);
	DDX_Text(pDX, IDC_RICHEDIT_QSTION, m_strQstion);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQstionModifyDlg, CDialog)
	//{{AFX_MSG_MAP(CQstionModifyDlg)
	ON_CBN_SELCHANGE(IDC_COMBO_SUBJCT, OnSelchangeComboSubjct)
	ON_CBN_SELCHANGE(IDC_COMBO_QSTIONTYPE, OnSelchangeComboQstiontype)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_QSTIONS, OnItemchangedListQstions)
	ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQstionModifyDlg message handlers

BOOL CQstionModifyDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CExmOnlineDlg::m_ptrData->SetSelSubjct(&m_ctrSubjct);

	m_ctrQstionList.SetExtendedStyle(LVS_EX_FLATSB
		|LVS_EX_FULLROWSELECT
		|LVS_EX_HEADERDRAGDROP
		|LVS_EX_ONECLICKACTIVATE
		|LVS_EX_GRIDLINES);
	m_ctrQstionList.InsertColumn(0,"题目ID",LVCFMT_CENTER,70,0);
	m_ctrQstionList.InsertColumn(1,"题目",LVCFMT_LEFT,500,1);

	GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);

	HideAll();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CQstionModifyDlg::OnSelchangeComboSubjct() 
{
	// TODO: Add your control notification handler code here
	if(m_ctrSubjct.GetCurSel()!=-1)
	{
		m_iFlag|=1;			//已经选择了科目
		m_ctrSubjct.GetLBText(m_ctrSubjct.GetCurSel(),m_strSubjct);
		CExmOnlineDlg::m_ptrData->SSetSubjct(m_strSubjct);
	}
	if(m_iFlag==3)
	{
		m_ctrQstionList.DeleteAllItems();
		ShowQstions();
	}
}

void CQstionModifyDlg::ShowQstions()
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();

	CString sql;
	CString base;
	base.Format("%s库名称",m_strQstionType);
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubjct);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString basename=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect((_bstr_t)base);
	sql.Format("select * from %s",basename);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	int i=0;
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		m_ctrQstionList.InsertItem(i,"");
		m_ctrQstionList.SetItemText(i,0,(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("试题ID"));
		m_ctrQstionList.SetItemText(i,1,(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("题目"));
		Adoconn.m_pRecordset->MoveNext();
		i++;
	}
	Adoconn.ExitConnect();
}

void CQstionModifyDlg::OnSelchangeComboQstiontype() 
{
	// TODO: Add your control notification handler code here
	if(m_ctrQstionType.GetCurSel()!=-1)
	{
		m_iFlag|=2;			//已经选择了题型
		m_ctrQstionType.GetLBText(m_ctrQstionType.GetCurSel(),m_strQstionType);
		if(m_ctrQstionType.GetCurSel()==2)
			ShowSel();
		else if(m_ctrQstionType.GetCurSel()==1)
			ShowBlk();
		else if(m_ctrQstionType.GetCurSel()==0)
			ShowJdg();
	}
	if(m_iFlag==3)
	{
		m_ctrQstionList.DeleteAllItems();
		ShowQstions();
	}
}

void CQstionModifyDlg::HideAll()
{
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSD)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);
}

void CQstionModifyDlg::ShowSel()
{
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSD)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC_ANSA)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC_ANSB)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC_ANSC)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_STATIC_ANSD)->ShowWindow(SW_SHOW);

}

void CQstionModifyDlg::ShowBlk()
{
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSD)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_SHOW);
}

void CQstionModifyDlg::ShowJdg()
{
	GetDlgItem(IDC_RICHEDIT_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RICHEDIT_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_ANSD)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSA)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSB)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSC)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_STATIC_ANSD)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_EDIT_BLKANS)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_HIDE);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_HIDE);

	GetDlgItem(IDC_RADIO_FALSE)->ShowWindow(SW_SHOW);
	GetDlgItem(IDC_RADIO_TRUE)->ShowWindow(SW_SHOW);
}

void CQstionModifyDlg::OnItemchangedListQstions(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	int iQstionID=atoi(m_ctrQstionList.GetItemText((int)m_ctrQstionList.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED),0));

	if(!m_ctrQstionList.GetFirstSelectedItemPosition())
	{
		GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);
		ClearEditCtrls();
	}
	else
	{
		GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(TRUE);
		
		if(m_strQstionType=="选择题")
		{
			CExmOnlineDlg::m_ptrData->GetSelBase(m_strSubjct);
			m_strQstion=CExmOnlineDlg::m_ptrData->GetSelQstion(iQstionID);
			CExmOnlineDlg::m_ptrData->TReadSelAns(iQstionID);
			m_strSelectionA=CExmOnlineDlg::m_ptrData->GetAnsA();
			m_strSelectionB=CExmOnlineDlg::m_ptrData->GetAnsB();
			m_strSelectionC=CExmOnlineDlg::m_ptrData->GetAnsC();
			m_strSelectionD=CExmOnlineDlg::m_ptrData->GetAnsD();

			UpdateData(FALSE);
		}
		else if(m_strQstionType=="填空题")
		{
			CExmOnlineDlg::m_ptrData->GetBlkBase(m_strSubjct);
			m_strQstion=CExmOnlineDlg::m_ptrData->GetBlkQstion(iQstionID);
			m_strBlkAns=CExmOnlineDlg::m_ptrData->TReadBlkAns(iQstionID);
			UpdateData(FALSE);
		}
		else if(m_strQstionType=="判断题")
		{
			CExmOnlineDlg::m_ptrData->GetJdgBase(m_strSubjct);
			m_strQstion=CExmOnlineDlg::m_ptrData->GetJdgQstion(iQstionID);
			m_iJdgAns=CExmOnlineDlg::m_ptrData->TReadJdgAns(iQstionID);
			UpdateData(FALSE);
		}
	}
	*pResult = 0;
}

void CQstionModifyDlg::ClearEditCtrls()
{
	GetDlgItem(IDC_RICHEDIT_QSTION)->SetWindowText("");
	GetDlgItem(IDC_RICHEDIT_ANSA)->SetWindowText("");
	GetDlgItem(IDC_RICHEDIT_ANSB)->SetWindowText("");
	GetDlgItem(IDC_RICHEDIT_ANSC)->SetWindowText("");
	GetDlgItem(IDC_RICHEDIT_ANSD)->SetWindowText("");
	GetDlgItem(IDC_EDIT_BLKANS)->SetWindowText("");
}

void CQstionModifyDlg::OnButtonDelete() 
{
	// TODO: Add your control notification handler code here
	int iQstionID=atoi(m_ctrQstionList.GetItemText((int)m_ctrQstionList.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED),0));
	
	CString basename;
	basename.Format("%s库名称",m_strQstionType);
	CString base;
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubjct);
	ADOConn Adoconn;
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	base=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect((_bstr_t)basename);
	sql.Format("delete from %s where 试题ID=%d",base,iQstionID);
	Adoconn.ExecuteSQL((_bstr_t)sql);

	Adoconn.ExitConnect();
	CExmOnlineDlg::m_ptrData->UpdateQstionID(base);
	m_ctrQstionList.DeleteAllItems();
	ShowQstions();
}

⌨️ 快捷键说明

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