石河子大学--Delphi课程设计 2012年11月2日
4.1.7 删除教师组
在主窗口左侧的树控件中选择一个组名,然后单击“删除”按钮即可删除指定组,“删除”按钮事件响应函数OnButtonRemove首先取得当前选定的项及保存在其中的ID,然后判断当前选定项为组还是教师。如果为教师,则调用RemovePeople函数执行教师删除操作;如果为组,则先识别要删除的组是否为“未分组”,“未分组”被设计为不可删除的组,因此当选择项为组“未分组”时(“未分组”在数据库设计阶段已经写入数据库,并且其组ID为1),程序将弹出警告框,并拒绝删除该组;而如果选择其他组,则调用RemoveGroup执行组的删除工作。
函数OnButtonRemove的部分代码如下:
if(m_tree_list.ItemHasChildren(hSelItem))
{// 选中组
// 组[未分组]不能删除 if(1 == nID) { }
if(MessageBox(\您确信要删除当前选中的组及组下所有教师吗?\, \确认\,
MB_OK | MB_YESNO | MB_ICONQUESTION) == IDYES)
MessageBox(\未分组]不能删除!\, \警告\, MB_OK | MB_ICONWARNING); return;
石河子大学--Delphi课程设计
{ }
RemoveGroup(nID); RefurTree();
2012年11月2日
}
此处,当判断选中的节点没有子节点时,还不能断定选中的就是教师。因为当一个分组下没有教师时,此时选中的也可能是组节点。因此在下面还要再加一次判断:既没有子节点也没有父节点的节点才是教师节点。代码如下所示:
if(m_tree_list.GetParentItem(hSelItem) == NULL)
{
if(MessageBox(\您确信要删除当前选中的组及组下所有教师吗?\, \确认\, MB_OK | MB_YESNO | MB_ICONQUESTION) == IDYES)
} else {
{ }
RemoveGroup(nID); RefurTree();
石河子大学--Delphi课程设计
2012年11月2日
if(MessageBox(\您确信要删除当前选中的教师吗?\, \确认\, { }
RemovePeople(nID); RefurTree();
MB_OK | MB_YESNO | MB_ICONQUESTION) == IDYES)
}
实际执行组删除工作的是函数RemoveGroup,它可以将传入的组ID对应的组从数据库中删除,其执行机理类同于此前介绍的RemovePeople。不过,要特别说明一点的是,在数据库设计阶段,在设定表groupInfo与表people之间的关系时,选中了层叠的“删除规则”,所以函数RemoveGroup删除参数传入的组ID对应的组时,在表people中所有属于该组的记录也将被全部删除。
函数RemoveGroup的代码如下:
bool CAddressListDlg::RemoveGroup(int id) {
CDatabase database;
database.Open(_T(\)); CString strSql;
strSql.Format(\, id); database.ExecuteSQL(strSql);
石河子大学--Delphi课程设计
database.Close(); return true;
2012年11月2日
}
4.1.8 修改密码
修改密码功能是专为应用员设置的,当注册教师进入主界面时,修改密码按钮将会被禁用。
当应用员点击修改密码按钮时,会弹出一个修改密码对话框。应用员需要输入旧密码、新密码以及确认新密码。然后应用员点击确定按钮时,系统将先判定三个文本框是否为空以及新密码和确认密码是否一致,如果没问题了则再对旧密码进行核对。由于应用员的教师名为admin,所以查询语句可以这么写:
CString change_sql;
change_sql.Format(\
and pwd = '%s'\
如果旧密码输入正确了,那么系统再将确认密码更新到数据库里面去。更新语句如下所示:
change_sql.Format(\
db.ExecuteSQL(change_sql);
4.1.9 更改组名
石河子大学--Delphi课程设计 2012年11月2日
当应用员想对组名进行更改时,就可以点击此按钮。
应用员需要先选择一个需要更改组名的组,然后点击“更改组名”按钮。在之前说明的OnSelchangedTreeList函数中,添加了一些代码,使得当教师点选的是教师的话,更改组名按钮将被禁用,教师再点回组的话,按钮就又重新启用。然后,为了使未分组不被更改组名,当系统检测到教师点击左侧的未分组时,更改组名按钮会被禁用。实现这个功能的代码如下所示:
if(m_tree_list.GetParentItem(hItem) == NULL) //如果没有父节点
{// 选中组
??
// 更新按钮禁用
GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow(FALSE); // 增加按钮启用
GetDlgItem(IDC_BUTTON_APPEND)->EnableWindow(TRUE); //获取当前选择组的id int nID;
nID = m_tree_list.GetItemData(hItem); if(1 == nID) //如果是“未分组” // 更改组名按钮禁用
GetDlgItem(IDC_ChangeGroupName)->EnableWindow(FALSE); else