程序设计题: 通讯录解决办法

程序设计题: 通讯录
设一个通信录由以下几项数据信息构成:
  数据项 类型
  姓名 字符串
  编号 整型
地址 字符串
  邮政编码 字符串
电话号码 结构体类型
一般电话 字符串
移动电话 字符串
住宅电话 字符串
办公室电话 字符串
试为通信录数据定义类型和定义通信录变量。
【功能要求】
1) 建立通讯录文件(list.txt),保存相关信息。
2) 可以缩位拨号,即通过拨编号拨打电话。在屏幕上逐个字符显示电话编码。
3) 快速查询,如输入“王”,可列出所有王姓的信息。
4) 按姓名排序,存入sort.txt文件中。
5) 修改功能,可以随时更改通讯录中的相关信息。
6) 打印名片,格式自定,要求将信息以参数形式传递。
7) 有细致的功能菜单选项,要求界面合理,菜单指引明确。
【程序设计的具体说明】
  数据结构:
用类实现,详情如〔问题描述〕所述。


------解决方案--------------------
C/C++ code

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>

using namespace std;

//保存电话号码的结构
struct Tel_Number_
{
    friend ostream& operator<<(ostream &ros, Tel_Number_ &rstTelNumber);
    friend istream& operator>>(istream &ris, Tel_Number_ &rstTelNumber);
    string strCommonNumber;            //一般电话
    string strMobileNumber;            //移动电话
    string strHomeNumber;            //家庭电话
    string strOfficeNumber;            //办公电话
};

ostream& operator<<(ostream &ros, Tel_Number_ &rstTelNumber)
{
    if(rstTelNumber.strCommonNumber == "")
    {
        ros << "--" << " ";
    }
    else
    {
        ros << rstTelNumber.strCommonNumber << " ";
    }

    if(rstTelNumber.strMobileNumber == "")
    {
        ros << "--" << " ";
    }
    else
    {
        ros << rstTelNumber.strMobileNumber << " ";
    }

    if(rstTelNumber.strHomeNumber == "")
    {
        ros << "--" << " ";
    }
    else
    {
        ros << rstTelNumber.strHomeNumber << " ";
    }

    if(rstTelNumber.strOfficeNumber == "")
    {
        ros << "--" << " ";
    }
    else
    {
        ros