简单的电话簿实现程序(!急)

C++

文件流方式

要实现的功能
增加数据成员(已写),
查询数据成员(已写),
修改数据成员(已写),
删除数据成员,
显示所有数据成员。
(如果可以再写个排序功能)
有没有能教会我接着写完后面两个,用文件流中最简单最基础的方法
vx2087714055

img

img

img

img

img

img

运行结果:

img

代码私下给你。

如果你需要的话,我之前写过一个c版本的,可以给你。

不清楚的可以问我,删除数据成员,显示所有数据成员。对应

img


//TelephoneBookMain.cpp文件
#include "Address.h"
#include "AddressBook.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
 
int MenuSelect(void);
int main()
{
    char g_choice;
    AddressBook g_maillist;
    for(;;)
    {
        //循环,直到键盘输入结束代码
        g_choice = MenuSelect();
        switch(g_choice)
        {
        case 1:
            g_maillist.Enter();
            break;
        case 2:
            g_maillist.Erase();
            break;
        case 3:
            g_maillist.List();
            break;
        case 4:
            g_maillist.Save();
            break;
        case 5:
            g_maillist.Load();
            break;
        case 6:
            exit(0);
        } 
    }
    return 0;
}
int MenuSelect(void)
{
    //显示主菜单
    char c;
    cout<<"******************************************"<<endl;
    cout<<"*     模拟电话薄       v1.0              *"<<endl;
    cout<<"*     1.添加通讯录                       *"<<endl;
    cout<<"*     2.删除通讯录                       *"<<endl;
    cout<<"*     3.显示通讯录                       *"<<endl;
    cout<<"*     4.电话薄存盘                       *"<<endl;
    cout<<"*     5.读出电话薄                       *"<<endl;
    cout<<"*     6.退出                             *"<<endl;
    cout<<"******************************************"<<endl;
    cout<<"请输入(1~6):"<<endl;
    do 
    {
        //键盘输入循环
        cin.get(c);
    } while (c < '1' || c > '6');
    return c - '0';
}
 
 
//Address.h文件
#ifndef ADDRESS_H
#define ADDRESS_H
 
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
// 通讯录类
class Address
{
 
public:
    Address(){m_status = true;}//构造时清空通讯录
    ~Address(){}
    string GetName() const; 
    string GetPhone() const;
    void Enter(string &name, string &phone); //输入通讯录
    bool IsEmptry();
    void Set();  //置通讯录状态0,非空
    void Clear();//置通讯录状态1,空
private:
    char m_name[31];
    char m_phone[21];
    bool m_status;  //通讯录状态,true表示空,false表示该通讯录已经被占用
};
 
#endif
 
 
//AddressBook.h文件
#ifndef   ADDRESS_BOOK_H
#define  ADDRESS_BOOK_H
 
#include "Address.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
 
const int ItemNum = 100;  //通讯录最大数量
//电话薄类
class AddressBook
{
public:
    AddressBook(){m_num = 0;}//构造函数,对象创建时通讯薄为空
    ~AddressBook(){}
    void Enter();   //输入通讯录条目
    void Erase();   //删除通讯录条目
    void Load();    //从文件中读取电话薄的内容
    void Save();    //电话薄存盘
    void List();    //显示电话薄的内容
private:
    int m_num;      //通讯录条目数
    Address Item[ItemNum]; //通讯录
    int FineFree(); //查找空的通讯录
};
 
#endif
 
 
//Address.cpp文件
#include "Address.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
 
string Address::GetName() const
{
    string s = m_name;
    return s;
}
 
string Address::GetPhone() const
{
    string s = m_phone;
    return s;
}
 
void Address::Enter(string &name, string &phone)
{
    int len = name.length();
    if (len > 30)   //输入超长时截断
    {
        len = 30;
    }
    name.copy(m_name, len, 0); 
    m_name[len] = 0;  //字符串结束符,把string转换成char*
    len = phone.length();
    if (len > 20)   //输入超长时截断
    {
        len = 20;
    }
    phone.copy(m_phone, len, 0);
    m_phone[len] = 0; //字符串结束符,把string转换成char*
}
 
bool Address::IsEmptry()
{
    return m_status;
}
 
void Address::Set()//置通讯录状态0,非空
{
    m_status = false;
}
 
void Address::Clear()//置通讯录状态1,空
{
    m_status = true;
}
 
 
//AddressBook.cpp文件

参考代码

#include<iostream>
#include<string>

using namespace std;

#define MAX 100        //通讯录最大人数

void showMenu();
void addPerson(struct addressList* adl);
void showLinkman(struct addressList* adl);
int isExist(struct addressList* adl, string name);
void deleteLinkman(struct addressList* adl);
void findLinkman(struct addressList* adl);
void modifyLinkman(struct addressList* adl);
void cleanList(struct addressList* adl);

//联系人结构体
struct linkman {
    string Name;    //姓名
    int Sex;        //性别 1代表男 2代表女
    int Age;        //年龄
    string PhoneNum;//电话号码
};

//通讯录结构体
struct addressList {
    struct linkman linkmanArray[MAX];    //联系人数组
    int list_Size = 0;                        //已存在联系人个数
};

int main()
{
    addressList adl;
    while (1) {
        showMenu();

        cout << "请输入您要进行的操作:  ";
        int choice = -1;
        cin >> choice;
        switch (choice) {
        case 1:        //1.添加联系人
            addPerson(&adl);
            break;
        case 2:        //2.显示联系人
            showLinkman(&adl);
            break;
        case 3:     //3.删除联系人
            deleteLinkman(&adl);
            break;
        case 4:        //4.查找联系人
            findLinkman(&adl);
            break;
        case 5:        //5.修改联系人
            modifyLinkman(&adl);
            break;
        case 6:        //6.清空联系人
            cleanList(&adl);
            break;
        case 0:        //0.退出系统
            system("pause");
            return 0;
            break;
        default:
            cout << "非法输入, 请重新输入!!" << endl;
            break;
        }
        system("pause");
        system("cls");
    }
    system("pause");
    return 0;
}

//现实操作菜单信息
void showMenu(){
    cout << "==========================" << endl;
    cout << "-----  1.添加联系人  -----" << endl;
    cout << "-----  2.显示联系人  -----" << endl;
    cout << "-----  3.删除联系人  -----" << endl;
    cout << "-----  4.查找联系人  -----" << endl;
    cout << "-----  5.修改联系人  -----" << endl;
    cout << "-----  6.清空联系人  -----" << endl;
    cout << "-----  0.退出系统    -----" << endl;
    cout << "==========================" << endl;
}

//添加联系人
void addPerson(struct addressList* adl) {
    if (adl->list_Size < MAX) {
        cout << "请输入联系人姓名:";
        cin >> adl->linkmanArray[adl->list_Size].Name;
        int sex = -1;
        cout << "1 - 男, 2 - 女";
        cout << "\n请输入联系人性别:";
        while (sex != 1 && sex != 2) {    //若输入不为1或2,则重新输入
            cin >> sex;
            if (sex == 1 || sex == 2) {
                adl->linkmanArray[adl->list_Size].Sex = sex;
            }
            else {
                cout << "输入不合法,请重新输入!" << endl;
            }
        }
        cout << "\n请输入联系人年龄:";
        cin >> adl->linkmanArray[adl->list_Size].Age;
        cout << "\n请输入联系人电话号码:";
        cin >> adl->linkmanArray[adl->list_Size].PhoneNum;

        cout << "\n新加联系人成功!!" << endl;
        adl->list_Size++;
    }
    else {
        cout << "通讯录已满,无法添加新联系人。" << endl;
    }
}

//显示通讯录
void showLinkman(struct addressList* adl) {
    if (adl->list_Size != 0) {
        for (int i = 0; i < adl->list_Size; i++) {
            cout << "\t姓名:" << adl->linkmanArray[i].Name
                << "\t\t性别:" << (adl->linkmanArray[i].Sex == 1 ? "男" : "女") 
                << "\t\t年龄:"<<adl->linkmanArray[i].Age
                << "\t\t电话号码:" << adl->linkmanArray[i].PhoneNum<<endl;
        }
    }
    else {
        cout << "通讯录为空!" << endl;
    }

}

//判断某姓名是否在通讯录中存在
int isExist(struct addressList* adl, string name) {
    int flag = -1;
    for (int i = 0; i < adl->list_Size;i++) {
        if (name == adl->linkmanArray[i].Name)
        {
            cout << "\t姓名:" << adl->linkmanArray[i].Name
                << "\t\t性别:" << (adl->linkmanArray[i].Sex == 1 ? "男" : "女")
                << "\t\t年龄:" << adl->linkmanArray[i].Age
                << "\t\t电话号码:" << adl->linkmanArray[i].PhoneNum << endl;
            flag = 1;
        }
    }
    return flag;
}

//删除联系人
void deleteLinkman(struct addressList* adl) {
    string name;
    cout << "请输入要删除的联系人姓名:" << endl;
    cin >> name;
    int ret = isExist(adl, name);
    if (ret == 1) {
        for (int i = 0; i < adl->list_Size; i++) {
            if (adl->linkmanArray[i].Name == name) {
                for (int j = i; j < adl->list_Size; j++) {
                    adl->linkmanArray[j] = adl->linkmanArray[j + 1];
                }
                adl->list_Size--;
                cout << "删除  "<<name<<"  成功" << endl;
            }
        }
    }
    else {
        cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
    }
}

//查找联系人
void findLinkman(struct addressList* adl) {
    string name;
    cout << "请输入要查找的联系人姓名:" << endl;
    cin >> name;
    int ret = isExist(adl, name);
    if (ret == 1) {
        for (int i = 0; i < adl->list_Size; i++) {
            if (adl->linkmanArray[i].Name == name) {
                cout << "查找完毕!" << endl;
            }
        }
    }
    else {
        cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
    }
}

//修改联系人信息
void modifyLinkman(struct addressList* adl) {
    string name;
    cout << "请输入要查找的联系人姓名:" << endl;
    cin >> name;
    int ret = isExist(adl, name);
    if (ret == 1) {
        for (int i = 0; i < adl->list_Size; i++) {
            if (adl->linkmanArray[i].Name == name) {
                int flag = -1;
                while(flag != 1){
                    cout << "\n\n请输入要修改信息编号:\t1 - 姓名  \n\t\t\t2 - 性别 \n\t\t\t3 - 年龄 \n\t\t\t4 - 电话 \n\t\t\t0 - 完成修改\n ";
                    int choice = -1;
                    cin >> choice;
                    switch (choice) {
                    case 1:
                        cout << "请输入新的联系人姓名:";
                        cin >> adl->linkmanArray[i].Name;
                        cout << "\n修改姓名成功!";
                        break;
                    case 2: {
                        int sex = -1;
                        cout << "1 - 男, 2 - 女";
                        cout << "\n请输入新的联系人性别:";
                        while (sex != 1 && sex != 2) {
                            cin >> sex;
                            if (sex == 1 || sex == 2) {
                                adl->linkmanArray[i].Sex = sex;
                                cout << "\n修改性别成功!";
                            }
                            else {
                                cout << "输入不合法,请重新输入!" << endl;
                            }
                        }
                    }
                        break;
                    case 3:
                        cout << "\n请输入新的联系人年龄:";
                        cin >> adl->linkmanArray[i].Age;
                        cout << "\n修改年龄成功!";
                        break;
                    case 4:
                        cout << "\n请输入新的联系人电话号码:";
                        cin >> adl->linkmanArray[i].PhoneNum;
                        cout << "\n修改电话号码成功!";
                        break;
                    case 0:
                        cout << "\n完成修改操作。";
                        flag = 1;
                        break;
                    default:
                        cout << "\n非法输入,请重新输入!";
                        break;
                    }
                }
            }
        }
    }
    else {
        cout << "不存在姓名为 - " << name << " - 的联系人!" << endl;
    }
}

//清空通讯录
void cleanList(struct addressList* adl) {
    int choice = -1;
    while(1){
        cout << "确定删除全部联系人信息吗?\t1 - yes \t0 - no\n";
        cin >> choice;
        if (choice == 1) {
            adl->list_Size = 0;    //做逻辑清空操作
            cout << "通信录已清空!" << endl;
            break;
        }
        else if (choice == 0) {
            cout << "取消删除全部联系人信息!" << endl;
            break;
        }
        else {
            cout << "非法输入,请重新输入!" << endl;
        }
    }
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img