文件内容的读入和写入

这个信息管理系统,怎么每次退出程序后,再打开就无法在查询上次写入的内容了,好像没有将文件的内容读入到程序中,这怎么弄啊,而且打开文件后,是乱码,搞了好久就是弄不好。

#include 
#include 
#include 
#define N 50
using namespace std;

typedef struct data
{
    char num[20];
    char name[20];
    char sex[20];
    char profession[20];
    char clas[20];
    char apartment_num[20];
    char origin[20];
    char telephone_num[20];
    char QQ_num[20];
    char WeChat_num[20];
}ST;

void mainmenu();//显示主菜单
void save(ST stu[],int n);//将程序数据写入文件
int add_person(ST stu[],int n);//添加联系人
void search_person(ST stu[],int n);//查询联系人
int delete_person(ST stu[],int n);//删除联系人
int revise_information(ST stu[],int n);//修改联系人信息
void put_person_list(ST stu[],int n);//输出联系人列表
void sort_num(ST stu[],int n);//按学号排序

int main()
{
    ST stu[N];
    FILE *fp;
    int n=0,m;
    if((fp=fopen("stu.txt","ab+"))!=NULL)//打开文件
            fread(stu,sizeof(ST),N,fp);
    else
         cout<<"error opening file "<fclose(fp);
    mainmenu();
    while(1)
    {
        char chioce;
        cin>>chioce;//输入需要进行的操作
        if(chioce<'a'||chioce>'h')
        {
            cout<<"输入错误"<"请输入操作:";
            continue;
        }
            switch(chioce)//菜单操作选项
            {
                case 'a':   m=add_person(stu,n);
                            n=n+m;
                            save(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'b':   search_person(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'c':   delete_person(stu,n);
                            n--;
                            save(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'd':   revise_information(stu,n);
                            save(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'e':   put_person_list(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'f':   sort_num(stu,n);
                            cout<<"请输入操作:";
                            break;
                case 'g':   save(stu,n);
                            exit(0);
                            break;
                case 'h':   mainmenu();
                            cout<<"请输入操作:";
                            break;

                }
        }
    return 0;
}
void save(ST stu[],int n)//将程序数据写入文件
{
    FILE *fp;
    if((fp=fopen("stu.txt","ab+"))!=NULL)
            fwrite(stu,sizeof(ST),n,fp);
    else
    {
        cout<<"error opening file"<exit(0);
    }
    fclose(fp);
}
void mainmenu()//显示主菜单
{
    cout<<"\t"<<"\t"<<"\t"<<"                         个人通讯录管理系统                "<"\t"<<"\t"<<"\t"<<"    **************************功能菜单**************************"<"\t"<<"\t"<<"\t"<<"    *----------------------------------------------------------*"<"\t"<<"\t"<<"\t"<<"    *    a.添加联系人       ************     b.查询联系人      *"<"\t"<<"\t"<<"\t"<<"    *----------------------------------------------------------*"<"\t"<<"\t"<<"\t"<<"    *    c.删除联系人       ************     d.修改联系人信息  *"<"\t"<<"\t"<<"\t"<<"    *----------------------------------------------------------*"<"\t"<<"\t"<<"\t"<<"    *    e.输出联系人列表   ************     f.按学号排序      *"<"\t"<<"\t"<<"\t"<<"    *----------------------------------------------------------*"<"\t"<<"\t"<<"\t"<<"    *    g.保存并退出程序   ************     h.显示主菜单      *"<"\t"<<"\t"<<"\t"<<"    *----------------------------------------------------------*"<"\t"<<"\t"<<"\t"<<"    ************************************************************"<" "<"\t"<<"\t"<<"\t"<<"    请选择操作:";
}

int add_person(ST stu[],int n)//添加联系人
{
    int i,find=0;
    int x;
    char addnum[20];
    cout<<"请输入要添加学生信息人数:";
    cin>>x;
    for(int j=0;j"请输入要添加学生的学号:";
        cin>>addnum;
        for(i=0;iif(strcmp(addnum,stu[i].num)==0)
            {
                cout<<"学号输入重复,请重新输入"<1;
                return 0;
            }
        }
        if(find==0)
        {
            cout<<"学号输入不重复,请添加信息:"<"请输入学号:";
            cin>>stu[j].num;
            cout<<"输入名字:";
            cin>>stu[j].name;
            cout<<"输入性别:";
            cin>>stu[j].sex;
            cout<<"输入专业:";
            cin>>stu[j].profession;
            cout<<"输入班级:";
            cin>>stu[j].clas;
            cout<<"输入宿舍号:";
            cin>>stu[j].apartment_num;
            cout<<"输入籍贯:";
            cin>>stu[j].origin;
            cout<<"输入手机号:";
            cin>>stu[j].telephone_num;
            cout<<"输入QQ号:";
            cin>>stu[j].QQ_num;
            cout<<"输入微信号:";
            cin>>stu[j].WeChat_num;
            cout<<"添加信息成功"<return x;
}
void search_person(ST stu[],int n)//查询联系人
{
        char search_num[20];
        int i,find=0;
        cout<<"请输入要查询学生学号:";
        cin>>search_num;
        for(i=0;iif(strcmp(search_num,stu[i].num)==0)
            {
                find=1;
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<"\t";
                cout<if(find==0)
            cout<<"输入学号不存在,请重新输入"<int delete_person(ST stu[],int n)//删除联系人
{
    char delete_num[20];
    int i,find=0;
    cout<<"请输入要删除学生的学号:";
    cin>>delete_num;
    for(i=0;iif(strcmp(delete_num,stu[i].num)==0)
        {
            find=1;
            break;
        }
    }
    if(find==0)
    {
        cout<<"输入学号不存在,请重新输入"<else
    {
        for(int j=i;j-1;j++)
            stu[j]=stu[j+1];
 //       save(stu,n);
        cout<<"删除学生信息成功"<return 1;
    }
}
int revise_information(ST stu[],int n)//修改联系人信息
{
    char revise_num[20];
    int i,find=0;
    cout<<"请输入要修改的学号:";
    cin>>revise_num;
    for(i=0;iif(strcmp(revise_num,stu[i].num)==0)
        {
            find=1;
            cout<<"请依次输入您要更改学生的学号、姓名、性别、专业、班级、宿舍号、籍贯、手机号、QQ号、微信号"<"学号:";
            cin>>stu[i].num;
            cout<<"姓名:";
            cin>>stu[i].name;
            cout<<"性别:";
            cin>>stu[i].sex;
            cout<<"专业:";
            cin>>stu[i].profession;
            cout<<"班级:";
            cin>>stu[i].clas;
            cout<<"宿舍号:";
            cin>>stu[i].apartment_num;
            cout<<"籍贯:";
            cin>>stu[i].origin;
            cout<<"电话号码:";
            cin>>stu[i].telephone_num;
            cout<<"QQ号:";
            cin>>stu[i].QQ_num;
            cout<<"微信号:";
            cin>>stu[i].WeChat_num;
            cout<<"信息修改完毕"<return 1;
        }
    }
    if(find==0)
    {
        cout<<"学号输入错误,请重新输入"<return 0;

    }
 //   save(stu,n);
}
void put_person_list(ST stu[],int n)//显示通讯录
{
    cout<<"显示通讯录"<for(int i=0;i"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<void sort_num(ST stu[],int n)//按学号排序
{
    ST temp;
    for(int i=0;ifor(int j=i+1;jif(strcmp(stu[i].num,stu[j].num)>0)
            {
                temp=stu[i];
                stu[i]=stu[j];
                stu[j]=temp;
            }
        }
    }
    for(int k=0;k"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<"\t";
        cout<

img


你这只是打开文件把数据复制到了进程的内存空间中,然后就关闭文件了
你的所有修改都是改的进程内存空间中的数据,根本没有写入到文件中。