📄 usjcq.pas
字号:
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在输出简答题......';//试卷题信息--------简答题部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=3');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //题型在试卷中属于哪一部分
STH:=1; //每种题型开始的题号
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s简答题( 共%d小题每题%d分, 小计%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //为答案记下部分说明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM TJianDa WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //输出简答题题目
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13);
SJDA.Add(XT_ADOQ.FieldValues['DA']); //记下简答题答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
RateProcess_F.CZ_P.Caption:='正在输出程序设计题......';//试卷题信息----原理论述题部分
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT * FROM SJT WHERE SJDH=:DH AND TypeID=4');
SJTXX_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
SJTXX_ADOQ.Open;
BF:=BF+1; //题型在试卷中属于哪一部分
STH:=1; //每种题型开始的题号
TL:=SJTXX_ADOQ.RecordCount;
if TL>0 then
begin
SJTXX_ADOQ.First;
FZ:=SJTXX_ADOQ.FieldValues['FZ'];
SJ_WD.Range.InsertAfter(#13);
temp:=Format('%s程序设计题( 共%d小题每题%d分, 小计%d分 )',[BF_Name[BF],TL,FZ,TL*FZ]);
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJDA.Add('#'+temp); //为答案记下部分说明
SJTXX_ADOQ.First;
while not SJTXX_ADOQ.Eof do
begin
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM TChengxu WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=SJTXX_ADOQ.FieldValues['BH'];
XT_ADOQ.Open;
temp:=Format('%s%d. %s',[JG,STH,XT_ADOQ.FieldValues['TM']]); //输出原理论述题题目
SJ_WD.Range.InsertAfter(temp+#13+#13);
SJ_WD.Range.InsertAfter(#13+#13+#13+#13+#13+#13+#13);
SJDA.Add(XT_ADOQ.FieldValues['DA']); //记下简答题答案
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;
RateProcess_F.Repaint;
STH:=STH+1;
SJTXX_ADOQ.Next;
end;
end;
SJTXX_ADOQ.Close; //关闭ADOQuery以减少资源占用
RateProcess_F.Close; //关闭进度窗口
SJ_WA.Visible:=true;
SJ_WA.Disconnect; //断开链接
SJ_WD.Disconnect;
end;
procedure TfrmSJCQ.FormShow(Sender: TObject);
begin
STTypeID:=TStringList.Create; //用于保存试题类型
STBH:=TStringList.Create; //用于保存试题编号
STND:=TStringList.Create; //用于保存试题难度
SJDA:=TStringList.Create;
init;
end;
//-----------------------------
//退出抽取试卷模块
procedure TfrmSJCQ.btnCancelClick(Sender: TObject);
begin
close;
end;
//-----------------------------
//删除试卷
procedure TfrmSJCQ.btnDeleteClick(Sender: TObject);
var
Flag:integer;
Del_ADOQ:TADOQuery;
begin
Flag:=MessageBox(handle,'警告:删除是不可恢复的,确认删除吗?','删除确认',MB_OKCANCEL or MB_ICONWARNING);
if Flag=IDCANCEL then exit;
if not SJ_DBG.Fields[0].IsNull then SJDH:=SJ_DBG.Fields[0].AsString;
if SJDH<>'' then
begin
Del_ADOQ:=TADOQuery.Create(nil);
Del_ADOQ.Connection:=dmPer.acPer;
Del_ADOQ.Close; //删除试卷
Del_ADOQ.SQL.Clear;
Del_ADOQ.SQL.Add('DELETE FROM SJ WHERE SJDH=:DH');
Del_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
try
Del_ADOQ.ExecSQL;
except
MessageBox(handle,'删除试卷时发生未知错误!','删除失败',MB_OK or MB_ICONERROR);
Del_ADOQ.Close;
FreeAndNil(Del_ADOQ);
exit;
end;
Del_ADOQ.Close; //删除试卷的试题
Del_ADOQ.SQL.Clear;
Del_ADOQ.SQL.Add('DELETE FROM SJT WHERE SJDH=:DH');
Del_ADOQ.Parameters.ParamByName('DH').Value:=SJDH;
try
Del_ADOQ.ExecSQL;
except
MessageBox(handle,'删除试题时发生未知错误!','删除失败',MB_OK or MB_ICONERROR);
Del_ADOQ.Close;
FreeAndNil(Del_ADOQ);
exit;
end;
MessageBox(handle,'试卷和相应的试题已经成功删除!','删除成功',MB_OK or MB_ICONINFORMATION);
Del_ADOQ.Close;
FreeAndNil(Del_ADOQ);
end;
init;
end;
//-------------------------------
//答案预览
procedure TfrmSJCQ.btnPreviewAnClick(Sender: TObject);
var
//Template,NewTemplate,ItemIndex,Doc_Type,Doc_Visible:OleVariant;
ItemIndex:OleVariant;
NewDocument:_Document;
i,j,k:integer;
temp,AppPath,DAStr:string;
procedure SetFont(aBold,aItalic,aShadow,aSize:integer);
begin
SJ_WF.ConnectTo(SJ_WD.Sentences.Get_Last.Font);
SJ_WF.Name:='宋体';
SJ_WF.Bold := aBold;
SJ_WF.Italic := aItalic;
SJ_WF.Shadow := aShadow;
SJ_WF.Size := aSize;
end;
begin
if (SJDA=nil)or(SJDA.Count=0) then
begin
MessageBox(handle,'答案还没生成,请先预览试卷!','没有答案',MB_OK or MB_ICONERROR);
exit;
end;
AppPath:=ExtractFilePath(Application.ExeName); //取得本程序的路径
//显示进度窗口
RateProcess_F.Show;
RateProcess_F.CZ_P.Caption:='正在链接Microsoft Office Word......';
RateProcess_F.Rate_Gauge.MaxValue:=SJDA.Count+25;
RateProcess_F.Repaint; //重绘窗口,否则显示不出新设置的控件属性
try
SJ_WA.Connect;
except
MessageBox(handle,'无法连接,也许没有安装Word','连接出错', MB_Ok or MB_ICONERROR);
RateProcess_F.Close;
Abort;
end;
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+10;
ItemIndex :=1;
NewDocument:=SJ_WA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
RateProcess_F.CZ_P.Caption:='正在新建Microsoft Office Word 文档......';
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
//建立WordDocument连接
SJ_WD.ConnectTo(NewDocument); //链接到刚在上面建立的新文档
SJ_WD.Windows.Item(ItemIndex).Caption:='FoxPro数据库程序设计试卷答案';//此文档的第一个窗口的标题
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
//因为Word进行拼写检查需要很多时间,所以首先关闭检查
SJ_WA.Options.CheckSpellingAsYouType := False;
SJ_WA.Options.CheckGrammarAsYouType := False;
//设置Word的字体
SetFont(1,0,0,22);
//设置段落对齐方式
SJ_WD.Range.InsertAfter('FoxPro数据库程序设计试卷答案'+#13);
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+5;
RateProcess_F.Repaint;
SJ_WD.Range.InsertAfter(' '+#13);
SetFont(0,0,0,10);
//准备循环输出答案
i:=0;
j:=0; //j为每一部分的小题序号
k:=1; //k为小题里的分问题的序号
repeat
temp:=SJDA.Strings[i];
RateProcess_F.Rate_Gauge.Progress:=RateProcess_F.Rate_Gauge.Progress+1;//显示进度
RateProcess_F.Repaint;
if temp[1]='#' then //新的部分开始
begin
SJ_WD.Sentences.Last.InsertAfter(#13);
SJ_WD.Sentences.Last.InsertAfter(AnsiReplaceStr(temp,'#','')+#13);
j:=0;
i:=i+1;
continue;
end;
if pos(UpperCase('.doc'),UpperCase(temp))>0 then //答案里有word文档
begin
SJ_WD.Sentences.Last.InsertAfter(' '+#13);
SJ_WD.Sentences.Last.InsertFile(AppPath+'doc\'+temp,EmptyParam,
EmptyParam,EmptyParam,EmptyParam);
SJ_WD.Sentences.Last.InsertAfter(#13+#13+#13+#13+#13+#13);
i:=i+1;
continue;
end;
if temp='*' then //这一题里有小题
begin
k:=1;
i:=i+1;
continue;
end;
if temp[1]<>'!' then //内无小题的题目的答案
begin
j:=j+1; //题号加1
DAStr:=IntToStr(j)+'、'+temp;
SJ_WD.Sentences.Last.InsertAfter(DAStr+#13);
end
else begin
if k=1 then
begin
j:=j+1; //题号加1
DAStr:=IntToStr(j)+'、';
SJ_WD.Sentences.Last.InsertAfter(DAStr+#13);
end;
DAStr:=' '+IntToStr(k)+'.'+AnsiReplaceStr(SJDA.Strings[i],'!','');
SJ_WD.Sentences.Last.InsertAfter(DAStr+#13+#13);
k:=k+1;
end;
i:=i+1;
until (i>SJDA.Count-1);
RateProcess_F.Close; //关闭进度窗口
SJ_WA.Visible:=true;
SJ_WA.Disconnect; //断开链接
SJ_WD.Disconnect;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -