数据结构课程设计-C++通讯录管理系统设计|数据结构课程设计
// 头文件
# include
//forward declarationtemplateclass List;
//Item template definitiontemplateclass Item{ public: friend List; Item(); Item(const type &); private: type data; Item * next;};//ConstructortemplateItem::Item():next(0){}
//ConstructortemplateItem::Item(const type & N):data(N),next(0){}
templateclass List{ public: List();//Destructor bool IsEmpty(); void append(); void acquire(); void remove(); void print(); void modefy(); private: Item * Head, * End;};templateList::List(){ Head=NULL; End=NULL;}template void List::acquire(){ char response; int cnt(0); cout<<"请选择a.按姓名查询 b.按电话号码查询..."; cin>>response; switch(response) { case 'a': cin.ignore(80,'\n'); cout<<"请输入姓名:"; char nam[15]; cin.getline(nam,strlen(nam)); if(IsEmpty()) cout<<"没有记录系统为空!"; else { Item * pt=Head; while(pt) { if((pt->data).IsThisName(nam)) { (pt->data).print(); cnt++; }
pt=pt->next; } } cout<<"共找到"< * pt=Head; while(pt) { if((pt->data).IsThisPho(pho)) { (pt->data).print(); } pt=pt->next; } } break;
}
}template void List::remove(){ char response; cout<<"请选择你删除所选的方式 a.通过姓名b.通过电话号码.."; cin>>response;
switch(response) { case 'a': cin.ignore(80,'\n'); cout<<"请输入要删除的人的姓名:"; char nam[15]; cin.getline(nam,strlen(nam)); if(IsEmpty()) cout<<"没有记录系统为空!"; else { Item * pf=Head; Item * pt=pf->next; while(pf&&(pf->data).IsThisName(nam)) { (pf->data).print(); cout<<"确定要删除?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { Head=Head->next; pf=Head; } if(pf==0) return; } pt=pf->next; while(pt) {
if((pt->data).IsThisName(nam)) { (pt->data).print(); cout<<"确定要删除?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { pf->next=pt->next; pt=pf->next; } else { pf=pf->next; pt=pf->next; } } } } break; case 'b': cin.ignore(80,'\n'); cout<<"请输入要删除的人的电话号码:"; char pho[15]; cin.getline(pho,strlen(pho)); if(IsEmpty()) cout<<"没有记录系统为空!"; else { Item * pf=Head; Item * pt=pf->next; while(pf&&(pf->data).IsThisPho(pho)) { (pf->data).print(); cout<<"确定要删除?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { Head=Head->next; pf=Head; } else { pf=pf->next; pt=pf->next; } } while(pt) {
if((pt->data).IsThisPho(pho)) { (pt->data).print(); cout<<"确定要删除?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { pf->next=pt->next; pt=pf->next; } else { pf=pf->next; pt=pf->next; } } } } break; } }
template void List::print(){ int cnt=0; if(Head==0) { cout<<"empty\n"; } Item * pt=Head; while(pt) { cout<<"No."<<++cnt<data).print(); pt=pt->next; } cout<<"\n\n"; }template void List::modefy(){ char response; cout<<"请选择修改方式..a.通过姓名b.通过电话号码.."; cin>>response; cin.ignore(80,'\n'); switch(response) { case 'a': cout<<"请输入要修改的人的姓名:"; char nam[15]; cin.getline(nam,strlen(nam)); if(IsEmpty()) cout<<"没有记录系统为空!"; else { Item * pt=Head; while(pt) {
if((pt->data).IsThisName(nam)) { (pt->data).print(); cout<<"确定修改?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { (pt->data).modefy(); pt=pt->next; } else pt=pt->next; } } } break; case 'b': cout<<"请输入要修改的人的电话号码:"; char pho[15]; cin.getline(pho,strlen(pho)); if(IsEmpty()) cout<<"没有记录系统为空!"; else { Item * pt=Head; while(pt) { if((pt->data).IsThisPho(pho)) { (pt->data).print(); cout<<"确定要修改?Y/N.."; cin>>response; cin.ignore(80,'\n'); if(response=='y'||response=='Y') { (pt->data).modefy(); pt=pt->next; } else pt=pt->next; } } } break; }} template void List::append(){ Item * pt=new Item; if(IsEmpty()) Head=End=pt; else {
End->next=pt; End=pt; }}
template bool List::IsEmpty(){ return(Head==0);}
\\主程序
//用面向对象的程序设计方法设计一个通讯录管理程序。通讯录内容包括//姓名、家庭住址、出生日期、电话号码。采用链表来做(最好能采用前//面的通用链表类)。具有:创建、输出、排序(电话号码)、插入、删除、//查找等功能。通讯录的操作结果用文件进行保存。# include # include"iomanip.h"# include # include"List.h"//Menu definitionclass Menu{public: Menu(); void SetName(); void SetAdd(); void SetBir(); void SetPho(); int IsThisAdd(char Add[]); int IsThisPho(char Pho[]); int IsThisName(char nam[]); int IsThisBir(char Bir[]); void modefy(); void print();private: char name[10],address[20],birth[20],phone[20];};Menu::Menu(){ cin.ignore(80,'\n'); cout<<"请输入姓名:"; cin.getline(name,strlen(name)); cout<<"请输入家庭住址:"; cin.getline(address,strlen(address)); cout<<"请输入出生日期 :"; cin.getline(birth,strlen(birth)); cout<<"请输入电话号码:"; cin.getline(phone,strlen(phone));
}void Menu::print(){ cout<<"姓名:"<>response; switch(response) { case 'a': SetName(); break; case 'b': SetAdd(); break; case 'c': SetBir(); break; case 'd': SetPho(); break; default: break; }}void Menu::SetName(){ char s[10]; cin.ignore(80,'\n'); cout<<"请输入新姓名 :"; cin.getline(s,strlen(s)); int len=strlen(s); for(int i=0;i<10;i++) name[i]='\0'; for(i=0;i MenuNote;MenuNote menunote;void system(){
cout<<"请选择你要的操作.. a.插入 b.删除 c.查询 d.浏览全部 e.修改..."; char response; cin>>response; switch(response) { case 'a': menunote.append(); break; case 'b': menunote.remove(); break; case 'c': menunote.acquire(); break; case 'd': menunote.print(); break; case 'e': menunote.modefy(); break; default: break; } cout<<"\n ........ 继续操作 ? Y/N?"; cin>>response; if(response=='y'||response=='Y') system();}void main(){ cout<<".-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-\n"; cout<<"这里是通讯录!!开始操作?Y/N?"; char response; cin>>response; if(response=='y'||response=='Y') system();}