通讯录管理软件的设计C++实现(含源代码)

通讯录管理软件的设计
/*
课题名称:通讯录管理软件的设计
说明:通讯录至少包括以下数据项:姓名,地址,电话,邮编,E-mail等。
要求:
1)通讯录编辑(添加、删除);
2)按不同的项进行查找;
3)对已存在的通讯录按不同的项排序;
4)将通讯录写入文件;
5)从文件读入通讯录。
*/
本项目是我学习C++过程中编写的程序,有不足的地方还望见谅,欢迎大家留言评论。
本项目中变量命名是利用简单的英文字母,方便理解程序
简述:
本项目分为几大功能:1:增加通讯录项 2:删除通讯录项 3:查找联系人 4:查看全部联系人 。
同时在第三功能查找联系人下又支持如下查找: 1:姓名查找 2:性别查找 3:地址查找 4:电话号码查找 5:邮编查找 6:E_mail查找 7:部分信息查找

本程序中的文件操作中的文件目录为“d:\tongxunlu.txt ”,文件中的数据格式如下:
王帆帆 1 四川泸州 16508239061 646500 [email protected]
陈小非 0 四川成都 13005642306 646524 [email protected]
赵敏 0 安徽合肥 18805462354 455415 [email protected]
。。。。。。

//源代码如下
#include
#include
#include
#include
#include
using namespace std;

struct people{
    string name;  //姓名
    char sex;   //性别    1代表男,0代表女
    string location;  //地址
    unsigned long long int telphone;  //电话号码
    long postcode;   //邮编
    string e_mail;   //E_mail
    //people * next;   //指向下一个节点的指针
    /*可以使用链表来存储联系人信息,本项目使用不定长数组vector*/ 
};

void function_1(void);   //增加通讯录项函数
void function_2(void);   //删除通讯录项函数
void function_3(void);   //查找通讯录项函数
void function_4(void);   //查找全部联系人函数
void import(people &m,ifstream &infile);   //从文件读入一个结点数据函数
void output(people &m,ofstream &outfile);  //向文件写入一个结点数据函数
void new_people(people &m);    //初始化结构体变量,使各项均为0
void c_out(people &m);   //标准输出结构体变量数据
void c_out_head(void);   //标准输出通讯录表头
void vec_sort(vector &vec_1);   //对结构体数组vec_1按照电话号码排序(升序)(电话号码唯一)

int main()    //通讯录管理软件
{
    int x;   //功能选择变量
    loop:
    {
        cout<<"请输入您的需求:"<cout<<"1:增加通讯录项  2:删除通讯录项  3:查找联系人  4:查看全部联系人 -1:结束 "<cin>>x;
        if(x==1)   //增加通讯录项(查重后直接在文件末尾添加数据)
        {    
            function_1();
            cout<goto loop;
        }
        else if(x==2)   //删除通讯录项(先提取文件中所有数据,更改后再重新写入全部数据)
        {
            function_2();
            cout<goto loop;
        }
        else if(x==3)   //查找通讯录
        {
            function_3();
            cout<goto loop;
        }
        else if(x==4)   //查看全部联系人
        {
            function_4();
            cout<goto loop;
        }
        else if(x==-1)
        {
            //system("pause");
            return 0;
        }
        else 
        {
            cout<<"输入数据无效!"<cout<goto loop;
        }
    }
    return 0;
}

void function_1(void)   //增加通讯录项函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
{
    vector vec;   //存放全部联系人信息
    people m;    //创建一个结构体变量用于接收通讯录数据
    int i;   //计数变量 
    ifstream infile("d:\\tongxunlu.txt");  //打开文件
    if(infile==0)
    {
        cout<<"打开文件失败!"<return ;
    }
    while(!infile.eof())   //从文件中导出联系人信息到vec中
    {
        new_people(m);
        import(m,infile);
        vec.push_back(m);
    }
    infile.close();

    ofstream outfile("d:\\tongxunlu.txt",ios::app);
    if(outfile==0)
    {
        cout<<"打开文件失败!"<return ;
    }
    cout<<"请您按照顺序输入联系人信息(如缺失信息,请以0代替):姓名,性别(1:男,0:女),地址,电话,邮编,E_mail"<//标准输入联系人信息
    cin>>m.name;
    cin>>m.sex;
    cin>>m.location;
    cin>>m.telphone;
    cin>>m.postcode;
    cin>>m.e_mail;

    for(i=0;i//判断是否存在添加的电话号码的联系人 
    {
        if(m.telphone==vec.at(i).telphone)
            break;
    }
    if(i==vec.size() || vec.size()==0)
    {
        output(m,outfile);
        cout<<"添加联系人成功!"<return ;
    }
    else 
    {
        cout<<"已存在此电话号码的联系人"<"pause");
        return ;
    }
    outfile.close();
}

void function_2(void)   //删除通讯录项函数
{
    vector vec;
    long len;  //联系人总数
    people m;  //结构体变量,用于接收联系人信息
    unsigned long long int phone;  //用于接收用户删除的联系人的电话号码
    int i;   //计数变量
    ifstream infile("d:\\tongxunlu.txt");
    if(infile==0)
    {
        cout<<"打开文件失败!"<return ;
    }
    while(!infile.eof())
    {
        new_people(m);   //初始化m
        import(m,infile); //infile方式读入一个联系人信息
        vec.push_back(m);  
    }
    infile.close();
    cout<<"请输入您欲删除的联系人的电话号码!"<//电话号码唯一
    cin>>phone; 
    len=vec.size();
    for(i=0;iif(vec.at(i).telphone==phone)
        {
            new_people(vec.at(i));  //清空此联系人数据
            break;
        }
    }
    if(i==len)
    {
        cout<<"通讯录中不存在此号码的联系人"<return ;
    }
    else
    {
        cout<<"删除联系人成功!"<"d:\\tongxunlu.txt");
        if(outfile==0)
        {
            cout<<"文件打开失败!"<return ;
        }
        for(int j=0;jif(m.name=="0" && m.telphone==0) continue;
            else 
            {
                output(m,outfile);
            }
        }
        outfile.close();
    }
}

void function_3(void)   //查找通讯录项函数
{
    vector vec;   //存放全部联系人信息
    vector vec_1;  //存放查找结果联系人信息
    people m;    //创建一个结构体变量用于接收通讯录数据或中间变量 
    short int y;  //功能选择

    ifstream infile("d:\\tongxunlu.txt");  //打开文件
    if(infile==0)
    {
        cout<<"打开文件失败!";
        return ;
    }
    while(!infile.eof())   //从文件中导出联系人信息到vec中
    {
        new_people(m);
        import(m,infile);
        vec.push_back(m);
    }
    infile.close();

    loop1:
    {
        cout<cout<<"请输入查找方式:0:返回上一层  1:姓名查找  2:性别查找  3:地址查找  4:电话号码查找  5:邮编查找  6:E_mail查找  7:部分信息查找 "<cin>>y;
        if(y==0)   //返回上一层
        {
            return ;
        }
        else if(y==1)  //按照姓名查找
        {
            string seek_name;  //待查找姓名变量
            long len_1;   //存放结果联系人总数
            cout<"请输入待查找联系人姓名:";
            cin>>seek_name;
            for(int i=0;iif(vec.at(i).name==seek_name)
                {
                    vec_1.push_back(vec.at(i));
                }
            }
            len_1=vec_1.size();
            if(len_1==0)    //无符合条件(姓名)的联系人
            {
                cout<<"无此联系人!"<return ;
            }
            else if(len_1==1)   //有以为符合条件(姓名)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else     //有多位符合条件(姓名)的联系人
            {
                vec_sort(vec_1);   //对结构体数组vec_1按照电话号码排序(电话号码唯一)
                cout<<"姓名为"<"的联系人数为:"<for(int i=0;i//输出查找结果(按照电话号码升序)
                {
                    c_out(vec_1.at(i));
                }
                system("pause");
                return ;
            }

        }
        else if(y==2)  //按照性别查找
        {
            char seek_sex;   //待查找的性别变量
            long len_1;     //结果联系人总数
            cout<<"请输入您要查找的性别(男:1或女:0):";
            cin>>seek_sex;

            for(int i=0;i//查找符合条件(性别)的联系人,并添加至vec_1
            {
                if(vec.at(i).sex==seek_sex)
                {
                    vec_1.push_back(vec.at(i));  //将符合条件的联系人添加至vec_1数组中
                }
            }

            len_1=vec_1.size();
            if(len_1==0)    //无符合条件(性别)的联系人
            {
                cout<<"无性别为";
                if(seek_sex=='1') cout<<"男";
                else cout<<"女";
                cout<<"的联系人!";
                system("pause");
                return ;
            }
            else if(len_1==1)   //有一位符合条件(性别)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else    //有多位符合条件(性别)的联系人
            {
                vec_sort(vec_1);    //对数组vec_1按照电话号码排升序
                cout<<"性别为"<"的联系人数为"<for(int i=0;i"pause");
                return ;
            }
        }
        else if(y==3)  //按照地址查找
        {
            string seek_location;   //待查找的地址变量
            long len_1;   //存放结果联系人总数
            cout<<"请输入您需要查找的联系人的地址:";
            cin>>seek_location;
            for(int i=0;i//查找符合条件(地址)的联系人,并添加至vec_1中
            {
                if(vec.at(i).location==seek_location)
                {
                    vec_1.push_back(vec.at(i));   //将符合条件的联系人添加至vec_1
                }
            }
            len_1=vec_1.size();
            if(len_1==0)    //无符合条件(地址)的联系人
            {
                cout<<"无地址为"<"的联系人信息"<"pause");
                return ; 
            }
            else if(len_1==1)   //有一位符合条件(地址)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else    //有多位符合条件(地址)的联系人
            {
                vec_sort(vec_1);    //对结果联系人按照姓名排升序
                cout<<"地址为"<"的联系人数为:"<for(int i=0;i"pause");
                return ;
            }
        }
        else if(y==4)  //按照电话号码查找
        {
            unsigned long long int seek_phone; //待查找的联系人号码
            long len_1;  //结果联系人的总数(虽说前面的添加操作已经存在查重功能,难免在文件读入的时候就读入有相同电话号码的联系人)
            cout<<"请输入您需要查找的联系人的电话号码";
            cin>>seek_phone;
            for(int i=0;i//查找符合条件(电话号码)并添加至vec_1中
            {
                if(vec.at(i).telphone==seek_phone)
                {
                    vec_1.push_back(vec.at(i));  //将电话号码相同的联系人添加至vec_1
                }
            }
            len_1=vec_1.size();
            if(len_1==0)   //无符合条件(电话号码)的联系人
            {
                cout<<"无电话号码为"<"的联系人信息"<"pause");
                return ;
            }
            else if(len_1==1)   //有一位符合条件(电话号码)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else    //有多位符合条件(电话号码)的联系人
            {
                cout<<"电话号码为"<"的联系人数为:"<for(int i=0;i//输出查询结果
                {
                    c_out(vec_1.at(i));
                }
                system("pause");
                return ;
            }

        }
        else if(y==5)  //按照邮编查找
        {
            long seek_postcode;   //待查找联系人的邮编
            long len_1;   //存放结果联系人总数
            cout<<"请输入您需要查找的联系人的邮编:";
            cin>>seek_postcode;
            for(int i=0;i//查找符合条件(邮编)的联系人并添加至vec_1中
            {
                if(vec.at(i).postcode==seek_postcode)
                {
                    vec_1.push_back(vec.at(i));   
                }
            }
            len_1=vec_1.size();
            if(len_1==0)   //无符合条件(邮编)的联系人
            {
                cout<<"无邮编wei"<"的联系人信息!"<"pause");
                return ;
            }
            else if(len_1==1)   //只有一个符合条件(邮编)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else     //有多个符合条件(邮编)的联系人
            {
                vec_sort(vec_1);    //按照电话号码对vec_1排升序
                cout<<"邮编为"<"的联系人数为:"<for(int i=0;i//输出结果联系人
                {
                    c_out(vec_1.at(i));
                }
                system("pause");
                return ;
            }
        }

        else if(y==6)  //按照E_mail查找
        {
            string seek_email;    //存放待查找的联系人E_mail
            long len_1;     //存放结果联系人总数
            cout<<"请输入您需要查找的联系人的E_mail:";
            cin>>seek_email;
            for(int i=0;i//查找符合条件E_mail的联系人并添加至vec_1中
            {
                if(vec.at(i).e_mail==seek_email)
                {
                    vec_1.push_back(vec.at(i));
                }
            }
            len_1=vec_1.size();
            if(len_1==0)   //无符合条件(E_mail)的联系人
            {
                cout<<"无E_mail为"<"的联系人信息"<"pause");
                return ;
            }
            else if(len_1==1)   //只有一个符合条件(E_mail)的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            }
            else    //有多位符合条件(E_mail)的联系人
            {
                vec_sort(vec_1);   //对结果联系人按照电话号码排升序
                cout<<"E_mail为"<"的联系人数为:"<for(int i=0;i//输出结果联系人
                {
                    c_out(vec_1.at(i));
                }
                system("pause");
                return ;
            }
        }
        else if(y==7)   //按照部分信息查找
        {
            people m;   //存放单个联系人(用作中间变量)
            long len_1;  //存放符合条件的联系人数 
            cout<<"请输入您待查找联系人的部分信息(按照以下顺序输入,若未知则用0代替:姓名,性别,地址,电话,邮编,E_mail"<cin>>m.name;
            cin>>m.sex;
            cin>>m.location;
            cin>>m.telphone;
            cin>>m.postcode;
            cin>>m.e_mail;

            for(int i=0;i//查找符合条件的联系人并添加至vec_1中
            {
                if(m.name=="0" || m.name==vec.at(i).name)
                    if(m.sex=='0' || m.sex==vec.at(i).sex)
                        if(m.location=="0" || m.location==vec.at(i).location)
                            if(m.telphone==0 || m.telphone==vec.at(i).telphone)
                                if(m.postcode==0 || m.postcode==vec.at(i).postcode)
                                    if(m.e_mail=="0" || m.e_mail==vec.at(i).e_mail)
                                    {
                                        vec_1.push_back(vec.at(i));    
                                    }
            }
            if(len_1==0)  //无符合条件的联系人
            {
                cout<<"无符合条件的联系人!"<"pause");
                return ;
            } 
            else if(len_1==1)  //有一位符合条件的联系人
            {
                c_out_head();
                c_out(vec_1.at(0));
                system("pause");
                return ;
            } 
            else     //有多位符合条件的联系人
            {
                vec_sort(vec_1);     //对结果联系人按照电话号码排升序
                cout<<"符合条件的联系人数为:"<for(int i=0;i//输出结果联系人 
                {
                    c_out(vec_1.at(i));
                }
                system("pause");
                return ; 
             } 

        }
        else   
        {
            cout<<"输入数据无效!"<goto loop1; 
        }
    }       
}

void function_4(void)   //查找全部联系人函数
{
    vector vec;   //存放联系人
    people m;  //存放单个联系人信息
    ifstream infile("d:\\tongxunlu.txt");
    if(infile==0)
    {
        cout<<"打开文件失败!";
        return ;
    }
    while(!infile.eof())
    {
        new_people(m);
        import(m,infile);
        vec.push_back(m);
    }
    infile.close();
    c_out_head();   //标准输出通讯录表头
    for(int i=0;i//标准输出每一个联系人信息
    }
    cout<<"完毕!"<void import(people &m,ifstream &infile)   //从文件读入一个结点数据函数
{
    infile>>m.name;
    infile>>m.sex;
    infile>>m.location;
    infile>>m.telphone;
    infile>>m.postcode;
    infile>>m.e_mail;
}

void output(people &m,ofstream &outfile)  //向文件写入一个结点数据函数
{
    outfile<<'\n';
    outfile<"  ";
    outfile<"  ";
    outfile<"  ";
    outfile<"  ";
    outfile<"  ";
    outfile<void new_people(people &m)    //初始化结构体变量,使各项均为"0"
{
    m.name="0";
    m.sex='0';
    m.location="0";
    m.telphone=0;
    m.postcode=0;
    m.e_mail="0";
}

void c_out(people &m)   //标准输出结构体变量数据
{
    cout<cout<8)<if(m.sex=='1') cout<5)<<"男";
    else cout<5)<<"女";
    cout<15)<cout<13)<cout<9)<cout<20)<cout<void c_out_head(void)   //标准输出通讯录表头
{
    cout<cout<cout<cout<8)<<"姓名";
    cout<5)<<"性别";
    cout<15)<<"地址";
    cout<13)<<"电话号码";
    cout<9)<<"邮编";
    cout<20)<<"E_mail";
    cout<void vec_sort(vector &vec_1)   //对结构体数组vec按照电话号码排序
{
    people m;    //结构体变量用作中间变量
    unsigned long long int phone_min;   //存放较小的电话号码值 
    //long len;    //存放vec的规模大小
    for(long i=0;ilong j,min=i;
        for(j=i+1;jif(vec_1.at(j).telphoneif(min!=i)
        {
            m=vec_1.at(i);
            vec_1.at(i)=vec_1.at(min);
            vec_1.at(min)=m;
        }
    }
}

你可能感兴趣的:(C/C++)