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

📄 paperdialog.cpp

📁 VIUSAL C++实现的考试管理系统,涉及到试卷生成,成绩记录等功能.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -