学生信息管理系统开发指南.docx
《学生信息管理系统开发指南.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统开发指南.docx(38页珍藏版)》请在冰豆网上搜索。
学生信息管理系统开发指南
学生信息管理系统开发指南
1.
(1)在D盘建立一个目录,名称为studentMIS,用来存放学生信息管理系统的delphi程序;把课件中studentDB文件夹复制到D盘上,该文件夹存放数据表。
设置studentDB文件夹的别名为StudentDB,设置数据库别名参见课本6.4.3。
(2)创建一个新Application,在保存该Application时将窗体文件保存为FormMain,将Application文件保存为StudentMIS。
然后再创建7个Form,主窗体及7个窗体的属性如下表所示。
窗体描述及保存名称
属性名
属性值
主窗体,FormMain
Name
frmMain
Caption
学生信息管理系统
Color
clBtnShadow
WindowState
wsMaximized
院系设置窗体,FormDepartment
Name
frmDepartment
Caption
院系设置
Position
poOwnerFormCenter
班级管理窗体,FormClass
Name
frmClass
Caption
班级管理
Position
poOwnerFormCenter
学生管理窗体,FormStudent
Name
frmStudent
Caption
学生管理
Position
poOwnerFormCenter
学生信息查询窗体,FormQuery
Name
frmQuery
Caption
学生信息查询
Position
poOwnerFormCenter
学籍变更管理窗体,FormChange
Name
frmChange
Caption
学籍变更管理
Position
poOwnerFormCenter
奖励管理窗体,FormReward
Name
frmReward
Caption
奖励管理
Position
poOwnerFormCenter
惩罚管理窗体,FormPunish
Name
frmPunish
Caption
惩罚管理
Position
poOwnerFormCenter
(3)七个窗体和主窗体的挂接方法:
用鼠标点击主窗体,它将成为当前窗体,然后执行【File】->【UseUnit】菜单命令,在打开的对话框中选取这七个窗体。
(4)主菜单设计:
参见课本13.3.4主菜单设计。
(5)在主菜单上点击“系统维护”->“退出系统”,在procedureTfrmMain.mntSysQuitClick的程序体中添加Close;如下所示。
procedureTfrmMain.mntSysQuitClick(Sender:
TObject);
begin
Close;
end;
2.院系设置模块
(1)院系设置模块用户界面的设计参加课本13.4.3
(2)模块功能的编程实现
(2.1)模块通用过程
在院系设置窗体类中定义一个私有方法,即在Type下面加入语句
procedureToggleMode;
私有方法ToggleMode代码如下:
procedureTfrmDepartment.ToggleMode;
var
strMsg,strHead,strTail:
string;
procedureEnableInput(Enabled:
Boolean);
begin
dbgDepart.Enabled:
=notEnabled;
dbeDepartID.Enabled:
=Enabled;
dbeDepartName.Enabled:
=Enabled;
dbeHead.Enabled:
=Enabled;
dbeTelephone.Enabled:
=Enabled;
dbmDesc.Enabled:
=Enabled;
end;
begin
casetblDepart.Stateof
dsInsert,dsEdit:
begin
EnableInput(true);
dbnDepart.VisibleButtons:
=[nbPost,nbCancel];
dbeDepartID.SetFocus;
end;
else
EnableInput(false);
dbnDepart.VisibleButtons:
=[nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh];
end;
if(tblDepart.State=dsEdit)andHasClass(strMsg)then
begin
strHead:
='不能修改该院系的编号,下面的班级:
';
strTail:
='修改该院系的编号会破坏数据的完整性!
';
strMsg:
=strHead+#13+strMsg+#13+strTail;
ShowMessage(strMsg);
dbeDepartID.Enabled:
=false;
end
end;
在院系窗体类中再定义一个私有方法HasClass,即在Type下加入语句
functionHasClass(varstr:
string):
Boolean;
私有方法HasClass代码如下:
functionTfrmDepartment.HasClass(varstr:
string):
Boolean;
begin
Result:
=false;
tblValid.Active:
=false;
tblValid.TableName:
='Class';
tblValid.Filter:
='DepartID='+tblDepart['DepartID']+'';
tblValid.Filtered:
=true;
tblValid.Active:
=true;
ifnottblValid.Eofthen
begin
//str:
=Format('不能修改院系"%s"的编号,下面的班级:
'#13,[tblDepart['DepartName']]);
repeat
str:
=str+Format('%10s-%s'#13,[tblValid['ClassID'],tblValid['ClassName']]);
tblValid.Next;
untiltblValid.Eof;
str:
=str+'隶属于该院系';
Result:
=true;
end;
tblValid.Active:
=false;
end;
(2.2)窗体onShow,onClose事件过程及“退出”按钮组件的Click事件过程。
procedureTfrmDepartment.FormShow(Sender:
TObject);
begin
tblDepart.Active:
=true;
end;
procedureTfrmDepartment.btnQuitClick(Sender:
TObject);
begin
Close;
end;
procedureTfrmDepartment.FormClose(Sender:
TObject;
varAction:
TCloseAction);
begin
tblDepart.Active:
=false;
end;
(2.3)界面模式的切换
procedureTfrmDepartment.dbnDepartClick(Sender:
TObject;
Button:
TNavigateBtn);
begin
ToggleMode;
end;
procedureTfrmDepartment.tblDepartAfterScroll(DataSet:
TDataSet);
begin
ToggleMode;
end;
(2.4)记录删除功能的实现
记录删除前的验证在tblDepart的BeforeDelete事件中实现,代码如下:
procedureTfrmDepartment.tblDepartBeforeDelete(DataSet:
TDataSet);
var
strMsg,strHead,strTail:
string;
begin
ifHasClass(strMsg)then
begin
strHead:
='不能删除该院系的基本信息,下面的班级:
';
strTail:
='删除该院系的基本信息会破坏数据的完整性!
';
strMsg:
=strHead+#13+strMsg+#13+strTail;
ShowMessage(strMsg);
Abort;
end;
strMsg:
=Format('确定要删除该院系"%s"吗?
该院系相关信息如下:
'#13,[tblDepart['DepartName']]);
strMsg:
=strMsg+Format('院系编号:
%s'#13,[tblDepart['DepartID']]);
strMsg:
=strMsg+Format('院系名称:
%s'#13,[tblDepart['DepartName']]);
strMsg:
=strMsg+Format('院系领导:
%s'#13,[tblDepart['DepartHead']]);
ifMessageDlg(strMsg,mtConfirmation,[mbYes,mbNo],0)<>mrYesthen
Abort;
end;
(2.5)数据保存功能的实现
数据有效性验证操作在数据表组件的BeforePost事件过程中进行。
数据规格化和非空域验证通过一个内嵌过程ChechField实现,院系编号唯一性验证通过内嵌函数ValidID,完整代码如下:
procedureTfrmDepartment.tblDepartBeforePost(DataSet:
TDataSet);
procedureCheckField(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]);
ifNotEmptyand(dbText.Text='')then
begin
ShowMessageFmt('%s不能为空,请输入足够的信息!
',[FieldDesc]);
dbText.SetFocus;
Abort;
end
else
tblDepart.FieldByName(FieldName).AsString:
=dbText.Text;
end;
functionValidID:
Boolean;
var
strMsg:
string;
begin
Result:
=true;
tblValid.Active:
=false;
tblValid.TableName:
='Department';
tblValid.Filter:
='DepartID='+tblDepart['DepartID']+'';
tblValid.Filtered:
=true;
tblValid.Active:
=true;
ifnottblValid.Eofthen
begin
strMsg:
=Format('院系编号"%s"已经存在,请重新输入!
'#13,[tblDepart['DepartID']]);
strMsg:
=Format('院系编号:
"%s"'#13,[tblValid['DepartID']]);
strMsg:
=Format('院系名称:
"%s"'#13,[tblValid['DepartName']]);
strMsg:
=Format('院系领导:
"%s"'#13,[tblValid['DepartHead']]);
ShowMessage(strMsg);
dbeDepartID.SetFocus;
Result:
=false;
end;
tblValid.Active:
=false;
end;
begin
CheckField('DepartID','院系编号',dbeDepartID,true);
CheckField('DepartName','院系名称',dbeDepartName,true);
CheckField('DepartHead','院系领导',dbeHead,true);
CheckField('Telephone','联系电话',dbeTelephone,true);
CheckField('Description','说明',dbmDesc,true);
ifdbeDepartID.ModifiedandnotValidIDthen
Abort;
end;
(2.6)院系设置模块与主模块的挂接。
在主窗体的菜单中点击“系统维护”->”院系设置”,在procedureTfrmMain.mntSysDepartClick的程序体中加入frmDepartment.ShowModal,如下所示。
procedureTfrmMain.mntSysDepartClick(Sender:
TObject);
begin
frmDepartment.ShowModal
end;
3.班级管理模块
(1)班级管理模块用户界面的设计参加课本13.5.3
(2)模块功能的编程实现
(2.1)模块通用过程
在班级管理窗体类中定义一个私有方法,即在Type下面加入语句
procedureToggleMode;
私有方法ToggleMode代码如下:
procedureTfrmClass.ToggleMode;
var
strMsg,strHead,strTail:
string;
procedureEnableInput(Enabled:
Boolean);
begin
dbgClass.Enabled:
=notEnabled;
dbeClassID.Enabled:
=Enabled;
dbeClassName.Enabled:
=Enabled;
dblcbDepartID.Enabled:
=Enabled;
dbeBeginDate.Enabled:
=Enabled;
dbeMaster.Enabled:
=Enabled;
dbeTelephone.Enabled:
=Enabled;
dbmDesc.Enabled:
=Enabled;
end;
begin
casetblClass.Stateof
dsInsert,dsEdit:
begin
EnableInput(true);
dbnClass.VisibleButtons:
=[nbPost,nbCancel];
dbeClassID.SetFocus;
end;
else
EnableInput(false);
dbnClass.VisibleButtons:
=[nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh];
end;
if(tblClass.State=dsEdit)andHasStudent(strMsg)then
begin
strHead:
='不能修改该班级的基本信息。
下面的学生:
';
strTail:
='删除该班级的编号会破坏数据的完整性!
';
strMsg:
=strHead+#13+strMsg+#13+strTail;
ShowMessage(strMsg);
dbeClassID.Enabled:
=false;
end;
end;
在班级窗体类中再定义一个私有方法HasStudent,即在Type下加入语句
functionHasStudent(varstr:
string):
Boolean;
私有方法HasStudent代码如下:
functionTfrmClass.HasStudent(varstr:
string):
Boolean;
begin
Result:
=false;
tblValid.Active:
=false;
tblValid.TableName:
='Student';
tblValid.Filter:
='ClassID='+tblClass['ClassID']+'';
tblValid.Filtered:
=true;
tblValid.Active:
=true;
ifnottblValid.Eofthen
begin
repeat
str:
=str+Format('%10s-%s'#13,[tblValid['StudentID'],tblValid['Name']]);
tblValid.Next;
untiltblValid.Eof;
str:
=str+'隶属于该班级';
Result:
=true;
end;
tblValid.Active:
=false;
end;
(2.2)窗体相关事件过程及“退出”按钮组件的Click事件过程
procedureTfrmClass.FormShow(Sender:
TObject);
begin
tblClass.Active:
=true;
tblDepart.Active:
=true;
end;
procedureTfrmClass.btnQuitClick(Sender:
TObject);
begin
Close;
end;
procedureTfrmClass.FormClose(Sender:
TObject;
varAction:
TCloseAction);
begin
tblClass.Active:
=false;
tblDepart.Active:
=false;
end;
(2.3)界面模式的切换
procedureTfrmClass.dbnClassClick(Sender:
TObject;
Button:
TNavigateBtn);
begin
ToggleMode;
end;
procedureTfrmClass.tblClassAfterScroll(DataSet:
TDataSet);
begin
ToggleMode;
end;
(2.4)记录删除功能的实现
记录删除前的验证在tblClass的BeforeDelete事件中实现,代码如下:
procedureTfrmClass.tblClassBeforeDelete(DataSet:
TDataSet);
var
strMsg,strHead,strTail:
string;
begin
ifHasStudent(strMsg)then
begin
strHead:
='不能删除该班级的基本信息。
下面的学生:
';
strTail:
='删除该班级的基本信息会破坏数据的完整性!
';
strMsg:
=strHead+#13+strMsg+#13+strTail;
ShowMessage(strMsg);
Abort;
end;
strMsg:
=Format('确定要删除该班级"%s"吗?
该班级相关信息如下:
'#13,[tblClass['ClassName']]);
strMsg:
=strMsg+Format('班级编号:
%s'#13,[tblClass['ClassID']]);
strMsg:
=strMsg+Format('班级名称:
%s'#13,[tblClass['ClassName']]);
strMsg:
=strMsg+Format('班主任:
%s'#13,[tblClass['Master']]);
strMsg:
=strMsg+Format('联系电话:
%s'#13,[tblClass['MasterTel']]);
ifMessageDlg(strMsg,mtConfirmation,[mbYes,mbNo],0)<>mrYesthen
Abort;
end;
(2.5)数据保存功能的实现
数据有效性验证操作在数据表组件的BeforePost事件过程中进行。
数据规格化和非空域验证通过一个内嵌过程ChechField实现,班级编号唯一性验证通过内嵌函数ValidID,完整代码如下:
procedureTfrmClass.tblClassBeforePost(DataSet:
TDataSet);
procedureCheckField(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]);
ifNotEmptyand(dbText.Text='')then
begin
ShowMessageFmt('%s不能为空,请输入足够的信息!
',[FieldDesc]);
dbText.SetFocus;
Abort;
end
else
tblClass.FieldByName(FieldName).AsString:
=dbText.Text;
end;
(2.6)班级管理模块与主模块的挂接。
在主窗体的菜单中点击“系统维护”->”班级管理”,在procedureTfrmMain.mntSysClassClick的程序体中加入frmClass.ShowModal,如下所示。
procedureTfrmMain.mntSysClassClick(Sender:
TObject);
begin
frmClass.ShowModal
end;
4.学生管理模块
(1)学生管理用户界面的设计参加课本13.6的图13-15
(2)模块功能的编程实现
(2.1)模块通用过程
在学生管理窗体类中定义一个私有方法,即在Type下面加入语句
procedureToggleMode;
私有方法ToggleMode代码如下:
procedureTfrmStudent.ToggleMode;
var
strM