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

📄 testseledlg.cpp

📁 VC实现word 和ACCESS数据库的连接
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// TestSeleDlg.cpp : implementation file
//

#include "stdafx.h"
#include "wordpad.h"
#include "TestSeleDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTestSeleDlg dialog


CTestSeleDlg::CTestSeleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestSeleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestSeleDlg)
	m_EditModulusMax = 100;
	m_EditModulusMin = 10;
	m_EditPaperEvenModulus = 0.1f;
	m_EditTestScore = 1;
	m_EditPaperTotalScore = 1;
	m_CurTestType = _T("");
	m_EditTestNum = 1;
	//}}AFX_DATA_INIT
}


void CTestSeleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestSeleDlg)
	DDX_Control(pDX, IDC_SPIN_TEST_SCORE, m_SpinButtonTestScore);
	DDX_Control(pDX, IDC_SPIN_DIFFCULT_MODULUS_MAX, m_SpinModulusMax);
	DDX_Control(pDX, IDC_SPIN_DIFFCULT_MODULUS_MIN, m_SpinModulusMin);
	DDX_Control(pDX, IDC_SPIN_TESTNUM, m_SpinTesNum);
	DDX_Control(pDX, IDC_LIST_TEST_SELE_INFO, m_TestSeleInfoListctrl);
	DDX_Control(pDX, IDC_LIST_TEST_TYPE, m_TestTypeListbox);
	DDX_Text(pDX, IDC_EDIT_DIFFCULT_MODULUS_MAX, m_EditModulusMax);
	DDV_MinMaxInt(pDX, m_EditModulusMax, 10, 100);
	DDX_Text(pDX, IDC_EDIT_DIFFCULT_MODULUS_MIN, m_EditModulusMin);
	DDV_MinMaxInt(pDX, m_EditModulusMin, 10, 100);
	DDX_Text(pDX, IDC_EDIT_TEST_EVEN_MODULUS, m_EditPaperEvenModulus);
	DDX_Text(pDX, IDC_EDIT_TEST_SCORE, m_EditTestScore);
	DDV_MinMaxInt(pDX, m_EditTestScore, 1, 100);
	DDX_Text(pDX, IDC_EDIT_TEST_TOTAL_SCORE, m_EditPaperTotalScore);
	DDV_MinMaxInt(pDX, m_EditPaperTotalScore, 1, 100);
	DDX_Text(pDX, IDC_EDIT_TEST_TYPE, m_CurTestType);
	DDX_Text(pDX, IDC_EDIT_TESTNUM, m_EditTestNum);
	DDV_MinMaxInt(pDX, m_EditTestNum, 1, 100);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestSeleDlg, CDialog)
	//{{AFX_MSG_MAP(CTestSeleDlg)
	ON_LBN_SELCHANGE(IDC_LIST_TEST_TYPE, OnSelchangeListTestType)
	ON_BN_CLICKED(IDC_BUTTON_HANDIN, OnButtonHandin)
	ON_EN_CHANGE(IDC_EDIT_DIFFCULT_MODULUS_MIN, OnChangeEditDiffcultModulusMin)
	ON_EN_CHANGE(IDC_EDIT_DIFFCULT_MODULUS_MAX, OnChangeEditDiffcultModulusMax)
	ON_BN_CLICKED(IDC_BUTTON_VIEW_TEST_PAPER, OnButtonViewTestPaper)
	ON_EN_CHANGE(IDC_EDIT_TESTNUM, OnChangeEditTestnum)
	ON_NOTIFY(NM_OUTOFMEMORY, IDC_SPIN_TESTNUM, OnOutofmemorySpinTestnum)
	ON_EN_CHANGE(IDC_EDIT_TEST_TYPE, OnChangeEditTestType)
	ON_EN_CHANGE(IDC_EDIT_TEST_TOTAL_SCORE, OnChangeEditTestTotalScore)
	///ON_LBN_SELCHANGE(IDC_LIST_KNOWLDGEPIONT, OnSelchangeListKnowldgepiont)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestSeleDlg message handlers

BOOL CTestSeleDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_SpinTesNum.SetBuddy(GetDlgItem(IDC_EDIT_TESTNUM));
	m_SpinTesNum.SetBase(1);
	m_SpinTesNum.SetRange(1,100);

	m_SpinModulusMin.SetBuddy(GetDlgItem(IDC_EDIT_DIFFCULT_MODULUS_MIN));
	m_SpinModulusMin.SetBase(11);
	m_SpinModulusMin.SetRange(11,100);

	m_SpinModulusMax.SetBuddy(GetDlgItem(IDC_EDIT_DIFFCULT_MODULUS_MAX));
	m_SpinModulusMax.SetBase(11);
	m_SpinModulusMax.SetRange(11,100);
	m_SpinModulusMax.SetPos(100);

	m_SpinButtonTestScore.SetBuddy(GetDlgItem(IDC_EDIT_TEST_SCORE));
	m_SpinButtonTestScore.SetBase(1);
	m_SpinButtonTestScore.SetRange(1,100);
	
	m_TestSeleInfoListctrl.InsertColumn(0, _T("试题类型"), LVCFMT_LEFT,100);
	m_TestSeleInfoListctrl.InsertColumn(1, _T("该类试题总分"),LVCFMT_LEFT,100);
	m_TestSeleInfoListctrl.InsertColumn(2, _T("该类试题难度"),LVCFMT_LEFT,140);
	m_TestSeleInfoListctrl.InsertColumn(3, _T("该类试题数目"),LVCFMT_LEFT,100);
	m_TestSeleInfoListctrl.ViewGridLines();
	UpdateData(FALSE);

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

void CTestSeleDlg::_ReadTestTypeToListbox()
{
	if(!m_TestDB.IsOpen())
		m_TestDB.Open(AFX_DAO_USE_DEFAULT_TYPE, NULL,0 );
	m_TestDB.MoveFirst();
	 	
	while(!m_TestDB.IsEOF())
	{
		int len=this->m_TestTypeListbox.GetCount();
		BOOL isAdd=FALSE;
		for(int i=0;i<len;i++)
		{
			CString TestType;
			m_TestTypeListbox.GetText(i,TestType);
			if(TestType==m_TestDB.m_column1)
			{
				isAdd=TRUE;
				break;
			}
		}
		if(!isAdd)
			m_TestTypeListbox.InsertString(len,m_TestDB.m_column1);

		m_TestDB.MoveNext();
	}
	m_TestDB.Close();
}

void CTestSeleDlg::OnSelchangeListTestType() 
{	

	int index=m_TestTypeListbox.GetCurSel();
	if(index<0)return;
	m_TestTypeListbox.GetText(index,m_CurTestType);
	UpdateData(FALSE);
	_ReadCurTestSetToInteface();
	_SetTesttypeItemState();
	
}

void CTestSeleDlg::OnButtonHandin() 
{
	if(_GetCurSelTestIndex()!=-1)
		_WriteCurSetToTest();	
	else
		_NewTestType();//新建记录

	if(!_SelectTest1())//从数据库中查询符合试题类型和难度系数的记录
		return;
	_SelectTest2();
	_CalCurTestScore();
	
	_ReadPaperInforToListControl();
	_SetTesttypeItemState();
}


//新建试题类型
void CTestSeleDlg::_NewTestType()
{
	UpdateData(TRUE);
	UpdateData(FALSE);
	//检测难度系数
	if(m_CurTestType=="")
		return;
	//从界面上获取当前试题设置	
	TestContent* curContent=new TestContent;
	curContent->m_TestType1=this->m_CurTestType;//试题类型
	curContent->m_TestNum=this->m_EditTestNum;//试题数目
	//试题难度系数范围
	curContent->m_DifficultModulusMin=this->m_EditModulusMin/100.0;
	curContent->m_DifficultModulusMax=this->m_EditModulusMax/100.0;


	curContent->m_AverageModulus=0.1;

	curContent->m_Score=this->m_EditTestScore;//试题总分数
	m_TestRecordArray.Add(curContent);
}

