📄 papermanageview.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 + -