员工教师通讯录应用系统 下载本文

内容发布更新时间 : 2024/11/20 17:31:20星期一 下面是文章的全部内容请认真阅读。

石河子大学--Delphi课程设计 2012年11月2日

m_company = info.strCompany;

? ?

else

{// 取数据

UpdateData(TRUE);

info.strHomeAddress = m_address;

info.strHomeAddress.TrimLeft(); //删除数据前面的空格、换行符等 info.strHomeAddress.TrimRight(); //消除从右侧起所遇到的所有空格字符

4.1.2 查询教师信息

在通讯录中的教师较多时,通过左侧的分组树进行教师查找不是很方便,而且,有时候教师也记不清楚要查找的教师被放人了哪个组之中,因此提供通过姓名进行查找的功能是必要的。在主窗口中单击“查询”按钮,将弹出一个输入姓名的对话框,然后程序通过设定的姓名在所有教师中查找指定姓名的教师。同样地,有时候教师可能不记得要查找的教师的全名叫什么,只记得姓氏或者姓名中的某个字,这个时候模糊查询就起到作用了,只要在查询对话框中输入关键字,程序将会找到所有拥有此关键字的姓名。怎么样,是不是很方便?

姓名查询对话框在实例中对应的类是CQueryPeopleDialog,它有一个公共数据成员m_peopleName,在对话框中设定的姓名就保存在这个成员变量中,然后主程序取得它的值后执行具体的查询工作。查询功能则是在主窗体类CAddressListDlg的函数OnOK中实现的(从函数名称可以知道,“查询”按钮是将

石河子大学--Delphi课程设计 2012年11月2日

“确认”按钮的标题更改之后实现的)。

执行查询时,以教师输入的姓名为查询条件,并指定以组ID的降序、教师ID升序返回查询结果,这样的排序安排可以在存在多个同名的教师时,在界面左侧的树控件中由上而下地定位这些姓名相同的教师。在存在符合指定姓名的情况下,函数从树控件最上面的组开始查找该教师所在的位置,其定位依据是通过GetItemData方法取出存储在教师节点中的教师ID,如果查找到与当前查询记录相符的教师,则让其处于当前选中状态。而如果存在有姓名相同的教师,即对数据库的查询结果存在多条记录时,则还使用函数MessageBox弹出一个对话框询问教师是否要查看下一个教师的信息。

函数OnOK的部分代码如下:

// 取得待查询教师名

// 实现关键字查询 CDatabase db; CPeople people(&db); CString checksql;

checksql.Format(\

order by groupId desc,id\, strPeopleName);

CString strPeopleName = dlg.m_peopleName;

people.Open(AFX_DB_USE_DEFAULT_TYPE,checksql);

石河子大学--Delphi课程设计 2012年11月2日

连接数据库要使用关键字查询的话,用format( \ * from XX where username like '%%%s%% ' \,m_username); 其中,两个%%在C中是作为一个%处理的。

4.1.3 追加新的教师信息

在需要追加新的教师信息时,需要先在左侧的树控件中选中准备将新教师加入的组,此时界面上的各编辑框显示的信息将被清空,而“增加”按钮将变为可用状态,在各编辑框中输入新的教师信息后单击“增加”按钮,即可将新的教师加入到选定的组中。

再选中组名时清空当前编辑框显示的信息,以及使得“增加”按钮可用是在时间响应重复。将新的教师信息追加到数据库的功能是由“增加”按钮的事件响应函数OnButtonAppend完成的。

函数OnButtonAppend首先调用函数CheckInPutInfo检查输入的新的教师信息是否合法,如果通过检查,则先调用函数GetCurrentSelGroupId尝试取得当前选中的组的ID,然后调用函数SwitchData取得界面设定的新教师信息,并根据是否成功取到组ID分别生成不同的INSERT插入语句。在取得组ID失败时,插入教师信息时将不插入组ID信息,而根据数据库的设计,组ID将默认为“未分组”的ID。在生成SQL指令以后,通过CDatabase的ExecuteSQL方法执行它,而在将新的教师插入到数据库之后,则先清空界面当前显示,然后调用函数RefurTree,以便及时将新添加的教师也显示于左侧的树控件之中。

当取得组ID失败时,默认将教师信息添加到“未分组”里面去。 函数OnButtonAppend部分代码如下:

// 生成插入指令

石河子大学--Delphi课程设计

CString strSql;

2012年11月2日

If (nGroupId == -1) //取得组ID失败,即默认“未分组” {

CString strFormat = \

phoneInCompany, homeAddress, phoneInHome, mobile, mail, qq, \\

msn, memory) VALUES('%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s',

'%s')\;

strSql.Format(strFormat,

interfaceCtrlData.strName, interfaceCtrlData.bSex,

interfaceCtrlData.strCompany, interfaceCtrlData.strPhoneInCompany, interfaceCtrlData.strHomeAddress, interfaceCtrlData.strPhoneInHome, interfaceCtrlData.strMobile, interfaceCtrlData.strMail, interfaceCtrlData.strQq, interfaceCtrlData.strMsn, interfaceCtrlData.strMemory);

石河子大学--Delphi课程设计 2012年11月2日

}

如果获取了组ID,则将教师添加到该组,SQL语句应该加上一个groupId。 在函数OnButtonAppend中调用的函数GetCurrentSelGroupId可以取得当前的组ID,如果当前选中项为组,则通过GetItemData直接取得其组ID;如果当前选中项为教师,则先取得其父节点,即当前选中教师所属的组节点,然后再取得其组ID。函数GetCurrentSelGroupId的部分代码如下:

int CAddressListDlg::GetCurrentSelGroupId() {

int nGroupId = -1;

HTREEITEM hSelItem = m_tree_list.GetSelectedItem();// 取得当前选中项 If (m_tree_list.GetParentItem(hSelItem) == NULL) {// 选中组 }

nGroupId = m_tree_list.GetItemData(hSelItem);

else

{// 选中教师

HTREEITEM hGroupItem;

hGroupItem = m_tree_list.GetParentItem(hSelItem); nGroupId = m_tree_list.GetItemData(hGroupItem);