?? main_form.pas
字號:
if SDZJ_CT.Selected.Level<>0 then //按小節(jié)查
begin
ZJID:=SDZJ_CT.Selected.Text;
ZJID:=Trim(ZJID);
if XZT_FRBtn.Checked then ShowXJ(0,ZJID); //查出選擇題
if TKT_FRBtn.Checked then ShowXJ(1,ZJID); //查出填空題
if JDT_FRBtn.Checked then ShowXJ(2,ZJID); //查出簡答題
if YLLST_FRBtn.Checked then ShowXJ(3,ZJID); //查出原理論述題
if XTSJT_FRBtn.Checked then ShowXJ(4,ZJID); //查出系統(tǒng)設(shè)計題
if XTCZT_FRBtn.Checked then ShowXJ(5,ZJID); //查出系統(tǒng)操作題
end
else begin //按章查
ZJID:=GetMidStr(SDZJ_CT.Selected.Text,'',' '); //公共函數(shù)
ZJID:=Trim(ZJID);
if XZT_FRBtn.Checked then ShowZZ(0,ZJID); //查出選擇題
if TKT_FRBtn.Checked then ShowZZ(1,ZJID); //查出填空題
if JDT_FRBtn.Checked then ShowZZ(2,ZJID); //查出簡答題
if YLLST_FRBtn.Checked then ShowZZ(3,ZJID); //查出原理論述題
if XTSJT_FRBtn.Checked then ShowZZ(4,ZJID); //查出系統(tǒng)設(shè)計題
if XTCZT_FRBtn.Checked then ShowZZ(5,ZJID); //查出系統(tǒng)操作題
end;
end;
//****************************************************************************************
procedure TMain_F.ST_DBGDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.DataType=ftMemo) then //如果是為備注字段的處理
begin
ST_DBG.Canvas.TextRect(Rect,Rect.Left,Rect.Top,Column.Field.AsString);
end
else ST_DBG.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
//****************************************************************************************
procedure TMain_F.SDZJ_CTMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var //單擊章節(jié)樹
ClickNode:integer;
begin
ClickNode:=SDZJ_CT.Selected.StateIndex;
if TCheckCheckState(ClickNode)=csChecked then ShowST;
end;
//****************************************************************************************
procedure TMain_F.SDZJ_CTStateChange(Sender: TObject; Node: TTreeNode;
NewState: TCheckCheckState); //節(jié)點狀態(tài)改變時
begin
if (SDZJ_CT.Selected=Node)and(Node<>nil)then
begin
if NewState=csChecked then ShowST;
if NewState=csUnChecked then
begin
ST_ADOQ.Close; //只是把顯示清空
ST_ADOQ.SQL.Clear;
ST_ADOQ.SQL.Add('SELECT BH AS 編號,TypeID as 類型,TM as 題目,CZ AS 出自章節(jié),');
ST_ADOQ.SQL.Add('NY AS 難易度 FROM XuanZeTi WHERE CZ=''1''');
ST_ADOQ.Open;
end;
end;
end;
//****************************************************************************************
procedure TMain_F.XZT_FRBtnClick(Sender: TObject); //點選擇題
begin
if SDZJ_CT.ItemState[SDZJ_CT.Selected]=csChecked then ShowST;
end;
//****************************************************************************************
procedure TMain_F.JRSJ_FBtnClick(Sender: TObject); //加入試卷
var
LX,BH,i:integer;
//ExistTypeID,ExistBH:boolean;
begin
if ST_DBG.Fields[0].IsNull then
begin
MessageBox(handle,'沒有試題不能加入!','加入錯誤',MB_OK or MB_ICONERROR);
exit;
end;
LX:=ST_DBG.Fields[1].AsInteger;
BH:=ST_DBG.Fields[0].AsInteger;
for i:=0 to STTypeID.Count-1 do
begin
if (StrToInt(STTypeID.Strings[i])=LX)and(StrToInt(STBH.Strings[i])=BH) then
begin
MessageBox(handle,'要加入的試題已經(jīng)存在了!','加入錯誤',MB_OK or MB_ICONERROR);
exit;
end;
end;
{ExistTypeID:=STTypeID.Find(IntToStr(LX),index);
ExistBH:=STBH.Find(IntToStr(BH),index1);
//注意下句的條件
if ExistTypeID and ExistBH and(index=index1)then
begin
MessageBox(handle,'要加入的試題已經(jīng)存在了!','加入錯誤',MB_OK or MB_ICONERROR);
exit;
end;}
STTypeID.Add(IntToStr(LX)); //記下試題類型
STBH.Add(IntToStr(BH)); //記下試題編號
STND.Add(ST_DBG.Fields[4].AsString); //記下試題難度
if XZT_FRBtn.Checked then XZTSL_FSE.Value:=XZTSL_FSE.Value+1; //增加選擇題數(shù)量
if TKT_FRBtn.Checked then TKTSL_FSE.Value:=TKTSL_FSE.Value+1; //增加填空題數(shù)量
if JDT_FRBtn.Checked then JDTSL_FSE.Value:=JDTSL_FSE.Value+1; //增加簡答題數(shù)量
if YLLST_FRBtn.Checked then YLLSTSL_FSE.Value:=YLLSTSL_FSE.Value+1; //增加原理論述題數(shù)量
if XTSJT_FRBtn.Checked then XTSJTSL_FSE.Value:=XTSJTSL_FSE.Value+1; //增加系統(tǒng)設(shè)計題數(shù)量
if XTCZT_FRBtn.Checked then XTCZTSL_FSE.Value:=XTCZTSL_FSE.Value+1; //增加系統(tǒng)操作題數(shù)量
MessageBox(handle,'這道試題已經(jīng)成功添加!','添加成功',MB_OK or MB_ICONINFORMATION);
ST_ADOQ.Next;
BCSJ_P.Enabled:=true;
end;
//****************************************************************************************
function TMain_F.CheckFZ:boolean;
var
AllFZ:integer;
begin
result:=false;
if (XZTSL_FSE.Value<>0)and(XZTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置選擇題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (TKTSL_FSE.Value<>0)and(TKTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置填空題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (JDTSL_FSE.Value<>0)and(JDTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置簡答題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (YLLSTSL_FSE.Value<>0)and(YLLSTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置原理論述題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (XTSJTSL_FSE.Value<>0)and(XTSJTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置系統(tǒng)設(shè)計題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (XTCZTSL_FSE.Value<>0)and(XTCZTFZ_FSE.Value=0) then
begin
MessageBox(handle,'請設(shè)置系統(tǒng)操作題分值!','沒有輸入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
AllFZ:=0; //計算總分
AllFZ:=AllFZ+XZTSL_FSE.Value*XZTFZ_FSE.Value;
AllFZ:=AllFZ+TKTSL_FSE.Value*TKTFZ_FSE.Value;
AllFZ:=AllFZ+JDTSL_FSE.Value*JDTFZ_FSE.Value;
AllFZ:=AllFZ+YLLSTSL_FSE.Value*YLLSTFZ_FSE.Value;
AllFZ:=AllFZ+XTSJTSL_FSE.Value*XTSJTFZ_FSE.Value;
AllFZ:=AllFZ+XTCZTSL_FSE.Value*XTCZTFZ_FSE.Value;
if AllFZ<>ZF_FSE.Value then
begin
MessageBox(handle,'試題總分不對,請重新設(shè)置!','總分有誤',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
end;
//****************************************************************************************
procedure TMain_F.BCSJ_FBtnClick(Sender: TObject); //保存試卷
var
i,RY_FZ,ZD_FZ,Nan_FZ,temp:integer;
ARG:Double;
NDPG,SJDH:string;
begin
if CheckFZ then exit;
RY_FZ:=0;
ZD_FZ:=0;
Nan_FZ:=0;
temp:=0;
for i:=0 to STTypeID.Count-1 do //評估試卷難度
begin
if StrToInt(STTypeID.Strings[i])=XZT_FRBtn.tag then temp:=XZTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=TKT_FRBtn.tag then temp:=TKTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=JDT_FRBtn.tag then temp:=JDTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=XTSJT_FRBtn.tag then temp:=XTSJTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=YLLST_FRBtn.tag then temp:=YLLSTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=XTCZT_FRBtn.tag then temp:=XTCZTFZ_FSE.Value;
if STND.Strings[i]='容易' then RY_FZ:=RY_FZ+temp;
if STND.Strings[i]='中等' then ZD_FZ:=ZD_FZ+temp;
if STND.Strings[i]='難' then Nan_FZ:=Nan_FZ+temp;
end;
ARG:=(RY_FZ*1+ZD_FZ*2+Nan_FZ*3)/100; //用加權(quán)的平均來評估難度系數(shù)
if ARG>1.9 then NDPG:='難'
else begin
if ARG>1.1 then NDPG:='中等'
else NDPG:='容易';
end;
//開始保存試卷
SJDH:=DateTimeToStr(now);
BCSJ_ADOQ.Close;
BCSJ_ADOQ.SQL.Clear;
BCSJ_ADOQ.SQL.Add('SELECT * FROM SJ');
BCSJ_ADOQ.Open;
BCSJ_ADOQ.Append;
BCSJ_ADOQ.FieldByName('SJDH').AsString:=SJDH;
BCSJ_ADOQ.FieldByName('CJLS').AsString:=YH;
BCSJ_ADOQ.FieldByName('ND').AsString:=NDPG;
try
BCSJ_ADOQ.Post;
except
MessageBox(handle,'保存試卷時發(fā)生未知錯誤,提交數(shù)據(jù)庫失?。?#039;,'提交失敗',MB_OK or MB_ICONERROR);
BCSJ_ADOQ.Cancel;
exit;
end;
BCSJ_ADOQ.Close;
BCSJ_ADOQ.SQL.Clear;
BCSJ_ADOQ.SQL.Add('SELECT * FROM SJT');
BCSJ_ADOQ.Open;
for i:=0 to STTypeID.Count-1 do //保存試題
begin
BCSJ_ADOQ.Append;
BCSJ_ADOQ.FieldByName('SJDH').AsString:=SJDH;
BCSJ_ADOQ.FieldByName('TypeID').AsInteger:=StrToInt(STTypeID.Strings[i]);
BCSJ_ADOQ.FieldByName('BH').AsInteger:=StrToInt(STBH.Strings[i]);
if StrToInt(STTypeID.Strings[i])=XZT_FRBtn.tag then temp:=XZTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=TKT_FRBtn.tag then temp:=TKTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=JDT_FRBtn.tag then temp:=JDTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=XTSJT_FRBtn.tag then temp:=XTSJTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=YLLST_FRBtn.tag then temp:=YLLSTFZ_FSE.Value;
if StrToInt(STTypeID.Strings[i])=XTCZT_FRBtn.tag then temp:=XTCZTFZ_FSE.Value;
BCSJ_ADOQ.FieldByName('FZ').AsInteger:=temp;
try
BCSJ_ADOQ.Post;
except
MessageBox(handle,'保存試卷時發(fā)生未知錯誤,提交數(shù)據(jù)庫失??!','提交失敗',MB_OK or MB_ICONERROR);
BCSJ_ADOQ.Cancel;
BCSJ_ADOQ.Close; //刪除已經(jīng)提交的試題
BCSJ_ADOQ.SQL.Clear;
BCSJ_ADOQ.SQL.Add('DELETE FROM SJT WHERE SJDH=:SJDH');
BCSJ_ADOQ.Parameters.ParamByName('SJDH').Value:=SJDH;
BCSJ_ADOQ.ExecSQL;
BCSJ_ADOQ.Close; //刪除已經(jīng)提交的試卷
BCSJ_ADOQ.SQL.Clear;
BCSJ_ADOQ.SQL.Add('DELETE FROM SJ WHERE SJDH=:SJDH');
BCSJ_ADOQ.Parameters.ParamByName('SJDH').Value:=SJDH;
BCSJ_ADOQ.ExecSQL;
end;
end;
MessageBox(handle,'試卷已經(jīng)成功保存!','保存',MB_OK or MB_ICONINFORMATION);
SDSJ_FBtnClick(SDSJ_FBtn); //調(diào)用函數(shù)清除數(shù)據(jù)
SDZJ_CT.SetAllNodes(csUnChecked); //把章節(jié)樹的選中狀態(tài)全部去掉
end;
//****************************************************************************************
procedure TMain_F.SCSJ_FBtnClick(Sender: TObject); //刪除試卷
var
Flag:integer;
Del_ADOQ:TADOQuery;
begin
Flag:=MessageBox(handle,'警告:刪除是不可恢復(fù)的,確認(rèn)刪除嗎?','刪除確認(rèn)',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:=BYSJ_DM.TiKu_ADOC;
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,'刪除試卷時發(fā)生未知錯誤!','刪除失敗',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,'刪除試題時發(fā)生未知錯誤!','刪除失敗',MB_OK or MB_ICONERROR);
Del_ADOQ.Close;
FreeAndNil(Del_ADOQ);
exit;
end;
MessageBox(handle,'試卷和相應(yīng)的試題已經(jīng)成功刪除!','刪除成功',MB_OK or MB_ICONINFORMATION);
Del_ADOQ.Close;
FreeAndNil(Del_ADOQ);
XYSJ_FBtnClick(XYSJ_FBtn); //重新初始化數(shù)據(jù)顯示
end;
end;
//****************************************************************************************
procedure TMain_F.SJ_DBGMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
OldSJDH:string;
begin
OldSJDH:=SJDH;
if not SJ_DBG.Fields[0].IsNull then SJDH:=SJ_DBG.Fields[0].AsString;
if (SJDH<>'')and(OldSJDH<>SJDH) then //刷新試題顯示
begin
SJT_ADOQ.Close;
SJT_ADOQ.SQL.Clear;
SJT_ADOQ.SQL.Add('SELECT SJDH AS 試卷代號,Type.TypeName AS 題型,');
SJT_ADOQ.SQL.Add('BH AS 試題編號,FZ AS 試題分值 FROM SJT,Type ');
SJT_ADOQ.SQL.Add('WHERE SJDH=:SJDH AND SJT.TypeID=Type.TypeID');
SJT_ADOQ.Parameters.ParamByName('SJDH').Value:=SJDH;
SJT_ADOQ.Open;
end;
end;
//****************************************************************************************
procedure TMain_F.YLSJ_FBtnClick(Sender: TObject); //預(yù)覽試卷
const
BF_Name:array[1..10] of String=('一、','二、','三、','四、','五、','六、','七、',
'八、','九、','十、');
JG:String=' ';
var
//Template,NewTemplate,ItemIndex,Doc_Type,Doc_Visible:OleVariant;
ItemIndex:OleVariant;
NewDocument:_Document;
FZ,TL,BF,STH,i,WTS,YTS:integer;
temp,AppPath,BGName: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
AppPath:=ExtractFilePath(Application.ExeName); //取得本程序的路徑
//顯示進(jìn)度窗口
RateProcess_F.Show;
RateProcess_F.CZ_P.Caption:='正在鏈接Microsoft Office Word......';
RateProcess_F.Rate_Gauge.MaxValue:=SJT_ADOQ.RecordCount+25;
RateProcess_F.Repaint; //重繪窗口,否則顯示不出新設(shè)置的控件屬性
try
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -