对于一个结构体,如何能在执行程序后将其存储起来,下次执行程序时可以继续调用(修改)

以下是我写的一个通讯录,但是它的使用仅限于一次程序执行,如何每次执行都可以使用之前的数据
//Book.h
#include
using namespace std;
constexpr auto Max = 500;

//定义联系人的结构体
struct person
{
string name;
double age = 0;
string phone;
string address;
int sex = 0;
};

//定义通讯录数组
struct adds
{
person presonarray[Max];
int size = 0;
};
class interface
{

};

//定义工具类
class tool
{
public:int is_number(string x);
double change(string x);

};

//定义通讯本

class address_book
{
public:
int compare(string name);
void showmenu(); //显示菜单
void add(); //添加联系人
void show_contacts(); //显示联系人
void seek(); //查找联系人
void revise(); //修改联系人
void all_clear(); //清空所有联系人
void delete_person(); //删除联系人
adds a;
};

//Book.cpp
#include"Book.h"

int address_book::compare(string name)
{
for (int i = 0; i < a.size; i++)
{
if (a.presonarray[i].name == name)
{
return i;
}
}
return -1;
}

//显示菜单
void address_book::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 address_book::add()
{
tool tool;
cout << "请输入联系人的姓名:" << endl;
string name;
cin >> name;
a.presonarray[a.size].name = name;
string age;
double num = 0;
do
{
cout << "年龄(输入正整数):" << endl;
cin >> age;
int x = tool.is_number(age);
if (x == 1)
{
break;
}
else
{
cout << "输入有误,请输入正整数" << endl;
}
} while (true);
num = tool.change(age);
a.presonarray[a.size].age = num;
while (true)
{
cout << "性别: 1、男 2、女(输入数字)" << endl;
int sex = 0;
cin >> sex;
if (sex == 1 || sex == 2)
{
a.presonarray[a.size].sex = sex;
break;
}
else
{
cout << "输入有误请重新输入" << endl;
}
}
cout << "电话:" << endl;
string phone;
cin >> phone;
a.presonarray[a.size].phone = phone;
cout << "地址" << endl;
string address;
cin >> address;
a.presonarray[a.size].address = address;
a.size++;
cout << "添加成功" << endl;
system("pause");
system("cls");
}

//显示联系人
void address_book::show_contacts()
{
if (a.size == 0)
{
cout << "暂无联系人" << endl;
system("pause");
system("cls");
}
else
{
for (int i = 0; i < a.size; i++)
{
cout << "姓名:" << a.presonarray[i].name << "\t";
cout << "年龄:" << a.presonarray[i].age << "\t";
cout << "性别:" << (a.presonarray[i].sex == 1 ? "男" : "女") << "\t";
cout << "电话:" << a.presonarray[i].phone << "\t";
cout << "地址:" << a.presonarray[i].address << endl;
}
system("pause");
system("cls");
}

}

//查找联系人
void address_book::seek() {
string name;
cout << "请输入查找联系人的姓名:" << endl;
cin >> name;
if (compare(name) == -1) {
cout << "查无此人" << endl;
system("pause");
system("cls");
}
else {
cout << "姓名" << a.presonarray[compare(name)].name << "\t";
cout << "年龄:" << a.presonarray[compare(name)].age << "\t";
cout << "性别:" << (a.presonarray[compare(name)].sex == 1 ? "男" : "女") << "\t";
cout << "电话:" << a.presonarray[compare(name)].phone << "\t";
cout << "地址:" << a.presonarray[compare(name)].address << endl;
system("pause");
system("cls");
}
}

//修改联系人的信息
void address_book::revise()
{
cout << "请输入需要修改联系人的姓名:" << endl;
string name;
cin >> name;
int ret = compare(name);
if (ret == -1) {
cout << "查无此人" << endl;
}
else {
cout << "姓名" << a.presonarray[compare(name)].name << "\t";
cout << "年龄:" << a.presonarray[compare(name)].age << "\t";
cout << "性别:" << (a.presonarray[compare(name)].sex == 1 ? "男" : "女") << "\t";
cout << "电话:" << a.presonarray[compare(name)].phone << "\t";
cout << "地址:" << a.presonarray[compare(name)].address << endl;
cout << "请输入联系人的姓名:" << endl;
string name;
cin >> name;
a.presonarray[ret].name = name;
cout << "年龄:" << endl;
int age = 0;
cin >> age;
a.presonarray[ret].age = age;
while (true)
{
cout << "性别: 1、男 2、女" << endl;
int sex = 0;
cin >> sex;
if (sex == 1 || sex == 2) {
a.presonarray[ret].sex = sex;
break;
}
else {
cout << "输入有误请重新输入" << endl;
}
}
cout << "电话:" << endl;
string phone;
cin >> phone;
a.presonarray[ret].phone = phone;
cout << "地址" << endl;
string address;
cin >> address;
a.presonarray[ret].address = address;
cout << "修改成功" << endl;
system("pause");
system("cls");

}

}

//清除所有联系人
void address_book::all_clear() {
for (int i = 0; i < a.size; i++) {
a.presonarray[i] = a.presonarray[a.size];
}
a.size = 0;
cout << "清除成功" << endl;
system("pause");
system("cls");
}

//删除选中的联系人
void address_book::delete_person() {
cout << "请输入要删除的联系人姓名:" << endl;
string name;
cin >> name;
if (compare(name) == -1) {
cout << "查无此人" << endl;
}
else {
for (int i = compare(name); i < a.size; i++) {
a.presonarray[i] = a.presonarray[i + 1];
}
cout << "删除成功" << endl;
a.size--;
}
system("pause");
system("cls");

}
//判断字符串是否全部由数字组成
int tool::is_number(string x) {
int n = 0;
n = x.length();
int a = 0;
for (int i = 0; i < n; i++) {
if (x[i] >= '0' && x[i] <= '9') {
a++;
}
}
if (a == n) {
return 1;
}
else {
return 0;
}
}

//将字符串变为整形
double tool::change(string x) {
double n = x.length();
double num = 0;
for (int i = 0; i < n; i++) {
num += ((double)x[i] - 48) * pow(10, n - i - 1);
}
return num;
}

//main.cpp
#include"Book.h"
int main()
{
address_book b;
tool tool;
while (true)
{
b.showmenu();
string select;
cin >> select;
int select1 = (int)tool.change(select);
switch (select1)
{
case 1:
b.add();
break;
case 2:
b.seek();
break;
case 3:
b.show_contacts();
break;
case 4:
b.delete_person();
break;
case 5:
b.revise();
break;
case 6:
b.all_clear();
break;
case 0:
system("cls");
b.showmenu();
cout << "欢迎下次使用" << endl;
return 0;
default:
cout << "请输入0~6之间的整数" << endl;
system("pause");
system("cls");
break;
}
}
return 0;
}



给你看看我之前写的管理系统里面的保存类信息吧:

class Student//学生类
{
public:
    string id;//定义见下面的show
    string name;
    string sex;
    string cl;
    string native;
    string birthday;
    string hobby;
    string family;
    string address;

    void input(string i, string n, string s, string c, string _native, string b, string h, string f, string _address)//设置类的变量
    {
        id = i;
        name = n;
        sex = s;
        cl = c;
        native = _native;
        birthday = b;
        hobby = h;
        family = f;
        address = _address;
    }

    void show()
    {
        cout << "学号:" << id 
            << " 姓名:" << name 
            << " 性别:" << sex 
            << " 班级:" << cl 
            << " 籍贯:" << native 
            << " 生日:" << birthday 
            << " 爱好:" << hobby 
            << " 家庭状况:" << family 
            << " 住址:" << address << endl;
    }

    void input(ifstream & is)//从文件读取
    {
        is >> id >> name >> sex >> cl >> native >> birthday >> hobby >> family >> address;
    }

    void output(ofstream & os)//写入文件
    {
        os << id
            << " " << name
            << " " << sex 
            << " " << cl 
            << " " << native 
            << " " << birthday 
            << " " << hobby 
            << " " << family 
            << " " << address 
            << endl;
    }

};

之后调用这个类时候,读写信息在这里:

    void save(string filename)//保存文件
    {
        ofstream write(filename.c_str(), ios::out);
        write << m_count << endl;//
        for (int i = 0; i < m_count; i++)
        {
            m_student[i].output(write);
        }

        write.close();
    }

    void load(string filename)//读取文件
    {
        ifstream read(filename.c_str(), ios::in);
        if (read.peek() == EOF)
        {
            read.close();
            return;
        }

        read >> m_count;
        for (int i = 0; i < m_count; i++)
        {
            m_student[i].input(read);
        }

        read.close();
    }

你可以学一下C++文件的输入,输入
把你的程序的执行的最后的结果,每一次结束使用前保存数据到文本中,
每次调用时,把文件里之前的记录存到到结构体中,
这样,就可以调用以前的了。

修改的话,要有相应的修改函数,进行数据的修改

用 ifstream和ofstream,前者类似cin >>,从文件中读取,后者类似 cout <<,可以保存到文件中

https://www.jianshu.com/p/80f69758af5d