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

📄 ustudyinfo.pas

📁 学生信息管理系统
💻 PAS
字号:
unit UStudyInfo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UData, PrnDbgeh, DB, ADODB, ActnList, Grids, DBGridEh, ExtCtrls,
  ComCtrls, ToolWin, StdCtrls, Mask, DBCtrlsEh,ComObj, Menus;

type
  TFStudyInfo = class(TFData)
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    DBEh_xm: TDBEditEh;
    Label1: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Shape2: TShape;
    Tool_m: TToolButton;
    ADOQueryID: TAutoIncField;
    ADOQueryDSDesigner: TWideStringField;
    ADOQueryDSDesigner2: TWideStringField;
    ADOQueryDSDesigner3: TSmallintField;
    ADOQueryDSDesigner4: TWideStringField;
    ADOQueryDSDesigner5: TWideStringField;
    ADOQueryDSDesigner6: TWideStringField;
    ADOQueryDSDesigner7: TFloatField;
    ADOQueryDSDesigner8: TFloatField;
    ADOQueryDSDesigner9: TFloatField;
    ADOQueryDSDesigner10: TFloatField;
    ADOQueryDSDesigner11: TFloatField;
    ADOQueryDSDesigner12: TFloatField;
    ADOQueryDSDesigner13: TFloatField;
    ADOQueryDSDesigner14: TFloatField;
    ADOQueryDSDesigner15: TFloatField;
    ADOQueryDSDesigner16: TFloatField;
    ADOQueryDSDesigner17: TFloatField;
    ADOQueryDSDesigner18: TWideStringField;
    ADOQueryDSDesigner19: TWideStringField;
    ADOQueryDSDesigner20: TWideStringField;
    A_tx: TAction;
    ToolButton2: TToolButton;
    Tool_tx: TToolButton;
    Panel3: TPanel;
    Edit1: TEdit;
    Label4: TLabel;
    A_import: TAction;
    Tool_import: TToolButton;
    ToolButton4: TToolButton;
    A_Express: TAction;
    Tool_Express: TToolButton;
    OpenDialog: TOpenDialog;
    PopupMenu: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    procedure DBEh_xmKeyPress(Sender: TObject; var Key: Char);
    procedure A_saveExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DataSourceDataChange(Sender: TObject; Field: TField);
    procedure DataSourceStateChange(Sender: TObject);
    procedure A_addExecute(Sender: TObject);
    procedure A_txExecute(Sender: TObject);
    procedure A_importExecute(Sender: TObject);
    procedure A_ExpressExecute(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Tool_mClick(Sender: TObject);
  private
    { Private declarations }
    function GetSTUDENTData(vFileName: string): integer;
  public
    { Public declarations }
  end;

var
  FStudyInfo: TFStudyInfo;

implementation

uses UPublic, UMain;

{$R *.dfm}

procedure TFStudyInfo.DBEh_xmKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then begin
    if ComboBox1.ItemIndex < 0 then begin
      ask('班级输入不正确,请选择!','提示',MB_INFO);
      ComboBox1.SetFocus;
      exit;
    end;
    if ComboBox2.ItemIndex < 0 then begin
      ask('学生类型输入不正确,请选择!','提示',MB_INFO);
      ComboBox2.SetFocus;
      exit;
    end;
    if trim(DBEh_xm.Text)='' then begin
      ask('学生姓名不能为空,请输入!','提示',MB_INFO);
      DBEh_xm.SetFocus;
      exit;
    end;
    if ask('是否真的保存?','提问',MB_OKCL)=1 then  try
      Tool_save.Click;
    except
      ask('保存出错!','提示',MB_STOP);
    end;
    Tool_add.Click;
    DBEh_xm.SetFocus;
  end;
end;

procedure TFStudyInfo.A_saveExecute(Sender: TObject);
begin
    if ComboBox1.ItemIndex < 0 then begin
      ask('班级输入不正确,请选择!','提示',MB_INFO);
      ComboBox1.SetFocus;
      exit;
    end;
    if ComboBox2.ItemIndex < 0 then begin
      ask('学生类型输入不正确,请选择!','提示',MB_INFO);
      ComboBox2.SetFocus;
      exit;
    end;
    if trim(DBEh_xm.Text)='' then begin
      ask('学生姓名不能为空,请输入!','提示',MB_INFO);
      DBEh_xm.SetFocus;
      exit;
    end;
    with ADOQuery do begin
      FieldByName('班级').AsString := ComboBox1.Text;
      FieldByName('级别').AsString := Copy(ComboBox1.Text,1,4);
      FieldByName('学生类型').AsString := ComboBox2.Text;
      FieldByName('类型').AsString := copy(ComboBox2.Text,1,2);
      FieldByName('姓名').AsString := DBEh_xm.Text;
    end;
  inherited;
end;

procedure TFStudyInfo.FormCreate(Sender: TObject);
begin
  inherited;
  InitCode('select distinct bj,id from STU_class order by id',ComboBox1.Items);
//  InitCode('select distinct ss from STU_ss',ComboBox2.Items);
end;

procedure TFStudyInfo.DataSourceDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  if (ADOQuery.State <> dsBrowse) then exit;
  if not ADOQuery.IsEmpty then begin
    ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(ADOQUery.FieldByName('班级').AsString);
    ComboBox2.ItemIndex := ComboBox2.Items.IndexOf(ADOQUery.FieldByName('学生类型').AsString);
  end  else begin
    ComboBox1.Text := '';
    ComboBox2.Text := '';
  end;
end;

procedure TFStudyInfo.DataSourceStateChange(Sender: TObject);
begin
  inherited;
  Tool_m.Enabled := (ADOQuery.State=dsBrowse);
  Tool_tx.Enabled := (ADOQuery.State=dsBrowse);
  Panel3.Enabled := (ADOQuery.State=dsBrowse);
  Tool_import.Enabled := (ADOQuery.State=dsBrowse);
  Tool_Express.Enabled := (ADOQuery.State=dsBrowse);
end;

procedure TFStudyInfo.A_addExecute(Sender: TObject);
begin
  inherited;
  ADOQUery.FieldByName('退学否').AsString := 'F';
  ComboBox1.SetFocus;
end;

procedure TFStudyInfo.A_txExecute(Sender: TObject);
var
  str: string;
begin
  if AdoQUery.IsEmpty then exit;
  if AdoQuery.FieldByName('退学否').AsString = 'T' then
    str := AdoQuery.FieldByName('姓名').AsString+'已经退学,是否重新上学?'
  else  str := AdoQuery.FieldByName('姓名').AsString+'还没退学,是否退学?';
  if Ask(PChar(str),'提问',MB_OKCANCEL) = 1 then  begin
    AdoQuery.Edit;
    if AdoQuery.FieldByName('退学否').AsString = 'T' then
    AdoQuery.FieldByName('退学否').AsString := 'F' else
    AdoQuery.FieldByName('退学否').AsString := 'T';
    AdoQuery.Post;
  end;

end;

procedure TFStudyInfo.A_importExecute(Sender: TObject);
var
  i,aCount, kCount: integer;
begin
  if Ask('真的要导入数据吗?','提示',MB_OKCL)<>1 then exit;
  if not OpenDialog.Execute then exit;
  aCount := 0;
  kCount := 0;
  for i := 0 to OpenDialog.Files.Count - 1 do try
    aCount := aCount + GetSTUDENTData(OpenDialog.Files[i]);
    inc(kCount);
  except
  end;

  Ask(PChar('共成功导入'+inttostr(kCount)+'个文件中的'
     +inttostr(aCount)+'条数据,'+inttostr(OpenDialog.Files.Count-kCount)+'个文件失败'),'提示',MB_INFO);

end;

procedure TFStudyInfo.A_ExpressExecute(Sender: TObject);
var
  XLApp: Variant;
begin
  if not VarIsEmpty(XLApp) then
  begin
       XLApp.DisplayAlerts := False;
       XLApp.Quit;
       VarClear(XLApp);
  end;
      try
        XLApp := CreateOleObject('Excel.Application');
      except
        Screen.Cursor := crDefault;
        Exit;
      end;
      XLApp.WorkBooks.Open(SysPath+'excel\import.xls');
      XLApp.Visible := True;
      XLApp.ActiveWorkBook.Saved := True;

end;

function TFStudyInfo.GetSTUDENTData(vFileName: string): integer;
var
  XLApp: Variant;
  Sheet: Variant;
  abj, alx, str: string;
  i,j,k: integer;
begin
  Result := 0;
  if not VarIsEmpty(XLApp) then
  begin
       XLApp.DisplayAlerts := False;
       XLApp.Quit;
       VarClear(XLApp);
  end;
  try
        XLApp := CreateOleObject('Excel.Application');
  except
    Ask('导入出错!','出错',MB_STOP);
    exit;
  end;
  try
    XLApp.WorkBooks.Open(vFileName);
  except
    Ask('导入出错!','出错',MB_STOP);
    exit;
  end;
  sheet := XLApp.WorkBooks[1].WorkSheets['Sheet1'];
    //读取班级名称
  abj := trim(sheet.Cells[1,2].value);
  j := 999; k := 999;
  for i := 1 to length(abj) do
  if abj[i] in ['0'..'9'] then begin
        if j = 999 then j := i
        else k :=i;
  end;
  if (j=999)then begin
      Ask(PChar('文件名为'+vFileName+'EXCEL表中的班级名称输入不对,导入出错!'),'出错',MB_STOP);
      exit;
  end;
  if k<>999 then
  abj := copy(abj,1,4)+'('+abj[j]+abj[k]+')'
  else  abj := copy(abj,1,4)+'('+abj[j]+')';
     //读取班级类型
  alx := trim(sheet.Cells[1,4].value);
  if (pos(alx,'尖一尖二普通') <1)or (length(alx)<>4) then begin
      Ask(PChar('文件名为'+vFileName+'EXCEL表中的班级类型输入不对,导入出错!'),'出错',MB_STOP);
      exit;
  end;
    //读取姓名
  for i := 2 to 10000 do begin
      str := trim(sheet.Cells[i,1].value);
      if str = '' then break;
      with ADOQuery do begin
        if not Active then Open;
        Append;
        FieldByName('退学否').AsString := 'F';
        FieldByName('班级').AsString := abj;
        FieldByName('级别').AsString := Copy(abj,1,4);
        FieldByName('学生类型').AsString := alx;
        FieldByName('类型').AsString := copy(alx,1,2);
        FieldByName('姓名').AsString := str;
        Post;
        Inc(Result);
      end;
    end;
   XLApp.ActiveWorkBook.Saved := True;
   XLApp.Quit;
   VarClear(XLApp);
end;

procedure TFStudyInfo.N3Click(Sender: TObject);
var
  str: array[1..4]of string;
begin
  if sender is  TComponent then begin
    if (TComponent(sender).Tag>3)and(TComponent(sender).Tag<1) then TComponent(sender).Tag := 1;
    str[1] := '姓名';
    str[2] := '班级';
    str[3] := '试室名称';
    str[4] := '退学否';
    with ADOQuery do try
      if Active then Close;
      sql.Text := 'select * from STU_INFO where '+str[TComponent(sender).Tag]+' like ''%'+Edit1.Text+'%''';
      Open;
    except
      Ask('查询出错','提示',MB_STOP);
    end;
  end;
end;

procedure TFStudyInfo.Tool_mClick(Sender: TObject);
begin
  N3Click(sender);
end;

end.

⌨️ 快捷键说明

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