Ⅰ 急!c语言 通讯录管理系统 快速查找功能如何实现
可以使用正则式来进行查找
使用正则式 ^a[a-zA-Z]+\\0$ 来腔李洞表示 以a开头后面接任意个字母,并以“\0”结尾的字符串
用 strcmp(s,"^a[a-zA-Z]+\扰孙\0$");来匹配 s是否是 以a开头后面接任意个字母并以“\0”结伍枯尾的字符串 这一形式,是则返回0。
通过循环语句一个一个的比较,当返回值为0的 输出该 字符串 s
Ⅱ 大神看看我的C语言通讯录查找函数。输入电话号码查找永远是未查找到
这段代码没有问题
你需要检查一下链表的数据内容,在调用本函数前,用输出语句先遍历一下链表看一下内容吧,估计是建表有问题,或是输入的数据存储不正确。
Ⅲ c语言 通讯录
/*编锋烂程建立一通讯簿,存放有姓悄基闹名、电话号码、住址,然后对通信簿进行查找、添加、修改及删除。*/#includestructperson{charname[8];chartel[15];charaddr[50];};charfilename[20];FILE*fp;voidcreat();voidoutput();voidsearch();voidappend();voidmodify();voiddelete();main(){intm;creat();while(1){printf("\n\n添加,请按1");printf("\n查找,请按2");printf("\n修改,请按3");printf("\n删除,请按4");printf("\n输出,请按5");printf("\n退出,请按0\n");scanf("%d",&m);if(m>=0&&m<=5){switch(m){case1:append();break;case2:search();break;case3:modify();break;case4:delete();break;case5:output();break;case0:exit();}printf("\n\n操作完毕,请再次选择!");}elseprintf("\n\n选择错误,请再次选择!");}}voidcreat(){structpersonone;longs1;printf("\n请输入通讯簿名:");scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("\n不能建立通讯簿!");exit();}fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址");printf("\n请输入姓名、电话号码及住址(以0结束)\n");scanf("%s",one.name);while(strcmp(one.name,"0")){scanf("%s%s",one.tel,one.addr);fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);scanf("%s",one.name);}fclose(fp);}voidoutput(){structpersonone;if((fp=fopen(filename,"r"))==NULL){printf("\n不能打开通讯簿!");exit();}printf("\n\n%20s\n"启罩,"通讯簿");while(!feof(fp)){fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);}fclose(fp);}voidappend(){structpersonone;if((fp=fopen(filename,"a"))==NULL){printf("\n不能打开通讯簿!");exit();}printf("\n请输入添加的姓名、电话号码及住址\n");scanf("%s%s%s",one.name,one.tel,one.addr);fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);fclose(fp);}voidsearch(){intk=0;charnamekey[8];structpersonone;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"rb"))==NULL){printf("\n不能打开通讯簿!");exit();}while(!feof(fp)){fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);if(!strcmp(namekey,one.name)){printf("\n\n已查到,记录为:");printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);k=1;}}if(!k)printf("\n\n对不起,通讯簿中没有此人的记录。");fclose(fp);}voidmodify(){intm,k=0;longoffset;charnamekey[8];structpersonone;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\n不能打开通讯簿!");exit();}while(!feof(fp)){offset=ftell(fp);fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);if(!strcmp(namekey,one.name)){k=1;break;}}if(k){printf("\n已查到,记录为:");printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);printf("\n请输入新姓名、电话号码及住址:");scanf("%s%s%s",one.name,one.tel,one.addr);fseek(fp,offset,SEEK_SET);printf("%ld",ftell(fp));fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);}elseprintf("\n对不起,通讯簿中没有此人的记录。");fclose(fp);}voiddelete(){intm,k=0,flag;longoffset1,offset2;charnamekey[8],valid[4];structpersonone;printf("\n请输入姓名:");scanf("%s",namekey);if((fp=fopen(filename,"r+"))==NULL){printf("\n不能打开通讯簿!");exit();}while(!feof(fp)){offset1=ftell(fp);fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);if(!strcmp(namekey,one.name)){k=1;break;}}if(k){printf("\n已查到,记录为");printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);printf("\n确实要删除,按1;不删除,按0:");scanf("%d",&m);if(m){fseek(fp,offset1,SEEK_SET);fprintf(fp,"%-10s%-20s%-50s\n","","","");}}elseprintf("\n对不起,通讯簿中没有此人的记录。");fclose(fp);}
Ⅳ C语言的通讯录代码是什么
#include
Ⅳ c语言中做一个通讯录,能够添加、删除、修改、查找
# include<stdio.h>
# include<string.h>
struct tongxun
{char name[20];
char number[20];
struct tongxun *next;
};
int all=0;
struct tongxun* tj() /*创建链表并添加成员*//**/
{
struct tongxun *head=NULL;
struct tongxun *p,*q;
system("CLS");
p=q=(struct tongxun *)malloc(sizeof(struct tongxun));
for(;;)
{printf("请输入姓名:(如果输入0则退出添加)\n");
scanf("%s",p->name);
if(!(strcmp(p->name,"0"))){ free(p);return head;}
else {printf("请输入电话号码:\n");
scanf("%s",p->number);
all++;
if(all==1)
{p->next=head;
q=p;
head=q;}
else
{p->next=NULL;
q->next=p;
q=p;
}
p=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
cz(struct tongxun *head) /*查找函数*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("请输入要查找的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("姓名:%s\n电话号码:%s\n",p->name,p->number);return;}
else p=p->next;
}
printf("没有此人\n");
return;
}
insert(struct tongxun *head) /*插入新成员*/
{struct tongxun* pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
while(1)
{printf("请输入姓名:(如果输入0则退出添加)\n");
scanf("%s",pnew->name);
if(!(strcmp(pnew->name,"0"))){ free(pnew);return head;}
else {printf("请输入电话号码:\n");
scanf("%s",pnew->number);
all++;
pnew->next=head;
head=pnew;
pnew=(struct tongxun *)malloc(sizeof(struct tongxun));
}
}
}
shuchu(struct tongxun *head) /*输出成员*/
{struct tongxun *p;
p=head;
printf("这里一共有%d个成员\n",all);
while(p!=NULL)
{printf("姓名:%s\n电话号码:%s\n",p->name,p->number);
p=p->next;
}
}
xg(struct tongxun *head) /*修改成员*/
{char name1[20],*a;
struct tongxun *p;
p=head;a=name1;
system("CLS");
printf("请输入要修改的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{if((strcmp(p->name,a))==0) {printf("请重新输入姓名:\n");
scanf("%s",p->name);
printf("请重新输入电话号码:\n");
scanf("%s",p->number);return;}
else p=p->next;
}
printf("没有此人\n");
return;
}
sc(struct tongxun *head) /*删除成员*/
{char name1[20],*a;
struct tongxun *p,*q;
p=q=head;a=name1;
system("CLS");
printf("请输入要删除的姓名:\n");
scanf("%s",a);
while(p!=NULL)
{
if((strcmp(p->name,a))==0) {all--;q->next=p->next;return;}
else {q=p;p=p->next;}
}
printf("没有此人\n");
return;
}
void main()
{struct tongxun *head;int i;
while(1)
{printf("请选择:\n");
printf("1.添加 2.查找 3.修改 4.删除 5.插入 6.输出\n");scanf("%d",&i);
switch(i)
{case 1:head=tj();break;
case 2:cz(head);break;
case 3:xg(head);break;
case 4:sc(head);break;
case 5:insert(head);break;
case 6:shuchu(head);break;
default:printf("输入有误,请重新输入:\n");break;
}
}
}
Ⅵ 如何用C语言做通讯录
剽窃代码即可。。
已经按照你的要求做了一个,VC6上运行确认了:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructPersonalInfo
{
charname[50];
charaddress[30];
chartelno[30];
charpostcode[30];
structPersonalInfo*next;
}INFO;
INFO*head;
voidInitiate();
voidMenu();
voidCreate();//的功能是:创建新的通讯录。
voidAdd();//在通讯录的末尾,写入新的信息,并返回选单
voidFind();//查找记录
voidAlter();//修改记录如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
voidDelete();//删除某人的信息,如果未找到要删的人,提示通讯录中没有此人的信息,并返回选单。
voidList();//的功能是:显示通讯录中的所有记录。
//初始化
voidInitiate()
{
if((head=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
head->next=NULL;
}
//显示菜单
voidMenu()
{
printf("**************欢迎使用通讯录系统**************");
printf(" ");
printf(" ");
printf("1.创建通讯录。 ");
printf("2.插入信息。 ");
printf("3.查询记录 ");
printf("4.修改记录 ");
printf("5.删除记录! ");
printf("6.显示所有记录 ");
printf("0.退出通讯录 ");
printf("请输入0~6 ");
}
//创建通讯录
voidCreate()
{
INFO*p1[100],*p2;
intm,i;
printf("请输入创建个数:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO*)malloc(sizeof(INFO));
printf("请输入第%d条信息! ",i);
printf("姓名: ");
scanf("%s",&p1[i]->name);
printf("地址: ");
scanf("%s",&p1[i]->address);
printf("电话: ");
scanf("%s",&p1[i]->telno);
printf("邮编: ");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL)
head->next=p1[i];
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);//找到结点尾
p2->next=p1[i];
}
}
printf("信息已添加! ");
return;//保存到链表
}
//添加通讯录信息
voidAdd()
{
INFO*p,*q;
if((q=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
printf("请输入要添加的信息! ");
printf("姓名: ");//添加信息
scanf("%s",&q->name);
printf("性别: ");
scanf("%s",q->address);
printf("电话: ");
scanf("%s",q->telno);
printf("城市: ");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next);
p->next=q;
q->next=NULL;
printf("此信息已添加!");
return;
}
//查找通讯录信息
voidFind()
{
INFO*p;
charname[50];
if(head->next==NULL)
{
printf("此通讯录为空! ");
return;
}
printf("请输入要查找的姓名: ");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("姓名 地址 邮编 电话 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
elseif(p->next==NULL)
printf("无此信息! ");
}
}
//修改通讯录信息
voidAlter()
{
charname[50];//先查找后删除
INFO*p,*p1;
if(head->next==NULL)
{
printf("此通讯录为空! ");
return;
}
printf("请输入要修改的姓名: ");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
break;
elseif(p->next==NULL)
{
printf("无此信息! ");
return;
}
}
p1=(INFO*)malloc(sizeof(INFO));
printf("姓名: ");//添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("性别: ");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("电话: ");
scanf("%s",p1->telno);
strcpy(p->telno,p1->telno);
printf("城市: ");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("此信息已修改! ");
//显示修改的信息
printf("姓名 地址 邮编 电话 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
free(p1);
}
//删除通讯录信息
voidDelete()
{
charname[50];//先查找后删除
INFO*p=head->next,*p1=head->next,*p2;
if(head->next==NULL)
{
printf("此通讯录为空! ");
return;
}
printf("请输入要删除的姓名: ");
scanf("%s",name);
while((strcmp(p->name,name)!=0)&&p->next!=NULL)
{
p1=p;
p=p->next;
}
if(strcmp(name,p->name)==0)//输出删除信息
{
if(p==head->next&&p->next!=NULL)
head->next=p->next;
elseif(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("信息已删除,先此通讯录为空!! ");
return;
}
else
p1->next=p->next;
}
else
{
printf("此信息不存在!!! ");
return;
}
printf("此信息已删除!");
printf("姓名 地址 邮编 电话 ");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s %s %s %s ",p2->name,p2->address,p2->postcode,p2->telno);
}
//显示所有记录
voidList()
{
INFO*p;
if(head->next==NULL)
{
printf("此通讯录中无记录! ");
return;
}
printf("姓名 地址 邮编 电话 ");
for(p=head->next;p!=NULL;p=p->next)
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
voidmain()
{
intchoice;
charyes_no;
system("colora");
Initiate();
do
{
Menu();
printf("请选择0-6的数字 ");
scanf("%d",&choice);
printf(" ");
switch(choice)
{
case1:Create();
break;
case2:Add();
break;
case3:Find();
break;
case4:Alter();
break;
case5:Delete();
break;
case6:List();
break;
case0:
printf("************感谢您的使用************ ");
exit(0);
break;
default:
printf("输入有误!请重新输入 ");
break;
}
printf("是否继续YorN? ");
do
{
scanf("%c",&yes_no);
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}
Ⅶ C语言程序设计:通讯录程序设计
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "dos.h"
FILE *fp;
int i; //i是全局变量 可代替length
struct address
{ char postnum[10];
char a[40]; //家庭地址
};
struct birthday
{ int year;
int month;
int day;
};
struct ffriend
{ int num; //序号
char name[20];
char sex;
char telephone[13];
struct birthday birthday;
struct address address;
}
friends[50];
void Load()
{
int j;
long k;
fp=fopen("friend.txt","a+"); //打开文件friend.txt
if(fp!=NULL)
{
for(i=1;i<50;i++)
{
j=fgetc(fp);
if(j==EOF) //判断是否到了文件尾
return;
k=i-1;
fseek(fp,k*sizeof(struct ffriend),SEEK_SET);
fread(&friends[i],sizeof(struct ffriend),1,fp); //从文件中读取一条记录
}
}
else
{
fp=fopen("friend.txt","w");
i=1;
}
}
void Show(int j)
{
// friends[j].num=i;
printf("\n\n\t编号-Nnumber: %3d",friends[j].num);
printf("\n\t姓名-Name:%-20s",friends[j].name);
printf("\n\t性别-Sex:%c",friends[j].sex);
printf("\n\t联系电话-Telephone:%-13s",friends[j].telephone);
printf("\n\t出生日期-Birthday:%4d-%2d-%3d",friends[j].birthday.year,friends[j].birthday.month,friends[j].birthday.day);
printf("\n\t邮编-Postnum:%-10s",friends[j].address.postnum);
printf("\n\t通信地址-address:%-40s",friends[j].address.a);
}
void Append(int j)
{
fflush(stdin); //区内清除文件缓冲区,文件以写方式打开时将缓冲容写入文件
//stdin是一个标准FILE*(文件型指针)指向通常是用键盘的输入的输入流
friends[j].num=j;
printf("\n\t\t\t序号-Number:%d",j);
printf("\n\t\t\t姓名-Name:");
scanf("%s",friends[j].name);
fflush(stdin); //为什么没有fflush(stdin); 的效果会自动跳过呢?
printf("\t\t\t性别-Sex(m/w):"); //为什么输入汉字男女也会自动跳过联系电话呢
scanf("%c",&friends[j].sex);
printf("\t\t\t联系电话-telephone:");
scanf("%s",friends[j].telephone);
printf("\t出生日期-birthday");
printf("\n\t\t\t年份-year:");
scanf("%d",&friends[j].birthday.year);
printf("\t\t\t月份-month:");
scanf("%d",&friends[j].birthday.month);
printf("\t\t\t日-day:");
scanf("%d",&friends[j].birthday.day);
printf("\t\t\t邮编-Postnumber:");
scanf("%s",friends[j].address.postnum);
printf("\t\t\t通信地址-Address:");
scanf("%s",friends[j].address.a);
getchar();
}
void Delete()
{
int k;
printf("\n\tDelete 序号-Number:");
scanf("%d",&k);
if(k<=i)
{
for(int j=k;j<i+1;j++) /*插入位置后的元素顺序后移*/
{
strcpy(friends[j].name,friends[j+1].name); /*交换元素内容*/
friends[j].sex=friends[j+1].sex;
strcpy(friends[j].telephone,friends[j+1].telephone);
friends[j].birthday.year=friends[j+1].birthday.year;
friends[j].birthday.month=friends[j+1].birthday.month;
friends[j].birthday.day=friends[j+1].birthday.day;
strcpy(friends[j].address.postnum,friends[j+1].address.postnum);
strcpy(friends[j].address.a,friends[j+1].address.a);
}
i--;
}
else
{
printf("输入的序号太大!");
}
}
void Modify(int j)
{
Append(j);
}
void Save()
{
int j;
fp=fopen("friend.txt","w");
for(j=1;j<=i;j++)
{
fwrite(&friends[j],sizeof(struct ffriend),1,fp);
}
fclose(fp);
}
void main()
{
int j;
char grade;
char searchname[10];
Load();
i--;
do
{
printf("\t\t\t\t简易通讯录\n\n");
printf("功能选择(Function choose)\n");
printf("\1A.读取(Read)\n");
printf("\2B.增添(Append)\n");
printf("\6C.插入(Insert)\n");
printf("\5D.删除(Delete)\n");
printf("\5E.查询(Search)\n");
printf("\6F.修改(Modify)\n");
printf("\2G.保存(Save)\n");
printf("\1H.退出(Quit)\n");
printf("请选择(Choice)\n注:输入A~H的大写字母\n");
scanf("%c",&grade);
switch(grade)
//加个大写和小写 都可以啊
{
case 'A': j=1; //显示功能
while(getchar()!=0x1b&&j<=i) //增添按Esc键退出
{
Show(j++);
printf("\n请按回车键继续!");
}
if(j-1<1)
{
printf("\n\t空文档,无任何记录-Empty Note\n");
printf("\n请按回车键继续!");
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'B': //增加功能
while(i<=50) //增加按ESC键退出的功能
{
i++;
Append(i);
printf("\t是否继续增加?y/n");
//修改 加上else if 其他就跳出或强制打印出出错
char a=getchar();
if(a=='n'||a=='N')
break;
}
if(i==51)
printf("\n\t文档已满,无法增加记录-note full");
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'C':
int k;
printf("\n\t输入要插入的位置:");
scanf("%d",&k);
j=i+1;
friends[j].num=j;
for(j;j>k;j--) //插入功能
{
strcpy(friends[j].name,friends[j-1].name); //数据后移
friends[j].sex=friends[j-1].sex;
strcpy(friends[j].telephone,friends[j-1].telephone);
friends[j].birthday.year=friends[j-1].birthday.year;
friends[j].birthday.month=friends[j-1].birthday.month;
friends[j].birthday.day=friends[j-1].birthday.day;
strcpy(friends[j].address.postnum,friends[j-1].address.postnum);
strcpy(friends[j].address.a,friends[j-1].address.a);
}
Append(k);
i++;
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'D': //删除功能 //增添随意删除多条记录的功能
Delete();
if(i<1)
printf("\n没有记录-No records\n");
printf("\n请按回车键继续!");
getchar();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'E': //查询功能
printf("\n\t请输入要查询记录的相关姓名:"); //增添查询按列号的
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比较字符串
{
Show(j);
break;
}
}
if(i<1)
{
printf("\n 没有您所查询的记录-No records");
printf("\n 请按回车键继续!");
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'F': //修改功能 / /增添按序列号查询
printf("\n\t请输入要修改记录的相关姓名:");
gets(searchname);
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比较字符串
{
Modify(j);
// getchar(); //加个输出确定修改吗
}
}
if(i<1) //修改功能
{ printf("\n 没有您所要修改的记录-No records");
printf("\n 请按回车键继续!");
getchar();
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'G':
Save(); //存盘功能
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'H': //退出功能
char x;
printf("是否保存?yes/no\n");
scanf("%s",&x);
//getchar();
// getchar();
if(x=='y')
{
Save();
exit(0);
}
else
exit(0);
default:
printf("\n\t输入有误,请输入正确的序列号!");
printf("\n请按回车键继续!");
getchar();
printf("\n\t\t\t\t\t\t\t此次操作结束");
printf("\n\t------------------------------------------------------------\t\t\n");
}
}while(1);
}
Ⅷ C语言编写通讯录怎么按姓名查找联系人
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineN50
structfriend_list{
charname[16];
chartel[16];
charemail[20];
}fri[N];
/*voidinitstu(structfriend_list*p);*/
voidadd_friend(structfriend_list*p);
voidsearch_friend(structfriend_list*p);
voiddel_friend(structfriend_list*p,char*name);
voidrenew_friend(structfriend_list*p,char*name);
intn=0;//全局变量,用来记录现有人数
voidmain(void){
intfriendnumber=0;
intchose=0;
while(1){
printf("1:新增联系人 ");
printf("2:按姓名查找联系人 ");
printf("3:按姓名删除联系人 ");
printf("4:按姓名修改联系人 ");
printf("0:退出 ");
printf(" 请选择输入(0-4):");
scanf("%d",&chose);
switch(chose){
case1:add_friend(fri);break;
case2:
case3:
case4:
case0:
default:return;
}
}
}
voidadd_friend(structfriend_list*p){
if(n>=N){
printf("已经满员,不能添加了。 ");
return;
}
printf("请输入新增联系人的姓名,联系电话,电子邮箱: ");
scanf("%s%s%s",p[n].name,p[n].tel,p[n].email);
++n;
}
voidsearch_friend(structfriend_list*p){
inti,flag=1;
charname[16];
printf("请输入要查找的联系人的名字: ");
scanf("%s",name);
for(i=0;i<n&&flag;i++){
if(strcmp(p[i].name,name)==0){
printf("%s%s%s ",name,p[i].tel,p[i].email);
flag=0;
}
}
if(flag)printf("没有找到名字叫:%s的人! ",name);
}
Ⅸ c语言通讯录程序
以前写了一个简单的:
#include <stdio.h>
#include <stdlib.h> /*与malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std;
#define maxlen 15
struct persons
{int num; /*定义结构体数组用于缓存数据*/
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
}persons[maxlen];
typedef struct lnode
{ /*通讯录结构中结点的定义*/
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
linklist head=NULL,r=NULL; /*定义头指针和尾指针*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[10],ch;
char tel_no1[15];
char arch1;
char sim_no1;
char e_addr1[20];
char s1[20];
FILE *fp; /*定义文件指针*/
void creat() /*将文件的信息读入结构体数组在转存入链表中*/
{ int j;
long k;
fp=fopen("数据文件.txt","r t"); /*打开文件*/
if(fp!=NULL)
{for(i=0;i<=maxlen;i++ )
{ j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/
s->num=persons[i].num;
strcpy(s->name,persons[i].name);
strcpy(s->e_addr,persons[i].e_addr);
strcpy(s->tel_no,persons[i].tel_no);
s->sim_no=persons[i].sim_no;
s->arch=persons[i].arch;
if(head==NULL) /*用尾插法将其插入链表中*/
{head=s;r=head;head->next=NULL;}
else
{r->next=s;
r=s;r->next=NULL;
}
}fclose(fp);
}
else
{ fp=fopen("数据文件.txt","w"); /*不能打开另开辟一个文件*/
i=1;
}
}
void Show()
{printf("成功调用该函数\n");}
void Delete()
{printf("成功调用该函数\n");}
void Input() /*向.通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode));
printf("\n\n\t请输入该用户的信息:");
printf("姓名:");
scanf("%s",&s->name);
printf("电话号码:");
scanf("%s",&s->tel_no);
printf("单键拨号:");
scanf("%s",&s->sim_no);
printf("E-mail地址:");
scanf("%s",&s->e_addr);
printf("类别:");
scanf("%s",&s->arch);
if(head==NULL)printf("\n\n");
else
{p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next;
if(p8!=NULL)
{printf("您添加的用户已存在!");
free(s);}}
if(head==NULL)
{
s->next = 0;
head=s;
r = s;
}
else
{
s->next = 0;
r->next = s;
r = s;
}
}
void Alter()
{ printf("success!\n");}
int main()
{
system("color a");
creat();
do
{
printf("\n\n\t\t请选择操作:");
printf("\n\t\t1.显示通讯录");
printf("\n\t\t2.删除通讯录");
printf("\n\t\t3.添加通讯录");
printf("\n\t\t4.编辑通讯录");
printf("\n\n\n");
printf("\t请选择:");
cin>>ch;
switch(ch)
{ case '1': Show(); /*用单条件多选择语句实现调用与循环*/
break;
case '2': Delete();
break;
case '3': Input();
break;
case '4': Alter();
break;
fclose(fp);
exit(0);
break;
default:
printf("\n\t The num should 1-6!!! \n");
break;
}
}
while(1);
}