编写一个通信录

来源:互联网 发布:吉首大学教务网络系统 编辑:程序博客网 时间:2024/05/22 07:55

题目要求:
编写一个关于通讯录的程序
1. 可输入姓名、电话(可多个)、通讯地址、Email等必要的信息;
2. 可根据姓名查询电话等信息(最好还能根据电话查询姓名),并显示在屏幕上;
3. 要求通讯录保存成文件,如张三.txt,用文件流的方式实现;
4. 最好用面向对象方法编写。

开发环境:
QT Creator
但是建立的是纯C++工程

//person.h 人 类#ifndef PERSON_H#define PERSON_H#include <vector>#include <string>#include <iostream>#include <map>using namespace std;class Person{public:    void setPerson(string name,vector<string> phone,string address,string email);    string          getName();    vector<string>  getPhone();    string          getAddress();    string          getEmail();private:    string          m_name;    vector<string>  m_phone;    string          m_address;    string          m_email;};#endif // PERSON_H
//person.cpp#include "person.h"void Person::setPerson(string name,vector<string> phone,string address,string email){    m_name = name;    m_phone = phone;    m_address = address;    m_email = email;}string Person::getName(){    return m_name;}vector<string> Person::getPhone(){    return m_phone;}string Person::getAddress(){    return m_address;}string Person::getEmail(){    return m_email;}
//direct.h 通信录类头文件#ifndef DIRECT_H#define DIRECT_H#include "person.h"class Direct{public:    int menu();//显示通信录功能菜单    void addperson(Person* person);//添加联系人    void browse();//浏览通信录    void findperson();//查找联系人    void deleteperson();//删除联系人};#endif // DIRECT_H
//direct.cpp#include "direct.h"#include <stdlib.h>#include <fstream>#include <iostream>using namespace std;//显示通信录功能菜单int Direct::menu(){    cout<<"***************************************************************"<<endl;    cout<<"*********************** 功能菜单:*****************************"<<endl;    cout<<"********************* 1.新建联系人 ****************************"<<endl;    cout<<"********************* 2.删除联系人 ****************************"<<endl;    cout<<"********************* 3.查找联系人 ****************************"<<endl;    cout<<"********************* 4.浏览通信录 ****************************"<<endl;    cout<<"********************* 5.退出通信录 ****************************"<<endl;    cout<<"***************************************************************"<<endl;    cout<<"******************* 请选择您要进行的操作:*********************"<<endl;    int order = 0;    cin>>order;    return order;}//添加联系人void Direct::addperson(Person* person){    person = new Person();    string name,number,address,email;    vector<string> phone;    cout<<"请输入姓名:";    cin>>name;    cout<<"您要存几条电话号码: ";    int count;    cin>>count;    for(int i=1;i<=count;i++)    {        cout<<"请输入电话号码"<<i<<": ";        cin>>number;        phone.push_back(number);    }    cout<<"请输入地址:";    cin>>address;    cout<<"请输入邮箱:";    cin>>email;    person->setPerson(name,phone,address,email);    ofstream outfile;    outfile.open("通信录.txt",ios::app);    if(!outfile)    {        cout<<"通信录.txt can't open. "<<endl;        abort();    }    else    {        outfile<<"姓名: "<<person->getName()<<" ";        for(int i=0;i<person->getPhone().size();i++)        {            outfile<<"电话号码"<<i+1<<": "<<person->getPhone().at(i)<<" ";        }        outfile<<"地址: "<<person->getAddress()<<" ";        outfile<<"Email: "<<person->getEmail()<<endl;        outfile.close();    }}//浏览通信录void Direct::browse(){    ifstream infile;    infile.open("通信录.txt");    if(!infile)    {        cout<<"通信录.txt can't open. "<<endl;        abort();    }    else    {        char people[100];        while (!infile.eof())        {            infile.getline(people,100);            cout<<people<<endl;        }    }    infile.close();}//查找联系人void Direct::findperson(){    ifstream infile;    infile.open("通信录.txt");    if(!infile)    {    cout<<"通信录.txt can't open. "<<endl;    abort();    }    else    {        cout<<"请输入要查找人的信息(姓名、电话、住址或者邮箱): "<<endl;        string str_find;        cin>>str_find;        char people[100];        int i=0;        while(!infile.eof())        {             infile.getline(people,100);             string str_people = people;             size_t n = str_people.find(str_find,0);             int N = (int)n;             if(N>=0)             {                 cout<<str_people<<endl;                 ++i;             }        }        if(0==i)        {            cout<<"查无此人......"<<endl;        }    }}//删除联系人void Direct::deleteperson(){    ifstream infile;    infile.open("通信录.txt");    if(!infile)    {    cout<<"通信录.txt can't open. "<<endl;    abort();    }    else    {        cout<<"请输入要删除人的信息(姓名、电话、住址或者邮箱): "<<endl;        string str_find;        cin>>str_find;        char people[100];        int i=0;        vector<string> str_people2;        vector<string> str_people3;        string s = "N";        while(!infile.eof())        {             infile.getline(people,100);             str_people3.push_back(people);             string str_people1 = people;             size_t n = str_people1.find(str_find,0);             int N = (int)n;             if(N>=0)             {                 cout<<"是否要删除此人信息?Y/N"<<endl;                 cout<<str_people1<<endl;                 cin>>s;                 ++i;             }             else if(N==-1&&people!="\n")             {                 if(people!="0")                 {                 str_people2.push_back(people);                 }             }            }        ofstream ofile("通信录.txt",ios::trunc);        string str;        if(s == "Y")        {            ofstream outfile;            outfile.open("通信录.txt",ios::app);            for(int i=0;i<str_people2.size()-1;i++)//此处size-1是由于getline()会多读一行空行,使容器内多压入一行空行            {                str = str_people2.at(i);                outfile<<str<<endl;            }            str_people2.clear();            outfile.close();        }        else if(s == "N")        {            ofstream outfile;            outfile.open("通信录.txt",ios::app);            for(int i=0;i<str_people3.size()-1;i++)//此处size-1是由于getline()会多读一行空行,使容器内多压入一行空行            {                str = str_people3.at(i);                outfile<<str<<endl;            }            str_people3.clear();            outfile.close();        }        else        {            cout<<"输入有误......"<<endl;        }        ofile.close();    }}
//main.cpp#include "direct.h"int main(){    Direct* direct = new Direct();    Person* person;    int userOrder = 0;    while(userOrder!=5)    {        userOrder = direct->menu();        switch(userOrder)        {            case 1:                cout<<"********************** 新建联系人 *****************************"<<endl;                direct->addperson(person);            break;            case 2:                cout<<"********************** 删除联系人 *****************************"<<endl;                direct->deleteperson();            break;            case 3:                cout<<"********************** 查找联系人 *****************************"<<endl;                direct->findperson();            break;            case 4:                cout<<"********************** 浏览通信录 *****************************"<<endl;                direct->browse();            break;            case 5:                cout<<"********************** 退出通信录 *****************************"<<endl;            break;            default:            break;        }    }    return 0;}

运行结果