?? main_form.pas
字號:
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;
//SJ_WA.Visible := False;
//SJ_WA.Caption := '題庫系統與試卷生成'; //Word應用程序的標題包含的所有文檔標題都被修改
//建立一個新文檔
{Template := EmptyParam;
NewTemplate := false;}
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:='數據庫原理與應用期末試卷答案';//此文檔的第一個窗口的標題
{ItemIndex1:=2; //ItemIndex1定義為OleVariant類型
SJ_WA.Documents.Item(ItemIndex1).Windows.Item(ItemIndex).Caption:='kkkkkkkkkk';
//從這個測試可以看出調用SJ_WA.Documents.Add后新建的文檔的index為1
}
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_WA.Documents.Item(ItemIndex).Paragraphs.Alignment :=wdAlignParagraphCenter;
SJ_WD.Range.InsertAfter('數據庫原理與應用期末試卷答案'+#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);
Wait(1000);
RateProcess_F.Close; //關閉進度窗口
SJ_WA.Visible:=true;
SJ_WA.Disconnect; //斷開鏈接
SJ_WD.Disconnect;
end;
//****************************************************************************************
procedure TMain_F.About_FBtnClick(Sender: TObject); //關于窗口
begin
with TAbout_F.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
//****************************************************************************************
procedure TMain_F.TKLR_FBtnClick(Sender: TObject); //題庫錄入
begin
XYSJ_FBtn.ColorBorder:=clMoneyGreen;
ZDSJ_FBtn.ColorBorder:=clMoneyGreen;
SDSJ_FBtn.ColorBorder:=clMoneyGreen;
TKLR_FBtn.ColorBorder:=clBlue;
TKWH_FBtn.ColorBorder:=clMoneyGreen;
XXSZ_FBtn.ColorBorder:=clMoneyGreen;
XYSJ_FBtn.ColorHighLight:=clWhite;
XYSJ_FBtn.ColorShadow:=clBlack;
ZDSJ_FBtn.ColorHighLight:=clWhite;
ZDSJ_FBtn.ColorShadow:=clBlack;
SDSJ_FBtn.ColorHighLight:=clWhite;
SDSJ_FBtn.ColorShadow:=clBlack;
TKLR_FBtn.ColorHighLight:=clBlue;
TKLR_FBtn.ColorShadow:=clBlue;
TKWH_FBtn.ColorHighLight:=clWhite;
TKWH_FBtn.ColorShadow:=clBlack;
XXSZ_FBtn.ColorHighLight:=clWhite;
XXSZ_FBtn.ColorShadow:=clBlack;
with TTIMuLuRu.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
//****************************************************************************************
procedure TMain_F.TKWH_FBtnClick(Sender: TObject); //題庫維護
begin
XYSJ_FBtn.ColorBorder:=clMoneyGreen;
ZDSJ_FBtn.ColorBorder:=clMoneyGreen;
SDSJ_FBtn.ColorBorder:=clMoneyGreen;
TKLR_FBtn.ColorBorder:=clMoneyGreen;
TKWH_FBtn.ColorBorder:=clBlue;
XXSZ_FBtn.ColorBorder:=clMoneyGreen;
XYSJ_FBtn.ColorHighLight:=clWhite;
XYSJ_FBtn.ColorShadow:=clBlack;
ZDSJ_FBtn.ColorHighLight:=clWhite;
ZDSJ_FBtn.ColorShadow:=clBlack;
SDSJ_FBtn.ColorHighLight:=clWhite;
SDSJ_FBtn.ColorShadow:=clBlack;
TKLR_FBtn.ColorHighLight:=clWhite;
TKLR_FBtn.ColorShadow:=clBlack;
TKWH_FBtn.ColorHighLight:=clBlue;
TKWH_FBtn.ColorShadow:=clBlue;
XXSZ_FBtn.ColorHighLight:=clWhite;
XXSZ_FBtn.ColorShadow:=clBlack;
with TForm1.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
//****************************************************************************************
procedure TMain_F.XXSZ_FBtnClick(Sender: TObject); //選項設置窗口
begin
XYSJ_FBtn.ColorBorder:=clMoneyGreen;
ZDSJ_FBtn.ColorBorder:=clMoneyGreen;
SDSJ_FBtn.ColorBorder:=clMoneyGreen;
TKLR_FBtn.ColorBorder:=clMoneyGreen;
TKWH_FBtn.ColorBorder:=clMoneyGreen;
XXSZ_FBtn.ColorBorder:=clBlue;
XYSJ_FBtn.ColorHighLight:=clWhite;
XYSJ_FBtn.ColorShadow:=clBlack;
ZDSJ_FBtn.ColorHighLight:=clWhite;
ZDSJ_FBtn.ColorShadow:=clBlack;
SDSJ_FBtn.ColorHighLight:=clWhite;
SDSJ_FBtn.ColorShadow:=clBlack;
TKLR_FBtn.ColorHighLight:=clWhite;
TKLR_FBtn.ColorShadow:=clBlack;
TKWH_FBtn.ColorHighLight:=clWhite;
TKWH_FBtn.ColorShadow:=clBlack;
XXSZ_FBtn.ColorHighLight:=clBlue;
XXSZ_FBtn.ColorShadow:=clBlue;
with TSet_F.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
//****************************************************************************************
procedure TMain_F.ZDSC_FBtnClick(Sender: TObject); // 自動生成試卷
type
ZJInfo=record //章節信息
Name:string;
Flag:boolean;
end;
var
ZhangJie:array of ZJInfo; //存放章節信息
XTH:array of integer; //存放隨機選題號
ZJNum,i,XZTRY,XZTZD,XZTN,XZTFZ,TKTRY,TKTZD,TKTN,TKTFZ,JDTRY,JDTZD,JDTN,JDTFZ,YLLSTRY,
YLLSTZD,YLLSTN,YLLSTFZ,XTSJTRY,XTSJTZD,XTSJTN,XTSJTFZ,XTCZTRY,XTCZTZD,XTCZTN,XTCZTFZ,
XZTZF,TKTZF,JDTZF,YLLSTZF,XTSJTZF,XTCZTZF,ZF,num,XZTSL,TKTSL,JDTSL,YLLSTSL,XTSJTSL,
XTCZTSL,MaxBH,MinBH,j,temp,RY,ZD,Nan,YXTS,ZTL:integer;
Flag:boolean;
begin
ZJNum:=0;
YXTS:=0; //已經抽取的題的數量
ZDST:=nil;
for i:=0 to ZDZJ_CT.Items.Count-1 do
if (ZDZJ_CT.Items[i].Level=1)and(ZDZJ_CT.Items[i].StateIndex=2) then ZJNum:=ZJNum+1;
SetLength(ZhangJie,ZJNum);
j:=0;
for i:=0 to ZDZJ_CT.Items.Count-1 do //記錄下要出試題的章節
if (ZDZJ_CT.Items[i].Level=1)and(ZDZJ_CT.Items[i].StateIndex=2) then
begin
ZhangJie[j].Name:=ZDZJ_CT.Items[i].Text;
ZhangJie[j].Flag:=false;
j:=j+1;
end;
XZTRY:=XZTRY_FSE.Value;
XZTZD:=XZTZD_FSE.Value;
XZTN:=XZTN_FSE.Value;
XZTFZ:=XZTZDFZ_FSE.Value;
XZTSL:=XZTRY+XZTZD+XZTN;
XZTZF:=XZTSL*XZTFZ;
TKTRY:=TKTRY_FSE.Value;
TKTZD:=TKTZD_FSE.Value;
TKTN:=TKTN_FSE.Value;
TKTFZ:=TKTZDFZ_FSE.Value;
TKTSL:=TKTRY+TKTZD+TKTN;
TKTZF:=TKTSL*TKTFZ;
JDTRY:=JDTRY_FSE.Value;
JDTZD:=JDTZD_FSE.Value;
JDTN:=JDTN_FSE.Value;
JDTFZ:=JDTZDFZ_FSE.Value;
JDTSL:=JDTRY+JDTZD+JDTN;
JDTZF:=JDTSL*JDTFZ;
YLLSTRY:=YLLSTRY_FSE.Value;
YLLSTZD:=YLLSTZD_FSE.Value;
YLLSTN:=YLLSTN_FSE.Value;
YLLSTFZ:=YLLSTZDFZ_FSE.Value;
YLLSTSL:=YLLSTRY+YLLSTZD+YLLSTN;
YLLSTZF:=YLLSTSL*YLLSTFZ;
XTSJTRY:=XTSJTRY_FSE.Value;
XTSJTZD:=XTSJTZD_FSE.Value;
XTSJTN:=XTSJTN_FSE.Value;
XTSJTFZ:=XTSJTZDFZ_FSE.Value;
XTSJTSL:=XTSJTRY+XTSJTZD+XTSJTN;
XTSJTZF:=XTSJTSL*XTSJTFZ;
XTCZTRY:=XTCZTRY_FSE.Value;
XTCZTZD:=XTCZTZD_FSE.Value;
XTCZTN:=XTCZTN_FSE.Value;
XTCZTFZ:=XTCZTZDFZ_FSE.Value;
XTCZTSL:=XTCZTRY+XTCZTZD+XTCZTN;
XTCZTZF:=XTCZTSL*XTCZTFZ;
ZTL:=XZTSL+TKTSL+JDTSL+YLLSTSL+XTSJTSL+XTCZTSL; //總題量
SetLength(ZDST,ZTL); //設置動態數組的長度為題量
RateProcess_F.Show; //顯示進度窗口
RateProcess_F.CZ_P.Caption:='正在初始化參數......';
RateProcess_F.Rate_Gauge.MaxValue:=ZTL;
RateProcess_F.Repaint;
ZF:=XZTZF+TKTZF+JDTZF+YLLSTZF+XTSJTZF+XTCZTZF; //各總分題分數的和
if ZF<>ZDZF_FSE.Value then
begin
MessageBox(handle,'分數合與總分不相等,請重新設置分數!' ,'總分不對',MB_OK or MB_ICONERROR);
ZhangJie:=nil;
ZDST:=nil;
Exit;
end;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if XZTSL>0 then // 抽取選擇題
begin
RateProcess_F.CZ_P.Caption:='在不重復知識點的情況下抽取選擇題.....';
RateProcess_F.Repaint;
SJTXX_ADOQ.Close;
SJTXX_ADOQ.SQL.Clear;
SJTXX_ADOQ.SQL.Add('SELECT MIN(BH) AS MinBH,MAX(BH) AS MaxBH FROM XuanZeTi');
SJTXX_ADOQ.Open;
if SJTXX_ADOQ.RecordCount>0 then
begin
MinBH:=SJTXX_ADOQ.FieldValues['MinBH'];
MaxBH:=SJTXX_ADOQ.FieldValues['MaxBH'];
end;
num:=MaxBH-MinBH+1;
if num>0 then //開始初始化
begin
SetLength(XTH,num);
for i:=0 to num-1 do
XTH[i]:=MinBH+i; //給動態數組設初值
Randomize; //初始化隨機數生成器
for i:=0 to num-1 do
begin
j:=random(num);
temp:=XTH[i];
XTH[i]:=XTH[j];
XTH[j]:=temp;
end;
end;
RY:=0;
ZD:=0;
Nan:=0;
temp:=0; //用來記錄成功抽取符合條件的題目數量
for i:=0 to num-1 do
begin
if temp=XZTSL then break;
XT_ADOQ.Close;
XT_ADOQ.SQL.Clear;
XT_ADOQ.SQL.Add('SELECT * FROM XuanZeTi WHERE BH=:BH');
XT_ADOQ.Parameters.ParamByName('BH').Value:=XTH[i];
XT_ADOQ.Open;
if XT_ADOQ.RecordCount>0 then
begin
if XT_ADOQ.FieldByName('NY').AsInteger=12 then //容易題
begin
if RY=XZTRY then continue;
Flag:=false;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -