} else { m_NameList.SetCurSel(0);//默认选中第一条记录 OnSelchangeNamelist(); } }
/**********************************************\\ 函数原型:void OnAdd() 功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空 输入输出均为空,只是一个过程.
***********************************************/ void CPhoneBookDlg::OnAdd() { // TODO: Add your control notification handler code here GetDlgItem(IDC_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_PHONE)->EnableWindow(TRUE); GetDlgItem(IDC_ADDRESS)->EnableWindow(TRUE); GetDlgItem(IDC_CODE)->EnableWindow(TRUE);//启用文本框控件 curr=(struct PhoneCard*)malloc(sizeof(struct PhoneCard));//将当前指针指向新增加的结点上 strcpy(curr->name,\新名字\ strcpy(curr->num,\ strcpy(curr->address,\ strcpy(curr->code,\将默认的数据复制到当前结点 m_NameList.InsertString(m_NameList.GetCount(),\新名字\ m_NameList.SetCurSel(m_NameList.GetCount()-1);//在列表框中插入新名字并选中 iCount++;//总结点数加1 curr->next=NULL; curr->prev=last; last->next=curr; last=curr;//在尾结点后插入新结点 bFileEmpty=FALSE; bFileModified=TRUE; //修改文件属性,文件被修改且不为空 GetDlgItem(IDC_UPDATE)->EnableWindow(TRUE); GetDlgItem(IDC_DELETE)->EnableWindow(TRUE); GetDlgItem(IDC_SEARCHBYNAME)->EnableWindow(TRUE); GetDlgItem(IDC_SEARCHBYPHONE)->EnableWindow(TRUE);//启用更新、删除、查找按钮控件 LoadInfo(curr);//在文本框显示个人信息 }
/**********************************************\\ 函数原型:void DataUpdate() 功能:完成修改当前记录的操作 输入输出均为空,只是一个过程.
16
***********************************************/ void CPhoneBookDlg::OnUpdate() { // TODO: Add your control notification handler code here UpdateData(); int sel = m_NameList.GetCurSel();//得到所选择记录在列表框中的序号 if(m_szName==\ { MessageBox(\必须键入姓名!\错误!\ m_IDC_Name.SetFocus(); return;//如果姓名输入框为空则发生错误 } strcpy(curr->name,m_szName); strcpy(curr->num,m_szPhone); strcpy(curr->address,m_szAddress); strcpy(curr->code,m_szCode);//将更新的数据从文本输入框复制到结点 m_NameList.DeleteString(sel); m_NameList.InsertString(sel,m_szName); m_NameList.SetCurSel(sel);//更新列表框中的姓名 m_Button_Add.SetFocus();//将焦点设置到“添加”按钮上 }
/**********************************************\\ 函数原型:void OnSelchangeNamelist() 功能:当列表框的选择项改变时,移动指针到指定结点的位置 输入输出均为空,只是一个过程.
***********************************************/ void CPhoneBookDlg::OnSelchangeNamelist() { // TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();//获得当前的选择 curr=head->next; for(int i=0;i
/**********************************************\\ 函数原型:void LoadInfo(PhoneCard *p) 功能:将结点中存放的数据信息显示在文本框中 输入为当前结点的地址值 输出为空
***********************************************/ void CPhoneBookDlg::LoadInfo(PhoneCard *p)
17
{ m_szName=p->name; m_szPhone=p->num; m_szAddress=p->address; m_szCode=p->code; UpdateData(FALSE); m_IDC_Name.SetFocus(); m_IDC_Name.SetSel(0,20,TRUE); }
/**********************************************\\ 函数原型:void OnDelete() 功能:将当前结点删除 输入为空 输出为空
***********************************************/ void CPhoneBookDlg::OnDelete() { // TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();//得到所选记录在列表框中的序号 struct PhoneCard *p=curr;//新建一个临时指针变量 if (MessageBox(\确定要删除吗?\警告\== IDCANCEL) return;//弹出确认对话框 iCount--;//总结点数减1 //删除当前结点 p->prev->next=p->next; if((p->next)!=NULL)//注意删除结点为末尾结点时的操作! p->next->prev=p->prev; else last=p->prev; free(p);//释放内存空间 m_NameList.DeleteString(sel);//在列表框中删除记录 if (m_NameList.GetCount()==0) { GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE); GetDlgItem(IDC_DELETE)->EnableWindow(FALSE); GetDlgItem(IDC_SEARCHBYNAME)->EnableWindow(FALSE); GetDlgItem(IDC_SEARCHBYPHONE)->EnableWindow(FALSE); GetDlgItem(IDC_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_PHONE)->EnableWindow(FALSE); GetDlgItem(IDC_ADDRESS)->EnableWindow(FALSE); GetDlgItem(IDC_CODE)->EnableWindow(FALSE); OnClear();
18
bFileEmpty=TRUE; bFileModified=TRUE; return;//如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性 } if (sel /**********************************************\\ 函数原型:void OnClear() 功能:清除当前文本框里的内容 输入为空 输出为空 ***********************************************/ void CPhoneBookDlg::OnClear() { // TODO: Add your control notification handler code here m_szName=\ m_szPhone=\ m_szAddress=\ m_szCode=\ UpdateData(FALSE); } /**********************************************\\ 函数原型:void OnClose() 功能:程序结束时将链表中的数据保存到文件 输入为空 输出为空 ***********************************************/ void CPhoneBookDlg::OnClose() { // TODO: Add your message handler code here and/or call default struct PhoneCard *p;//声明一个临时指针变量 if((!bNewFile)&&bFileModified)//根据文件属性来决定是否要删除原文件 { fclose(fp); DeleteFile(\ } if(!bFileEmpty)//根据文件是否为空来决定是否要新建文件并写入数据 { 19 if(!(fp=fopen(\如果创建新文件失败 { MessageBox(\sorry but the program encounter a filedisk problem!\ return; } fwrite(&iCount,sizeof(int),1,fp);//将总结点数写入文件 fseek(fp,sizeof(int),0);//移动文件指针 p=head->next;//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点 while(p)//当结点不为空 { fwrite(p,sizeof(struct PhoneCard),1,fp); p=p->next;//将数据写入文件并将指针后移 } } CDialog::OnClose(); } void CPhoneBookDlg::OnAbout() { // TODO: Add your control notification handler code here CAboutDlg dlg; dlg.DoModal(); } void CPhoneBookDlg::OnOK() { OnUpdate();//这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数 } /**********************************************\\ 函数原型:void OnSearchbyname() 功能:以姓名方式查找相应的记录,如不存在则提示找不到 输入为空 输出为空 ***********************************************/ void CPhoneBookDlg::OnSearchbyname() { // TODO: Add your control notification handler code here UpdateData(); int sel=m_NameList.FindString(m_NameList.GetCurSel(),m_szSearchContent);//直接调用FindString函数查找并得到序号 if(sel==LB_ERR)//如果找不到记录,则输入查找失败提示 { MessageBox(\找不到记录!\提示\ARNING); 20 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于C++的通讯录管理系统课程设计(4)在线全文阅读。
相关推荐: