c++运用继承多态类和对象指针重载设计的双卡通讯录管理系统

该博客介绍了一个使用C++编程的双卡通讯录管理系统,系统利用面向对象的特性,如继承、多态和重载,实现了手机和手机卡上的联系人管理。系统包含联系人、手机卡联系人两个类,支持添加、删除、修改、查询、显示等功能,并提供菜单界面进行交互。系统还涉及文件操作,将联系人信息存储在文本文件中,确保数据持久化。
摘要由CSDN通过智能技术生成

通讯录管理系统

手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(假设每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的联系人的信息只包含姓名和电话号码两项信息。存储在电话卡上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。

根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。

要求:

  1. 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的联系人的信息)。
  2. 以菜单方式工作(字符界面即可)
  3. 存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息
  4. 管理系统的功能包括:
    1. 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中,并且要检查目标位置上是否存在相同的电话号码)
    2. 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
    3. 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)
    4. 查询:根据名字查询联系人信息(查询结果可能不唯一)
    5. 浏览:显示所有联系人的信息
    6. 将联系人的信息从手机转存到手机卡上(转存过程中,要避免重复数据(姓名和电话号码相同)的存在;并且在转存是要检查容量是否受限 。下同。)
    7. 将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在)
  5. 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点。
  6. 1.class contact

    本类代表的手机联系人类,作用是处理联系人信息,共有数据成员方便类和类之间相互调用,对实现后期文件操作有重要作用。

    class contact

    {

    public:

        string name;

        string number;

    定义姓名和电话号码字符串

        void setdoublename(string names,string numbers);

    前置条件:手机联系人不存在

    输入:无

    功能:对手机联系人的信息进行初始化

    输出:无

    后置条件:手机卡联系人的姓名电话已存在。

        string getname();

    前置条件:手机联系人的姓名已进行录入

    输入:无

    功能:获取手机联系人的姓名

    输出:无

    后置条件:返回卡联系人的姓名

        string getnumber();

    前置条件:手机联系人的电话行录入

    输入:无

    功能:获取手机联系人的电话

    输出:无

    后置条件:返回卡联系人的电话

        void modify();

    前置条件:手机联系人的姓名,电话已录入

    输入:无

    功能:修改手机联系人的姓名和电话

    输出:无

    后置条件:手机联系人的姓名和电话已修改

        contact() {}

    前提条件:未存在空析构函数,未重定义

    输入:无

    实现功能:系统默认调用

    输出:无

    后置条件:无

        friend istream&operator>>(istream&in,contact&p);

    前置条件:手机联系人已经存在

    输入:无

    功能:重载运算符,进行联系人信息的输入

    输出:无

    后置条件:在界面联系人的姓名和电话进行输入

        friend ostream&operator<<(ostream&out,contact&p);

    前置条件:手机联系人已经存在

    输入:无

    功能:重载运算符,进行联系人信息的输出

    输出:无

    后置条件:在界面联系人的姓名和电话输出。

    };

    2.class phonecard

    本类代表手机卡联系人类,用继承的方法继承基类的成员函数,继承对象包括姓名和电话,增加了籍贯和qq号码,成员函数是共有的成员函数,方便进行类和类之间的调用,对之后的信息添加删除有重要帮助。

    class phonecard:public contact

    {

    public:

        string address;

        string qq;

    定义两个数据成员对象

        string getaddress();

       条件:手机卡联系人的籍贯已经录入。

    输入:无

    功能:获取手机卡联系人的籍贯

    输出:无

    后置条件:返回手机卡联系人的籍贯。

        string getqq();

    前置条件:手机卡联系人的qq已经录入。

    输入:无

    功能:获取手机卡联系人的qq

    输出:无

    后置条件:返回手机卡联系人的qq。

        phonecard() {}

    前提条件:未存在空析构函数,未重定义

    输入:无

    实现功能:系统默认调用

    输出:无

    后置条件:无

        void setnnaq(string names , string numbers , string addresses , string qqs);

    前置条件:手机卡联系人不存在

    输入:无

    功能:对手机联系人的信息进行初始化

    输出:无

    后置条件:手机卡联系人的姓名电话地址QQ已存在。

        void modify();

    前置条件:手机联系人的姓名,电话,地址,QQ已经录入。

    输入:无

    功能:修改手机联系人的姓名,电话,地址,QQ。

    输出:无

    后置条件:手机联系人的姓名,电话,地址,QQ已进行修改。

        friend istream&operator>>(istream&in,phonecard&p);

    前置条件:手机联系人已经存在

    输入:无

    功能:重载运算符,进行联系人信息的输入

    输出:无

    后置条件:在界面联系人的姓名和电话进行输入

        friend ostream&operator<<(ostream&out,phonecard&p);

    前置条件:手机联系人已经存在

    输入:无

    功能:重载运算符,进行联系人信息的输出

    输出:无

    后置条件:在界面联系人的姓名和电话输出。

    };

    3.class lists

    这个类是虚基类,用到多态的知识点。堕胎的作用是提高代码的维护性和拓展性。书本中对于多态的定义是:统一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时就可以通过基类的指针调用派生类的方法。

    class house 通讯簿抽象类,封装函数。

    {

     public:

        virtual void add() = 0;增加一个联系人

        virtual void delete1() = 0;删除一个联系人

        virtual void display() = 0;显示所有联系人的信息

        virtual void xiugai() = 0;修改联系人的信息

        virtual void search() = 0;查询并显示某一联系人的信息

     };

    定义第三个虚基类方便后续对函数进行封装,纯虚函数。

    4.class phonelist

    这个构造函数的数据成员中有构造函数析构函数和io操作函数,程序开始运行的时候将文件数据导入数组当中,在进行读操作写操作,用析构函数写操作写入文件不会丢失数据

    class phonelist:public lists

    {

    public:

        int size;

        contact contactor[1000];

    定义手机联系人数量和手机联系人数组

        phonelist();

    前置条件:手机联系人对象数组已存在

    输入:无

    功能:读取文本文件中的数据,并根据文件内容创建联系人对象数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值