求高手帮忙数据结构的课程设计:手机通讯录的制作 100

运用〈〈数据结构〉〉中的算法思想作数据结构,结合C++语言基本知识,编写一个通讯录管理系统。本系统应完成下面方面的功能:①输入信息(Enter()):调用此函数用以输入数... 运用〈〈数据结构〉〉中的算法思想作数据结构,结合C++语言基本知识,编写一个通讯录管理系统。本系统应完成下面方面的功能:
①输入信息(Enter()): 调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取
②显示信息(Display()):用以显示输入的数据,包括从内存中读出和从磁盘中读出
③查找(Search()):以姓名和电话号码作为关键字查找要找的信息
④删除信息(Delete()):用以删除选定的输入信息(姓名作为关键字)
⑤存盘(Save()):调用此函数将内存中的数据保存至磁盘中
⑥装入(Load()):调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上
油箱ladylady1@tom.com
展开
 我来答
yanhe0116
2009-07-04 · TA获得超过4759个赞
知道大有可为答主
回答量:3218
采纳率:0%
帮助的人:3748万
展开全部
#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=node.pData;
pNext=node.pNext;
}
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();
CNode*GetListHead(){return pHead;}
CNode*GetListNextNode(CNode*pnode);
};
CNode*CList::GetListNextNode(CNode *pnode)
{
CNode*p1=pnode;
return p1->pNext;
};
void CList::AddNode(CNode*pnode)
{
if(pHead==0)
{
pHead=pnode;
pnode->pNext=0;
return;
}
else
{
pnode->pNext=pHead;
pHead=pnode;
}
};
CNode*CList::DeleteNode(CNode*pnode)
{
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)
{
CNode*p1=pHead;
while(p1)
{
if(p1->pData->Compare(data)==0)
return p1;
p1=p1->pNext;
}
return 0;
}
void CList::ShowList()
{
CNode*p1=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(char*number,char *name,char*addres)
{
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,temp.szNumber);
strcmp(szAddres,temp.szAddres);
}

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结束):";
cin.ignore();
cin.getline(szNumber,20);
while(strcmp(szNumber,"0"),strcpy(szAddres,"0"))
{
cout<<"输入姓名:";
cout<<"输入地址:";
cin.getline(szName,20);
cin.getline(szAddres,20);
pTel=new CTelRecord;
pTel->SetRecord(szName,szNumber,szAddres);
pNode=new CNode;
cin.getline(szAddres,20);
}
cout<<endl<<endl;
}

void DisplayRecord(CList&TelList)
{
cout<<setw(15)<<"电话号码"<<setw(15)<<"姓名"<<endl;
TelList.ShowList();
cout<<endl<<endl;
}
void LookUpRecord(CList &TelList)
{
CNode *pLook;
char szNumber[20];
cout<<"输入您需要查找的号码(输入0结束)";
cin.getline(szNumber,20);
while(strcmp(szNumber,"0"))
{
CTelRecord tele (szNumber,"0");
pLook=TelList.LookUp(tele);
if(pLook)
{
cout<<"在电话薄中找到"<<" ,内容是:"<<endl;
pLook->ShowNode();
}
else
cout<<"在电话薄中查找不到"<<szNumber<<"."<<endl;
cout<<"输入您需要查找的号码(输入0结束)";
cin.getline(szNumber,20);
}
cout<<endl<<endl;
system("pause");
}
void DeleteRecord(CList&TelList)
{
CNode *pLook;
char szNumber[20];
cout<<"输入您需要删除的号码(输入0结束)";
cin.getline(szNumber,20);
while(strcmp(szNumber,"0"))
{
CTelRecord tele(szNumber,"0");
pLook=TelList.LookUp(tele);
if(pLook)
{
cout<<"在电话薄中找到"<<szNumber<<",内容是:"<<endl;
pLook->ShowNode();
TelList.DeleteNode(pLook);
cout<<szNumber<<"的资料已删除"<<endl;
delete pLook;
}
else
cout<<"在电话薄中查找不到"<<szNumber<<"."<<endl;
cout<<"输入您需要删除的号码(输入0结束)";
cin.getline(szNumber,20);
}
cout<<endl<<endl;
}
void StoreFile(CList &TelList)
{
fstream outfile("TELEPHONE.DAT",ios::binary);
if(! outfile)
{
cout<<"数据文件打开错误,没有将数据存入文件!\n";
return;
}
CNode *pnode;
CTelRecord *pTel;
string strName,strNumber;
pnode=TelList.GetListHead();
while(pnode)
{
pTel=(CTelRecord *)pnode->GetData();
outfile.write((char *)pTel,sizeof(CTelRecord));
pnode=TelList.GetListNextNode(pnode);
}
outfile.close();
}
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("TELEPHONE.DAT",ios::binary);
if(! infile)
{
cout<<"没有数据文件!\n\n";
return;
}
CNode *pNode;
CTelRecord *pTel;
while(! infile.eof())
{
pTel=new CTelRecord;
infile.read((char*)pTel,sizeof(CTelRecord));
pNode=new CNode;
pNode->InputData(pTel);
TelList.AddNode(pNode);
}
TelList.DeleteNode(pNode);
infile.close();
}
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;
cin.ignore();
Operate(strChoice,TelList);
}
while(strChoice!="0");
cout<<"\n\n\t欢迎再次使用电话薄数据系统\n\n";
return 0;
nclu }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
634038132
2009-07-11
知道答主
回答量:12
采纳率:0%
帮助的人:5.1万
展开全部
我有一个MFC做的,可以增、删、查、改、上下翻页,数据存储到文件,感兴趣给我你的邮箱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式