C++通讯录程序

C++通讯录程序

步骤

1.新建基于对话框的MFC程序
2.添加list control、5个button和1个editcontrol
3.为IDC_LIST1 添加m_list变量 IDC_EDIT1添加m_edit变量
4.在C…Dlg的OnInitDialog()函数中添加

DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |=LVS_EX_FULLROWSELECT;// 网格线
m_edit.ShowWindow(SW_HIDE);
m_list.ModifyStyle (0,LVS_REPORT);
m_list.InsertColumn(0,_T("序号"),LVCFMT_CENTER,40,NULL);
m_list.InsertColumn(1,_T("姓名"),LVCFMT_CENTER,70,NULL);
m_list.InsertColumn(2,_T("电话"),LVCFMT_CENTER,150,NULL);
m_list.InsertColumn(3,_T("地址"),LVCFMT_CENTER,150,NULL);
m_list.SetExtendedStyle(dwStyle)

5.为5个按钮添加事件处理程序

//导入
 try
    {
	char szFilters[] =  
		"Text File(*.txt)\0*.txt\0"  
        "C++ source file(*.h;*,hpp;*.cpp)\0*.h;*.hpp;*.cpp\0"  
        "All Typle(*.*)\0*.*\0"   
        "Lua source file(*.lua)\0*.lua\0"  
        "\0";  
  
    CFileDialog OpenDlg(TRUE);  
    OpenDlg.m_ofn.lpstrTitle = "Open File";  
    OpenDlg.m_ofn.lpstrFilter = szFilters;  
  
    if (IDOK == OpenDlg.DoModal())  
    {  
        CFile file;  
        CFileException e;  
        //构造文件,同时增加异常处理  
        if(!file.Open(OpenDlg.GetPathName(), CFile::modeRead,&e))  
        {  
            CString strErr;  
            strErr.Format(_T("File could not be opened %d\n"), e.m_cause);  
            MessageBox(strErr);  
        }
        ULONGLONG nSize = file.GetLength();
        char* pBuf = new char[nSize + 1];
        memset(pBuf, 0, sizeof(char) * (nSize + 1));
        file.Read(pBuf, nSize);
        file.Close();
 
        CString strText(pBuf);       
        LPCTSTR lpszToken1 = _T("\r\n");
        LPCTSTR lpszToken2 = _T("\t ");
        int curPos1 = 0;
        int curPos2 = 0;
        CString strLine(_T(""));
        CString strCol(_T(""));
        int nRow = 0;
        int nCol = 0;
        while(_T("") != (strLine = strText.Tokenize(lpszToken1, curPos1)))
        {
            m_list.InsertItem(nRow, _T(""));
            curPos2 = 0;
            nCol = 0;
            while(_T("") != (strCol = strLine.Tokenize(lpszToken2, curPos2)))
            {
                m_list.SetItemText(nRow, nCol, strCol);
                ++nCol;
            }
            ++nRow;
        }
 
        delete[] pBuf;
        pBuf = NULL;
	}
	}
    catch(CException* e)
    {
        e->ReportError();
        e->Delete();
    }
//保存
char szFilters[] = 
		"Text File(*.txt)\0*.txt\0"
        "C++ source file(*.h;*,hpp;*.cpp)\0*.h;*.hpp;*.cpp\0"   
        "All Typle(*.*)\0*.*\0"  
        "Lua source file(*.lua)\0*.lua\0" 
        "\0";   
    //当过滤器或者默认构造参数赋值较少情况下,  
    //使用构造函数修改对话框初始状态可能更好,这过滤器较多  
    CFileDialog FileDlg(FALSE, "txt", _T("Test"));   
    FileDlg.m_ofn.lpstrTitle = "Save File";  
    FileDlg.m_ofn.lpstrFilter = szFilters;
	if (IDOK == FileDlg.DoModal())  
    {  
        CFile file(FileDlg.GetPathName(),CFile::modeCreate|CFile::modeReadWrite);
	const int COL_NUM = 4;

        
        //得到表头文字
        LVCOLUMNA column;
        char szCol[50];
        column.pszText=szCol;
        column.cchTextMax=50;
        column.mask=LVCF_TEXT;
        for(int i=0;i<COL_NUM;i++)
        {
                m_list.GetColumn(i,&column);
                file.Write(szCol,strlen(szCol));
                file.Write("\t",1);
        }
        file.Write("\r\n",2);
        //得到每一行数据
    for(int i=0;i<m_list.GetItemCount();i++)
        {
                for(int j=0;j<COL_NUM;j++)
                {
                        CString text = m_list.GetItemText(i,j);
                        text+="\t";
                        file.Write(text,text.GetLength());
                }
                file.Write("\r\n",2);
        }
        file.Close();
	}
