📄 student.pas
字号:
unit student;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls,
DBCtrls, Mask;
type
Tfrmstudent = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
dbestudentID: TDBEdit;
dbename: TDBEdit;
dbebirthday: TDBEdit;
dbenative: TDBEdit;
dblcclassname: TDBLookupComboBox;
dbrgsex: TDBRadioGroup;
dbnstudent: TDBNavigator;
BitBtn1: TBitBtn;
dbgstudent: TDBGrid;
tblstudent: TTable;
tblclass: TTable;
tblvalid: TTable;
dsstudent: TDataSource;
dsclass: TDataSource;
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure dbnstudentClick(Sender: TObject; Button: TNavigateBtn);
procedure tblstudentAfterScroll(DataSet: TDataSet);
procedure tblstudentBeforePost(DataSet: TDataSet);
procedure tblstudentBeforeDelete(DataSet: TDataSet);
private
procedure ToggleMode;
function HasChange(var str:string):boolean;
function HasReward(var str:string):boolean;
function Haspunish(var str:string):boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
frmstudent: Tfrmstudent;
implementation
{$R *.dfm}
procedure Tfrmstudent.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure Tfrmstudent.FormClose(Sender: TObject; var Action: TCloseAction);
begin
tblstudent.Active:=false;
tblclass.Active:=false;
end;
procedure Tfrmstudent.FormShow(Sender: TObject);
begin
tblstudent.Active:=true;
tblclass.Active:=true;
end;
procedure Tfrmstudent.ToggleMode;
procedure EnableInput(enabled:boolean);
begin
dbgstudent.Enabled:=not enabled;
dbestudentID.Enabled:=enabled;
dbename.Enabled:=enabled;
dbrgsex.Enabled:=enabled;
dblcclassname.Enabled:=enabled;
dbebirthday.Enabled:=enabled;
dbenative.Enabled:=enabled;
end ;
begin
case tblstudent.State of
dsinsert,dsedit:
begin
EnableInput(true);
dbnstudent.VisibleButtons:=[nbpost,nbcancel];
dbestudentID.SetFocus;
end;
else
EnableInput(false);
dbnstudent.VisibleButtons:=[nbfirst,nbprior,nbnext,nblast,nbinsert,nbdelete,
nbedit,nbpost,nbcancel,nbrefresh];
end;
end;
procedure Tfrmstudent.dbnstudentClick(Sender: TObject;
Button: TNavigateBtn);
begin
ToggleMode;
end;
procedure Tfrmstudent.tblstudentAfterScroll(DataSet: TDataSet);
begin
ToggleMode;
end;
procedure Tfrmstudent.tblstudentBeforePost(DataSet: TDataSet);
procedure checkfield(fieldname,fieldDesc:string;dbtext:TcustomEdit;notempty:boolean);
begin
dbtext.Text:=trim(dbtext.Text);
dbtext.Text:=stringreplace(dbtext.Text,'''','',[rfreplaceall]);
dbtext.Text:=stringreplace(dbtext.Text,'','',[rfreplaceall]);
if notempty and (dbtext.Text='') then
begin
showmessagefmt('"%S"不能为空,请从新输入足够的信息!',[fieldDesc]);
dbtext.SetFocus;
abort;
end
else
tblstudent.FieldByName(fieldname).AsString:=dbtext.Text;
end;
function validID:boolean;
var
strmsg:string;
begin
result:=true;
tblvalid.Active:=false;
tblvalid.TableName:='student';
tblvalid.Filter:='studentID='''+tblstudent['studentID']+'''';
tblvalid.Filtered:=true;
tblvalid.Active:=true;
if not tblvalid.Eof then
begin
strmsg:=format('学生编号“%s”已经存在,请从新输入!'#13,[tblstudent['studentID']]);
strmsg:=strmsg+format('学生编号:%S'#13,[tblstudent['studentID']]);
strmsg:=strmsg+format('学生姓名:%S'#13,[tblstudent['studentname']]);
strmsg:=strmsg+format('出生日期:%S'#13,[tblstudent['birthday']]);
strmsg:=strmsg+format('籍贯:%S'#13,[tblstudent['native']]);
showmessage(strmsg);
dbestudentID.SetFocus;
result:=true
end;
tblvalid.Active:=false;
end;
begin
checkfield('studentID','学号',dbestudentId,true);
checkfield('name','姓名',dbename,true);
checkfield('birthday','出生日期',dbebirthday,true);
checkfield('native','籍贯',dbenative,true);
if dbrgsex.Value='' then
begin
showmessage('性别不能为空,请从新输入足够的信息');
dbrgsex.SetFocus;
abort;
end;
if dblcclassname.Text='' then
begin
showmessage('所属院系不能为空,请输入足够的信息');
dblcclassname.SetFocus;
abort;
end;
if dbestudentID.Modified and not validID then
abort;
end;
function Tfrmstudent.HasChange(var str:string):boolean;
begin
result:=false;
tblvalid.Active:=false;
tblvalid.TableName:='change';
tblvalid.Filter:='studentID='''+tblstudent['studentID']+'''';
tblvalid.Filtered:=true;
tblvalid.Active:=true;
if tblvalid.Eof then
begin
str:=format('不能要删除“%S”学生的资料吗?'#13,[tblstudent['studentID']]);
str:=str+'此学生有转系记录';
result:=true;
end;
tblvalid.Active:=false;
end;
function Tfrmstudent.HasReward(var str:string ) :boolean;
begin
result:=false;
tblvalid.Active:=false;
tblvalid.TableName:='reward';
tblvalid.Filter:='studentID='''+tblstudent['studentID']+'''';
tblvalid.Filtered:=true;
tblvalid.Active:=true;
if not tblvalid.Eof then
begin
str:=format('不能删除“%S”学生的资料,此学生有奖学金记录',[tblstudent['studentID']]);
result:=true;
end;
tblvalid.Active:=false;
end;
function Tfrmstudent.Haspunish(var str:string):boolean;
begin
result:=false;
tblvalid.Active:=false;
tblvalid.TableName:='punish';
tblvalid.Filter:='studentID='''+tblstudent['studentID']+'''';
tblvalid.Filtered:=true;
tblvalid.Active:=true;
if not tblvalid.Eof then
begin
str:=format('不能删除“%S”学生的资料,此学生有处罚记录',[tblstudent['studentID']]);
result:=true;
end;
tblvalid.Active:=false;
end;
procedure Tfrmstudent.tblstudentBeforeDelete(DataSet: TDataSet);
var strmsg:string;
begin
if Haschange(strmsg) then
begin
showmessage(strmsg);
abort;
end
else if HasReward(strmsg) then
begin
showmessage(strmsg);
abort;
end
else if HasPunish(strmsg) then
begin
showmessage(strmsg);
abort;
end;
strmsg:=format('确定要删除“%S”的信息吗?该学生的相关信息如下:'#13,[tblstudent['name']]);
strmsg:=strmsg+format('学号:%S'#13,[tblstudent['studentID']]);
strmsg:=strmsg+format('姓名:%S'#13,[tblstudent['name']]);
strmsg:=strmsg+format('性别:%S'#13,[tblstudent['sex']]);
strmsg:=strmsg+format('所属班级:%S'#13,[tblclass['classname']]);
strmsg:=strmsg+format('班主任:%S'#13,[tblclass['master']]);
strmsg:=strmsg+format('联系电话:%S'#13,[tblclass['telephone']]);
if messagedlg(strmsg,mtconfirmation,[mbyes,mbno],0)<>mryes then
abort;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -