用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

随机推荐

  • 妍芙仁黑松露重组胶原焕颜精华凝露怎么用

    1、用温水和适合自己肤质的洁面产品彻底清洁面部。2、使用爽肤水或化妆水轻拍脸部,以帮助调理和准备肌肤。3、从瓶中挤出适量的妍芙仁黑松露重组胶原焕颜精华凝露,使用1-2泵的量。4、将精华凝露点在面部的额头、两颊、鼻子和下巴等区域,用指尖轻轻按

    2024-04-15
    57000
  • 安沐珂轻奢畅白美白祛斑精华液瓶子咋打开

    要打开安沐珂轻奢畅白美白祛斑精华液的瓶子,可以按照以下步骤:1 首先,取下瓶子的外盖。2 找到瓶颈处一个有银色虚线的位置,在这个位置用一个瓶盖当作支点,用小刀或改锥等工具轻轻撬开。3 打开后,把瓶子倒置,用力拍打瓶底,如果没有反应,可以尝试

    2024-04-15
    59800
  • 妮维雅洗面奶男士怎么样

    妮维雅这个品牌,一直专业的致力于男性护肤产品的开发和研究,其中也根据男性的生活特点和肤质的特点,来研究出了很多适合的产品,而关于妮维雅男士洗面奶,也是可以帮助去除多余油脂,非常适合男性肌肤使用泡沫,也非常的丰富。在使用之后,会感觉我们的皮肤

    2024-04-15
    51700
  • 男士护肤套装哪款好

    男士护肤套装哪款好?相信很多直男内心都是大写的头疼!在“小鲜肉”簇拥的当下,钢铁直男也会萌发一颗精致的心。又何况是在秋冬如此干燥的时节,就算是再厚的皮脂也是无法消受的。因此男士们也是需要用上一套合适自己的护肤品来解决各种皮肤问题,下面将推荐

    2024-04-15
    52400
  • 苏秘奇迹护理精华露怎么用

    苏秘奇迹护理精华露使用方法:洁面之后,取适量的苏秘奇迹护理精华露倒在掌心,然后双手轻轻揉搓一下,然后双掌轻拍脸部,涂抹苏秘奇迹护理精华露,继续轻拍帮助皮肤吸收。 苏秘奇迹护理精华露不仅可以直接使用在脸上,还可以混合在面霜、粉底液、面膜里面一

    2024-04-15
    48700
  • 李佳琦直播预告清单1.12 李佳琦直播预告1.12

    李佳琦直播预告清单112 李佳琦直播预告112。李佳琦1月12日晚间18点直播美妆专场,那么本次李佳琦会给我们带来什么商品呢下面小编给大家带来李佳琦1月12日直播的清单预告,一起来看看吧。李佳琦直播预告清单112一、直播时间李佳琦 1月12

    2024-04-15
    41500
  • sk-ii怎么辨别真假

    sk-ii辨别真假方法如下:1、防伪码:首先找到sk2外层包装的二维码,继而使用手机、uc或者其他的浏览器自带的“扫一扫”扫描防伪码,然后安静等待一会儿,就会显示详细结果。如果查询次数超过1次,那么慎重涂抹。2、条形码:先找到外包装的条形码

    2024-04-15
    43400

发表评论

登录后才能评论
保存