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

📄 echosrv.c

📁 vc开发的管理系统
💻 C
📖 第 1 页 / 共 3 页
字号:
  SQLRETURN RC;                                                            //ODBC函数返回错误校验变量
  char TestPaper[512];
  char Temp[28];
  int i,j,n,k=0;
  SQLINTEGER Test;
  struct TestRubric BinTest;

  int *THao=malloc(sizeof(int)*Num);
  RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
	    RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement,strlen(SQLStatement));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
		 SQLBindCol(hStmt,1,SQL_C_CHAR,TestPaper,strlen(TestPaper),&PassLength);
        if(SQLFetch(hStmt)==SQL_NO_DATA)
		{
        fprintf(stderr, "没有用户所要的 %s 试卷.\n",US.Subject);
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		return 0;
		}
		n=strlen(TestPaper);
		for(i=0;i<n;i++)
		{
		  for (j=0;TestPaper[i]!='#';j++,i++)
		       Temp[j]=TestPaper[i];
		  Temp[j]='\0';
          THao[k++]=atoi(Temp);
 		}
        SQLFreeStmt(hStmt,SQL_UNBIND);
        SQLFreeStmt(hStmt,SQL_CLOSE);
		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_ULONG,SQL_INTEGER,10,0,&Test,0,NULL);
		SQLBindCol(hStmt,4,SQL_C_CHAR,BinTest.Questions,strlen(BinTest.Questions),&TestID);
        SQLBindCol(hStmt,5,SQL_C_CHAR,BinTest.SelectObject[0],strlen(BinTest.SelectObject[0]),&TestID2);
		SQLBindCol(hStmt,6,SQL_C_CHAR,BinTest.SelectObject[1],strlen(BinTest.SelectObject[1]),&TestID3);
		SQLBindCol(hStmt,7,SQL_C_CHAR,BinTest.SelectObject[2],strlen(BinTest.SelectObject[2]),&TestID4);
		SQLBindCol(hStmt,8,SQL_C_CHAR,BinTest.SelectObject[3],strlen(BinTest.SelectObject[3]),&TestID5);
		for(i=0;i<Num;i++)
		{
		  Test=THao[i];
		  SQLPrepare(hStmt,SQLStatement2,strlen(SQLStatement2));
		  RC=SQLExecute(hStmt);
		  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
			{
				if(SQLFetch(hStmt)==SQL_NO_DATA)
				{
					fprintf(stderr, "没有找到用户所要 %s 试卷的第 %d 题.\n",US.Subject,i);
					SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
					free(THao);
					return 0;
				}
				strcpy(TestPapers->Questions,BinTest.Questions);
				strcpy(TestPapers->SelectObject[0],BinTest.SelectObject[0]);
                strcpy(TestPapers->SelectObject[1],BinTest.SelectObject[1]);
				strcpy(TestPapers->SelectObject[2],BinTest.SelectObject[2]);
				strcpy(TestPapers->SelectObject[3],BinTest.SelectObject[3]);
                TestPapers++;
				SQLFreeStmt(hStmt,SQL_CLOSE);
			}
		  else 
		  {
			  	    SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
					free(THao);
					fprintf(stderr,"\nSQL语句执行失败\n");
					free(THao);
					return 0;
		  }
		}
       free(THao);
       return 1;
	}
     else
	 {
	   SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	   free(THao);
       fprintf(stderr,"获取题目集合失败.\n");
       return 0;
	 }
  }
  else
  {
  free(THao);
  fprintf(stderr,"获取语句句柄失败.\n");
  return 0;
  }
}

