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

📄 mainfrm.pas

📁 一小的学生成绩管理系统,是学习DELPHI的好资料.
💻 PAS
字号:
unit MainFrm;

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, ExtCtrls, StdCtrls, DBCtrls, Grids, DBGrids, DBTables, Db,
  ToolWin, ComCtrls,iniFiles;
  
const
  DbAlias='StudentScore';
  iniFileName='user\DBDSCore.ini';
  ShiTiShuMax=40;
type
  TMainForm = class(TForm)
    dsTable: TDataSource;
    Table1: TTable;
    Query1: TQuery;
    dsQuery: TDataSource;
    DBGrid: TDBGrid;
    Navigator: TDBNavigator;
    bbtnState: TBitBtn;
    Label1: TLabel;
    EdtStuno: TEdit;
    CoolBar1: TCoolBar;
    sbADD: TSpeedButton;
    sbQuery: TSpeedButton;
    sbChart: TSpeedButton;
    sbAbout: TSpeedButton;
    sbClose: TSpeedButton;
    Database1: TDatabase;
    sbOption: TSpeedButton;
    procedure bbtnStateClick(Sender: TObject);
    procedure EdtStunoKeyPress(Sender: TObject; var Key: Char);
    procedure sbQueryClick(Sender: TObject);
    procedure sbChartClick(Sender: TObject);
    procedure sbADDClick(Sender: TObject);
    procedure sbOptionClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure sbAboutClick(Sender: TObject);
    procedure sbCloseClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure DBGridColExit(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    procedure UniformState();
    { Private declarations }
  public
    procedure GetFieldMax(var FieldMax:array of integer);  
    { Public declarations }
  end;

var
  MainForm: TMainForm;
  AFieldCount:0..40;
  SQLCond:string;

implementation

uses QueryFrm, CharFrm, AddNewFrm, ParamFrm, AboutFrm;

{$R *.DFM}


procedure TMainForm.bbtnStateClick(Sender: TObject);
begin
  MainForm.Tag:=(MainForm.Tag+1) Mod 2;
  UniFormState;
end;
procedure TMainForm.UniformState;
begin
  if MainForm.Tag=0 then //编辑状态
  begin
    DBGrid.DataSource:=dsTable;
    Navigator.DataSource:=dsTable;
    EdtStuno.Enabled:=True;
    Table1.Active:=true;
    //Table.Filter
    DbGrid.ReadOnly:=False;
    bbtnState.Caption:='浏览数据';
  end
  else begin
    DbGrid.DataSource:=dsQuery;
    Navigator.DataSource:=dsQuery;
    EdtStuno.Enabled:=False;
    Query1.Active:=True;
    //Query1.Sql
    DbGrid.ReadOnly:=True;
    bbtnState.Caption:='编辑数据';
  end;
end;

procedure TMainForm.EdtStunoKeyPress(Sender: TObject; var Key: Char);
begin
  if Key in [#13,#9] then
  begin
    if Table1.Locate('学号',Trim(EdtStuno.Text),[loPartialKey]) then
      DbGrid.SetFocus;
  end;
end;

procedure TMainForm.GetFieldMax(var FieldMax:array of integer);
// FieldMax is Array from 0 to 39
var
  IniFile:TIniFile;
  FieldName:string;
  i,FieldValue:integer;
begin

  IniFile:=TIniFile.Create(MainFrm.IniFileName);
  for i:=4 to MainForm.Query1.FieldCount-1 do
  begin
    FieldName:=MainForm.Query1.Fields[i].FieldName;
    FieldValue:=Inifile.ReadInteger('DBStructure',FieldName,0);
    FieldMax[i-4]:=FieldValue;
  end;
  IniFile.Free;

end;

procedure TMainForm.sbQueryClick(Sender: TObject);
begin
  MainForm.Tag:=1;
  UniFormState;
  QueryForm:=TQueryForm.Create(Self);
  MainForm.Hide;
  QueryForm.Show;
end;

procedure TMainForm.sbChartClick(Sender: TObject);
begin
  MainForm.Hide;

  ChartForm.DecisionQuery1.Close;
  ChartForm.DecisionQuery1.SQL.Text:='SELECT 学号, 姓名, 缺考, 总成绩, 第一题,'+
      ' 第二题, 第三题, 第四题, 第五题, 第六题, 第七题, 第八题,'+
      'COUNT( 学号 ), COUNT( 缺考 ), SUM( 总成绩 )'+
      'FROM StudentScore'+SQlCond+' GROUP BY 学号, 姓名, 缺考, 总成绩, 第一题,'+
      ' 第二题, 第三题, 第四题, 第五题, 第六题, 第七题, 第八题';

  ChartForm.DecisionQuery1.open;
  ChartForm.Show;
end;

procedure TMainForm.sbADDClick(Sender: TObject);
begin
   AddNewForm:=TAddNewForm.Create(self);
   MainForm.Hide;
   AddNewForm.Show;
end;

procedure TMainForm.sbOptionClick(Sender: TObject);
begin
  ParamForm:=TParamForm.Create(self);
  MainForm.Hide;
  ParamForm.Show;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  IniFile:TIniFile;
  FieldName:string;
  i,j:integer;
  FieldVisible:Boolean;
begin
  SQLCond:='';

  IniFile:=TIniFile.Create(IniFileName);
  AFieldCount:=Inifile.ReadInteger('DBStructure','试题数',1);
  for i:=0 to Query1.FieldCount-1 do
  begin
    FieldName:=Query1.Fields[i].FieldName;
    if i>AFieldCount+3 then //如果大于试题总数则不显示
      FieldVisible:=False
    else //否则从配置文件中取值
      FieldVisible:=Inifile.ReadBool('Display',FieldName,False);
    DbGrid.Columns[i].Visible:=FieldVisible;
//    Table1.Fields[0].Visible:=FieldVisible;
  end;
  IniFile.Free;
end;

procedure TMainForm.sbAboutClick(Sender: TObject);
begin
  AboutForm:=TAboutForm.Create(self);
  MainForm.Hide;
  AboutForm.Show;
end;

procedure TMainForm.sbCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
  ParamForm:=TParamForm.Create(self);
  MainForm.Hide;
  ParamForm.Show;
end;

procedure TMainForm.DBGridColExit(Sender: TObject);
var
  FieldMax:array[0..40] of integer;
begin
  { GetFieldMax(FieldMax);
   if DBGrid.SelectedField<>nil then
   with DBGrid.SelectedField do
   begin
     if asFloat>FieldMax[index] then
     begin
       Showmessage('输入数据大于该题分数上限!');
       asFloat:=FieldMax[index];
     end;
   end;}
end;

procedure TMainForm.FormPaint(Sender: TObject);
begin
  sbQuery.Hint:=sbQuery.Hint+' '+SQLCond;
end;

end.

⌨️ 快捷键说明

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