C++课程设计 通讯录管理系统

 

  1. 题目分析

  建立一个手机通讯录系统。手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息包括姓名、电话号码,QQ号码、籍贯。根据题目要求实现功能。

  手机卡联系人文件和手机联系人文件事先已经写好,名字分别是PhoneCard和Phone,格式为文本文件。

  我做的通讯录管理系统一共包括七个类。

  前两个类是信息类,分别是手机卡上联系人和手机联系人的信息,第二个类继承第三个类。

  第三个类是一个虚基类,包含增、删、查、改、浏览的虚函数。

  第四个类继承第三个虚基类,是手机卡上联系人的操作类。数据成员是第一个类的动态对象数组,一个映照容器将联系人名字和该联系人在动态数组的位置联系起来。成员函数包括增、删、查、改、浏览,动态数组相对普通的对象数组操作简单,可直接调用STL的vector类中的函数,映照容器的应用使查找元素进行操作变得相对简单。这个类中的构造函数和析构函数包括了文件的读出和写入。这个类中的Delete函数,实际上并未从对象数组中真正删除,只是设立了一个bool型数组vis[1001],将要删除元素数组的vis值设立为true(已访问)在写入文件时只写入vis值为false的数组,以此实现删除。

  第五个类与第四个类操作完全类似,是对手机联系人的操作类。

  第六个类是一个用户类,在这个类中第三个类得到利用,实现了多态。数据成员是第四个类和第五个类的对象。在类中进行选择操作,确定对手机卡联系人进行操作还是对手机联系人进行操作。除了前两个类的增、删、查、改、浏览操作,这里还包括了从手机卡和手机联系人的双向移动和双向复制操作函数。

  第七个类是菜单类,显示用户界面进行操作。

二、实现代码

//PhoneCard.h

//在codeblocks建立的工程include文件夹下的PhoneCard.h

//第一个类的头文件

#ifndef PHONECARD_H

#define PHONECARD_H

#include<string>

#include<iostream>



using namespace std;





class PhoneCard

{

    protected:

        string Name;

        string PhoneNumber;



    public:

        void setName(string name);

        void setPhoneNumber(string phonenumber);



        string getName();

        string getPhoneNumber();



        PhoneCard();

        PhoneCard(string name,string phonenumber);



        friend istream&operator>>(istream&input,PhoneCard&phoneC);

        friend ostream&operator<<(ostream&output,PhoneCard&phoneC);

};



#endif // PHONECARD_H



//Phone.cpp

//工程中src文件夹下的P hone.cpp文件

//第一个类的cpp文件

#include "PhoneCard.h"



void PhoneCard::setName(string name){Name=name;}

void PhoneCard::setPhoneNumber(string phonenumber){PhoneNumber=phonenumber;}



string PhoneCard::getName(){return Name;}

string PhoneCard::getPhoneNumber(){return PhoneNumber;}



PhoneCard::PhoneCard(){}

PhoneCard::PhoneCard(string name,string phonenumber):

Name(name),PhoneNumber(phonenumber){}



istream&operator>>(istream&input,PhoneCard&phoneC)

{

    input>>phoneC.Name>>phoneC.PhoneNumber;

    return input;

}

ostream&operator<<(ostream&output,PhoneCard&phoneC)

{

    output<<phoneC.Name<<"  "<<phoneC.PhoneNumber;

    return output;

}



/*

PhoneCard类,存储在手机卡的联系人的信息类

数据成员包括Name联系人姓名,PhoneNumber电话号码

操作函数一组set函数,修改数据成员的值

一组get函数,得到数据成员的值

必备的无参构造函数和自定义构造函数

重载插入和提取运算符。

*/



//Phone.h

//include文件夹的Phone.h

//第二个类的头文件



#ifndef PHONE_H

#define PHONE_H

#include<string>

#include<iostream>

#include"PhoneCard.h"



using namespace std;





class Phone : public PhoneCard

{

    private:

        string QQnumber;

        string Address;



    public:

        void setQQnumber(string qq);

        void setAddress(string address);



        string getQQnumber();

        string getAddress();



        Phone();

        Phone(string name,string phonenumber,string qq,string address);



        friend istream&operator>>(istream&input,Phone&p);

        friend ostream&operator<<(ostream&output,Phone&p);

};



#endif





 // PHONE_H

//Phone.cpp

//src文件夹的Phone.cpp

//第二个类的cpp文件



#include "Phone.h"



void Phone::setQQnumber(string qq){QQnumber=qq;}

void Phone::setAddress(string address){Address=address;}



string Phone::getQQnumber(){return QQnumber;}

string Phone::getAddress(){return Address;}



Phone::Phone(){}

Phone::Phone(string name,string phonenumber,string qq,string address):

PhoneCard(name,phonenumber),QQnumber(qq),Address(address){}



istream&operator>>(istream&input,Phone&p)

{

    input>>p.Name>>p.PhoneNumber>>p.QQnumber>>p.Address;

    return input;

}

ostream&operator<<(ostream&output,Phone&p)

{

    output<<p.Name<<"  "<<p.PhoneNumber<<"  "<<p.QQnumber&
  • 18
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值