2020-11-27-myy12周日志

发布时间 2023-09-17 19:22:38作者: Yecgaa1
layout: post
title: myy通讯录日志
categories: 日志
tags: 
    - 日志 
    - 2020日志
jekyll-theme-WuK:
    background_music: '<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=100% height=86 src="//music.163.com/outchain/player?type=2&id=775446&auto=1&height=66"></iframe>'

通讯录日志

容器vector学习地址:https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html

文件与流学习地址:https://www.runoob.com/cplusplus/cpp-files-streams.html

主要思路:

1.写一个可实现增删查改的通讯录程序(vector实现)


2.退出程序的时候保存数据

void Info::exit_info()//区别1:退出程序的时候保存了数据
{
    cout << "确定退出此通讯录吗?y/n: " 
    char ch1;
    cin >> ch1;
    if (ch1 == 'y' || ch1 == 'Y')
    {
        cout<<"正在保存数据";
        ofstream fileId;
        ofstream fileName;
        ofstream fileTel;
        ofstream fileAddr;
        fileId.open("sql/id.txt");
        fileName.open("sql/name.txt");
        fileTel.open("sql/tel.txt");
        fileAddr.open("sql/addr.txt");
        vector<Info>::iterator i;
        if(!per.empty())
        for(i=per.begin();i != per.end();i++)
        {
            fileId<<i->id<<endl;
            fileName<<i->name<<endl;
            fileTel<<i->tel<<endl;
            fileAddr<<i->addr<<endl;
        }

        fileId.close();
        fileName.close();
        fileTel.close();
        fileAddr.close();
        cout<<"保存数据完成";

        exit(1);
    }


3.图形界面开始前读取上次通讯录数据

void Info::interface()//区别2:图形界面开始前读取上次通讯录
cout<<"开始准备通讯录,读取上次的通讯录中";
    ifstream fileId;
    ifstream fileName;
    ifstream fileTel;
    ifstream fileAddr;
    fileId.open("sql/id.txt");
    fileName.open("sql/name.txt");
    fileTel.open("sql/tel.txt");
    fileAddr.open("sql/addr.txt");
 printf("\n");
    printf("\n");
    printf("          |***********************************************|\n");
    printf("          |*          多 功 能 电 子 通 讯 录            *|\n");
    printf("          |*                                             *|\n");
    printf("          |*                              版本号:V_1.0.0*|\n");
    printf("          |***********************************************|\n");
    printf("          |*                                             *|\n");
    printf("          |*      功能选择:   1. 添加好友信息            *|\n");
    printf("          |*                  2. 查看好友信息            *|\n");
    printf("          |*                  3. 删除好友信息            *|\n");
    printf("          |*                  4. 搜索好友信息            *|\n");
    printf("          |*                  5. 修改好友信息            *|\n");
    printf("          |***********************************************|\n");
    printf("          |*      请输入你想要实现的功能:               *|\n");
    printf("          |*                                             *|\n");
    printf("          |*    1添加 2查看 3删除 4搜索 5修改 6退出      *|\n");
    printf("          |***********************************************|\n");


}


踩坑记录:

1.修改文件名字的时候要看cmake中的文件名是否修改

要对cmake进行修改(注意修改.cpp文件名的时候,.h文件的文件名也会跟着变)

2.getline吃回车

image-20201128170728345

因为getline吃回车,姓名和电话黏在一起了,导致无法写入姓名,我们怎么解决这个问题呢?答案是再写个getline消除吃回车的影响

image-20201128171239514

3.为了让程序分辨ID,姓名,电话,住址,不能将其写入同一个文件,应分为四个文件分别写入

image-20201128172746701

虽然ofstream file的时候会自动帮你建文件,但建议自己先建个文件夹,文件夹下先建好四个txt文件,方便查看

4.数据不要一个个写进文件,应该集体打包,效率更高

原先是写了一个姓名就添加进name文件,写了一个电话就填加进tel文件,优化后是全部程序写完后再进行写入文件,效率更高