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

📄 view.cpp

📁 设计模式:工厂模式、单例模式的基本实现
💻 CPP
字号:
#include <iostream>
using namespace std;

#include <conio.h>
#include "View.h"
#include "CPaperMgr.h"
#include "MyTextMgr.h"

const int XPOS = 3;
const int YPOS = 14;

CView::CView(CPaperMgr* pPaperMgr)
{
	m_pPaperMgr = pPaperMgr;
}

CView::~CView()
{
}

int CView::Run()
{
	int nCnt = 0;
	while(nCnt ++ < 3 && LogIn() == 2);
	if(nCnt == 4)
	{
		ClsLine(14);
		CMyText::GotoXY(0, 14);
		cout << "登录失败,程序现在退出!" << endl;
		return -1;
	}
	while(DoPageHome() != VKEY_ESC);

	return 0;
}

void CView::PrintLogIn()
{
	system("cls");
	CMyText::GotoXY(0,0);
	cout << "=======^^=========[LDCI]=========^^======="<< endl;
	cout << "*                                        *"<< endl;
	cout << "|                                        |"<< endl;
	cout << "*            用户名:                     *"<< endl;
	cout << "*            密  码:                     *"<< endl;
	cout << "|                                        |"<< endl;
	cout << "*                                        *"<< endl;
	cout << "=======@@========================@@======="<< endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << "     确定(Enter)    取消(ESC)"<< endl;
}

void CView::ClsLine(int nLine)
{
	CMyText::GotoXY(0, nLine);
	for(int i=0; i<80; i++)
	{
		putchar(' ');
	}
}

int CView::LogIn()
{
	PrintLogIn();
	CMyText edUserName(3, 20, 29);
	CMyText edPassword(4, 20, 25, true);
	CMyTextMgr myTxtMgr;
	myTxtMgr.AddTextCtrl(&edUserName);
	myTxtMgr.AddTextCtrl(&edPassword);

	string strUserName;
	string strPassword;

	int nKey = 0;
	nKey=myTxtMgr.Handle();
	int nRet = 0;
	switch(nKey)
	{
	case VKEY_ESC:
		ClsLine(14);
		CMyText::GotoXY(0, 14);
		cout << "退出\n" << endl;
		nRet = 1;
		break;
	case VKEY_ENTER:
		strUserName = edUserName.GetText();
		strPassword = edPassword.GetText();
		if(strUserName == "admin" && strPassword == "123456")
		{
			ClsLine(14);
			CMyText::GotoXY(0, 14);
			cout << "登录成功,请开始您愉快的旅程!\n" << endl;
			Sleep(1000);
		}
		else
		{
			ClsLine(14);
			CMyText::GotoXY(0, 14);
			cout << "登录失败,请重新登录!" << endl;
			nRet = 2;
		}
		break;
	default:
		break;
	}
	return nRet;
}

void CView::PrintPageHome()
{
	system("cls");
	CMyText::GotoXY(0,0);
	cout << "=======^^=========[LDCI]=========^^======="<< endl;
	cout << "*                                        *"<< endl;
	cout << "|                                        |"<< endl;
	cout << "*           1. 试题管理                  *"<< endl;
	cout << "*           2. 考生管理                  *"<< endl;
	cout << "*                                        *"<< endl;
	cout << "*         ESC. 退    出                  *"<< endl;
	cout << "|                                        |"<< endl;
	cout << "*                                        *"<< endl;
	cout << "=======@@========================@@======="<< endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << "请选择:";
}

int CView::DoPageHome()
{
	PrintPageHome();
	int nKey = getch();
	if(nKey == '1')
	{
		bool bEdit = FALSE;
		while((nKey = DoTestBrowse(bEdit)) != VKEY_ESC)
		{
			switch(nKey)
			{
			case VKEY_F1:
			case VKEY_F2:
				bEdit = FALSE;
				break;
			case VKEY_F3:
			case VKEY_F4:
				bEdit = TRUE;
				break;
			default:
				break;
			}
		}
	}
	else if(nKey == '2')
	{
	}
	else if(nKey == VKEY_ESC)
	{
		return VKEY_ESC;
	}
	return 0;
}

void CView::PrintTestBrowse()
{
//	system("cls");
	int nPaperIdx = 0;
	int nTestIdx = 0;
	int nRet = m_pPaperMgr->GetTestPos(nPaperIdx, nTestIdx);
	string strPaper;
	string strTest;
	if(nRet == 1)
		strPaper = "无试题";
	else
	{
		int nTestNum = m_pPaperMgr->GetCurTestNum();
		int nScore = m_pPaperMgr->GetCurTotalScore();
		char szNum[10];
		itoa(nPaperIdx, szNum, 10);
		strPaper = "第";
		strPaper += szNum;
		strPaper += "套试卷(目前共";
		itoa(nTestNum, szNum, 10);
		strPaper += szNum;
		strPaper += "道题, 总分";
		itoa(nScore, szNum, 10);
		strPaper += szNum;
		strPaper += ")";

		itoa(nTestIdx, szNum, 10);
		strTest = "第";
		strTest += szNum;
		strTest += "题";
	}

	CMyText::GotoXY(0,0);
	cout << "=============^^===============[LDCI]===============^^============="<< endl;
	cout << "*  F1(上一题)  F2(下一题) F3(录入) F4(修改) F5(删除)             *"<< endl;
	cout << "* ****************************************************************"<< endl;
	cout << "*   题    干:                                                   *"<< endl;
	cout << "*                                                                *"<< endl;
	cout << "*   选  项 A:                                                   *"<< endl;
	cout << "*   选  项 B:                                                   *"<< endl;
	cout << "*   选  项 C:                                                   *"<< endl;
	cout << "*   选  项 D:                                                   *"<< endl;
	cout << "*   选  项 E:                                                   *"<< endl;
	cout << "*   选  项 F:                                                   *"<< endl;
	cout << "*   选  项 G:                                                   *"<< endl;
	cout << "*                                                                *"<< endl;
	cout << "*   正确答案:                     分数:                        *"<< endl;
	cout << "=============@@====================================@@============="<< endl;

	CMyText::GotoXY(4,2);
	cout << strPaper;
	CMyText::GotoXY(45,2);
	cout << strTest;

}

int CView::DoTestBrowse(bool bEdit)
{
	PrintTestBrowse();

	string strTitle, strAns, strScore;
	string strOptA, strOptB, strOptC, strOptD, strOptE, strOptF, strOptG;
	m_pPaperMgr->GetContext(strTitle, strAns, strScore, strOptA,
		strOptB, strOptC, strOptD, strOptE, strOptF, strOptG);

	CMyText edTitle(XPOS, YPOS, 50);
	CMyText edOptA(XPOS+2, YPOS, 25);
	CMyText edOptB(XPOS+3, YPOS, 25);
	CMyText edOptC(XPOS+4, YPOS, 25);
	CMyText edOptD(XPOS+5, YPOS, 25);
	CMyText edOptE(XPOS+6, YPOS, 25);
	CMyText edOptF(XPOS+7, YPOS, 25);
	CMyText edOptG(XPOS+8, YPOS, 25);
	CMyText edAns(XPOS+10, YPOS, 25);
	CMyText edScore(XPOS+10, YPOS+27, YPOS+29);
	edTitle.SetText(strTitle);
	edOptA.SetText(strOptA);
	edOptB.SetText(strOptB);
	edOptC.SetText(strOptC);
	edOptD.SetText(strOptD);
	edOptE.SetText(strOptE);
	edOptF.SetText(strOptF);
	edOptG.SetText(strOptG);
	edAns.SetText(strAns);
	edScore.SetText(strScore);
	if(bEdit)
	{
		edTitle.Enable();
		edOptA.Enable();
		edOptB.Enable();
		edOptC.Enable();
		edOptD.Enable();
		edOptE.Enable();
		edOptF.Enable();
		edOptG.Enable();
		edAns.Enable();
		edScore.Enable();
	}
	else
	{
		edTitle.Disable();
		edOptA.Disable();
		edOptB.Disable();
		edOptC.Disable();
		edOptD.Disable();
		edOptE.Disable();
		edOptF.Disable();
		edOptG.Disable();
		edAns.Disable();
		edScore.Disable();
	}

	CMyTextMgr myTxtMgr;
	myTxtMgr.AddTextCtrl(&edTitle);
	myTxtMgr.AddTextCtrl(&edOptA);
	myTxtMgr.AddTextCtrl(&edOptB);
	myTxtMgr.AddTextCtrl(&edOptC);
	myTxtMgr.AddTextCtrl(&edOptD);
	myTxtMgr.AddTextCtrl(&edOptE);
	myTxtMgr.AddTextCtrl(&edOptF);
	myTxtMgr.AddTextCtrl(&edOptG);
	myTxtMgr.AddTextCtrl(&edAns);
	myTxtMgr.AddTextCtrl(&edScore);

	int nKey = 0;
	nKey=myTxtMgr.Handle();
	strTitle = edTitle.GetText();
	strOptA = edOptA.GetText();
	strOptB = edOptB.GetText();
	strOptC = edOptC.GetText();
	strOptD = edOptD.GetText();
	strOptE = edOptE.GetText();
	strOptF = edOptF.GetText();
	strOptG = edOptG.GetText();
	strAns = edAns.GetText();
	strScore = edScore.GetText();

	switch(nKey)
	{
	case VKEY_F1:
		m_pPaperMgr->Edit(strTitle, strAns, strScore, strOptA, strOptB, 
			strOptC, strOptD, strOptE, strOptF, strOptG);
		m_pPaperMgr->MovePrev();
		break;
	case VKEY_F2:
		m_pPaperMgr->Edit(strTitle, strAns, strScore, strOptA, strOptB, 
			strOptC, strOptD, strOptE, strOptF, strOptG);
		m_pPaperMgr->MoveNext();
		break;
	case VKEY_F3:
		m_pPaperMgr->Edit(strTitle, strAns, strScore, strOptA, strOptB, 
			strOptC, strOptD, strOptE, strOptF, strOptG);
		m_pPaperMgr->AddTest();
		break;
	case VKEY_F4:
		break;
	case VKEY_F5:
		m_pPaperMgr->DelTest();
		break;
//	case VKEY_ENTER:
//		break;
	default:
		break;
	}

	return nKey;
}

void CView::SetPaperMgr(CPaperMgr* pPaperMgr)
{
	m_pPaperMgr = pPaperMgr;
}

⌨️ 快捷键说明

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