📄 main_form.pas
字号:
if SDZJ_CT.Selected.Level<>0 then //按小节查
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); //查出系统设计题
if XTCZT_FRBtn.Checked then ShowXJ(5,ZJID); //查出系统操作题
end
else begin //按章查
ZJID:=GetMidStr(SDZJ_CT.Selected.Text,'',' '); //公共函数
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); //查出系统设计题
if XTCZT_FRBtn.Checked then ShowZZ(5,ZJID); //查出系统操作题
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 //单击章节树
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); //节点状态改变时
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 出自章节,');
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,'要加入的试题已经存在了!','加入错误',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,'要加入的试题已经存在了!','加入错误',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; //增加选择题数量
if TKT_FRBtn.Checked then TKTSL_FSE.Value:=TKTSL_FSE.Value+1; //增加填空题数量
if JDT_FRBtn.Checked then JDTSL_FSE.Value:=JDTSL_FSE.Value+1; //增加简答题数量
if YLLST_FRBtn.Checked then YLLSTSL_FSE.Value:=YLLSTSL_FSE.Value+1; //增加原理论述题数量
if XTSJT_FRBtn.Checked then XTSJTSL_FSE.Value:=XTSJTSL_FSE.Value+1; //增加系统设计题数量
if XTCZT_FRBtn.Checked then XTCZTSL_FSE.Value:=XTCZTSL_FSE.Value+1; //增加系统操作题数量
MessageBox(handle,'这道试题已经成功添加!','添加成功',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,'请设置选择题分值!','没有输入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (TKTSL_FSE.Value<>0)and(TKTFZ_FSE.Value=0) then
begin
MessageBox(handle,'请设置填空题分值!','没有输入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (JDTSL_FSE.Value<>0)and(JDTFZ_FSE.Value=0) then
begin
MessageBox(handle,'请设置简答题分值!','没有输入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (YLLSTSL_FSE.Value<>0)and(YLLSTFZ_FSE.Value=0) then
begin
MessageBox(handle,'请设置原理论述题分值!','没有输入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (XTSJTSL_FSE.Value<>0)and(XTSJTFZ_FSE.Value=0) then
begin
MessageBox(handle,'请设置系统设计题分值!','没有输入分值',MB_OK or MB_ICONERROR);
result:=true;
exit;
end;
if (XTCZTSL_FSE.Value<>0)and(XTCZTFZ_FSE.Value=0) then
begin
MessageBox(handle,'请设置系统操作题分值!','没有输入分值',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,'试题总分不对,请重新设置!','总分有误',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; //用加权的平均来评估难度系数
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,'保存试卷时发生未知错误,提交数据库失败!','提交失败',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,'保存试卷时发生未知错误,提交数据库失败!','提交失败',MB_OK or MB_ICONERROR);
BCSJ_ADOQ.Cancel;
BCSJ_ADOQ.Close; //删除已经提交的试题
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; //删除已经提交的试卷
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,'试卷已经成功保存!','保存',MB_OK or MB_ICONINFORMATION);
SDSJ_FBtnClick(SDSJ_FBtn); //调用函数清除数据
SDZJ_CT.SetAllNodes(csUnChecked); //把章节树的选中状态全部去掉
end;
//****************************************************************************************
procedure TMain_F.SCSJ_FBtnClick(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:=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,'删除试卷时发生未知错误!','删除失败',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);
XYSJ_FBtnClick(XYSJ_FBtn); //重新初始化数据显示
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); //预览试卷
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); //取得本程序的路径
//显示进度窗口
RateProcess_F.Show;
RateProcess_F.CZ_P.Caption:='正在链接Microsoft Office Word......';
RateProcess_F.Rate_Gauge.MaxValue:=SJT_ADOQ.RecordCount+25;
RateProcess_F.Repaint; //重绘窗口,否则显示不出新设置的控件属性
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -