📄 test.cpp
字号:
#include "Test.h"
CTest::CTest()
{
m_nScore = 10;
}
CTest::~CTest()
{
}
string CTest::GetTitle()
{
return m_strTitle;
}
int CTest::SetTitle(string strTitle)
{
if(strTitle.length() > TITLE_NUM)
return 1;
m_strTitle = strTitle;
return 0;
}
int CTest::GetScore()
{
return m_nScore;
}
int CTest::SetScore(int nScore)
{
if(nScore < 0 || nScore > 100)
return 1;
m_nScore = nScore;
return 0;
}
int CTest::GetOpt(vector<string>& vtOpt)
{
vector<string>::iterator pos;
for(pos=m_arrOpt.begin(); pos!=m_arrOpt.end(); ++pos)
{
vtOpt.push_back(*pos);
}
return 0;
}
int CTest::SetOpt(vector<string>& vtOpt)
{
m_arrOpt.clear();
vector<string>::iterator pos;
for(pos=vtOpt.begin(); pos!=vtOpt.end(); ++pos)
{
m_arrOpt.push_back(*pos);
}
return 0;
}
int CTest::GetAns(vector<char>& vtAns)
{
vector<char>::iterator pos;
for(pos=m_arrAns.begin(); pos!=m_arrAns.end(); ++pos)
{
vtAns.push_back(*pos);
}
return 0;
}
int CTest::SetAns(vector<char>& vtAns)
{
m_arrAns.clear();
vector<char>::iterator pos;
for(pos=vtAns.begin(); pos!=vtAns.end(); ++pos)
{
m_arrAns.push_back(*pos);
}
return 0;
}
void CTest::Serialize(CFileOpt& ar)
{
if(ar.IsRead())
{
ar >> m_strTitle;
int nNum = 0;
ar >> nNum;
for(int i=0; i<nNum; ++i)
{
string strTmp;
ar >> strTmp;
m_arrOpt.push_back(strTmp);
}
ar >> nNum;
for(i=0; i<nNum; ++i)
{
char ch;
ar >> ch;
m_arrAns.push_back(ch);
}
ar >> m_nScore;
}
else
{
ar << m_strTitle;
int nNum = m_arrOpt.size();
ar << nNum;
for(int i=0; i<nNum; ++i)
{
ar << m_arrOpt[i];
}
nNum = m_arrAns.size();
ar << nNum;
for(i=0; i<nNum; ++i)
{
ar << m_arrAns[i];
}
ar << m_nScore;
}
}
void CTest::WriteUserFile(CFileOpt& ar) // 写入用户定义的文件
{
string strText;
strText = "[QAnswer]";
ar.WriteLine(strText);
strText = "";
vector<char>::iterator pos;
for(pos=m_arrAns.begin(); pos!=m_arrAns.end(); ++pos)
{
strText += (*pos);
}
ar.WriteLine(strText);
strText = "[QScore]";
ar.WriteLine(strText);
char szNum[10];
itoa(m_nScore, szNum, 10);
strText = szNum;
ar.WriteLine(strText);
strText = "[QContent]";
ar.WriteLine(strText);
ar.WriteLine(m_strTitle);
strText = "[QItem]";
ar.WriteLine(strText);
char ch = 'a';
vector<string>::iterator pos1;
for(pos1=m_arrOpt.begin(); pos1 != m_arrOpt.end(); ++pos1)
{
string strTmp(1, ch);
strTmp += " ";
strTmp += (*pos1);
ar.WriteLine(strTmp);
++ ch;
}
}
CPaper::CPaper()
{
m_nCurTest = NULL;
}
CPaper::~CPaper()
{
CTestVT::iterator pos;
for(pos=m_vtTest.begin(); pos!=m_vtTest.end(); ++pos)
{
delete (*pos);
}
m_vtTest.clear();
}
// 合格:0
// 不合格:
// -1:题目数量不合格
// -2:分数不合格
// nm: n表示第几题,第一题为0;m:1表示题干;2表示选项;3表示答案;4表示分数
// 以此类推
int CPaper::IsValid()
{
if(m_vtTest.size() != 10)
return -1;
int nScore = 0;
CTestVT::iterator pos;
for(pos=m_vtTest.begin(); pos!=m_vtTest.end(); ++pos)
{
nScore += (*pos)->GetScore();
}
if(nScore != 100)
return -2;
return 0;
}
int CPaper::GetTestNum()
{
return m_vtTest.size();
}
int CPaper::GetTotalScore()
{
int nScore = 0;
CTestVT::iterator pos;
for(pos=m_vtTest.begin(); pos!=m_vtTest.end(); ++pos)
{
nScore += (*pos)->GetScore();
}
return nScore;
}
int CPaper::AddTest()
{
int nSize = m_vtTest.size();
if(m_vtTest.size() == TEST_NUM)
{
CTestVT::iterator pos = m_vtTest.end();
-- pos;
if(m_nCurTest != pos)
return -1;
else
return 1;
}
CTest* pTest = new CTest;
if(m_nCurTest != NULL)
++ m_nCurTest;
m_nCurTest = m_vtTest.insert(m_nCurTest, pTest);
return 0;
}
int CPaper::MovePrev()
{
if(m_nCurTest == m_vtTest.begin())
return 1;
-- m_nCurTest;
return 0;
}
int CPaper::MoveNext()
{
++ m_nCurTest;
if(m_nCurTest == m_vtTest.end())
{
-- m_nCurTest;
return 1;
}
return 0;
}
int CPaper::MoveFirst()
{
m_nCurTest = m_vtTest.begin();
return 0;
}
int CPaper::MoveLast()
{
m_nCurTest = m_vtTest.end();
-- m_nCurTest;
return 0;
}
int CPaper::DelTest()
{
CTestVT::iterator pos = m_nCurTest;
if(m_nCurTest == m_vtTest.end())
{
if(m_nCurTest == m_vtTest.begin())
m_nCurTest = NULL;
else
-- m_nCurTest;
}
else
++ m_nCurTest;
delete *pos;
m_vtTest.erase(pos);
return 0;
}
int CPaper::Edit(string strTitle, string strAns, string strScore, string strOptA,
string strOptB, string strOptC, string strOptD, string strOptE, string strOptF, string strOptG)
{
vector<string> vtOpt;
if(!strOptA.empty())
{
vtOpt.push_back(strOptA);
if(!strOptB.empty())
{
vtOpt.push_back(strOptB);
if(!strOptC.empty())
{
vtOpt.push_back(strOptC);
if(!strOptD.empty())
{
vtOpt.push_back(strOptD);
if(!strOptE.empty())
{
vtOpt.push_back(strOptE);
if(!strOptF.empty())
{
vtOpt.push_back(strOptF);
if(!strOptG.empty())
vtOpt.push_back(strOptG);
}
}
}
}
}
}
vector<char> vtAns;
int nLen = strAns.length();
for(int i=0; i<nLen; ++i)
{
char szAns = strAns[i];
vtAns.push_back(szAns);
}
int nScore = atoi(strScore.c_str());
(*m_nCurTest)->SetTitle(strTitle);
(*m_nCurTest)->SetOpt(vtOpt);
(*m_nCurTest)->SetAns(vtAns);
(*m_nCurTest)->SetScore(nScore);
return 0;
}
int CPaper::GetContext(string &strTitle, string &strAns, string &strScore, string &strOptA,
string &strOptB, string &strOptC, string &strOptD, string &strOptE, string &strOptF, string &strOptG)
{
if(m_nCurTest == NULL)
return -1;
// 题干
strTitle = (*m_nCurTest)->GetTitle();
// 选项
vector<string> vtOpt;
(*m_nCurTest)->GetOpt(vtOpt);
int nSize = vtOpt.size();
strOptA = nSize >= 1 ? vtOpt[0] : "";
strOptB = nSize >= 2 ? vtOpt[1] : "";
strOptC = nSize >= 3 ? vtOpt[2] : "";
strOptD = nSize >= 4 ? vtOpt[3] : "";
strOptE = nSize >= 5 ? vtOpt[4] : "";
strOptF = nSize >= 6 ? vtOpt[5] : "";
strOptG = nSize >= 7 ? vtOpt[6] : "";
// 答案
vector<char> vtAns;
(*m_nCurTest)->GetAns(vtAns);
vector<char>::iterator pos;
for(pos=vtAns.begin(); pos!=vtAns.end(); ++pos)
{
strAns.append(1, *pos);
}
// 分数
char szScore[10];
itoa((*m_nCurTest)->GetScore(), szScore, 10);
strScore = szScore;
return 0;
}
int CPaper::GetTestIndex(int& nIndex)
{
if(m_nCurTest == NULL)
return -1;
nIndex = 1;
CTestVT::iterator pos;
for(pos=m_vtTest.begin(); pos!=m_nCurTest; ++pos)
{
nIndex ++;
}
return 0;
}
void CPaper::Serialize(CFileOpt& ar)
{
if(ar.IsRead())
{
int nNum = 0;
ar >> nNum;
for(int i=0; i<nNum; ++i)
{
CTest *pTest = new CTest;
pTest->Serialize(ar);
m_vtTest.push_back(pTest);
}
if(nNum > 0)
{
m_nCurTest = m_vtTest.begin();
}
else
{
m_nCurTest = NULL;
}
}
else
{
int nNum = m_vtTest.size();
ar << nNum;
for(int i=0; i<nNum; ++i)
{
CTest *pTest = m_vtTest[i];
pTest->Serialize(ar);
}
}
}
void CPaper::WriteUserFile(CFileOpt& ar) // 写入用户定义的文件
{
string strTitle1("*******************");
string strTitle2("*******************");
string strTitle;
int nNum = 1;
CTestVT::iterator pos;
for(pos=m_vtTest.begin(); pos!=m_vtTest.end(); ++pos)
{
CTest* pTest = *pos;
char szNum[10];
itoa(nNum, szNum, 10);
strTitle = strTitle1 + szNum + strTitle2;
ar.WriteLine(strTitle);
pTest->WriteUserFile(ar);
++ nNum;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -