通訊錄管理程序

#include <iostream.h>

#include <fstream>

#include <string.h>

#include <sstream>

using namespace std; 

 

//定義文件名

#define FileName "data.txt"

 

//定義循環變量

bool mVal=true;    

 

//定義個新的變量

typedef string mData;

typedef char mChar[50];

//定義一個CrmCperson結構體

typedef struct CrmCperson 

{

   struct CrmCperson *lplink;

   string mName;

   string mpNumber;

   string mhAddress; 

   string mhZip;

}msData;

 

msData *Data;

 

class Crm

{

public:

    Crm();

    AddData(mData mName,mData mpNumber,mData mhAddress,mData mhZip );  //添加用戶

    FindData(mData mName);

    RevData(mData mName);

    DelData(mData mName);

    myWhile();

    ShowData();

    ~Crm();

};

 

class CrmFile

{

public:

    CrmFile();

    GetData();

    SavaData(msData& mymsData);

    UpDateData(void);

    ~CrmFile();

};

 

CrmFile::CrmFile()

{}

 

 

CrmFile::GetData()

{

    msData *mymsData=new msData;

    //msData *myothermsData=new msData; 放這裏會出錯,放下面

 

    Data=mymsData;     //保存基址指針

    fstream myfile(FileName);

 

    string str[4];

    while(!myfile.eof()){

      for(int j=0;j<4;j++){

              getline(myfile,str[j]);

      }

      msData *myothermsData=new msData;   //這裏是關鍵位置,不然地址不能更新,會出錯

      mymsData->mName=str[0];

      mymsData->mpNumber=str[1];

      mymsData->mhAddress=str[2];

      mymsData->mhZip=str[3];

      mymsData->lplink=myothermsData;

      mymsData=myothermsData;

    }

    mymsData->lplink=NULL;   //設置鏈表尾爲NULL

    

    myfile.close();

 

}

CrmFile::SavaData(msData& mymsData)  //保存數據到文件

{

    fstream myfile;

    myfile.open(FileName,ios_base::out|ios_base::app);  //以追加方式打開文件

    myfile<<mymsData.mName<<endl;  

    myfile<<mymsData.mpNumber<<endl;

    myfile<<mymsData.mhAddress<<endl;

    myfile<<mymsData.mhZip<<endl;

    myfile.close();

}

 

CrmFile::UpDateData(void)  //更新到文件

{

    msData *mymsData=new msData;  

    mymsData=Data;        //基址指針

 

    fstream myfile;

    myfile.open(FileName,ios_base::out); //打開文件

 

    while(mymsData!=NULL){        //更新數據

         myfile<<mymsData->mName<<endl;

         myfile<<mymsData->mpNumber<<endl;

         myfile<<mymsData->mhAddress<<endl;

         myfile<<mymsData->mhZip<<endl;   

         mymsData=mymsData->lplink;

    }

    myfile.close();

 

 

}

 

 

 

CrmFile::~CrmFile()

{}

 

 

Crm::Crm()

{}

 

 

Crm::AddData(mData mName,mData mpNumber,mData mhAddress,mData mhZip )  //添加用戶

{

    msData mymsData;

 

    mymsData.mName=mName;

    mymsData.mpNumber=mpNumber;

    mymsData.mhAddress=mhAddress;

    mymsData.mhZip=mhZip;

 

    CrmFile myCrmFile;

    myCrmFile.SavaData(mymsData);  //調用CrmFile類中的SavaData函數保存數據

 

 

}

 

Crm::FindData(mData mName)  //查找用戶

{

    CrmFile myCrmFile;

    myCrmFile.GetData();   //讀取文件內容到鏈表

 

    msData *mymsData=new msData;  

    mymsData=Data;        //基址指針

 

    while(mymsData!=NULL){

      if(mName==mymsData->mName){

         cout<<"姓名"<<"  ";

         cout<<"聯繫號碼"<<"  ";

         cout<<"聯繫地址"<<"  ";

         cout<<"郵編"<<endl;    

         cout<<mymsData->mName.c_str()<<"  ";

         cout<<mymsData->mpNumber.c_str()<<"  ";

         cout<<mymsData->mhAddress.c_str()<<"  ";

         cout<<mymsData->mhZip.c_str()<<endl;     

         break;

      }

      mymsData=mymsData->lplink;

    }

 

 

}

 

Crm::RevData(mData mName)

{

    CrmFile myCrmFile;

    myCrmFile.GetData();   //讀取文件內容到鏈表

 

    msData *mymsData=new msData;

    mymsData=Data;      //基址指針

 

    mChar mystr[3];

    while(mymsData!=NULL){    

      if(mymsData->mName==mName){     //判斷在鏈表的位置

          mymsData->mName=mName;

          cin>>mystr[0];

          mymsData->mpNumber=mystr[0];

          cin>>mystr[1];

          mymsData->mhAddress=mystr[1];

          cin>>mystr[2];

          mymsData->mhZip=mystr[2];       

          myCrmFile.UpDateData();          //調用更新數據到文件

          cout<<"修改成功"<<endl;

          return 0;

      }

      mymsData=mymsData->lplink;

    }

          cout<<"修改失敗,用戶不存在!"<<endl;

 

}

 

Crm::DelData(mData mName)

{

    CrmFile myCrmFile;

    myCrmFile.GetData();   //讀取文件內容到鏈表

 

    msData *mymsData=new msData;

    msData *myotherData=new msData;

    mymsData=Data;      //基址指針

 

 

    while(mymsData!=NULL){    

      if(mymsData->mName==mName){     //判斷在鏈表的位置

          if(mymsData==Data){

              Data=mymsData->lplink;

          }else{

              myotherData->lplink=mymsData->lplink;   //刪除節點

          }

          myCrmFile.UpDateData();          //調用更新數據到文件  

          cout<<"刪除成功"<<endl;

          return 0;

      }

      myotherData=mymsData;

      mymsData=mymsData->lplink;

    }

          cout<<"刪除失敗,用戶不存在!"<<endl;

 

 

 

}

 

 

Crm::myWhile()   //判斷是否繼續循環輸入

{       

    cout<<"繼續y,任意退出"<<endl;

    if(getchar()=='y'){

            mVal=true;

    }else{

            mVal=false;

    }

    getchar();  //取回車

}

 

 

 

Crm::ShowData()

{

    CrmFile myCrmFile;

    myCrmFile.GetData();

 

    msData *mymsData=new msData;  

    mymsData=Data;        //基地指針

 

    cout<<"姓名";

    cout<<"   ";

    cout<<"電話號碼";

    cout<<"    ";

    cout<<"聯繫地址";

    cout<<"    ";

    cout<<"郵編";   

    cout<<endl;   

 

    //編歷鏈表顯示數據

    while(mymsData!=NULL){

         cout<<mymsData->mName.c_str();

         cout<<"  ";       

         cout<<mymsData->mpNumber.c_str();

         cout<<"  ";

         cout<<mymsData->mhAddress.c_str();

         cout<<"  ";

         cout<<mymsData->mhZip.c_str();   

         cout<<endl;

         mymsData=mymsData->lplink;

    }

    

}

 

 

Crm::~Crm()

{}

 

int main()

{

 

    cout<<"Communications Recorded Management(通訊錄管理程序)"<<endl;

    cout<<"**************************************************"<<endl;

    cout<<"1)添加用戶         2)查找用戶         3)修改記錄  "<<endl;

    cout<<"4)刪除記錄         5)顯示記錄         6)裝入數據  "<<endl;

    cout<<"**************************************************"<<endl;

 

    Crm myCrm;

    CrmFile myCrmFile;

 

 

 

 

    while(mVal){   //循環重複輸入

 

    cout<<"輸入序號:(1~6)"<<endl;

    int x;

    cin>>x;

    switch(x){

    case 1:{

        cout<<"添加用戶"<<endl;

        cout<<"格式:姓名(回車)聯繫號碼(回車)聯繫地址(回車)郵編"<<endl;

        mChar mymChar[4];

        for(int i=0;i<4;i++){

            cin>>mymChar[i];

        }

        myCrm.AddData(mymChar[0],mymChar[1],mymChar[2],mymChar[3]);

        myCrm.myWhile();

        break;

    }   

    case 2:{

        cout<<"查找用戶,請輸入姓名:"<<endl;

        mChar mymChar;

        cin>>mymChar;

        myCrm.FindData(mymChar);

        myCrm.myWhile();

        break;

    }

    case 3:{

        cout<<"修改記錄,請輸入姓名:"<<endl;

        mChar mymChar;

        cin>>mymChar;

        myCrm.RevData(mymChar);

        myCrm.myWhile();

        break;

    }

    case 4:{

        cout<<"刪除記錄,請輸入姓名:"<<endl;

        mChar mymChar;

        cin>>mymChar;

        myCrm.DelData(mymChar);

        myCrm.myWhile();

        break;

    }

    case 5:{

        cout<<"顯示記錄"<<endl;

        myCrm.ShowData();

        myCrm.myWhile();

        break;

    }

    case 6:{

        cout<<"裝入數據"<<endl;

        myCrmFile.GetData();

        myCrm.myWhile();

        cout<<"裝入數據成功!"<<endl;

        break;

    }

    default:{

        cout<<"輸入不正確(1~6)"<<endl;

        myCrm.myWhile();

        break;

    }

    }

         

    }

    cout<<"成功退出!感謝使用!再見!"<<endl;

    return 0;

 

}

 

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章