c++课程设计

通讯录管理系统

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

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

要求:

1. 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。 

2. 以菜单方式工作(字符界面即可)

3. 存储在手机卡上的联系人的信息包括:姓名和电话号码;存储在手机上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息

4. 管理系统的功能包括:

a) 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)

b) 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)

c) 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)

d) 查询:根据名字查询联系人信息(查询结果不唯一)

e) 浏览:显示所有联系人的信息

f) 将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)

g) 将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在)

5. 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点

6. 提交程序源码和课程设计报告。

实现过程分析:

建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息

建立以下几个类:

1. 手机卡联系人类:表示一个联系人

​数据成员包括:

姓名

电话号码

成员函数包括

带参并带默认值的构造函数

一组set函数为数据成员赋值

一组modify函数,修改数据成员的值

重载>>,<<运算符,完成对象的输入和输出操作

2. 手机联系人(继承于手机卡联系人类):

新增数据成员:

籍贯

QQ号
成员函数包括

一组set函数为数据成员赋值

一组modify函数,修改数据成员的值

重载>>,<<运算符,完成数据成员的输入输出操作

3. 定义一个通讯簿抽象类,用来封装以下函数(为支持多态,可以将以下函数封装为纯虚函数)

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

4. 手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息

​数据成员包括:

​手机联系人的数量

​手机联系人对象数组

​成员函数包括

​构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

​析构函数:将对象数组中的内容写入到文本文件中。

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

5. 手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机卡中存储的所有联系人的信息

​数据成员包括:

​手机联系人的数量

​手机联系人对象数组

​成员函数包括

​构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组

​析构函数:将对象数组中的内容写入到文本文件中。

​增加函数:增加一个联系人

​删除操作:删除一个联系人

​Display:显示所有联系人的信息

​修改某一联系人的信息:

​查询并显示某一联系人的信息:

6. 用户类(这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理

​数据成员包括:

​两个通讯簿对象

​成员函数包括(成员函数体现用户的行为):

​添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)

​删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人

​Display:显示相应的通讯簿中联系人的信息

​修改某一联系人的信息:调用通讯簿对象的函数完成操作

​查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作

​将手机卡中的存储的联系人的信息移动到手机中

​将手机中存储的联系人的信息移动到手机卡中

​将手机卡中的存储的联系人的信息复制到手机中

​将手机中存储的联系人的信息复制到手机卡中

7. 界面菜单类:用来给出操作提示

​数据成员:可以不定义数据成员

​成员函数:

​Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
#include<iomanip>
#include<cstring>
#define MAX 1005
using namespace std;

//菜单
void showMenu()
{
    cout << "***************************" << endl;
    cout << "*****  1、添加联系人  *****" << endl;
    cout << "*****  2、删除联系人  *****" << endl;
    cout << "*****  3、查找联系人  *****" << endl;
    cout << "*****  4、修改联系人  *****" << endl;
    cout << "*****  5、显示联系人  *****" << endl;
    cout << "*****  6、移动联系人  *****" << endl;
    cout << "*****  7、复制联系人  *****" << endl;
    cout << "*****  0、退出通讯录  *****" << endl;
    cout << "***************************" << endl;
}



//手机卡联系人类
class SIMcard_Contact                                   
{
public:
    SIMcard_Contact() :Name(nullptr), Telnumber("0") {};//构造函数

    ~SIMcard_Contact() { delete[] Name; }               //析构函数

    void setName(string tempname);                      //设置姓名

    void setTelnumber(string tempnumber);               //设置电话号码
     
    void modifyName(string tempname);                   //修改姓名

    void modifyTelnumber(string tempnumber);            //修改电话号码

    void get();                                         //展示信息

    char* getName();                                    //获取姓名

    string getTelnumber();                              //获取电话号码

    friend istream& operator>>(istream& cin, SIMcard_Contact& p);  //重载>>

    friend ostream& operator<< (ostream& cout, SIMcard_Contact& p);//重载<<



protected:
    char* Name;  //姓名
    string Telnumber;//电话号码
};
//设置姓名
void SIMcard_Contact::setName(string tempname)
{

    Name = new char[tempname.size() + 1];
    strcpy(Name, tempname.c_str());

}
//设置电话号码
void SIMcard_Contact::setTelnumber(string tempnumber)
{
    Telnumber = tempnumber;
}
//修改姓名
void SIMcard_Contact::modifyName(string tempname)
{
    if (Name != nullptr) { delete[] Name; }
    Name = new char[tempname.size() + 1];
    strcpy(Name, tempname.c_str());
}
//修改电话号码
void SIMcard_Contact::modifyTelnumber(string tempnumber)
{
    Telnumber = tempnumber;
}
//展示信息
void SIMcard_Contact::get()
{
    cout << "姓名:" << Name << "\t" << "电话号码:" << Telnumber << endl;
}
//获取姓名
char* SIMcard_Contact::getName()
{
    return Name;
}
//获取电话号码
string SIMcard_Contact::getTelnumber()
{
    return Telnumber;
}
//重载>>
istream& operator>>(istream& cin, SIMcard_Contact& p)
{

    string tempname;
    cout << "请输入姓名:" << endl;
    cin >> tempname;
    p.Name = new char[tempname.size() + 1];
    strcpy(p.Name, tempname.c_str());
    cout << "请输入电话号码:" << endl;
    cin >> p.Telnumber;

    return cin;
}
//重载<<
ostream& operator<<(ostream& cout, SIMcard_Contact& p)
{
    cout << "姓名:" << p.Name << "\t" << "电话号码:" << p.Telnumber << endl;
    return cout;

}



//手机联系人类
class Phone_Contact :public SIMcard_Contact 
{
public:
    

    void setAddress(string tempaddress);//设置家庭住址

    void setQQ(string tempQQ);//设置QQ号码

    string getAddress();//获取地址

    string getQQ();//获取QQ号码

    void modifyAddress(string tempaddress);//修改地址

    void modifyQQ(string tempQQ);//修改QQ号码

    void get();//输出

    friend istream& operator>>(istream& cin, Phone_Contact& p);//重载>>
    friend ostream& operator<<(ostream& cout, Phone_Contact& p);//重载<<




protected:
    string Address;//家庭住址
    string QQ;//QQ号码
};
//设置地址
void Phone_Contact::setAddress(string tempaddress)
{
    Address = tempaddress;
}
//设置QQ号码
void Phone_Contact::setQQ(string tempQQ)
{
    QQ = tempQQ;
}
//修改地址
void Phone_Contact::modifyAddress(string tempaddress)
{
    Address = tempaddress;
}
//修改QQ号码
void Phone_Contact::modifyQQ(string tempQQ)
{
    QQ = tempQQ;
}
//获取地址
string Phone_Contact::getAddress()
{
    return Address;
}
//获取QQ号码
string Phone_Contact::getQQ()
{
    return QQ;
}
//输出
void Phone_Contact::get()
{
    cout << "姓名:" << Name << "\t" << "电话号码:" << Telnumber << "\t" << "家庭住址:" << Address <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值