| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:我的程序对联系人的修改部分不对,只要修改,以前的其他联系人信息就没有了 ...
只看楼主 加入收藏
随着心飞翔
Rank: 1
来 自:江苏南京
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-11-13
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:7 
我的程序对联系人的修改部分不对,只要修改,以前的其他联系人信息就没有了,请大家帮忙看看alter()函数那边的错误,谢谢啊
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
#include<cstdlib>
#include<ctime>
using namespace std;
class book
{
public:
    book();//默认构造函数
    char intface();//通讯录管理首页
    void addperson();//添加联系人
    void alter();//修改信息
    void delperson();//删除联系人
    void showall();//显示所有信息
    void savenew();//保存通讯录文件
       void show();//显示查询的类型
    void showA();//显示群组A
    void showB();//显示群组B
    void showC();//显示群组C
    void remind();//提醒生日
private:
    string name;//姓名
    string number;//电话
    string type;//类型
    string email;//电子信箱
    string birmonth;//出生月份
    string birday;//出生日
};


book::book()//构造函数
{
    name="\0";
    number="\0";
    type="\0";
    email="\0";
    birmonth="\0";
    birday="\0";
   
}
char book::intface()//通信录管理界面
{
    system("cls");
    cout<<"\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"<<endl
        <<"\t\t\t      通 信 录 管 理 系 统       "<<endl
        <<"\t\t\t                                 "<<endl
        <<"\t\t\t 1.添加新联系人  2.修改信息      "<<endl
        <<"\t\t\t                                 "<<endl
        <<"\t\t\t 3.删除联系人    4.查看联系人    "<<endl
        <<"\t\t\t                                 "<<endl
        <<"\t\t\t 5.关闭通信录    6.显示所有联系人"<<endl
        <<"\t\t\t                                 "<<endl
        <<"\t\t\t 0.退出系统                      "<<endl
        <<"\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"<<endl
        <<"\t\t\t  选择:";
    char choose;
    cin>>choose;
    fflush(stdin);
    return choose;//返回choose
}
void book::addperson()//添加新联系人
{
    cout<<endl<<"根据下面提示输入新联系人"<<endl<<endl
        <<"姓名:";
    cin>>name;
    fflush(stdin);
    cout<<"电话:";
    cin>>number;
    fflush(stdin);
    cout<<"类型(A:办公类B:个人类C:商务类):";
    cin>>type;
    fflush(stdin);
    cout<<"邮箱:";
    cin>>email;
    fflush(stdin);
    cout<<"生日:"<<endl;
    cout<<"\t"<<"月:";
    cin>>birmonth;
    fflush(stdin);
    cout<<"\t"<<"日:";
    cin>>birday;
    fflush(stdin);
    savenew();//保存进文件
    cout<<endl<<endl<<"新联系人以保存好!!!"<<endl<<endl;
    system("pause");
}

void book::alter()//修改信息记录
{
   
    ifstream infile("pbook.txt", ios::in);
   
    if (!infile)
    {
        cout <<endl <<"对不起不能打开文件!!!!!" <<endl <<endl;
        system("pause");                                
        return;
    }
    showall();
    string sign;
    cout <<endl <<"请输入你想要修改的联系人的姓名或电话号码 :";
    cin >>sign;
    fflush(stdin);
    bool flag=true;
   
    string str1;
   
    while (infile >>name >>number >>type//读出文件所有记录循环
        >>email>>birmonth>>birday)
    {
        getline(infile, str1);
      
        if ((name==sign) || (number==sign))
        {
            
                cout <<endl <<"你想修改你联系人的信息如下: " <<endl <<endl;
               
                cout <<setiosflags(ios::left) <<setw(17)
                    <<name <<" " <<setw(16) <<number
                    <<" " <<setw(10) <<type
                    
                    <<" " <<setw(18) <<email<< " " << setw(2)<<birmonth<<" "<<birday<<endl;
               
         
            cout <<endl <<"请根据下面提示修改信息 : " <<endl;
            cout <<"姓名  :" ;
            cin >>name;
            fflush(stdin);
            cout <<"电话:";
            cin >>number;
            fflush(stdin);
            cout <<"类型:";
            cin >>type;
            fflush(stdin);
            cout <<"邮箱:";
            cin >>email;
            fflush(stdin);
            cout<<"生日:"<<endl;
            cout<<"\t"<<"月:";
             cin>>birmonth;
            fflush(stdin);
            cout<<"\t"<<"日:";
            cin>>birday;
            fflush(stdin);
            flag = false;
            break;

        }break;
    }
   
    if (flag)
    {
        cout <<endl <<"你的通迅录中没有你找的联系人!!!!" <<endl <<endl;
        system("pause");
        return;
    }
    else
    {
        ofstream out("pbook.txt",ios::out);
        
        if (!out)
        {
            cout <<endl <<"对不起!!!不能打开文件!!!!" <<endl;
            system("pause");
            return;
        }
        
        out <<str1 <<endl;
        
        out <<setiosflags(ios::left) <<setw(17) <<name
        <<" " <<setw(16) <<number
        <<" " <<setw(10) <<type
        <<" " <<setw(18) <<email <<" "<<birmonth<<" "<<birday<<endl;
        out.close();
        cout <<endl <<"信息已经修改完成!!!!" <<endl <<endl;
        system("pause");
    }
}

void book::delperson()//删除文件里的联系人信息
{
    ofstream outfile("temp.txt",ios::out);//以写入打开文件
    ifstream infile("pbook.txt",ios::in);//以读出打开文件
    if(!outfile||!infile)
    {
        cout<<endl<<"文件不存在!!!"<<endl;
        system("pause");
        return ;
    }
    string sign;
    cout<<endl<<"你要删除的姓名或电话号:";
    cin>>sign;
   
    bool flag=true;
    string str;
    while(infile>>name>>number)//读入信息记录循环
    {
        getline(infile,str);//读入信息
        
        if((sign==name)||(sign==number))
        {
            cout<<endl<<"你想删除的联系人:"<<endl<<endl;
            
            cout<<setiosflags(ios::left)<<setw(17)<<name
                <<" "<<number<<str<<endl;
            flag=false;
            break;
        }
        outfile<<setiosflags(ios::left)<<setw(17)<<name<<
            " "<<number<<str<<endl;
    }
    if(flag)
    {
        cout<<endl<<"对不起!没有你要找的人!!!"<<endl<<endl;
    }
    else
    {
        while(getline(infile,str))
        {
            outfile<<str<<endl;
        }
        outfile.close();
        infile.close();
        
        ofstream out("pbook.txt",ios::out);
        ifstream in("temp.txt",ios::in);
        
        if(!out||!in)
        {
            cout<<endl<<"对不起不能打开文件!!!"<<endl<<endl;
            system("pause");
            return ;
        }
        while(getline(in,str))
        {
            out<<str<<endl;
        }
        out.close();
        in.close();
        cout<<endl<<"这个人的通讯信息已删除!!!"<<endl<<endl;
    }
    system("pause");
}




