用C++编写一个通讯录,具有新建记录,查询记录,修改记录,增加记录,删除记录,显示所有记录。

不是C语言的呀,要求用单链表的模板类去编写,就是temlpate<class T >那种的,用到的是数据结构的知识,

具体题目是:
第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。
第二个模块——Menu()的功能是:显示英文提示选单。
第三个模块——Quit()的功能是:退出选单。
第四个模块——Create()的功能是:创建新的通讯录。
第五个模块——Add()的功能是:在通讯录的末尾,写入新的信息,并返回选单。
第六个模块——Find()的功能是:查询某人的信息,如果找到了,则显示该人的信息,如果未找到,则提示通讯录中没有此人的信息,并返回选单。
第七个模块——Alter()的功能是:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
第八个模块——Delete()的功能是:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
第九个模块——List()的功能是:显示通讯录中的所有记录。

#include<iostream.h>
#include<string.h>
#include <fstream.h>
#include <stdlib.h>
#include<conio.h>
struct Address //说明结构
{
char name[20];
char Tel[20];
char Email[20];
char Relation[20];
Address *next ;
} ;
Address allone[3] ;
void Createlist(Address *&head) //建立链表函数
{ Address *s,*p;
s=new Address;
int a=1;
while ( a==1)
{
cout<<"请输入姓名:";
cin>>s->name;
cout<<"请输入电话号:";
cin>>s->Tel;
cout<<"请输入Email:";
cin>>s->Email;
cout<<"请输入与您关系:";
cin>>s->Relation;
{
if ( head == NULL ) head = s ;
else p->next = s ;
}
p = s ;
s = new Address ;
cout<<"是否继续输入,输入按1不输入按0 :"; //判断是否继续输入
cin>>a;
}
p->next = NULL;
delete s;
return ;
}
void showlist( Address *head ) //显示链表
{ cout << "您的通信录为: "<< '\n';
while( head )
{
cout << head->name << '\t';
cout <<head->Tel<<'\t';
cout << head->Email << '\t';
cout << head->Relation << '\n';
head = head->next ;
}
cout << endl ;
}
void Chayuelist(Address *head) //查阅链表
{
char chayue[20];
cout<<"请输入你所要查阅的姓名:";
cin>>chayue;
while( head )
{
if(strcmp(head->name,chayue)==0)
{
cout << head->name << '\t';
cout <<head->Tel<<'\t';
cout << head->Email << '\t';
cout << head->Relation << '\n';
}

head = head->next ;
}
cout << endl ;
}

void baocun(Address *head)//保存
{
ofstream outstuf ;

outstuf.open("c:\\save.txt", ios::out ) ;
if ( !outstuf )
{
cerr << "File could not be open." << endl ;
abort();
}
while( head )
{
outstuf << head->name << ' '<< head->Tel<<' '<< head->Email << ' '<< head->Relation << '\n' ;
cout << "? " ;
head = head->next ;
}
}

void tianjia(Address *&head) //添加
{
Address *s;
s=new Address;//生成新结点
cout<<"\n\t\t请输入姓名:";
cin>>s->name;
cout<<"\n\t\t请输入电话号:";
cin>>s->Tel;
cout<<"\n\t\t请输入Email:";
cin>>s->Email;
cout<<"\n\t\t请输入与您关系:";
cin>>s->Relation;
cout<<"\n\t\t你已经添加成功";
s->next=head;
head=s;

return ;
}

void main() //主函数
{ system("cls");
int gongnenghao;
Address*head = NULL ;
cout<<"*************************本程序为通讯录管理系统***********************"<<endl;
while(gongnenghao<=11)
{ system("cls");
cout<<" 请选择你所要实现的功能的编号"<<endl;
cout<<"\n\t\t1.写记录"<<endl;
cout<<"\n\t\t2.显示记录"<<endl;
cout<<"\n\t\t3.查阅记录"<<endl;

cout<<"\n\t\t5.删除记录"<<endl;
cout<<"\n\t\t8.保存记录"<<endl;
cout<<"\n\t\t9.添加记录"<<endl;
cout<<"\n\t\t111.退出"<<endl;

cin>>gongnenghao;

if(gongnenghao==1)
{
Createlist(head);
}
if (gongnenghao==2)
{
showlist(head);
}
if (gongnenghao==3)
{
Chayuelist(head);
}

if (gongnenghao==8)
{
baocun(head);
}

if(gongnenghao>9)
{
cout<<"退出";
}
if (gongnenghao==9)
{
tianjia(head);
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-05
增加记录:就是在原记录的基础上增加一些记录,新增加的记录和原记录都在。
修改记录:就是把原记录修改成新记录,原记录会被新增加的记录取代。
第2个回答  推荐于2018-04-04
#include<string.h> /*字符函数和字符串函数*/
#include<conio.h> /*字符模式函数(调用getch()函数)*/
#include<stdio.h> /*输入输出函数*/
int i;
struct person /*电子通讯录结构定义*/
{
char num[5];
char name[11];
char sex[2];
char phone[12];
char address[26];
char post_num[11];
}persons[50];
FILE *fp;
vonum dateload() /*数据载入函数*/
{ int j;
fp=fopen("person.bat","r+"); /*打开文件person.bat*/
if(fp==NULL) /*判断是否存在person.bat,如果不存在则创建*/
{ fp=fopen("person.bat","w");
i=0;
}
else
{ for(i=0;i<50;i++)
{ j=fgetc(fp);
if(j==EOF) /*判断是否到了文件尾*/
return;
fseek(fp,i*sizeof(struct person),0);
fread(&persons[i],sizeof(struct person),1,fp); /*从文件中读取一条记录*/
}
}
}
vonum Menu_Select() /*显示菜单界面*/
{
printf(" \n");
printf(" \n");
printf(" \n");
printf(" Address Book Management System \n");
printf(" \n");
printf(" ======================\n");
printf(" 1.Address book data Entry\n"); /*数据输入*/
printf(" 2.Address Book data Show\n"); /*数据显示*/
printf(" 3.Address Book data Search\n"); /*数据查找*/
printf(" 4.Address Book data Alter\n"); /*数据修改*/
printf(" 5.Address Book data Insert\n"); /*数据插入*/
printf(" 6.Address Book data Delete\n"); /*数据删除*/
printf(" 7.Address Book data Save\n"); /*数据保存*/
printf(" 0.Exit\n"); /*退出*/
printf(" ======================\n");
printf( " Please chioce 0-7 \n\n");
}
int datecheck(int k,char num[5]) /*检查通讯录中是否存在相同num或num输入格式错误*/
{
int j;
if(num[0]=='0')
k=1;
for(j=0;num[j]!='\0';j++)
{
if(num[j]>'9'||num[j]<'0')
k++;
}
for(j=0;j<i+1;j++)
{
if(strcmp(num,persons[j].num)==0)
k++;
}
return k;

}
vonum dateInput() /*数据输入函数*/
{

char yes_no='1';
char num[5];
int k=0;
if(i>=50)
printf("\n\n Storage full!\n\n");
if(i<50)
{
printf(" ************************************************************************\n");
printf(" ******************* Add Address Book Information ***********************\n");
printf(" ************************************************************************\n");
printf(" ************************************************************************\n");
}
for(;i<50;i++)
{
do
{
switch(yes_no)
{
case '1': /*如果输入为'1',则进行数据输入*/
printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25) Zip_Code(10)*******\n");
scanf("%s%s%s%s%s%s",num,persons[i].name,persons[i].sex,persons[i].phone,persons[i].address,persons[i].post_num);
datecheck(k,num);
while(datecheck(k,num)>0) /*检查输入的num是否已存在,如果存在重新输入*/
{
printf("The No. already exists Or The No. isn't correct, please re-enter\n");
scanf("%s",num);
datecheck(k,num);
}
strcpy(persons[i].num,num);
if(i<49)
{
printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");
yes_no=getch();
}
if(i>=49)
printf("\n\n Storage full!\n\n");
break;
case '0':
break;
default:
yes_no=getch();

}
}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/
if(yes_no=='0') /*如果输入'0'则退出输入函数*/
{
i++;
break;
}
}
}
int The_Size(char a[],char b[]) /*比较两个num的大小*/
{
int j,t;
if((j=strlen(a)-strlen(b))>0) t=1;
if((j=strlen(a)-strlen(b))<0) t=-1;
if((j=strlen(a)-strlen(b))==0)
{
if(strcmp(a,b)>0) t=1;
if(strcmp(a,b)<0) t=-1;
if(strcmp(a,b)==0) t=0;
}
return t;
}
vonum dateShow() /*数据输出函数*/
{ int j,k;
char m;
struct person t;
printf(" ********************************************************************\n");
printf(" No. Name Sex Phone Address Zip_Code \n");
printf(" ********************************************************************\n");
for(j=0;j<i-1;j++) /*对数据进行排序*/
{ for(k=0;k<i-1-j;k++)
{
if(The_Size(persons[k].num,persons[k+1].num)==1)
{
t=persons[k];
persons[k]=persons[k+1];
persons[k+1]=t;
}
}
}
for(j=0;j<i;j++) /*数据输出*/
{
printf("%4s %10s %4s %11s %20s %10s\n",persons[j].num,persons[j].name,persons[j].sex,persons[j].phone,persons[j].address,persons[j].post_num);
m=getch();
if(m==' ')
break;
}
printf("\n\n There are %d data in the book .\n\n",i);
}
vonum dateSearch() /*数据查找函数*/
{
char k;
int j,a,b;
char num[5];
char NAME[11];
printf("Search by No. : 1\n");
printf("Search by name : 2\n");
k=getch();
switch(k)
{
case '1': /*按num查找*/
a=0;
printf("\n\n Please enter the No.\n\n");
scanf("%s",num);
for(j=0;j<i+1;j++)
{
if(strcmp(num,persons[j].num)==0)
{
a++;
printf(" No. Name Sex Phone Address Zip_Code \n");
printf("%4s %10s %4s %11s %20s %10s\n",persons[j].num,persons[j].name,persons[j].sex,persons[j].phone,persons[j].address,persons[j].post_num);
}

}
if(a==0)
printf(" Do not have to find the No.!\n\n");
break;
case '2': /*按姓名查找*/
b=0;
printf("\n\n Please enter the Name\n\n");
scanf("%s",NAME);
for(j=0;j<i+1;j++)
{
if(strcmp(NAME,persons[j].name)==0)
{
b++;
printf(" No. Name Sex Phone Address Zip_Code \n");
printf("%4s %10s %4s %11s %20s %10s\n",persons[j].num,persons[j].name,persons[j].sex,persons[j].phone,persons[j].address,persons[j].post_num);
}

}
if(b==0)
printf(" Do not have to find the Name!\n\n");
break;

default:
printf("\n\n Error!\n");
break;
}
}
vonum dateInsert() /*数据插入函数*/
{ if(i>=50)
printf("\n\n Storage full!\n\n");
if(i<50)
{
char num[5];
int k=0;

printf("Please enter the No. that you want to insert.\n");
scanf("%s",num);
datecheck(k,num); /*检查所需插入的num是否已存在,如果存在重新输入*/
while(datecheck(k,num)>0)
{
printf("The No. already exists Or The No. isn't correct, please re-enter\n");
scanf("%s",num);
datecheck(k,num);
}
strcpy(persons[i].num,num); /*插入数据*/
printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");
scanf("%s%s%s%s%s",persons[i].name,persons[i].sex,persons[i].phone,persons[i].address,persons[i].post_num);
i++;
}
}
vonum dateDelete() /*数据删除函数*/
{
int k,t=0;
char num[5];
printf("\n\n Please enter the No. need to be deleted\n\n");
scanf("%s",num);
for(k=0;k<i;k++)
{
if(strcmp(persons[k].num,num)==0)
{
t++;
break;
}
}
if(t==0)
printf("\n\n The No. does not Exist!\n\n");
if(t>0)
{
for(;k<i;k++) /*删除位置前的元素顺序前移*/
{
persons[k]=persons[k+1];
}
printf("\n\n Delete success!\n\n");
i=i-1;
}

}
vonum dateAlter() /*修改函数*/
{
int k,t=0;
char num[5];
printf("\n\n Please enter the No. to be Amended\n\n");
scanf("%s",num);
for(k=0;k<i;k++)
{
if(strcmp(persons[k].num,num)==0)
{
t++;
break;
}
}
if(t==0)
printf("\n\n The No. does not Exist!\n\n");
if(t>0)
{
strcpy(persons[k].num,num);
printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30) Zip_Code(10)*******\n");
scanf("%s%s%s%s%s",persons[k].name,persons[k].sex,persons[k].phone,persons[k].address,persons[k].post_num);
printf("\n\n Alter Success!\n\n");
}
}
vonum dateSave() /*数据保存函数*/
{
int j;
fp=fopen("person.bat","w");
for(j=0;j<=i-1;j++)
{
fwrite(&persons[j],sizeof(struct person),1,fp);
}
printf("\n\n Save Success!\n\n");
}
vonum Exit() /*退出函数*/
{
char flag;
printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/
do{
flag=getch();
switch(flag)
{
case 'Y': /*保存*/
dateSave();
break;
case 'y': /*保存*/
dateSave();
break;
case 'N':break;
case 'n':break;
}
}while(flag!='Y'&&flag!='y'&&flag!='N'&&flag!='n');
}
vonum main()
{ char choose,yes_no;
dateload();
do
{
Menu_Select();
choose=getch();
switch(choose)
{
case '1': dateInput(); break; /*输入*/
case '2': dateShow(); break; /*显示*/
case '3': dateSearch(); break; /*查找*/
case '4': dateAlter(); break; /*修改*/
case '5': dateInsert(); break; /*插入*/
case '6': dateDelete(); break; /*删除*/
case '7': dateSave(); break; /*保存*/
case '0': Exit(); break; /*退出*/
default : printf(" Error!\n");
}
if(choose=='0')
break;
printf(" Would you like to be continue? (Y/N)\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
if(yes_no=='N'||yes_no=='n')
{
Exit();
break;
}
}while(yes_no!='Y'||yes_no!='y');
}
第3个回答  2010-12-24
每个入门的学生都要写这样的程序,还是自己做做吧,有好处的,不会可以问
不要直接就要代码
第4个回答  2011-01-01
我是见见本回答被提问者采纳
相似回答