用C++实现手机通讯录(好的再加分!)

用C++实现手机通讯录(好的再加分!),第1张

#include<iostream>

#include<string>

#include<iomanip>

#include<fstream>

using namespace std;

class CData

{

public:

CData(){};

virtual int Compare(CData &)=0;

virtual void Show()=0;

virtual ~CData(){};

};

class CNode

{

private:

CData pData;

CNode pNext;

public:

CNode(){pData=0;pNext=0;};

CNode(CNode &node)

{

pData=nodepData;

pNext=nodepNext;

}

void InputData(CData pdata){pData=pdata;}

void ShowNode(){pData->Show();}

CData GetData(){return pData;}

friend class CList;

};

class CList

{

CNode pHead;

public:

CList(){pHead=0;}

~CList(){DeleteList();}

void AddNode(CNode pnode);

CNode DeleteNode(CNode );

CNode LookUp(CData&);

void ShowList();

void DeleteList();

CNodeGetListHead(){return pHead;}

CNodeGetListNextNode(CNodepnode);

};

CNodeCList::GetListNextNode(CNode pnode)

{

CNodep1=pnode;

return p1->pNext;

};

void CList::AddNode(CNodepnode)

{

if(pHead==0)

{

pHead=pnode;

pnode->pNext=0;

return;

}

else

{

pnode->pNext=pHead;

pHead=pnode;

}

};

CNodeCList::DeleteNode(CNodepnode)

{

CNode p1,p2;

p1=pHead;

while(p1!=pnode&&p1->pNext!=0)

{

p2=p1;

p1=p1->pNext;

}

if(p1==pHead)

{

pHead=pHead->pNext;

return pnode;

}

p2->pNext=p1->pNext;

return pnode;

}

CNode CList::LookUp(CData&data)

{

CNodep1=pHead;

while(p1)

{

if(p1->pData->Compare(data)==0)

return p1;

p1=p1->pNext;

}

return 0;

}

void CList::ShowList()

{

CNodep1=pHead;

while(p1)

{

p1->pData->Show();

p1=p1->pNext;

}

}

void CList::DeleteList()

{

CNode p1,p2;

p1=pHead;

while(p1)

{

delete p1->pData;

p2=p1;

p1=p1->pNext;

delete p2;

}

}

class CTelRecord:public CData

{

private:

char szNumber[20];

char szName[20];

char szAddres[20];

public:

CTelRecord(){strcpy(szNumber,"\0");strcpy(szName,"\0");strcpy(szAddres,"\0");}

CTelRecord(char number,char name,char addres=NULL)

{

strcpy(szNumber,number);

strcpy(szName,name);

strcpy(szAddres,addres);

}

void SetRecord(charnumber,char name,charaddres)

{

strcpy(szNumber,number);

strcpy(szName,name);

strcpy(szAddres,addres);

}

int Compare(CData &);

void Show();

};

int CTelRecord::Compare(CData &data)

{

CTelRecord &temp=(CTelRecord &)data;

return strcmp(szNumber,tempszNumber);

strcmp(szAddres,tempszAddres);

}

void CTelRecord::Show()

{

cout<<setw(15)<<szAddres<<setw(15)<<szNumber<<setw(15)<<szName<<endl;

}

void AddRecord(CList&TelList)

{

CNode pNode;

CTelRecord pTel;

char szName[20],szNumber[20],szAddres[20];

cout<<"输入电话号码(输入0结束):";

cinignore();

cingetline(szNumber,20);

while(strcmp(szNumber,"0"),strcpy(szAddres,"0"))

{

cout<<"输入姓名:";

cout<<"输入地址:";

cingetline(szName,20);

cingetline(szAddres,20);

pTel=new CTelRecord;

pTel->SetRecord(szName,szNumber,szAddres);

pNode=new CNode;

pNode->InputData(pTel);

TelListAddNode(pNode);

cout<<"输入姓名(输入0结束):";

cout<<"输入地址(输入0结束):";

cingetline(szName,20);

cingetline(szAddres,20);

}

cout<<endl<<endl;

}

void DisplayRecord(CList&TelList)

{

cout<<setw(15)<<"电话号码"<<setw(15)<<"姓名"<<endl;

TelListShowList();

cout<<endl<<endl;

}

void LookUpRecord(CList &TelList)

{

CNode pLook;

char szNumber[20];

cout<<"输入您需要查找的号码(输入0结束)";

cingetline(szNumber,20);

while(strcmp(szNumber,"0"))

{

CTelRecord tele (szNumber,"0");

pLook=TelListLookUp(tele);

if(pLook)

{

cout<<"在电话薄中找到"<<" ,内容是:"<<endl;

pLook->ShowNode();

}

else

cout<<"在电话薄中查找不到"<<szNumber<<""<<endl;

cout<<"输入您需要查找的号码(输入0结束)";

cingetline(szNumber,20);

}

cout<<endl<<endl;

system("pause");

}

void DeleteRecord(CList&TelList)

{

CNode pLook;

char szNumber[20];

cout<<"输入您需要删除的号码(输入0结束)";

cingetline(szNumber,20);

while(strcmp(szNumber,"0"))

{

CTelRecord tele(szNumber,"0");

pLook=TelListLookUp(tele);

if(pLook)

{

cout<<"在电话薄中找到"<<szNumber<<",内容是:"<<endl;

pLook->ShowNode();

TelListDeleteNode(pLook);

cout<<szNumber<<"的资料已删除"<<endl;

delete pLook;

}

else

cout<<"在电话薄中查找不到"<<szNumber<<""<<endl;

cout<<"输入您需要删除的号码(输入0结束)";

cingetline(szNumber,20);

}

cout<<endl<<endl;

}

void StoreFile(CList &TelList)

{

ofstream outfile("TELEPHONEDAT",ios::binary);

if(! outfile)

{

cout<<"数据文件打开错误,没有将数据存入文件!\n";

return;

}

CNode pnode;

CTelRecord pTel;

string strName,strNumber;

pnode=TelListGetListHead();

while(pnode)

{

pTel=(CTelRecord )pnode->GetData();

outfilewrite((char )pTel,sizeof(CTelRecord));

pnode=TelListGetListNextNode(pnode);

}

outfileclose();

}

void Operate(string&strChoice,CList&TelList)

{

if(strChoice=="1")

AddRecord(TelList);

else if(strChoice=="2")

DisplayRecord(TelList);

else if(strChoice=="3")

LookUpRecord(TelList);

else if(strChoice=="4")

DeleteRecord(TelList);

else if(strChoice=="0")

StoreFile(TelList);

else

cout<<"输入错误,请重新输入您的选择:";

}

void LoadFile(CList&TelList)

{

ifstream infile("TELEPHONEDAT",ios::binary);

if(! infile)

{

cout<<"没有数据文件!\n\n";

return;

}

CNode pNode;

CTelRecord pTel;

while(! infileeof())

{

pTel=new CTelRecord;

infileread((char)pTel,sizeof(CTelRecord));

pNode=new CNode;

pNode->InputData(pTel);

TelListAddNode(pNode);

}

TelListDeleteNode(pNode);

infileclose();

}

int main(void)

{

CList TelList;

system("cls");

cout<<"\t欢迎进入电话薄数据系统\n";

LoadFile(TelList);

string strChoice;

do

{

cout<<"\t1添加电话薄记录\n";

cout<<"\t2显示电话薄内容\n";

cout<<"\t3根据号码查询电话薄数据\n";

cout<<"\t4根据号码删除电话薄数据\n";

cout<<"\t0退出系统\n\n\n";

cout<<"请输入您的选择:";

cin>>strChoice;

cinignore();

Operate(strChoice,TelList);

}

while(strChoice!="0");

cout<<"\n\n\t欢迎再次使用电话薄数据系统\n\n";

return 0;

}

你对结构体中的子结构体的赋值也是不对的……

等我看看怎么改比较好……

改成这样:

#include<stdioh>

#include<stringh>

struct data

{

    int month;

    int day;

    int year;

};

struct stud

{

    char name[20];

    char tele[12];

    char zip[7];

    struct data birthday;

    char addre[30];

};

/{/

int main()

{

    //birthday是个整体,要加{}给birthday赋值

    struct stud stu[30]={

        "Liming","123456789","216546",{3,14,2001},"beijing",

            "Xavi","789456123","216549",{4,5,2009},"tianjing",

            "Messi","894564613","121487",{12,1,1993},"shanghai"};

    int k,i,j,n=3;

    struct stud temp;

    for(i=0;i<n-1;i++)

    {

        k=i;

        for(j=i+1;j<n;j++)

        if(strcmp(stu[j]name,stu[k]name)<0)

            k=j;

        temp=stu[i];

        stu[i]=stu[k];

        stu[k]=temp;

    }

    printf("姓名          电话           邮编         生日     地址\n");

   for(i=0;i<3;i++)

       printf("%10s%12s%8s %2d-%2d-%4d %15s\n",stu[i]name,stu[i]tele,stu[i]zip,stu[i]birthdaymonth,stu[i]birthdayday,stu[i]birthdayyear,stu[i]addre);//少了电话……

   return 0;

}

仔细调试啊,少年……

自己调试才能提高自己的编程能力。

为你解决疑问其实就是调试的过程,也是我学习的过程。

傍晚好,少年!

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/shuma/1246635.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-08
下一篇2023-09-08

随机推荐

  • 后的套盒哪个系列的最好?有什么区别吗?

    在韩妆界摸爬滚打多年,whoo的套盒也了解了不少。Whoo的套盒有很多系列,以天气丹,拱辰享,津率享三个系列为主推,在韩妆界是有很高的口碑的。下面我就来跟说说,这三个系列的区别在哪吧。1、天气丹天气丹这个系列的套盒主推的是修复肌肤,平衡脸部

    2024-04-15
    49000
  • 妮维雅面霜怎么样?

    妮维雅在国内比较知名的一个品牌,虽然说妮维雅的产品可以说是物美价廉,很多人平时都会用到它们家的洗面奶,它们家的唇膏也是很多妹子比较喜欢的,这里我们来说一说它们家的面霜,它们家的面霜还算比较火,那妮维雅面霜怎么样?妮维雅面霜好用吗?1、妮维雅

    2024-04-15
    36900
  • 送什么礼物有关1314的的含义的?求救啊?(以知道13是一件外套)求解14有礼物?求创意、时尚、前卫的?

    真想不出这个14是什么,不过您的问题倒让我有个想法不知道可行否:来这里买两盒正版的星期袜(选一盒带数字的一盒带爱心的,然后两盒打开,把带数字的那盒数字是2567的袜子拿掉,然后把另外一盒带爱心的袜子放进去凑成七双一盒),这样

    2024-04-15
    34300
  • 汕尾十大装修公司排名汕尾哪家装修公司好

    房子到手后需要进行装修,很多业主忙于工作,没有时间装修,于是就选择把房子交给装修公司,为了让装修质量可靠,要选择一家口碑好的装修公司。那么,下面小编为大家分享汕尾十大装修公司排名,以及汕尾哪家装修公司好汕尾十大装修公司排名1、华美乐装饰公司

    2024-04-15
    30600
  • 香奈儿口红正品和假货颜色上有啥区别

    香奈儿口红正品和假货在包装、膏体、质地、编号等方面有区别:1、包装盒面的区别。文字排版方式、文字内容,都有很多的区别。真货的这些说明文字要更清晰、更粗实。香奈儿的logo处对比,正品的logo更显小一些,假货则显得更大。如图:2、膏体上的区

    2024-04-15
    28100
  • 精华肌底液和精华液有什么区别

    精华肌底液和精华液是两个不同的概念,我们需要注意的一点就是肌底液,一般情况下都是用来肌肤打底产品来使用,涂抹之后可以迅速地帮助毛孔尽快的舒张,有利于后续护肤产品的使用,精华液,一般情况下都是针对某一个肌肤问题所专门去使用的,比如有美白的精华

    2024-04-15
    36300
  • 花西子和爱敬哪个好?

    花西子气垫和爱敬气垫都是市面上较为知名的气垫品牌,两者都是气垫产品,但在性能、价格、优势等方面还是有一定的差异。具体对比如下:1:性能对比:花西子气垫和爱敬气垫在打造妆效方面都有着不错的表现。花西子气垫具有防晒、保湿、提亮等效果,气垫上的海

    2024-04-15
    36000

发表评论

登录后才能评论
保存