BOOL ScanTime(struct User US,char * P,struct ContextKey *pCntx)
{
	char *SQLStatement="select 建考时间,开考时间,结束时间 from 试卷信息表 where 科目名称=?";
	char *SQLStatement2="select 试卷状态 from 学生试卷成绩表 where 科目=? and 姓名=? and 考号=?";
	SQLHANDLE hStmt;                                                      //ODBC语句句柄
	SQLRETURN RC;                                                         //ODBC函数返回错误校验变量
    DATE_STRUCT Date;
	SQLINTEGER   sCustID,sCustID1,sCustID2,PassLength;
    TIMESTAMP_STRUCT Time1,Time2;
	SYSTEMTIME TM;
	char State[5];

	RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement2,strlen(SQLStatement2));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
        SQLBindCol(hStmt,1,SQL_C_CHAR,State,strlen(State),&PassLength);
        if(SQLFetch(hStmt)==SQL_NO_DATA)
		{
        fprintf(stderr, "无此用户的试卷信息.\n");
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		return 0;
		}
        fprintf(stderr, "用户获取试卷状态成功.\n");
		}
	   else
	   {
	   SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	   fprintf(stderr,"\nSQL语句执行失败\n");
       return 0;
	   }
        SQLFreeStmt(hStmt,SQL_RESET_PARAMS);
        SQLFreeStmt(hStmt,SQL_UNBIND);
        SQLFreeStmt(hStmt,SQL_CLOSE);
	  SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
      RC=SQLExecDirect(hStmt,SQLStatement,strlen(SQLStatement));
      if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
	  {
		SQLBindCol(hStmt,1,SQL_C_DATE,&Date,0,&sCustID);
		SQLBindCol(hStmt,2,SQL_C_TIMESTAMP,&Time1,0,&sCustID1);
		SQLBindCol(hStmt,3,SQL_C_TIMESTAMP,&Time2,0,&sCustID2);
        if(SQLFetch(hStmt)==SQL_NO_DATA)
		{
        fprintf(stderr, "没有用户所要的 %s 试卷.\n",US.Subject);
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		return 0;
		}
	    GetSystemTime(&TM);
		TM.wHour+=8;
	    if(TM.wYear<Date.year||
			(TM.wYear==Date.year&&TM.wMonth<Date.month)||
			(TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay<Date.day)||
            (TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour<Time1.hour)||
            (TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour==Time1.hour&&TM.wMinute<Time1.minute)||
			(TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour==Time1.hour&&TM.wMinute==Time1.minute&&TM.wSecond<Time1.second))
			//将试卷状态改为0
		{
			ChangeState(US,"2");
			SendString("服务器设置试卷状态成功.",pCntx);
		}
	    else if(TM.wYear>Date.year||
			(TM.wYear==Date.year&&TM.wMonth>Date.month)||
			(TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay>Date.day)||
            (TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour>Time2.hour)||
            (TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour==Time2.hour&&TM.wMinute>Time2.minute)||
			(TM.wYear==Date.year&&TM.wMonth==Date.month&&TM.wDay==Date.day&&TM.wHour==Time2.hour&&TM.wMinute==Time2.minute&&TM.wSecond>Time2.second))
            //将试卷状态改为3
		{
			ChangeState(US,"3");
			SendString("服务器设置试卷状态成功.",pCntx);
		}
        else
		    //将试卷状态改为1
		{
			if(strcmp(State,"3"))
			ChangeState(US,"1");
		    sprintf(P,"%c%u",'t',(Time2.hour-TM.wHour)*60*60+(Time2.minute-TM.wMinute)*60+(Time2.second-TM.wSecond));
            SendString(P,pCntx);
		}
 		    SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		    return 1;
	  }
	   SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	   fprintf(stderr,"\nSQL语句执行失败\n");
       return 0;
  }
  fprintf(stderr,"\n语句句柄获取失败\n");
  return 0;
}

//改变试卷状态子函数
void ChangeState(struct User US,char State[5])
{
  char *SQLStatement2="update 学生试卷成绩表  set 试卷状态=? where 科目=? and 姓名=? and 考号=?";
  SQLHANDLE hStmt;                  //ODBC语句句柄
  SQLRETURN RC;                     //ODBC函数返回错误校验变量

  RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
  		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,5,0,State,strlen(State),NULL);
  		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement2,strlen(SQLStatement2));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
        fprintf(stderr, "设置试卷状态成功.\n");
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		}
		else
		{
	     SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	     fprintf(stderr,"\nSQL语句执行失败\n");
		}
  }
 else
  fprintf(stderr,"\n语句句柄获取失败\n");
}