void book::showall()//显示所有人信息
{
    ifstream infile("pbook.txt",ios::in);
   
    if (!infile)
    {
        cout <<endl <<"对不起!文件找不到!" <<endl;
        system("pause");
        return;
    }
   
   
   
    string record;
    bool flag = true;
   
    while (getline(infile, record))
    {
        
        
        if (flag)
        {
            cout <<endl <<"所有人信息如下: " <<endl <<endl;
            
        }
        cout<<record<<endl;
        flag=false;
    }
    if(flag)
    {cout<<endl<<"通信录里没有联系人!"<<endl<<endl;}
    else
    {
        cout<<endl<<"所有人已全部显示出来!"<<endl;
    }
   
    system("pause");
}
void book::showA()//显示类型A
{
   
    ifstream infile("pbook.txt",ios::in);   
    if (!infile)
    {
        cout <<endl <<"对不起!文件找不到!" <<endl;
        system("pause");
        return;
    }   
    string sign;
    cout <<endl <<"输入你想查找的联系人的类型: ";
    cin >>sign;
    fflush(stdin);
    string str1;
    bool flag = true;   
    string str;
    while (infile>>name>>number>>type>>email>>birmonth>>birday)
    {
        getline(infile, str);        
        if (type==sign)
        {
           
            cout<<str1<<endl;
            cout <<setiosflags(ios::left)<< setw(17) << name
                <<" " << setw(16) << number <<" "
                << setw(10) << type<<" "        
                << setw(18) << email
                <<" "<<setw(2)<<birmonth<<" "<<birday<<str <<endl;
            flag = false;
            
        }
    }
    system("pause");
   
}
void book::showB()//显示类型B
{
    ifstream infile("pbook.txt",ios::in);
   
    if (!infile)
    {
        cout <<endl <<"对不起!文件找不到!" <<endl;
        system("pause");
        return;
    }
   
    string sign;
    cout <<endl <<"输入你想查找的联系人的类型: ";
    cin >>sign;
    fflush(stdin);
    string str1;
   
    bool flag = true;
   
    string str;
    while (infile>>name>>number>>type>>email>>birmonth>>birday)
    {
        getline(infile, str);
        
        if (type==sign)
        {
            cout <<endl  <<endl <<endl;
            cout<<str1<<endl;
            cout <<setiosflags(ios::left)<< setw(17) << name
                <<" " << setw(16) << number <<" "
                << setw(10) << type<<" "        
                << setw(18) << email <<" "<<setw(2)<<birmonth<<" "<<birday<<str <<endl;
            flag = false;
            break;
        }
    }
    system("pause");
}
void book::showC()//显示类型C
{
    ifstream infile("pbook.txt",ios::in);
   
    if (!infile)
    {
        cout <<endl <<"对不起!文件找不到!" <<endl;
        system("pause");
        return;
    }
   
    string sign;
    cout <<endl <<"输入你想查找的联系人的类型:C ";
    cin >>sign;
    fflush(stdin);
    string str1;
   
    bool flag = true;
   
    string str;
    while (infile>>name>>number>>type>>email>>birmonth>>birday)
    {
        getline(infile, str);
        
        if (type==sign)
        {
            cout <<endl  <<endl <<endl;
            cout<<str1<<endl;
            cout <<setiosflags(ios::left)<< setw(17) << name
                <<" " << setw(16) << number <<" "
                << setw(10) << type<<" "        
                << setw(18) << email <<" "<<setw(2)<<birmonth<<" "<<birday<<str <<endl;
            flag = false;
            break;
        }
    }
    system("pause");
}
void book::show()//显示同一类函数
{
    char ch1;
    cout<<"你想输出哪一类信息:"<<endl;
    cout<<"A:办公类   "<<"B:个人类   "<<"C:商务类   "<<endl;
    cout<<"请选择:"<<endl;
    cin>>ch1;
    switch(ch1)
    {
    case 'A':showA(); break;
    case 'B':showB(); break;
    case 'C':showC(); break;
    default:cout<<"ERROR!"<<endl;
    }
}
void book::savenew()//保存入录的信息
{
    ofstream outfile("pbook.txt", ios::app);
   
    if (!outfile)
    {
        cout <<endl <<"打开文件失败!" <<endl <<endl;
        system("pause");
        return;
    }
   
    outfile << setiosflags(ios::left) << setw(17) << name
        <<" " << setw(16) << number <<" "
        << setw(10) << type<<" "        
        << setw(18) << email<<" "<<setw(2)<<birmonth<<""<<birday <<endl;
   
    outfile.close();//关闭文件
}
void book::remind()  //生日提醒
{
    tm *month;
    tm *day;
    time_t t;
    t = time(0);
    month = localtime(&t);
    day = localtime(&t);
    int a,b;
    a=month->tm_mon+1;
    b=day->tm_mday;
    char s[5];
    sprintf(s,"%d",a);
    char m[20];
    sprintf(m,"%d",b);
    ifstream infile("pbook.txt",ios::in);
   
    if (!infile)
    {
        cout <<endl <<"对不起!文件找不到!" <<endl;
        system("pause");
        return;
    }
    bool flag=true;
    string str;
    while(infile>>name>>number>>type>>email>>birmonth>>birday)
    {
        getline(infile,str);
        
        if(birmonth==s&&birday==m)
        {
            cout<<"今天是"<<name<<"的生日"<<endl;
            flag=false;
            break;
        }
    }
}
enum power{ADD = '1',Alter= '2', DEL = '3' , //通信系统菜单选项定义
Search = '4', END = '5',SHOWALL='6',EXIT='0'};
enum power1{LOG='1',CRE='2',QUIT='0'};//登录系统菜单选项定义
int main()//主函数
{
    system("color 57");
    char choose;
    book abj;
    abj.remind();
    cout<<system("time")<<system("date")<<endl;
    abj.remind();
    system("cls");
    while (choose = abj.intface())
    {
        switch (choose)
        {
            case ADD:
                abj.addperson();
                break;
            case Alter:
                abj.alter();        
                break;
            case DEL:
                abj.delperson();
                break;
            case Search:
                abj.show();
                break;
            case SHOWALL:
                abj.showall();
                break;
            case QUIT:
                cout <<endl <<"谢谢使用!!!!!" <<endl <<endl;
                exit(0);
                break;
            default:
                break;
        }
    }      
    return 0;
}
搜索更多相关主题的帖子: void include 联系人 public 
2013-04-23 14:22
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
膜拜大作。

My life is brilliant
2013-04-23 14:26
随着心飞翔
Rank: 1
来 自:江苏南京
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-11-13
收藏
得分:0 
回复 2楼 lz1091914999
可以帮忙看看吗
2013-04-23 14:28
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:20 
厉害的,这么长。你的那个问题请看文件流操作,注意你用的是文件流而不是文件操作,你能保证你写入文件的那个位置是正确的不。你的向文件写的那个操作,就把文件以前的所有数据清空了,再把你最后修改的的信息写进去。所以了结果就是那个样子了,可以考虑把内存的数据再给它写回去。这是个笨办法,其他的方法就是要保证你写回去之前不能清空文件,再深入研究文件流的定位操作吧,错了别介意。实在不行换文件操作。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-23 21:16
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:5 
同意楼上的,或者搞个本地数据库存储数据?
2013-04-24 08:39
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
文件流操作的覆盖吧

Maybe
2013-04-24 09:58
随着心飞翔
Rank: 1
来 自:江苏南京
等 级:新手上路
帖 子:11
专家分:5
注 册:2012-11-13
收藏
得分:0 
回复 6楼 邓士林
我文件这边学的不算行,可以帮忙改改吗,想了很久都没有改成功
2013-04-24 18:59
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:10 
笨的办法就是把全部的联系人信息读入到内存中
然后找到你需要修改的联系人,修改相关信息,然后再把内存中的所有数据写回到文件中
2013-04-25 12:55
快速回复:我的程序对联系人的修改部分不对,只要修改,以前的其他联系人信息就没 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031236 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved