咱们今天以通讯录管理系统做例子(*^▽^*),废话不多说直接开始

一、将数据从编辑框写入txt文件

第一件事就是在调试-调试属性-高级-字符集中换成多字节字符集使用哦

头文件中创建需要写入的对象类,

class person {
public:

    char name[5];//名字
    char address[10];//地址
    char phonenum[10];//电话号码
    char youbian[10];//邮编
    char email[20];//email
    char wxnum[10];//微信号
};

并创建编辑框设置控件变量

CString m_name;CString m_address;CString m_phonenum;CString m_youbian;CString m_email;CString m_wxnum;

基于CFile类,将编辑框中的内容赋给一个CString类变量,将这个变量写入txt文件中

CStdioFile myfile;
    CString record;
    UpdateData(true);//获得编辑框内容
    if (m_name == "" || m_address == "" || m_phonenum == "" || m_youbian == "" || m_email ==""|m_wxnum=="")
    {//判断编辑框内容是否为空
        MessageBox(_T("信息不能为空"), _T("添加错误"));
        return;
    }
    else
    {
        myfile.Open(_T("txl.txt"), CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText);
        //文件名注意修改
        p.address == m_address;
        //剩余属性类似写  ,p.是类的属性,m_是编辑框控件变量;
        p.wxnum == m_wxnum;
        record = m_name + _T(" ") + m_address + _T(" ") + m_phonenum + _T(" ") + m_youbian+ _T(" ") + m_email+ _T(" ") +m_wxnum + _T("\n");//分割符为空格 注意换行
        MessageBox(record);//弹出写入的内容
        myfile.SeekToEnd();
        myfile.WriteString(record);
        k = MessageBox(_T("添加成功!"), _T("提醒"), MB_YESNO);
        if (k == 6)
        {
            m_name = "";
        //剩余编辑框控件变量类似赋空
            UpdateData(false);
        }
        myfile.Close();
    }

这样就可以通过编辑框向txt文件里写东西了哦~

二、将txt文件内容读出并显示到listctrl中;

增加listctrl,控件变量为m_List,并设置行首名字,我这里还设置了新风格哦~可以设置行首的代码放进初始化函数OnInitDialog()中哦

    LONG IStyle;
    IStyle = GetWindowLong(m_List.m_hWnd, GWL_STYLE);
    IStyle &= ~LVS_TYPEMASK;
    IStyle |= LVS_REPORT;
    SetWindowLong(m_List.m_hWnd, GWL_STYLE, IStyle);
    DWORD dwStyle = m_List.GetExtendedStyle();
    dwStyle |= LVS_EX_FULLROWSELECT;
    dwStyle |= LVS_EX_CHECKBOXES;//风格设置
    m_List.SetExtendedStyle(dwStyle);
    m_List.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 100);
    m_List.InsertColumn(1, _T("地址"), LVCFMT_CENTER, 250);
    m_List.InsertColumn(2, _T("电话号码"), LVCFMT_CENTER, 160);
    m_List.InsertColumn(3, _T("邮编"), LVCFMT_CENTER, 130);
    m_List.InsertColumn(4, _T("E-mail"), LVCFMT_CENTER, 250);
    m_List.InsertColumn(5, _T("微信号"), LVCFMT_CENTER, 200);

将txt文件里的内容基于CStdioFile类,while循环一句一句读,并利用分割函数,将文件中一个一个数据项写入vector容器,再利用SetItemTxt函数设置列表内容

首先是很重要的分割函数,系统不是自带的,我们需要自己在最前面添加哦~

别忘了加头文件~

#include <vector>
#include <string>
vector<string> split(const string& s, const string& seperator) {

    vector<string> result;
    typedef string::size_type string_size;
    string_size i = 0;

    while (i != s.size()) {
        int flag = 0;
        while (i != s.size() && flag == 0)
        {
            flag = 1;
            for (string_size x = 0; x < seperator.size(); ++x)
                if (s[i] == seperator[x])
                {
                    ++i;
                    flag = 0;
                    break;
                }
        }
        flag = 0;
        string_size j = i;
        while (j != s.size() && flag == 0)
        {
            for (string_size x = 0; x < seperator.size(); ++x)
                if (s[j] == seperator[x])
                {
                    flag = 1;
                    break;
                }
            if (flag == 0)
                ++j;
        }
        if (i != j) {
            result.push_back(s.substr(i, j - i));
            i = j;
        }
    }
    return result;

}

然后是在界面初始化函数中添加读出算法,直接上代码~

CString szLine = "";
    CStdioFile file;
    file.Open("txl.txt", CFile::modeRead);   
 int i = 0;
        while (file.ReadString(szLine))
    {
        //file.ReadString(szLine);
        string str = szLine.GetBuffer();
        vector<string> v = split(str, " ");//分隔符,此处以空格 作为分隔符
        m_List.InsertItem(i,"");
        m_List.SetItemText(i, 0, v[0].c_str());
        m_List.SetItemText(i, 1, v[1].c_str());
        m_List.SetItemText(i, 2, v[2].c_str());
        m_List.SetItemText(i, 3, v[3].c_str());
        m_List.SetItemText(i, 4, v[4].c_str());
        m_List.SetItemText(i, 5, v[5].c_str());
        i++;
    }
    file.Close();

最后展示一下界面效果图~

到这里就结束啦~感谢阅读~有什么问题联系作者哦~

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