⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_gradesubject.pas

📁 一个简单的学籍管理软件
💻 PAS
字号:
unit U_GradeSubject;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  HGrids, HDBGrids, TB97Tlbr, TB97Ctls, TB97, DBTables, Db, Menus,
  ComCtrls, ExtCtrls, ImgList, HTitleDBGrid;

type
  TFm_GradeSubject = class(TForm)
    MDS: TDataSource;
    Dock: TDock97;
    Tb97_Func: TToolbar97;
    TbBtn_Add: TToolbarButton97;
    TbBtn_Delete: TToolbarButton97;
    TbBtn_Help: TToolbarButton97;
    TbBtn_Exit: TToolbarButton97;
    TbSep02: TToolbarSep97;
    MQuery: TQuery;
    MUpSQL: TUpdateSQL;
    PPM: TPopupMenu;
    PM_Add: TMenuItem;
    PM_Delete: TMenuItem;
    PM_Z01: TMenuItem;
    PM_Copy: TMenuItem;
    PM_Help: TMenuItem;
    PM_Exit: TMenuItem;
    PM_Z02: TMenuItem;
    MTrView: TTreeView;
    Spl_Main: TSplitter;
    TbBtn_Copy: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    ImageList: TImageList;
    MQueryS_XQHAO: TStringField;
    MQuerySI_NJI: TSmallintField;
    MQueryS_KCDHAO: TStringField;
    TbBtn_Print: TToolbarButton97;
    TbSp01: TToolbarSep97;
    PM_Z03: TMenuItem;
    PM_Print: TMenuItem;
    MGrid: THTitleDBGrid;
    procedure TbBtn_ExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Spl_MainCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure Spl_FuCanResize(Sender: TObject; var NewSize: Integer;
      var Accept: Boolean);
    procedure MTrViewGetImageIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewGetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure MTrViewChange(Sender: TObject; Node: TTreeNode);
    procedure MQueryAfterOpen(DataSet: TDataSet);
    procedure MQueryS_KCDHAOGetText(Sender: TField; var Text: String;
      DisplayText: Boolean);
    procedure MQueryS_KCDHAOSetText(Sender: TField; const Text: String);
    procedure TbBtn_AddClick(Sender: TObject);
    procedure TbBtn_DeleteClick(Sender: TObject);
    procedure TbBtn_CopyClick(Sender: TObject);
    procedure TbBtn_HelpClick(Sender: TObject);
    procedure TbBtn_PrintClick(Sender: TObject);
  private
  public
  end;

var
  Fm_GradeSubject: TFm_GradeSubject;

procedure Show_GradeSubject;

implementation

uses U_Main, U_GlobalProc, U_GlobalVar, U_DM, U_GradeSubjectAction,
     U_Print;

{$R *.DFM}

procedure Show_GradeSubject;
var
  i: integer;
  aQuery: TQuery;
  aList: TStrings;
begin
  for i := Fm_Main.MDIChildCount - 1 downto 0 do
  begin
    if (Fm_Main.MDIChildren[i].Name <> 'Fm_Wizard') and
      (Fm_Main.MDIChildren[i].Name <> 'Fm_GradeSubject') then
      Fm_Main.MDIChildren[i].Close;
  end;
  if not Assigned(Fm_GradeSubject) then
  begin
    Fm_GradeSubject := TFm_GradeSubject.Create(Application);
    with Fm_GradeSubject do
    begin
      MakeGradeTree(MTrView, 2, False);
      MTrView.Items[0].Selected := True;
      //MQuery.Open;
      //ReSetGridColumns(MGrid, 'XQKSKC', nil, nil);
      RefreshGridStyle(MGrid);
    end;
    aQuery := TQuery.Create(Application);
    with aQuery do
    begin
      DatabaseName := DataDBase;
      SQL.Text := 'SELECT * FROM kc';
      Open;
      aList := Fm_GradeSubject.MGrid.Columns[2].PickList;
      aList.Clear;
      while not Eof do
      begin
        aList.AddObject(FieldByName('s_kcmcheng').asString,
          Pointer(FieldByName('s_kcdhao').AsInteger));
        Next;
      end;
    end;

  end;
  with Fm_GradeSubject do
  begin
    if WindowState <> wsMaximized then
      WindowState := wsMaximized;
    Show;
    SetFocus;
  end;
end;

procedure TFm_GradeSubject.TbBtn_ExitClick(Sender: TObject);
begin
  Close;
end;

procedure TFm_GradeSubject.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  MQuery.Close;
  Action := caFree;
  Fm_GradeSubject := nil;
end;

procedure TFm_GradeSubject.Spl_MainCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_GradeSubject.Spl_FuCanResize(Sender: TObject;
  var NewSize: Integer; var Accept: Boolean);
begin
  if NewSize < 8 then
    Accept := False;
end;

procedure TFm_GradeSubject.MTrViewGetImageIndex(Sender: TObject;
  Node: TTreeNode);
begin //
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.ImageIndex := 2
    else
      Node.ImageIndex := 1;
  end
  else
  begin
    if Node.Level = 0 then
      Node.ImageIndex := 1
    else
      Node.ImageIndex := 0;
  end;
end;

procedure TFm_GradeSubject.MTrViewGetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  if Node.HasChildren then
  begin
    if Node.Expanded then
      Node.SelectedIndex := 5
    else
      Node.SelectedIndex := 4;
  end
  else
  begin
    if Node.Level = 0 then
      Node.SelectedIndex := 4
    else
      Node.SelectedIndex := 3;
  end;
end;

procedure TFm_GradeSubject.MTrViewChange(Sender: TObject;
  Node: TTreeNode);
