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

📄 papermanageview.cpp

📁 VIUSAL C++实现的考试管理系统,涉及到试卷生成,成绩记录等功能.
💻 CPP
字号:
// PaperManageView.cpp : implementation file
//

#include "stdafx.h"
#include "TestApp.h"
#include "PaperManageView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPaperManageView

IMPLEMENT_DYNCREATE(CPaperManageView, CFormView)

CPaperManageView::CPaperManageView()
	: CFormView(CPaperManageView::IDD)
{
	//{{AFX_DATA_INIT(CPaperManageView)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CPaperManageView::~CPaperManageView()
{	//启用显示试卷管理窗口菜单命令
	((CTestAppApp*)AfxGetApp())->m_PaperManageViews=0;	
	//删除记录集指针
	delete m_pSetPaperData;
	delete m_pSetPaper;
	delete m_pSetJudge;
	delete m_pSetSpace;
	delete m_pSetSingle;
	delete m_pSetMore;
}

void CPaperManageView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPaperManageView)
	DDX_Control(pDX, IDC_BUTTON_OUTTOFILE, m_outfile);
	DDX_Control(pDX, IDC_USETOTEST, m_usetotest);
	DDX_Control(pDX, IDC_DELETEPAPERDATA, m_delete);
	DDX_Control(pDX, IDC_COMBO_PAPERNAME, m_papername);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPaperManageView, CFormView)
	//{{AFX_MSG_MAP(CPaperManageView)
	ON_BN_CLICKED(IDC_DELETEPAPERDATA, OnDeletepaperdata)
	ON_BN_CLICKED(IDC_USETOTEST, OnUsetotest)
	ON_BN_CLICKED(IDC_BUTTON_OUTTOFILE, OnButtonOuttofile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPaperManageView diagnostics

#ifdef _DEBUG
void CPaperManageView::AssertValid() const
{
	CFormView::AssertValid();
}

void CPaperManageView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPaperManageView message handlers

void CPaperManageView::OnDeletepaperdata() 
{
	CString papername,str;
	int paperid;
	m_papername.GetWindowText(papername);//获得试卷名称
	if(""==papername)
		return;							//列表中已无试卷名称,直接返回
	//请求用户确认删除操作
	if(IDNO==MessageBox("删除试卷:"+papername,"删除试卷",MB_YESNO))
		return;							//不删除,直接返回
	//从试卷记录集中删除试卷名称
	m_pSetPaper->m_strFilter="name='"+papername+"'";
	m_pSetPaper->Requery();		//刷新试卷记录
	paperid=m_pSetPaper->m_id;	//获得试卷编号
	m_pSetPaper->Delete();		//删除试卷记录
	m_pSetPaper->MoveNext();	//移动记录指针
	if (m_pSetPaper->IsEOF())
		m_pSetPaper->MoveLast();

	//从试卷数据记录集中删除试卷数据
	str.Format("%d",paperid);
	m_pSetPaperData->m_strFilter="paperid="+str;
	m_pSetPaperData->Requery();
	while(!m_pSetPaperData->IsEOF())
	{
		if(m_pSetPaperData->m_paperid==paperid)
			m_pSetPaperData->Delete();	
		m_pSetPaperData->MoveNext();
	}	
	MessageBox("成功删除试卷记录!","删除试卷记录");
	//从列表中删除当前试卷名称
	int index,n;
	index=m_papername.FindStringExact(-1,papername);
	m_papername.DeleteString(index);
	n=m_papername.GetCount();
	if(0==n)
	{
		//没有试卷记录,禁用按钮
		m_delete.EnableWindow(false);
		m_usetotest.EnableWindow(false);
		m_outfile.EnableWindow(false);
	}else{
		//显示下一个试卷名称		
		if (index==n)
			index--;
		m_papername.SetCurSel(index);
	}
}

void CPaperManageView::OnUsetotest() 
{	
	CString papername,str;
	m_papername.GetWindowText(papername);//获得试卷名称
	m_pSetPaper->m_strFilter="used=true";
	m_pSetPaper->Requery();//使用筛选找到上次使用的试卷
	if(!m_pSetPaper->IsEOF())
	{
		m_pSetPaper->Edit();
		m_pSetPaper->m_used=false;	//修改试卷使用标记
		m_pSetPaper->Update();
	}
	//使用筛选找到本次使用的试卷
	m_pSetPaper->m_strFilter="name='"+papername+"'";
	m_pSetPaper->Requery();
	m_pSetPaper->Edit();
	m_pSetPaper->m_used=true;	//修改试卷使用标记
	m_pSetPaper->Update();	
	MessageBox("成功选择试卷!","选择考试试卷");	
}

void CPaperManageView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	GetDocument()->SetTitle("试卷管理");//设置文档标题	
	GetParent()->SetWindowText("试卷管理");//设置子窗口标题
	
	//创建记录集指针,打开记录集
	m_pSetPaper=new CPapersSet(NULL);
	m_pSetPaper->Open();
	m_pSetPaperData=new CPapersDataSet(NULL);
	m_pSetPaperData->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();
	//创建试卷名称下列列表框	
	while(!m_pSetPaper->IsEOF())
	{		
		if(CB_ERR==m_papername.FindStringExact(-1,m_pSetPaper->m_name))
			m_papername.AddString(m_pSetPaper->m_name);//不重复,加入列表
		m_pSetPaper->MoveNext();
	}
	if(m_papername.GetCount()!=0)
	{
		//有试卷记录,显示默认试卷名称		
		m_papername.SetCurSel(0);
	}else{
		//没有试卷记录,禁用按钮
		m_delete.EnableWindow(false);
		m_usetotest.EnableWindow(false);
		m_outfile.EnableWindow(false);
	}
}


void CPaperManageView::OnButtonOuttofile() 
{
	BeginWaitCursor();
	CString filename="",str="";
	CFile cf;	
	int testid=0,score=0,totalscore=0,n=0;
	m_papername.GetWindowText(filename);//获得试卷名称
	//创建Windows通用的保存文件对话框
	CFileDialog* dlg=new CFileDialog(false,/*false表示保存文件*/
				"txt",/*默认文件扩展名*/
				filename,/*默认文件名*/
				OFN_OVERWRITEPROMPT,/*显示文件覆盖提示*/
				"文本文件(*.txt)|*.txt");/*文件类型*/
	dlg->DoModal();	//显示保存文件对话框,指定试卷输出文件
	if(filename==dlg->GetPathName())
		return;		//用户取消了对话框,直接返回
	filename=dlg->GetPathName();//获得文件完整路径
	//创建文件	
	n=cf.Open(filename/*文件名*/,
				CFile::modeCreate/*创建文件标志*/ | CFile::modeWrite/*写文件标志*/);
	if (n==0)
	{
		MessageBox("不能创建文件:\n"+filename);
		return;
	}
	//通过筛选查找试卷记录,获得试卷编号	
	m_papername.GetWindowText(str);
	m_pSetPaper->m_strFilter="name='"+str+"'";
	m_pSetPaper->Requery();	
	//用试卷编号和题型从试卷数据记录集中筛选判断题
	str.Format("type='判断题' and paperid=%d",m_pSetPaper->m_id);
	m_pSetPaperData->m_strFilter=str;
	m_pSetPaperData->Requery();	
	if(!m_pSetPaperData->IsEOF())
		score=m_pSetPaperData->m_score;//获得每小题分数
	while(!m_pSetPaperData->IsEOF())
	{	//计算判断题总分
		totalscore+=m_pSetPaperData->m_score;
		m_pSetPaperData->MoveNext();
	}
	if(0<m_pSetPaperData->GetRecordCount())
		m_pSetPaperData->MoveFirst();
	str.Format("一、判断题。(每小题%d分,共%d分)",score,totalscore);
	cf.Write(str,str.GetLength());	
	n=0;	
	while(!m_pSetPaperData->IsEOF())
	{	//输出判断题数据
		testid=m_pSetPaperData->m_testid;//获得试题编号
		str.Format("id=%d",testid);
		m_pSetJudge->m_strFilter=str;
		m_pSetJudge->Requery();//从判断题记录集中选查找试题记录
		if(!m_pSetJudge->IsEOF())
		{	//将找到的试题数据输出到文件
			n++;
			str.Format("\x00D\x00A%d、",n);//\x00D\x00A为回车换行符
			str+=m_pSetJudge->m_content;
			cf.Write(str,str.GetLength());
		}
		m_pSetPaperData->MoveNext();
	}
	//筛选填空题
	str.Format("type='填空题' and paperid=%d",m_pSetPaper->m_id);
	m_pSetPaperData->m_strFilter=str;	
	m_pSetPaperData->Requery();
	if(!m_pSetPaperData->IsEOF())
		score=m_pSetPaperData->m_score;//获得每空分数
	totalscore=0;
	while(!m_pSetPaperData->IsEOF())
	{	//计算填空题总分
		totalscore+=m_pSetPaperData->m_score;
		if(score>m_pSetPaperData->m_score)
			//以只有一个空的题的分数作为每空分数
			score=m_pSetPaperData->m_score;
		m_pSetPaperData->MoveNext();
	}
	if(0<m_pSetPaperData->GetRecordCount())	
		m_pSetPaperData->MoveFirst();
	str.Format("\x00D\x00A二、填空题。(每空%d分,共%d分)",score,totalscore);
	cf.Write(str,str.GetLength());
	n=0;	
	while(!m_pSetPaperData->IsEOF())
	{	//输出填空题数据
		testid=m_pSetPaperData->m_testid;
		str.Format("id=%d",testid);
		m_pSetSpace->m_strFilter=str;
		m_pSetSpace->Requery();//使用筛选查找记录
		if(!m_pSetSpace->IsEOF())
		{	//将找到的试题数据输出到文件
			n++;
			str.Format("\x00D\x00A%d、",n);
			str+=m_pSetSpace->m_content;
			cf.Write(str,str.GetLength());
		}
		m_pSetPaperData->MoveNext();
	}
	//筛选单选题
	str.Format("type='单选题' and paperid=%d",m_pSetPaper->m_id);
	m_pSetPaperData->m_strFilter=str;	
	m_pSetPaperData->Requery();
	if(!m_pSetPaperData->IsEOF())
		score=m_pSetPaperData->m_score;//获得每小题分数
	totalscore=0;
	while(!m_pSetPaperData->IsEOF())
	{	//计算单选题总分
		totalscore+=m_pSetPaperData->m_score;		
		m_pSetPaperData->MoveNext();
	}
	if(0<m_pSetPaperData->GetRecordCount())
		m_pSetPaperData->MoveFirst();
	str.Format("\x00D\x00A三、单选题。(每小题%d分,共%d分)",score,totalscore);
	cf.Write(str,str.GetLength());
	n=0;	
	while(!m_pSetPaperData->IsEOF())
	{	//输出单选题数据
		testid=m_pSetPaperData->m_testid;
		str.Format("id=%d",testid);
		m_pSetSingle->m_strFilter=str;
		m_pSetSingle->Requery();//使用筛选查找记录
		if(!m_pSetSingle->IsEOF())
		{	//将找到的试题数据输出到文件
			n++;
			str.Format("\x00D\x00A%d、",n);
			str+=m_pSetSingle->m_content;
			cf.Write(str,str.GetLength());//输出题干
			str="\x00D\x00A(A)"+m_pSetSingle->m_option1;
			cf.Write(str,str.GetLength());//输出选项1
			str="\x00D\x00A(B)"+m_pSetSingle->m_option2;
			cf.Write(str,str.GetLength());//输出选项2
			str="\x00D\x00A(C)"+m_pSetSingle->m_option3;
			cf.Write(str,str.GetLength());//输出选项3
			str="\x00D\x00A(D)"+m_pSetSingle->m_option4;
			cf.Write(str,str.GetLength());//输出选项4
		}
		m_pSetPaperData->MoveNext();
	}
	//筛选多选题
	str.Format("type='多选题' and paperid=%d",m_pSetPaper->m_id);
	m_pSetPaperData->m_strFilter=str;	
	m_pSetPaperData->Requery();	
	if(!m_pSetPaperData->IsEOF())
		score=m_pSetPaperData->m_score;
	totalscore=0;
	while(!m_pSetPaperData->IsEOF())
	{	//计算多选题总分
		totalscore+=m_pSetPaperData->m_score;		
		m_pSetPaperData->MoveNext();
	}	
	if(0<m_pSetPaperData->GetRecordCount())
		m_pSetPaperData->MoveFirst();
	str.Format("\x00D\x00A四、多选题。(每小题%d分,共%d分)",score,totalscore);
	cf.Write(str,str.GetLength());
	n=0;	
	while(!m_pSetPaperData->IsEOF())
	{	//输出多选题数据
		testid=m_pSetPaperData->m_testid;
		str.Format("id=%d",testid);
		m_pSetMore->m_strFilter=str;
		m_pSetMore->Requery();//使用筛选查找记录
		if(!m_pSetMore->IsEOF())
		{	//将找到的试题数据输出到文件
			n++;
			str.Format("\x00D\x00A%d、",n);
			str+=m_pSetMore->m_content;
			cf.Write(str,str.GetLength());//输出题干
			str="\x00D\x00A(A)"+m_pSetMore->m_option1;
			cf.Write(str,str.GetLength());//输出选项1
			str="\x00D\x00A(B)"+m_pSetMore->m_option2;
			cf.Write(str,str.GetLength());//输出选项2
			str="\x00D\x00A(C)"+m_pSetMore->m_option3;
			cf.Write(str,str.GetLength());//输出选项3
			str="\x00D\x00A(D)"+m_pSetMore->m_option4;
			cf.Write(str,str.GetLength());//输出选项4
		}
		m_pSetPaperData->MoveNext();
	}
	cf.Flush();
	cf.Close();//关闭文件
	EndWaitCursor();
	MessageBox("试卷成功输出到文件:\n"+filename);
	return;
}

⌨️ 快捷键说明

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