BOOL CTestSeleDlg::_SelectTest1()
{	
	int index=_GetCurSelTestIndex();
	if(index==-1)return FALSE;	
	TestContent*curContent=m_TestRecordArray.GetAt(index);
	curContent->m_SelectArray1.RemoveAll();
	if(!m_TestDB.IsOpen())
		m_TestDB.Open(AFX_DAO_USE_DEFAULT_TYPE,NULL,0);
	m_TestDB.MoveFirst();
	int kk=0;
	while(!m_TestDB.IsEOF())
	{
		//题型判定
		if(	curContent->m_TestType1==m_TestDB.m_column1)
		{
		//难度系数判定
			if(m_TestDB.m_column2>=curContent->m_DifficultModulusMin&&
				m_TestDB.m_column2<=curContent->m_DifficultModulusMax)
			curContent->m_SelectArray1.Add(kk);

		}
	
		m_TestDB.MoveNext();
		kk++;
	}
	
	m_TestDB.Close();
	if(curContent->m_SelectArray1.GetSize()<curContent->m_TestNum)
	{
		AfxMessageBox("试题库中没有满足该条件的足够的该类型的试题");
		return FALSE;
	}
	return TRUE;
}

BOOL CTestSeleDlg::_SelectTest2()
{
	
	//根据对话框中选中的数目随机抽取
	int index=_GetCurSelTestIndex();
	if(index==-1)return FALSE;	
	TestContent*curContent=m_TestRecordArray.GetAt(index);

	srand(1000);
	int len=curContent->m_SelectArray1.GetSize();
	
	int HaveFinished=0;
	while (HaveFinished<curContent->m_TestNum)
	{
		int jj=int( (double)rand()/(double)RAND_MAX*len);
		int index=curContent->m_SelectArray1.GetAt(jj);
		int length=curContent->m_SelectArray2.GetSize();
		BOOL IsAdd=FALSE;
		for(int j=0;j<length;j++)
		{
			int index1=curContent->m_SelectArray2.GetAt(j);
			if(index1==index)
			{
				IsAdd=TRUE;	
				break;
			}
		}
		if(!IsAdd)
		{
			curContent->m_SelectArray2.Add(index);
			HaveFinished++;
		}
	}
	return TRUE;
}
int CTestSeleDlg::_GetCurSelTestIndex()
{		
	UpdateData(TRUE);
	UpdateData(FALSE);
	int len=m_TestRecordArray.GetSize ();
	for(int i=0;i<len;i++)
	{
		TestContent* content=m_TestRecordArray.GetAt(i);
		if(content->m_TestType1==this->m_CurTestType)
			return i;
	}
 return -1;
}


void CTestSeleDlg::_WriteCurSetToTest()
{
	UpdateData(TRUE);
	UpdateData(FALSE);
	int index=_GetCurSelTestIndex();
	TestContent*curContent=m_TestRecordArray.GetAt(index);
	curContent->m_TestType1=this->m_CurTestType;//试题类型
	curContent->m_TestNum=this->m_EditTestNum;//试题数目
	//试题难度系数范围
	curContent->m_DifficultModulusMin=this->m_EditModulusMin/100.0;
	curContent->m_DifficultModulusMax=this->m_EditModulusMax/100.0;
	curContent->m_Score=this->m_EditTestScore;//试题总分数
	curContent->m_SelectArray1.RemoveAll();
	curContent->m_SelectArray2.RemoveAll();
}

void CTestSeleDlg::_ReadCurTestSetToInteface()
{
		int index=_GetCurSelTestIndex();
		if(index!=-1)
		{
			TestContent*curContent=m_TestRecordArray.GetAt(index);
			this->m_CurTestType	=curContent->m_TestType1;//试题类型
			this->m_EditTestNum=curContent->m_TestNum;//试题数目
			//试题难度系数范围

⌨️ 快捷键说明

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