void SaveResult(struct User US,char Result[1024])
{
  char *SQLStatement2="update 学生试卷成绩表  set 答案序列=? where 科目=? and 姓名=? and 考号=?";
  SQLHANDLE hStmt;                  //ODBC语句句柄
  SQLRETURN RC;                     //ODBC函数返回错误校验变量
  char *Temp;
  int LpText;
  
  Temp=Result;
  while(*Temp!='*')
  {
  if(*Temp=='#')
  *Temp='\0';
  Temp++;
  }
  *Temp='\0';
  strcpy(US.Name,Result);
  LpText=strlen(Result)+1;
  strcpy(US.Subject,&Result[LpText]);
  LpText+=(strlen(&Result[LpText])+1);
  strcpy(US.PassWord,&Result[LpText]);
  LpText+=(strlen(&Result[LpText])+1);
  Result[LpText+strlen(&Result[LpText])-1]='\0';

  RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
  		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_LONGVARCHAR,1024,0,&Result[LpText],strlen(&Result[LpText]),NULL);
  		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement2,strlen(SQLStatement2));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
        fprintf(stderr, "%s 保存%s试卷成功.\n",US.Name,US.Subject);
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		}
		else
		{
	     SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	     fprintf(stderr,"\nSQL语句执行失败\n");
		}
  }
 else
  fprintf(stderr,"\n语句句柄获取失败\n");

}

BOOL GetResult(struct User US,char *p)
{
	char *SQLStatement="select 答案序列 from 学生试卷成绩表 where 科目=? and 姓名=? and 考号=?";
	SQLHANDLE hStmt;                                                      //ODBC语句句柄
	SQLRETURN RC;                                                         //ODBC函数返回错误校验变量
	SQLINTEGER   sCustID;
	char buffers[1024];

	RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement,strlen(SQLStatement));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
        SQLBindCol(hStmt,1,SQL_C_CHAR,buffers,strlen(buffers),&sCustID);
        if(SQLFetch(hStmt)==SQL_NO_DATA)
		{
        fprintf(stderr, "无此用户的试卷作答信息.\n");
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		return 0;
		}
		if(buffers[0]<'0'||buffers[0]>'4')	return 0;
		strcpy(p,buffers);
        fprintf(stderr, "用户获取试卷作答信息成功.\n");
		return 1;
		}
	   else
	   {
	   SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	   fprintf(stderr,"\nSQL语句执行失败\n");
       return 0;
	   }

  }
  fprintf(stderr,"\n语句句柄获取失败\n");
  return 0;
}

void ChangeState2(struct User US,char State[5],char Result[1024])
{
  char *SQLStatement2="update 学生试卷成绩表  set 试卷状态=? where 科目=? and 姓名=? and 考号=?";
  SQLHANDLE hStmt;                  //ODBC语句句柄
  SQLRETURN RC;                     //ODBC函数返回错误校验变量
  char *Temp;
  int LpText;
  
  Temp=Result;
  while(*Temp!='*')
  {
  if(*Temp=='#')
  *Temp='\0';
  Temp++;
  }
  *Temp='\0';
  strcpy(US.Name,Result);
  LpText=strlen(Result)+1;
  strcpy(US.Subject,&Result[LpText]);
  LpText+=(strlen(&Result[LpText])+1);
  strcpy(US.PassWord,&Result[LpText]);
  LpText+=(strlen(&Result[LpText])+1);
  Result[LpText+strlen(&Result[LpText])-1]='\0';

  RC=SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
  if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
  {
  		RC=SQLBindParameter(hStmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,5,0,State,strlen(State),NULL);
  		RC=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Subject,strlen(US.Subject),NULL);
		RC=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.Name,strlen(US.Name),NULL);
        RC=SQLBindParameter(hStmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,50,0,US.PassWord,strlen(US.PassWord),NULL);
        RC=SQLExecDirect(hStmt,SQLStatement2,strlen(SQLStatement2));
        if (RC==SQL_SUCCESS || RC==SQL_SUCCESS_WITH_INFO)
		{
        fprintf(stderr, "设置试卷状态成功.\n");
		SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
		}
		else
		{
	     SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
	     fprintf(stderr,"\nSQL语句执行失败\n");
		}
  }
 else
  fprintf(stderr,"\n语句句柄获取失败\n");
}

⌨️ 快捷键说明

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