?? echosrv.c
字號:
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 + -