📄 paperdialog.cpp
字号:
// PaperDialog.cpp : implementation file
//
#include "stdafx.h"
#include "TestApp.h"
#include "PaperDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPaperDialog dialog
CPaperDialog::CPaperDialog(CWnd* pParent /*=NULL*/)
: CDialog(CPaperDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CPaperDialog)
m_judgetotalscore = 0;
m_moretotalscore = 0;
m_recnews = _T("");
m_spacetotalscore = 0;
m_singletotalscore = 0;
m_totalscore = 0;
m_spacecount = 0;
m_content = _T("");
m_reccount=0;
m_recno=0;
m_selsingle = 0;
m_selspace = 0;
m_seljudge = 0;
m_selmore = 0;
//}}AFX_DATA_INIT
}
void CPaperDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPaperDialog)
DDX_Control(pDX, IDC_EDIT_PAPERNAME, m_ctrpapername);
DDX_Control(pDX, IDC_COMBO_CHAPTER, m_chapter);
DDX_Control(pDX, IDC_LIST_MORE, m_ctrmore);
DDX_Control(pDX, IDC_LIST_SPACE, m_ctrspace);
DDX_Control(pDX, IDC_LIST_SINGLE, m_ctrsingle);
DDX_Control(pDX, IDC_LIST_JUDGE, m_ctrjudge);
DDX_Control(pDX, IDC_COMBO_TYPE, m_type);
DDX_Control(pDX, IDC_BUTTON_MOVEPREV, m_moveprev);
DDX_Control(pDX, IDC_BUTTON_MOVENEXT, m_movenext);
DDX_Control(pDX, IDC_BUTTON_MOVELAST, m_movelast);
DDX_Control(pDX, IDC_BUTTON_MOVEFIRST, m_movefirst);
DDX_Text(pDX, IDC_EDIT_PAPERNAME, m_papername);
DDX_Text(pDX, IDC_EDIT_SPACESCORE, m_spacescore);
DDX_Text(pDX, IDC_EDIT_SPACECOUNT1, m_spacecount1);
DDX_Text(pDX, IDC_EDIT_SPACECOUNT2, m_spacecount2);
DDX_Text(pDX, IDC_EDIT_JUDGESCORE, m_judgescore);
DDX_Text(pDX, IDC_EDIT_JUDGECOUNT, m_judgecount);
DDX_Text(pDX, IDC_EDIT_SINGLESCORE, m_singlescore);
DDX_Text(pDX, IDC_EDIT_SINGLECOUNT, m_singlecount);
DDX_Text(pDX, IDC_EDIT_MORESCORE, m_morescore);
DDX_Text(pDX, IDC_EDIT_MORECOUNT, m_morecount);
DDX_Text(pDX, IDC_EDIT_JUDGETOTALSCORE, m_judgetotalscore);
DDX_Text(pDX, IDC_EDIT_MORETOTALSCORE, m_moretotalscore);
DDX_Text(pDX, IDC_EDIT_RECNEWS, m_recnews);
DDX_Text(pDX, IDC_EDIT_SPACETOTALSCORE, m_spacetotalscore);
DDX_Text(pDX, IDC_EDIT_SINGLETOTALSCORE, m_singletotalscore);
DDX_Text(pDX, IDC_EDIT_TOTALSCORE, m_totalscore);
DDX_Text(pDX, IDC_EDIT_SPACECOUNT, m_spacecount);
DDX_Text(pDX, IDC_EDIT1, m_content);
DDX_Text(pDX, IDC_EDIT_SELSINGLE, m_selsingle);
DDX_Text(pDX, IDC_EDIT_SELSPACE, m_selspace);
DDX_Text(pDX, IDC_EDIT_SELJUDGE, m_seljudge);
DDX_Text(pDX, IDC_EDIT_SELMORE, m_selmore);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPaperDialog, CDialog)
//{{AFX_MSG_MAP(CPaperDialog)
ON_BN_CLICKED(IDC_SAVEPAPER, OnSavepaper)
ON_BN_CLICKED(IDC_BUTTON_MOVEFIRST, OnButtonMovefirst)
ON_BN_CLICKED(IDC_BUTTON_MOVELAST, OnButtonMovelast)
ON_BN_CLICKED(IDC_BUTTON_MOVENEXT, OnButtonMovenext)
ON_BN_CLICKED(IDC_BUTTON_MOVEPREV, OnButtonMoveprev)
ON_CBN_SELENDOK(IDC_COMBO_TYPE, OnSelendokComboType)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_ADDTEST, OnAddtest)
ON_LBN_DBLCLK(IDC_LIST_JUDGE, OnDblclkListJudge)
ON_LBN_DBLCLK(IDC_LIST_MORE, OnDblclkListMore)
ON_LBN_DBLCLK(IDC_LIST_SINGLE, OnDblclkListSingle)
ON_LBN_DBLCLK(IDC_LIST_SPACE, OnDblclkListSpace)
ON_CBN_SELENDOK(IDC_COMBO_CHAPTER, OnSelendokComboChapter)
ON_LBN_SELCHANGE(IDC_LIST_JUDGE, OnSelchangeListJudge)
ON_LBN_SELCHANGE(IDC_LIST_MORE, OnSelchangeListMore)
ON_LBN_SELCHANGE(IDC_LIST_SINGLE, OnSelchangeListSingle)
ON_LBN_SELCHANGE(IDC_LIST_SPACE, OnSelchangeListSpace)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPaperDialog message handlers
void CPaperDialog::OnSavepaper()
{
int index,paperid,score;
CString testid,stra;
if(MessageBox("保存试卷退出?","保存试卷",MB_YESNO)==IDYES)
{
//检查试卷名称是否已使用过
UpdateData(true);
m_pSetPaper->m_strFilter="name='"+m_papername+"'";
m_pSetPaper->Requery();
if (!(m_pSetPaper->IsEOF() && m_pSetPaper->IsBOF()))
{
MessageBox("试卷名称:"+m_papername+"\n已被使用,请使用其他名称!","保存试卷");
m_ctrpapername.SetFocus();
return;
}
//检查是否选择了试题
if(m_spacecount!=m_selspace){
MessageBox("填空题没有选够!");
return;
}
if(m_judgecount!=m_seljudge){
MessageBox("判断题没有选够!");
return;
}
if(m_singlecount!=m_selsingle){
MessageBox("单选题没有选够!");
return;
}
if(m_morecount!=m_selmore){
MessageBox("多选题没有选够!");
return;
}
//将试卷名称添加到试卷记录集
m_pSetPaper->AddNew();
m_pSetPaper->m_name=m_papername;
m_pSetPaper->Update();
m_pSetPaper->MoveLast();
paperid=m_pSetPaper->m_id;//获得试卷编号
//将选择的填空题存入试卷数据记录集
index=0;
while(index<m_ctrspace.GetCount())
{
m_ctrspace.GetText(index,testid);//获得选择的试题的编号
score=m_spacescore;
//检查该题是否有两个空
m_pSetSpace->m_strFilter="id="+testid;
m_pSetSpace->Requery();
stra=m_pSetSpace->m_answer2;
if(""!=stra)
{ //有两个空,分值乘以2
score=m_spacescore * 2;
}
//将试题数据存入试卷数据记录集
m_pSetPaperData->AddNew();
m_pSetPaperData->m_paperid=paperid;
m_pSetPaperData->m_score=score;
m_pSetPaperData->m_type="填空题";
m_pSetPaperData->m_testid=StringToInt(testid);
m_pSetPaperData->Update();//存入数据库
index++;
}
//将判断题存入试卷数据记录集
index=0;
while(index<m_ctrjudge.GetCount())
{
m_ctrjudge.GetText(index,testid);//获得选择的试题的编号
//将试题数据存入试卷数据记录集
m_pSetPaperData->AddNew();
m_pSetPaperData->m_paperid=paperid;
m_pSetPaperData->m_score=m_judgescore;
m_pSetPaperData->m_type="判断题";
m_pSetPaperData->m_testid=StringToInt(testid);
m_pSetPaperData->Update();//存入数据库
index++;
}
//将单选题存入试卷数据记录集
index=0;
while(index<m_ctrsingle.GetCount())
{
m_ctrsingle.GetText(index,testid);//获得选择的试题的编号
//将试题数据存入试卷数据记录集
m_pSetPaperData->AddNew();
m_pSetPaperData->m_paperid=paperid;
m_pSetPaperData->m_score=m_judgescore;
m_pSetPaperData->m_type="单选题";
m_pSetPaperData->m_testid=StringToInt(testid);
m_pSetPaperData->Update();//存入数据库
index++;
}
//将多选题存入试卷数据记录集
index=0;
while(index<m_ctrmore.GetCount())
{
m_ctrmore.GetText(index,testid);//获得选择的试题的编号
//将试题数据存入试卷数据记录集
m_pSetPaperData->AddNew();
m_pSetPaperData->m_paperid=paperid;
m_pSetPaperData->m_score=m_morescore;
m_pSetPaperData->m_type="多选题";
m_pSetPaperData->m_testid=StringToInt(testid);
m_pSetPaperData->Update();//存入数据库
index++;
}
MessageBox("成功保存试卷!");
EndDialog(1); //完成保存试卷,关闭对话框
}
}
void CPaperDialog::OnButtonMovefirst()
{
ShowData("FIRST"); //显示第一条记录数据
}
void CPaperDialog::OnButtonMovelast()
{
ShowData("LAST"); //显示最后一条记录数据
}
void CPaperDialog::OnButtonMovenext()
{
ShowData("NEXT"); //显示下一条记录数据
}
void CPaperDialog::OnButtonMoveprev()
{
ShowData("PREV"); //显示前一条记录数据
}
void CPaperDialog::OnSelendokComboType()
{
ShowData("FIRST");
}
BOOL CPaperDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CString str;
//创建访问各个记录集的指针,打开记录集
m_pSetChapter=new CChapterSet(NULL);
m_pSetChapter->Open();
m_pSetJudge=new CJudgeSet(NULL);
m_pSetJudge->Open();
m_pSetSpace=new CSpaceSet(NULL);
m_pSetSpace->Open();
m_pSetSingle=new CSingleSet(NULL);
m_pSetSingle->Open();
m_pSetMore=new CMoreSet(NULL);
m_pSetMore->Open();
m_pSetPaper=new CPapersSet(NULL);
m_pSetPaper->Open();
m_pSetPaperData=new CPapersDataSet(NULL);
m_pSetPaperData->Open();
//创建章节名称下拉列表
while(!m_pSetChapter->IsEOF())
{
if(CB_ERR==m_chapter.FindStringExact(-1,m_pSetChapter->m_name))
m_chapter.AddString(m_pSetChapter->m_name);//不重复,加入列表
m_pSetChapter->MoveNext();
}
if(m_isauto==1)
DoAutoSelect();//执行自动选择试题操作
//设置默认章节
m_pSetChapter->MoveFirst();
m_chapter.SelectString(-1,m_pSetChapter->m_name);
//使用默认章节筛选记录集
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();
m_type.SelectString(-1,"填空题");//设置默认题型
//滚动记录集,使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("FIRST");
return TRUE;
}
void CPaperDialog::ShowData(CString Direction/*记录指针移动方向*/)
{ CString str;
m_type.GetWindowText(str);//获得题型名称
//根据题型和记录指针移动方向改变当前记录
if("判断题"==str)
{
if("FIRST"==Direction)
{
if(m_recno>1)
{
m_pSetJudge->MoveFirst();
m_recno=1;
}
}
if("PREV"==Direction)
{
if(m_recno>1)
{
m_pSetJudge->MovePrev();
m_recno--;
}
}
if("NEXT"==Direction)
{
if(m_recno<m_pSetJudge->GetRecordCount())
{
m_pSetJudge->MoveNext();
m_recno++;
}
}
if("LAST"==Direction)
{
if(m_recno<m_pSetJudge->GetRecordCount())
{
m_pSetJudge->MoveLast();
m_recno=m_pSetJudge->GetRecordCount();
}
}
m_reccount=m_pSetJudge->GetRecordCount();
str=m_pSetJudge->m_content;
}
if("填空题"==str)
{
if("FIRST"==Direction)
{
if(m_recno>1)
{
m_pSetSpace->MoveFirst();
m_recno=1;
}
}
if("PREV"==Direction)
{
if(m_recno>1)
{
m_pSetSpace->MovePrev();
m_recno--;
}
}
if("NEXT"==Direction)
{
if(m_recno<m_pSetSpace->GetRecordCount())
{
m_pSetSpace->MoveNext();
m_recno++;
}
}
if("LAST"==Direction)
{
if(m_recno<m_pSetSpace->GetRecordCount())
{
m_pSetSpace->MoveLast();
m_recno=m_pSetSpace->GetRecordCount();
}
}
m_reccount=m_pSetSpace->GetRecordCount();
str=m_pSetSpace->m_content;
}
if("单选题"==str)
{
if("FIRST"==Direction)
{
if(m_recno>1)
{
m_pSetSingle->MoveFirst();
m_recno=1;
}
}
if("PREV"==Direction)
{
if(m_recno>1)
{
m_pSetSingle->MovePrev();
m_recno--;
}
}
if("NEXT"==Direction)
{
if(m_recno<m_pSetSingle->GetRecordCount())
{
m_pSetSingle->MoveNext();
m_recno++;
}
}
if("LAST"==Direction)
{
if(m_recno<m_pSetSingle->GetRecordCount())
{
m_pSetSingle->MoveLast();
m_recno=m_pSetSingle->GetRecordCount();
}
}
m_reccount=m_pSetSingle->GetRecordCount();
str=m_pSetSingle->m_content +
"\x00D\x00A(A)" +m_pSetSingle->m_option1 +
"\x00D\x00A(B)" +m_pSetSingle->m_option2 +
"\x00D\x00A(C)" +m_pSetSingle->m_option3 +
"\x00D\x00A(D)" +m_pSetSingle->m_option4;
}
if("多选题"==str)
{
if("FIRST"==Direction)
{
if(m_recno>1)
{
m_pSetMore->MoveFirst();
m_recno=1;
}
}
if("PREV"==Direction)
{
if(m_recno>1)
{
m_pSetMore->MovePrev();
m_recno--;
}
}
if("NEXT"==Direction)
{
if(m_recno<m_pSetMore->GetRecordCount())
{
m_pSetMore->MoveNext();
m_recno++;
}
}
if("LAST"==Direction)
{
if(m_recno<m_pSetMore->GetRecordCount())
{
m_pSetMore->MoveLast();
m_recno=m_pSetMore->GetRecordCount();
}
}
m_reccount=m_pSetMore->GetRecordCount();
str=m_pSetMore->m_content +
"\x00D\x00A(A)" +m_pSetMore->m_option1 +
"\x00D\x00A(B)" +m_pSetMore->m_option2 +
"\x00D\x00A(C)" +m_pSetMore->m_option3 +
"\x00D\x00A(D)" +m_pSetMore->m_option4;
}
//显示试题内容
m_content=str;
str.Format("%d/%d",m_recno,m_reccount);
m_recnews=str;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -