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

📄 cpapermgr.cpp

📁 设计模式:工厂模式、单例模式的基本实现
💻 CPP
字号:
#include "CPaperMgr.h"

CPaperMgr::CPaperMgr()
{
	m_nCurPaper = NULL;
}

CPaperMgr::~CPaperMgr()
{
	CPaperVT::iterator pos;
	for(pos=m_vtPaper.begin(); pos!=m_vtPaper.end(); ++pos)
	{
		delete (*pos);
	}
	m_vtPaper.clear();
}

int CPaperMgr::MoveFirst()
{
	m_nCurPaper = m_vtPaper.begin();
	(*m_nCurPaper)->MoveFirst();
	return 0;
}

int CPaperMgr::MoveLast()
{
	m_nCurPaper = m_vtPaper.end();
	-- m_nCurPaper;
	(*m_nCurPaper)->MoveFirst();
	return 0;
}

int CPaperMgr::MovePrev()
{
	int nRet = (*m_nCurPaper)->MovePrev();
	if(nRet == 1)
	{
		if(m_nCurPaper > m_vtPaper.begin())
		{
			-- m_nCurPaper;
			(*m_nCurPaper)->MoveLast();
		}
		else
			return 1;
	}

	return 0;
}

int CPaperMgr::MoveNext()
{
	int nRet = (*m_nCurPaper)->MoveNext();
	if(nRet == 1)
	{
		++ m_nCurPaper;
		if(m_nCurPaper == m_vtPaper.end())
		{
			-- m_nCurPaper;
			return 1;
		}
		(*m_nCurPaper)->MoveFirst();
	}
	return 0;
}

int CPaperMgr::Edit(string strTitle, string strAns, string strScore, string strOptA,
		string strOptB, string strOptC, string strOptD, string strOptE, string strOptF, string strOptG)
{
	if(m_nCurPaper == NULL)
		return 1;
	(*m_nCurPaper)->Edit(strTitle, strAns, strScore, strOptA,
		strOptB, strOptC, strOptD, strOptE, strOptF, strOptG);
	return 0;
}

int CPaperMgr::AddTest()
{
	int nRet = 0;
	if(m_nCurPaper == NULL)
	{
		CPaper* pPaper = new CPaper;
		pPaper->AddTest();
		m_vtPaper.push_back(pPaper);
		m_nCurPaper = m_vtPaper.begin();
	}
	else
	{
		nRet = (*m_nCurPaper)->AddTest();
		if(nRet == 1)
		{
			// 新建试卷
			CPaper* pPaper = new CPaper;
			pPaper->AddTest();
//			m_vtPaper.push_back(pPaper);
			++ m_nCurPaper;
			m_nCurPaper = m_vtPaper.insert(m_nCurPaper, pPaper);
		}
	}

	return nRet;
}

int CPaperMgr::DelTest()
{
	(*m_nCurPaper)->DelTest();
	return 0;
}

int CPaperMgr::DelPaper()
{
	CPaperVT::iterator pos = m_nCurPaper;
	if(m_nCurPaper == m_vtPaper.end())
	{
		if(m_nCurPaper == m_vtPaper.begin())
			m_nCurPaper = NULL;
		else
			-- m_nCurPaper;
	}
	else
		++ m_nCurPaper;
	delete *pos;
	m_vtPaper.erase(pos);
	return 0;
}

int CPaperMgr::GetContext(string &strTitle, string &strAns, string &strScore, string &strOptA,
	string &strOptB, string &strOptC, string &strOptD, string &strOptE, string &strOptF, string &strOptG)
{
	if(m_nCurPaper == NULL)
		return -1;
	(*m_nCurPaper)->GetContext(strTitle, strAns, strScore, strOptA, strOptB,
		strOptC, strOptD, strOptE, strOptF, strOptG);
	return 0;
}

int CPaperMgr::GetTestPos(int& nPaperIndex, int& nTestIndex)
{
	if(m_nCurPaper == NULL)
		return 1;
	CPaperVT::iterator pos;
	nPaperIndex = 1;
	for(pos=m_vtPaper.begin(); pos!=m_nCurPaper; ++pos)
	{
		++ nPaperIndex;
	}
	(*m_nCurPaper)->GetTestIndex(nTestIndex);

	return 0;
}

int CPaperMgr::GetCurTestNum()
{
	if(m_nCurPaper == NULL)
		return -1;
	return (*m_nCurPaper)->GetTestNum();
}

int CPaperMgr::GetCurTotalScore()
{
	if(m_nCurPaper == NULL)
		return -1;
	return (*m_nCurPaper)->GetTotalScore();
}

void CPaperMgr::Serialize(CFileOpt& ar)
{
	if(ar.IsRead())
	{
		int nNum = 0;
		ar >> nNum;
		for(int i=0; i<nNum; ++i)
		{
			CPaper* pPaper = new CPaper;
			pPaper->Serialize(ar);
			m_vtPaper.push_back(pPaper);
		}
		if(nNum > 0)
		{
			m_nCurPaper = m_vtPaper.begin();
		}
		else
		{
			m_nCurPaper = NULL;
		}
	}
	else
	{
		int nNum = m_vtPaper.size();
		ar << nNum;
		for(int i=0; i<nNum; ++i)
		{
			CPaper* pPaper = m_vtPaper[i];
			pPaper->Serialize(ar);
		}
	}
}

void CPaperMgr::WriteUserFile(CFileOpt& ar) // 写入用户定义的文件
{
	string strTitle1("###############################");
	string strTitle2("###############################");
	string strTitle;
	int nNum = 1;
	CPaperVT::iterator pos;
	for(pos=m_vtPaper.begin(); pos!=m_vtPaper.end(); ++pos)
	{
		CPaper* pPaper = *pos;
		if(pPaper->IsValid() == 0)
		{
			char szNum[10];
			itoa(nNum, szNum, 10);
			strTitle = strTitle1 + szNum + strTitle2;
			ar.WriteLine(strTitle);
			pPaper->WriteUserFile(ar);
			++ nNum;
		}
	}
}

⌨️ 快捷键说明

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