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

📄 datamtnce.cpp

📁 一个在线考试系统的代码。功能包括考试科目管理
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}

void DataMtnce::WriteJdgResult()
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",SGetsubjct());
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString resultbasename=(char*)(_bstr_t)Adoconn.m_pRecordset->GetCollect("学生答题结果库");
	sql.Format("select * from %s where 学号=%d and 题目ID=%d and 题型=%d",resultbasename,m_iStdntID,GetJdgID(),m_eQstnType);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	if (Adoconn.m_pRecordset->adoEOF)
	{
		sql.Format("insert into %s values(%d,'%s',%d,%d,'%s','%s','%s',%d)",resultbasename,m_iStdntID,m_strStdntNm,m_eQstnType,GetJdgID(),m_strQstn,m_strQstnAns,m_strSAns,CheckJdgResult());
		Adoconn.ExecuteSQL((_bstr_t)sql);
	}
	else
	{
		sql.Format("update %s set 学生答案='%s',是否正确=%d where 学号=%d and 题目ID=%d and 题型=%d",resultbasename,m_strSAns,CheckJdgResult(),m_iStdntID,GetJdgID(),m_eQstnType);
		Adoconn.ExecuteSQL((_bstr_t)sql);
	}


	Adoconn.ExitConnect();
}

BOOL DataMtnce::CheckJdgResult()
{
	if (m_strQstnAns==m_strSAns && !m_strSAns.IsEmpty())
	{
		//m_iscore+=1;
		return TRUE;
	}
	else
		return FALSE;
}

int DataMtnce::GetSJudgement()
{
	return m_iSJudgementArr[m_iJdgSqnce];
}

CString DataMtnce::GetResult()
{
	m_iscore=CalRightNum();
	m_strInfoNotify.Format("本次考试各类题型共计%d题,您答对了%d题!",m_iSlctNum+m_iBlkNum+m_iJdgNum,m_iscore);
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",SGetsubjct());
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString resultbase=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("学生成绩库");
	sql.Format("insert into %s values(%d,'%s',%d,%d,%f)",resultbase,m_iStdntID,m_strStdntNm,m_iscore,m_iSlctNum+m_iBlkNum+m_iJdgNum,m_iscore/(float)(m_iSlctNum+m_iBlkNum+m_iJdgNum));
	Adoconn.ExecuteSQL((_bstr_t)sql);
	Adoconn.ExitConnect();
	return m_strInfoNotify;
}



void DataMtnce::SetLogFlag(int Stdntid)
{
	m_bHasLogged=TRUE;
	CString sql;
	sql.Format("insert into logstatus values(%d,%d)",Stdntid,m_bHasLogged);
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.ExecuteSQL((_bstr_t)sql);
	Adoconn.ExitConnect();
	
}

void DataMtnce::InitTime(int itime)
{
	m_iTotalTime=itime;
	m_iHour=itime/3600;
	itime=itime%3600;
	m_iMinute=itime/60;
	m_iSecond=itime%60;
}

BOOL DataMtnce::CountDown()
{
	if(m_iTotalTime==0)
		return FALSE;
	else
	{
		m_iTotalTime--;
		if(m_iSecond!=0)
		{
			m_iSecond--;
		}
		else if(m_iSecond==0 && m_iMinute!=0)
		{
			m_iMinute--;
			m_iSecond=59;
		}
		else if(m_iSecond==0 && m_iMinute==0 && m_iHour!=0)
		{
			m_iHour--;
			m_iMinute=59;
			m_iSecond=59;
		}
		return TRUE;
	}
}

int DataMtnce::GetHour()
{
	return m_iHour;
}

int DataMtnce::GetMinute()
{
	return m_iMinute;
}

int DataMtnce::GetSecond()
{
	return m_iSecond;
}

int DataMtnce::ReadTime()
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("select * from timeleft where 学号=%d",m_iStdntID);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	if(Adoconn.m_pRecordset->adoEOF)
	{
		sql.Format("select * from titleamount where 科目名称='%s'",SGetsubjct());
		Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
		m_iTotalTime=atoi((char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("考试时间"));
	}
	else
	{
		m_iTotalTime=atoi((char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("剩余时间"));
	}
	return m_iTotalTime;
}

int DataMtnce::GetTotalTime()
{
	return m_iTotalTime;
}

int DataMtnce::GetBlkQstionNum(CString subjct)
{
	//根据科目名称查询题库,获取题库中的题量。
	int temp=0;
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",subjct);
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString blkbasename=(char*)(_bstr_t)Adoconn.m_pRecordset->GetCollect("填空题库名称");
	sql.Format("select * from %s",blkbasename);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		temp++;
		Adoconn.m_pRecordset->MoveNext();
	}
	Adoconn.ExitConnect();
	return temp;
}

void DataMtnce::SetJdgNum(CString subjct, int num)
{
	if(num>GetJdgQstionNum(subjct))
	{
		AfxMessageBox("对不起,您设置的题量大于题库中现有的题量\n题量已自动被设置为题库中的题目数的80%!\n您可以向题库中添加题目后再重新设置题量。");
		m_iJdgNum=(int)(0.8*GetJdgQstionNum(subjct));
	}
	else
		m_iJdgNum=num;
	CString sql;
	sql.Format("update titleamount set 判断题数量=%d where 科目名称='%s'",m_iJdgNum,subjct);
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.ExecuteSQL((_bstr_t)sql);
	Adoconn.ExitConnect();
}

int DataMtnce::GetJdgQstionNum(CString subjct)
{
	//根据科目名称查询题库,获取题库中的题量。
	int temp=0;
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",subjct);
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString jdgbasename=(char*)(_bstr_t)Adoconn.m_pRecordset->GetCollect("判断题库名称");
	sql.Format("select * from %s",jdgbasename);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		temp++;
		Adoconn.m_pRecordset->MoveNext();
	}
	Adoconn.ExitConnect();
	return temp;
}

void DataMtnce::SetTotalTime(CString subjct, int itime)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("update titleamount set 考试时间=%d where 科目名称='%s'",itime*60,subjct);
	Adoconn.ExecuteSQL((_bstr_t)sql);
	Adoconn.ExitConnect();
}

int DataMtnce::ReadTotalTime(CString subjct)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",subjct);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	int temp=atoi((char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("考试时间"));
	Adoconn.ExitConnect();
	
	return temp/60;
}

void DataMtnce::SetAdminID(int adminid)
{
	m_iAdminID=adminid;
}

CString DataMtnce::ReadAdminPswd(int adminid)
{
	//根据参数传进来的管理员ID号,去数据库中查询该管理员的登录密码并返回其值
	CString sql;
	sql.Format("select * from adminaccount where 管理员ID=%d",adminid);
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	if(Adoconn.m_pRecordset->adoEOF)
		return "";
	CString pswtemp=(char*)(_bstr_t)Adoconn.m_pRecordset->GetCollect("管理员密码");
	m_strAdminPswd=pswtemp;
	Adoconn.ExitConnect();

	return m_strAdminPswd;
}

int DataMtnce::GetRecordNum(CString base)
{
	int i=0;
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("select * from %s",base);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		i++;
		Adoconn.m_pRecordset->MoveNext();
	}
	Adoconn.ExitConnect();
	return i;
}

void DataMtnce::GeneratRandomBlk(int *arr, int num)
{
	srand((unsigned int)time(NULL));
	for(int i=0;i<num;i++)
	{
		arr[i]=0;
	}
	int temp=0;
	int blkbasenum=GetBlkQstionNum(m_strSubject);
	for(i=0;i<num;i++)
	{
		while(!HaveGeneratedBlk(temp,arr))
			temp=rand()%blkbasenum;
		arr[i]=temp;
	}
}

void DataMtnce::GeneratRandomJdg(int *arr, int num)
{
	srand((unsigned int)time(NULL));
	for(int i=0;i<num;i++)
	{
		arr[i]=0;
	}
	int temp=0;
	int jdgbasenum=GetJdgQstionNum(m_strSubject);
	for(i=0;i<num;i++)
	{
		while(!HaveGeneratedJdg(temp,arr))
			temp=rand()%jdgbasenum;
		arr[i]=temp;
	}
}

int DataMtnce::CalRightNum()
{
	int temp=0;
	int tempans;
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();
	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubject);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString resultbase=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("学生答题结果库");
	sql.Format("select * from %s where 学号=%d",resultbase,m_iStdntID);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		tempans=atoi((char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("是否正确"));
		if (-1==tempans)
		{
			temp++;
		}
		Adoconn.m_pRecordset->MoveNext();
	}
	return temp;
}

BOOL DataMtnce::HaveGeneratedBlk(int temp, int *titlenum)
{
	if(temp<=0)
		return false;
	int size=GetBlkNum(m_strSubject);
	for(int i=0;i<size;i++)
	{
		if(temp==titlenum[i])
			return false;
	}
	return true;
}

BOOL DataMtnce::HaveGeneratedJdg(int temp, int *titlenum)
{
	if(temp<=0)
		return false;
	int size=GetJdgNum(m_strSubject);
	for(int i=0;i<size;i++)
	{
		if(temp==titlenum[i])
			return false;
	}
	return true;
}

void DataMtnce::TReadSelAns(int qstionid)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();

	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubject);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString basename=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("选择题库名称");
	sql.Format("select * from %s where 试题ID=%d",basename,qstionid);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);

	m_strSlctAnsA=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("选项1");
	m_strSlctAnsB=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("选项2");
	m_strSlctAnsC=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("选项3");
	m_strSlctAnsD=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("选项4");

	Adoconn.ExitConnect();
}

CString DataMtnce::TReadBlkAns(int qstionid)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();

	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubject);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString basename=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("填空题库名称");
	sql.Format("select * from %s where 试题ID=%d",basename,qstionid);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString temp=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("答案");

	Adoconn.ExitConnect();
	return temp;
}

int DataMtnce::TReadJdgAns(int qstionid)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();

	CString sql;
	sql.Format("select * from titleamount where 科目名称='%s'",m_strSubject);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString basename=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("判断题库名称");
	sql.Format("select * from %s where 试题ID=%d",basename,qstionid);
	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	CString temp=(char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("答案");
	Adoconn.ExitConnect();

	if(temp=="错")
		return 0;
	else if(temp=="对")
		return 1;
}

void DataMtnce::UpdateQstionID(CString basename)
{
	ADOConn Adoconn;
	Adoconn.OnInitADOConn();

	CString sql;
	sql.Format("select * from %s",basename);
	int qstionid;
	int i=1;

	Adoconn.m_pRecordset=Adoconn.GetRecordSet((_bstr_t)sql);
	while(!Adoconn.m_pRecordset->adoEOF)
	{
		qstionid=atoi((char *)(_bstr_t)Adoconn.m_pRecordset->GetCollect("试题ID"));
		sql.Format("update %s set 试题ID=%d where 试题ID=%d",basename,i,qstionid);
		Adoconn.ExecuteSQL((_bstr_t)sql);
		Adoconn.m_pRecordset->MoveNext();
		i++;
	}

	Adoconn.ExitConnect();
}

⌨️ 快捷键说明

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