12、 电话本 编写C++程序完成以下功能: (1) 实现简单电话本功能,用姓名来搜索电话号码; (2) 用户输入姓名,程序查找并输出结果; (3) 用户可以通过输入,添加姓名和电话号码; (4) 用户可以删除姓名和电话号码; (5) 电话本可以保存在指定文件中; (6) 电话可被从指定文件中读入到内存。 #include<iostream> #include<fstream> #include<stdio.h> #include<stdlib.h> using namespace std; struct imformationlist { char name[30]; char num[20]; struct imformationlist* nextPtr; }; typedef struct imformationlist List; typedef struct imformationlist* ListPtr; class operate { private: char order; ListPtr HeadPtr; public: operate(char a='2',ListPtr N0=NULL) {order=a;HeadPtr=N0;} ~operate() {} void setoperate(char b='2') {order=b;} void setoperate(ListPtr N=NULL) {HeadPtr=N;} void seek(); void deleteit(); void input(); void print(); void select(); void outfile(); void infile(); }; void operate::select() { switch(order) { case '0': deleteit(); break; case '1': seek(); break; case '2': input(); break; case '3': print(); break; case '4': infile(); break; default: break; } } void operate::input() { ListPtr newPtr=NULL,previousPtr=NULL,currentPtr=NULL; char NAME[30]; char NUM[20]; int i=0,j=0; cout<<"请输入姓名:"<<endl; cin>>NAME; cout<<endl<<"请输入其电话号码:"<<endl; cin>>NUM; // newPtr=new List; newPtr=(ListPtr)malloc(sizeof(List)); if(newPtr!=NULL) { while(NAME[i]!='\0') { (newPtr->name)[i]=NAME[i]; i++; } (newPtr->name)[i]='\0'; while(NUM[j]!='\0') { (newPtr->num)[j]=NUM[j]; j++; } (newPtr->num)[j]='\0'; previousPtr=NULL; currentPtr=HeadPtr; if(currentPtr==NULL) { HeadPtr=newPtr; HeadPtr->nextPtr=NULL; } else { while(currentPtr!=NULL) { previousPtr=currentPtr; currentPtr=currentPtr->nextPtr; } previousPtr->nextPtr=newPtr; newPtr->nextPtr=NULL; } } } void operate::deleteit() { ListPtr currentPtr=NULL,previousPtr=NULL,holdPtr=NULL; char NAME[30]; int i=0,same=0; cout<<endl<<"请输入要删除信息的联系人名字:"<<endl; cin>>NAME; currentPtr=HeadPtr; if(currentPtr==NULL) { cout<<endl<<"当前电话本为空,不能执行删除操作!"<<endl; } else { while(currentPtr!=NULL) { i=0; while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0') { if(NAME[i]!=(currentPtr->name)[i]) { same=0; goto PRT; } same=1; i++; } if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0')) { same=0; } PRT: if(same==1) { if(HeadPtr==currentPtr) { previousPtr=HeadPtr; HeadPtr=HeadPtr->nextPtr; } previousPtr->nextPtr=currentPtr->nextPtr; //currentPtr->nextPtr=NULL; free(currentPtr); currentPtr=previousPtr->nextPtr; } else { previousPtr=currentPtr; currentPtr=currentPtr->nextPtr; } } } } void operate::seek() { ListPtr previousPtr,currentPtr; char NAME[30]; int i=0,same=0,j=0; cout<<endl<<"请输入要查找信息的联系人名字:"<<endl; cin>>NAME; previousPtr=NULL; currentPtr=HeadPtr; if(currentPtr==NULL) { cout<<endl<<"当前电话本为空,不能查找!"<<endl; } else { while(currentPtr!=NULL) { i=0; while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0') { if(NAME[i]!=(currentPtr->name)[i]) { same=0; goto PRT1; } same=1; i++; } if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0')) { same=0; } PRT1: if(same==1) { cout<<endl<<"要找的电话号码为:"; cout<<(currentPtr->num); cout<<endl; j++; } previousPtr=currentPtr; currentPtr=currentPtr->nextPtr; } if(j==0) { cout<<endl<<"没有要找的联系人信息!"<<endl; } } } void operate::print() { ListPtr currentPtr; currentPtr=HeadPtr; if(currentPtr==NULL) { cout<<endl<<"当前电话本为空,没有信息!"<<endl; } else { cout<<endl<<"当前电话本信息如下:"<<endl; while(currentPtr!=NULL) { cout<<(currentPtr->name); cout<<": "; cout<<(currentPtr->num); cout<<endl; currentPtr=currentPtr->nextPtr; } } } void operate::outfile() { ListPtr previousPtr=NULL,currentPtr=NULL; ofstream outf; outf.open("file",ios::out); if(outf.fail()) { cout<<"文件打开失败!"<<endl; return; } currentPtr=HeadPtr; while(currentPtr!=NULL) { outf<<(currentPtr->name)<<" "<<(currentPtr->num)<<endl; previousPtr=currentPtr; currentPtr=currentPtr->nextPtr; } outf.close(); } void operate::infile() { ListPtr previousPtr=NULL,currentPtr=NULL; ifstream inf("file",ios::in); if(inf.fail()) { cout<<"文件打开失败!"<<endl; return; } if(inf.eof()) { cout<<"文件file为空文件!"<<endl; return; } else { currentPtr=(ListPtr)malloc(sizeof(List)); inf.getline(currentPtr->name,30,' '); inf.getline(currentPtr->num,20); HeadPtr=currentPtr; while(!inf.eof()) { previousPtr=currentPtr; currentPtr->nextPtr=(ListPtr)malloc(sizeof(List)); currentPtr=currentPtr->nextPtr; inf.getline(currentPtr->name,30,' '); inf.getline(currentPtr->num,20); } currentPtr->nextPtr=NULL; } inf.close(); } int main() { char x; ListPtr M=NULL; operate Phion; cout<<"请输入指令进行操作:0-》删除;"<<endl; cout<<" 1-》查找;"<<endl; cout<<" 2-》添加;"<<endl; cout<<" 3-》查看电话本;"<<endl; cout<<" 4-》读取文件file中的数据;"<<endl; cout<<" 其他-》退出;"<<endl<<endl; cout<<"请输入指令:"<<endl; cin>>x; Phion.setoperate(M); while(x=='0'||x=='1'||x=='2'||x=='3'||x=='4') { Phion.setoperate(x); Phion.select(); cout<<endl<<"请输入指令:"<<endl; cin>>x; if(x!='0'&&x!='1'&&x!='2'&&x!='3'&&x!='4') { goto PRT2; } } PRT2: Phion.outfile(); system("pause"); return 0; }
![]() ![]() |
|
来自: BUPT-BYR > 《cpp语言实例交流》