begin
  with MQuery do
  try
    DisableControls;
    Close;

    ParamByName('ps_xqhao').AsString := S_CurTermCode;
    ParamByName('psi_nji').AsInteger := W_CurYear - Integer(Node.Data) + 1;
    Prepare;

    Open;
  finally
    EnableControls;
  end;
end;

procedure TFm_GradeSubject.MQueryAfterOpen(DataSet: TDataSet);
begin
  if MQuery.IsEmpty then
  begin
    TbBtn_Delete.Enabled := False;
    PM_Delete.Enabled := False;
  end
  else
  begin
    TbBtn_Delete.Enabled := True;
    PM_Delete.Enabled := True;
  end;
end;

procedure TFm_GradeSubject.MQueryS_KCDHAOGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
var
  aList: TStrings;
  i: integer;
begin
  aList := MGrid.Columns[2].PickList;
  if Assigned(aList) then
  begin
    for i := 0 to aList.Count - 1 do
      if Sender.AsString = IntFormatStr(Integer(aList.Objects[i]), 4) then
      begin
        Text := aList.Strings[i];
        break;
      end;
  end;
end;

procedure TFm_GradeSubject.MQueryS_KCDHAOSetText(Sender: TField;
  const Text: String);
var
  aList: TStrings;
  i: integer;
begin
  aList := MGrid.Columns[2].PickList;
  if Assigned(aList) then
  begin
    for i := 0 to aList.Count - 1 do
      if Text = aList.Strings[i] then
      begin
        Sender.AsString := IntFormatStr(Integer(aList.Objects[i]), 4);
        break;
      end;
  end;
end;

procedure TFm_GradeSubject.TbBtn_AddClick(Sender: TObject);
var
  pCode: string;
begin //
  if U_GradeSubjectAction.Show_GradeSubjectAction(pCode,
       W_CurYear - Integer(MTrView.Selected.Data) + 1) then
  begin
    MQuery.AppendRecord([S_CurTermCode, W_CurYear - Integer(MTrView.Selected.Data) + 1, pCode]);
    MQuery.ApplyUpdates;
  end;
end;

procedure TFm_GradeSubject.TbBtn_DeleteClick(Sender: TObject);
var
  tmQuery: TQuery;
  tmCode, tmName: string;
  i: integer;
begin //
  tmCode := MQuery.FieldByName('s_kcdhao').AsString;
  with MGrid.Columns[2].PickList do
  for i := 0 to Count - 1 do
  begin
    if tmCode = IntFormatStr(Integer(Objects[i]), 4) then
    begin
      tmName := Strings[i];
      break;
    end;
  end;
  tmQuery := TQuery.Create(Application);
  with tmQuery do
  try
    DataBaseName := DataDBase;
    //  成绩
    tmQuery.SQL.Text := 'SELECT * FROM kscj d1, kssz d2 WHERE d1.s_kcdhao=''' +
      MQuery.FieldByName('s_kcdhao').AsString + ''' AND d1.i_kshao=d2.i_kshao ' +
      'AND d2.s_xqhao=''' + S_CurTermCode + '''';
    Open;
    if not IsEmpty then
    begin
      if not U_GlobalProc.Show_ConfirmMess('本学期课程“' + tmName + '”已经使用并登记成绩了,删除吗?') then
        Exit;
    end else
      if not U_GlobalProc.Show_ConfirmMess('真的删除本年级课程“' + tmName + '”吗?') then
        Exit;
    Close;
    DataBaseName := DataDBase;
    //  成绩
    SQL.Text := 'DELETE kscj WHERE s_kcdhao=''' + MQuery.FieldByName('s_kcdhao').AsString +
      ''' AND i_kshao IN (SELECT i_kshao FROM kssz WHERE s_xqhao=''' +
      S_CurTermCode + ''')';
    ExecSQL;

    //  年级课程
    MQuery.Delete;
    MQuery.ApplyUpdates;
  finally
    Close;
    Free;
  end;
end;

procedure TFm_GradeSubject.TbBtn_CopyClick(Sender: TObject);
var
  tmQuery: TQuery;
begin  //
  tmQuery := TQuery.Create(Application);
  with tmQuery do
  try
    DataBaseName := DataDBase;

    SQL.Text := 'SELECT * FROM xqkskc WHERE s_xqhao=:ps_xqhao';
    ParamByName('ps_xqhao').AsString := IntToStr(W_CurYear - 1) + IntToStr(W_CurTerm);
    Prepare;
    Open;
    if not IsEmpty then
    begin
      if (not MQuery.IsEmpty) and
         U_GlobalProc.Show_ConfirmMess('拷贝去年的课程设置将覆盖已经输入的课程。拷贝吗?') then
      begin
        MQuery.DisableControls;
        MQuery.First;
        while not MQuery.Eof do
          MQuery.Delete;
        MQuery.ApplyUpdates;
      end;
      First;
      while not Eof do
      begin
        MQuery.AppendRecord([S_CurTermCode, FieldByName('si_nji').AsString,
          FieldByName('s_kcdhao').AsString]);
        Next;
      end;
      MQuery.ApplyUpdates;
    end else
    begin
      U_GlobalProc.Show_ErrorMess('没有发现去年的课程设置。');
      Exit;
    end;
  finally
    while MQuery.ControlsDisabled do
      MQuery.EnableControls;
    Free;
  end;
end;

procedure TFm_GradeSubject.TbBtn_HelpClick(Sender: TObject);
begin//

end;

procedure TFm_GradeSubject.TbBtn_PrintClick(Sender: TObject);
begin
  Show_Print(MGrid);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -