📄 stuopt.cpp
字号:
#include "main.h"
/**************************************************
* 函数名: CStudentOpt
* 参数:
* 形参:
无
* 返回值: 无
* 功能:
* 类的构造函数
进行类中相关成员的初始化
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
**************************************************/
CStudentOpt::CStudentOpt()
{
m_nQuesNum_1 = 0;
m_nAlrdAnsNum = 0;
m_nGainScore = 0;
memset(m_szInput, '\0', SIZE1);
m_pQuesCQuestion = new CMyFile;
pKeepCMyTime = new CMyTime;
}
/**************************************************
* 函数名: ~CStudentOpt
* 参数:
* 形参:
无
* 返回值: 无
* 功能:
* 类的析构函数
进行类中指针成员的释放
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
**************************************************/
CStudentOpt::~CStudentOpt()
{
delete m_pQuesCQuestion;
delete pKeepCMyTime;
}
/**************************************************
* 函数名: GetText
* 参数:
* 形参:
无
* 返回值: 无
* 功能:
* 读取文件函数
试题,答案,分值等信息的读取
为学生答题做好铺垫
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
* 修改时间 Modify 修改者 修改位置或修改明细
2009-2-18 谢金牛 设置题号
**************************************************/
void CStudentOpt::GetText()
{
m_pQuesCQuestion->SetNum(nTestNum+1);
m_pQuesCQuestion->ReadAnswer();
m_pQuesCQuestion->ReadScore();
m_pQuesCQuestion->ReadContent();
m_pQuesCQuestion->SetItem();
}
/**************************************************
* 函数名: Input
* 参数:
* 形参:
无
* 返回值: 整型
* 功能:
* 学生答题
完成学生答题时输入的相关操作
学生可进行答题,修改,提交等相关按键的操作
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
* 修改时间 Modify 修改者 修改位置或修改明细
2009-2-18 谢金牛 增加对功能键的接收
**************************************************/
int CStudentOpt::Input()
{
int nCnt = 0;//已输答案数
char szName[g_nCUserNameSize] = "";
ifstream RUserName(WRITEUSER, ios::in|ios::binary);
RUserName >> szName;
RUserName.close(); //将用户名读出
//读已选答案szAlrdAnsr
pKeepCMyTime->ReadTime(szName);
if ((strlen(pKeepCMyTime->GetALAnswer(m_nQuesNum_1)) != 0) && (m_nQuesNum_1 < 10))
{
cout << pKeepCMyTime->GetALAnswer(m_nQuesNum_1);
strcpy(m_szInput, pKeepCMyTime->GetALAnswer(m_nQuesNum_1));
nCnt = strlen(m_szInput);
}
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
HANDLE hKey = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄
DWORD res;
INPUT_RECORD keyRec;
while (1)
{
ReadConsoleInput(hKey, &keyRec, 1, &res);
if (keyRec.EventType == KEY_EVENT && keyRec.Event.KeyEvent.bKeyDown)
{
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_PRIOR) //上一题
{
if (m_nQuesNum_1 >= 1)
{
--m_nQuesNum_1;
break;
}
}
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_NEXT)//下一题
{
if (m_nQuesNum_1 < 9)
{
if (m_nQuesNum_1 < m_nAlrdAnsNum)
{
++m_nQuesNum_1;
break;
}
}
}
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_HOME)//第一题
{
m_nQuesNum_1 = 0;
break;
}
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_END)//现答最后一题
{
m_nQuesNum_1 = m_nAlrdAnsNum-1;
break;
}
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_F1)//帮助文档
{
CShow* pTempCShow = new CShow;
pTempCShow->ShowHelp();
m_pQuesCQuestion->ShowHead();
delete pTempCShow;
break;
}
if (keyRec.Event.KeyEvent.wVirtualKeyCode == VK_F5)//提交
{
if (m_nAlrdAnsNum == SIZE2)
{
char szName[g_nCUserNameSize] = "";
ifstream RUserName(WRITEUSER, ios::in|ios::binary);
RUserName >> szName;
RUserName.close(); //将用户名读出
CShow* pTempCShow = new CShow;
bF5 = true;
pTempCShow->ShowScore(m_nGainScore, nSce/60, nSce%60, szName);
delete pTempCShow;
return 0;
}
}
int nCntTemp = nCnt;//此时所选答案位数
if ((keyRec.Event.KeyEvent.wVirtualKeyCode == 8)&&(nCnt > 0))
{
cout << "\b \b";
m_szInput[nCntTemp-1] = '\0';
--nCnt;
}
if ((keyRec.Event.KeyEvent.wVirtualKeyCode == 13)&&(nCnt != 0))
{
if ((m_nQuesNum_1 <= 9)&&(m_nAlrdAnsNum <= 9))
{
InOrder(m_szInput);//由小到大排序
int nTemp = strlen(m_pQuesCQuestion->GetStaAnswer(m_nQuesNum_1));
char szTemp[SIZE1];
memset(szTemp, '\0', SIZE1);
strcpy(szTemp, m_pQuesCQuestion->GetStaAnswer(m_nQuesNum_1));
szTemp[nTemp-1] = '\0';
pKeepCMyTime->SetALAnswer(m_nQuesNum_1, m_szInput);
int nWMinute = nSce/60;
int nWSecond = nSce%60;
pKeepCMyTime->SetMinutes(nWMinute);
pKeepCMyTime->SetSecond(nWSecond);
char szName[g_nCUserNameSize] = "";
ifstream RUserName(WRITEUSER, ios::in|ios::binary);
RUserName >> szName;
RUserName.close(); //将用户名读出
pKeepCMyTime->WriteTime(szName);
if (strcmp(szTemp, m_szInput) == 0)
{
m_nGainScore += 10;
}
if (m_nAlrdAnsNum == m_nQuesNum_1)
{
++m_nAlrdAnsNum;
}
if (m_nQuesNum_1 < 9) //则m_nQuesNum_1最大为9
{
++m_nQuesNum_1;
}
break;
}
}
if (nCnt == 7)
{
continue;
}
switch(keyRec.Event.KeyEvent.wVirtualKeyCode)
{
case '1':
cout << 'a';
++nCnt;
break;
case '2':
cout << 'b';
++nCnt;
break;
case '3':
cout << 'c';
++nCnt;
break;
case '4':
cout << 'd';
++nCnt;
break;
case '5':
cout << 'e';
++nCnt;
break;
case '6':
cout << 'f';
++nCnt;
break;
case '7':
cout << 'g';
++nCnt;
break;
default:
break;
}
if ((nCntTemp != nCnt)&&(nCnt <= 7)&&(keyRec.Event.KeyEvent.wVirtualKeyCode != 8))
{
m_szInput[nCntTemp] = keyRec.Event.KeyEvent.wVirtualKeyCode+48;//将输入数字加48变为小写字母
//m_szInput[nCntTemp+1] = '\0';//之前已将数组清零,因此不再末尾加0亦可
//保存答案进数组m_szInput
}
}
}
return -1;
}
/**************************************************
* 函数名: StuOpt
* 参数:
* 形参:
无
* 返回值: 整型
* 功能:
* 学生操作函数
读取文件和学生输入等函数的方法
管理学生类
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
* 修改时间 Modify 修改者 修改位置或修改明细
2009-2-18 谢金牛 把清屏改为将除提示信息外的内容用空格填充
**************************************************/
int CStudentOpt::StuOpt()
{
GetText();
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出设备句柄
COORD CurPos;
m_nQuesNum_1 = 0;
m_pQuesCQuestion->ShowHead();
for (;;)
{
if (m_nQuesNum_1 < 10)
{
CurPos.X = 0;
CurPos.Y = 5;
SetConsoleCursorPosition(hCon, CurPos); //移动光标
for (int i=0;i<1520;++i)
{
cout<<" ";
}
CurPos.X = 0;
CurPos.Y = 5;
SetConsoleCursorPosition(hCon, CurPos); //移动光标
m_pQuesCQuestion->ShowQues(m_nQuesNum_1);
}
if (Input() == 0)//提交成功
{
return 0;
}
}
}
/**************************************************
* 函数名: InOrder
* 参数:
* 形参:
char* szTemp:目标字符串
* 返回值: 无
* 功能:
* 排序函数
对考生输入的答案进行从小到大排序
* 作者: 谢金牛
* 编写明细:
* 完成时间 Created 作者名
2009-2-14 谢金牛
**************************************************/
void CStudentOpt::InOrder(char* szTemp)
{
int nLong = strlen(szTemp);
char ch;
for (int i = 0; i < nLong; ++i)
{
for (int j = nLong-1; j > i; --j)
{
if (szTemp[j-1] > szTemp[j])
{
ch = szTemp[j-1];
szTemp[j-1] = szTemp[j];
szTemp[j] = ch;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -