用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

随机推荐

  • 娇兰保湿精华液有什么功效

    精华,是护肤品中之极品,成分精致、功效强大、效果显著,所提取的都是高营养物质并将其浓缩。精华液是护肤品中的重中之重,从称呼就可以判断初精华液是所有护肤品的精华,正常来说,用再多的护肤品,如果不用精华液都是无济于事,尤其是对熟龄肌肤或者是问题

    2024-04-15
    50400
  • 原液跟精华液有什么区别

    1、原液是单一成分、浓度更高、配方更精简,能够针对各种肌肤需要给肌肤更直接、快捷、更安全、更强效的保养,让肌肤在短时间内恢复最佳状态的美容产品。2、来源不同:原液的来源:原液虽然是一个新兴的护肤品类,但目前已经有丰富的品项。每一款原液,都添

    2024-04-15
    59100
  • 我想给我妈妈买眼部精华或者眼霜,我想知道哪个牌子适合她,他接近50岁了,想去眼纹,黑眼圈

    选择眼部精华或眼霜的品牌和类型需要考虑许多因素,包括你的妈妈的肤质、需求、预算和个人偏好。以下是一些适合成熟肌肤的眼部护肤品牌和产品的推荐:1 La Mer眼部精华霜:这是一款轻盈的眼部精华霜,可显著减少细纹和皱纹,同时提供深层保湿。2 E

    2024-04-15
    46600
  • 在网上买护肤品靠谱吗?

    在网上购买护肤品是一种方便快捷的方式,但很多人对其可靠性持怀疑态度。他们担心商品质量、真实性以及售后服务等问题。在网上买护肤品靠谱吗?我们需要明确一点,虽然网上购物存在着一些风险,但并不意味着所有的网购平台都不可信。事实上,如今市场上存在许

    2024-04-15
    51700
  • sk2清莹露怎么用

          sk2清莹露是属于清洁水,就是洗完脸,第一个用的,是给皮肤一个再次清洁的作用。sk2清莹露用在神仙水之前,洁面后第一步是SK-I      sk2清莹露是SK-II品牌出品的明星产品之一,一般sk2清莹露和sk2神仙水搭配使用,

    2024-04-15
    48300
  • 最近对苏秘家比较感兴趣,它的护肤品哪些不错用啊?

    说到苏秘,不得不说它的自然发酵护肤品,是没有人工色素、香料之类的添加物滴,成分安全,孕妇和敏感肌也能用。还有奇迹精华露,相当于SK2的神仙水哦,我用了几年了,感觉比神仙水要温和保湿一些。它的升级版是鎏金瓶系列的奇迹精华,也叫女神水,看到欢乐

    2024-04-15
    48700
  • SK-II嫩肤清莹露怎么样?SK-II 嫩肤清莹露好用吗?

    SK-II神仙水的英文名:FACIAL TREATMENT ESSENCE。字面很好理解,面部修护精华露。SK-II的神仙水中文这边叫:护肤精华露。顾名思义,也就是调整皮肤的一款高机能精华水。SK-II嫩肤清莹露怎么样?SK-II 嫩肤清莹

    2024-04-15
    51700

发表评论

登录后才能评论
保存