//删除
 if(!m_list.GetItemCount())
	{
		MessageBox(_T("没有记录可删除"),_T("Error"),MB_ICONERROR|MB_OKCANCEL);
		return;
	}
	int index=0;
	index=m_list.GetNextItem(0,LVNI_SELECTED);
	if(-1==index)
	{
		if(IDOK==MessageBox(_T("确定删除"),_T("Information"),MB_OKCANCEL))
		{
			m_list.DeleteItem(0);
		}
	}
	else
	{
		if(IDOK==MessageBox(_T("确定删除"),_T("Information"),MB_OKCANCEL))
		{
			m_list.DeleteItem(index);
		}
	}
//编辑
if(!m_list.GetItemCount())
	{
		MessageBox(_T("没有记录可以修改"));
		return;
	}
	CInputdlg dlg;
	dlg.m_number=m_list.GetItemText(0,0);
	dlg.m_name=m_list.GetItemText(0,1);
	dlg.m_phone=m_list.GetItemText(0,2);
	dlg.m_adress=m_list.GetItemText(0,3);
	int index=0;
	index=m_list.GetNextItem(0,LVNI_SELECTED);
	if(-1==index)
	{
		dlg.m_number=m_list.GetItemText(0,0);
	    dlg.m_name=m_list.GetItemText(0,1);
	    dlg.m_phone=m_list.GetItemText(0,2);
	    dlg.m_adress=m_list.GetItemText(0,3);
		if(dlg.DoModal())
		{
			m_list.SetItemText(0,0,dlg.m_number);
			m_list.SetItemText(0,1,dlg.m_name);
			m_list.SetItemText(0,2,dlg.m_phone);
			m_list.SetItemText(0,3,dlg.m_adress);
		}

	}
	else
	{
		dlg.m_number=m_list.GetItemText(index,0);
		dlg.m_name=m_list.GetItemText(index,1);
	    dlg.m_phone=m_list.GetItemText(index,2);
	    dlg.m_adress=m_list.GetItemText(index,3);
		if(dlg.DoModal())
		{
			m_list.SetItemText(index,0,dlg.m_number);
			m_list.SetItemText(index,1,dlg.m_name);
			m_list.SetItemText(index,2,dlg.m_phone);
			m_list.SetItemText(index,3,dlg.m_adress);
		}
	}
//添加
CInputdlg dlg;
	if(IDOK==dlg.DoModal())
	{
		m_list.InsertItem(0,dlg.m_number);
		m_list.SetItemText(0,1,dlg.m_name);
		m_list.SetItemText(0,2,dlg.m_phone);
	    m_list.SetItemText(0,3,dlg.m_adress);
	}

6.新建一个对话框为其添加CInputdlg类
为CInputdlg类添加WM_SHOWWINDOW消息相应函数
为新建的对话框添加4个静态文本和四个编辑控件

//CInputdlg类头文件
afx_msg void OnOK();
CString m_name;
CString m_phone;
CString m_adress;
CString m_number;
//源文件
void CInputdlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, m_name);
	DDX_Text(pDX, IDC_EDIT2, m_phone);
	DDX_Text(pDX, IDC_EDIT3, m_adress);
	DDX_Text(pDX, IDC_EDIT4, m_number);
}
 
void CInputdlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);

	// TODO: 在此处添加消息处理程序代码
	GetDlgItem(IDC_EDIT4)->SetFocus();
}
void CInputdlg::OnOK()
{
	//TODO:在此添加程序代码
	UpdateData(TRUE);
	GetDlgItem(IDC_EDIT4)->SetFocus();
	CDialog::OnOK();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值