📄 testseledlg.cpp
字号:
// 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 + -