首页 > 编程 > C > 正文

C语言实现简易通讯录

2020-01-26 13:21:59
字体:
来源:转载
供稿:网友

本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下

功能描述:

1、存储联系人的相关信息,包括姓名、性别、电话号码、备注
2、可输出通讯录全部信息
3、清空通讯录的
4、用户交互界面
5、插入新联系人信息
6、查找联系人,包括“按姓名查找”和“按电话号查找”两种
7、删除联系人,包括“按姓名删除”和“按电话号删除”两种
8、按性别筛选联系人信息

在本次通讯录的编写代码中,涉及到了C高级和数据结构的一些知识,包括指针,结构体,数据结构(链表)等。 

代码:

#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE 20#define OK 1#define Error 0typedef struct Node //定义一个存储数据的结构体{             char name[SIZE]; char s; long int number; char remark[SIZE]; struct Node *next;}Node;typedef struct Node *LinkList; //定义了结构体指针 /************创建一个空的结点,作为头结点***************/LinkList CreateEmptyLinkList(){ LinkList p; p=(LinkList)malloc(sizeof(Node));  //手动申请一个堆区的地址,为结点提供空间 if(p==NULL) { printf("CreateEmptyLinkList Error/n"); exit(0); } p->next=NULL; return p;}  /************头插法添加新的联系人************************/ int CreateLinkList(LinkList Q){ LinkList p; char name[SIZE],s,remark[SIZE]; long int num; p=(LinkList)malloc(sizeof(Node)); if(p==NULL) { printf("CreateLinkList Error/n"); return Error; } printf("请输入姓名:"); scanf("%s",name); strcpy(p->name,name); printf("请输入性别(m/男,f/女):"); scanf("%s",&s); while(s!='m'&&s!='f') { printf("输入错误/n"); printf("请输入性别(m/男,f/女):"); scanf("%s",&s); } printf("请输入电话号码:"); scanf("%ld",&num); printf("请输入备注:"); scanf("%s",remark); p->s=s; p->number=num; strcpy(p->remark,remark); p->next=Q->next; Q->next=p; return OK;}/*********************制作原始联系人信息****************/int FirstCreateLinkList(LinkList Q){ LinkList x,y,z; x=(LinkList)malloc(sizeof(Node)); if(x==NULL) { printf("CreateLinkList Error/n"); return Error; } strcpy(x->name,"LiLi"); x->s='f'; x->number=10110; x->next=Q->next; strcpy(x->remark,"LiLi"); Q->next=x; y=(LinkList)malloc(sizeof(Node)); if(y==NULL) { printf("CreateLinkList Error/n"); return Error; } strcpy(y->name,"NaNa"); y->s='f'; y->number=11100; strcpy(y->remark,"NaNa"); y->next=Q->next; Q->next=y; z=(LinkList)malloc(sizeof(Node)); if(z==NULL) { printf("CreateLinkList Error/n"); return Error; } strcpy(z->name,"LiuLiu"); z->s='m'; z->number=10000; strcpy(z->remark,"LiuLiu"); z->next=Q->next; Q->next=z; return OK;}/*****************按姓名删除一个联系人****************************/ int DeleteNameLinkList(LinkList L,char name1[SIZE]){ LinkList p,q; p=L; while(p->next && strcmp(p->next->name,name1)) { p=p->next; } if(!p->next) { printf("该通讯录没有要删除的联系人,删除失败!/n"); return Error; } else { q=p->next; printf("已删除联系人:/n"); printf("姓名:%s/n",q->name); if(q->s=='m') printf("性别:男/n"); else printf("性别:女/n"); printf("电话号码:%ld/n",q->number); printf("备注:%s/n",q->remark);   p->next=q->next; free(q); return OK; }}/*****************按号码删除一个联系人****************************/ int DeleteNumLinkList(LinkList L,long int j){ LinkList p,q; p=L; while((p->next->number!=j)&&((p->next)!=NULL)) { p=p->next; if((p->next)==NULL) {  printf("该通讯录没有要删除的联系人,删除失败!/n");  return Error; } } q=p->next; printf("已删除联系人:/n"); printf("姓名:%s/n",q->name); if(q->s=='m') printf("性别:男/n"); else printf("性别:女/n"); printf("电话号码:%ld/n",q->number); printf("备注:%s/n",q->remark);  p->next=q->next; free(q); return OK;} /******************按姓名查找一个联系人****************************/int FindNameLinkList(LinkList L,char name2[SIZE]){ LinkList p,q; p=L; while(strcmp(p->next->name,name2)!=0&&(p->next!=NULL)) { p=p->next; if(p->next==NULL) {  printf("该通讯录没有您要找的人,查找失败/n");  return Error; } } q=p->next; printf("找到记录:/n"); printf("姓名:%s/n",q->name); if(q->s=='m') printf("性别:男/n"); else printf("性别:女/n"); printf("电话号码:%ld/n",q->number); printf("备注:%s/n",q->remark); printf("*********************************/n"); return OK;}/******************按号码查找一个联系人****************************/int FindNumLinkList(LinkList L,long int j){ LinkList p,q; p=L; while((p->next->number!=j)&&((p->next)!=NULL)) { p=p->next; if((p->next)==NULL) {  printf("该通讯录没有您要找的人,查找失败/n");  return Error; } } q=p->next; printf("找到记录:/n"); printf("姓名:%s/n",q->name); if(q->s=='m') printf("性别:男/n"); else printf("性别:女/n"); printf("电话号码:%ld/n",q->number); printf("备注:%s/n",q->remark); printf("*********************************/n"); return OK;}/******************查找一个联系人****************************/int FindLinkList(LinkList L){ LinkList head = L;    printf("*********************************/n"); printf("请输入查找联系人的方式:/n"); printf("1:按姓名/n"); printf("2:按号码/n"); printf("0:返回/n"); printf("*********************************/n"); printf("请选择:"); int k=3;  //确保下面while循环运行 while(k) { scanf("%d",&k); char Delname1[SIZE]; long int N; if(k>2||k<0) {  printf("输入错误,请重新输入:");  scanf("%d",&k);  while(getchar()!='/n')  printf("/n"); } switch(k) {  case 1:  printf("请输入姓名:");  scanf("%s",Delname1);  FindNameLinkList(head,Delname1);  k=0;  break;  case 2:  printf("请输入号码:");  scanf("%ld",&N);  FindNumLinkList(head,N);  k=0;  break; }  }}/********************清空联系人信息*************************/int ClearLinkList(LinkList L){ LinkList p,q; p=L->next; while(p) { q=p->next; free(p); p=q; } L->next=NULL; printf("清空所有联系人成功/n"); return OK;} /*********************筛选所有男性联系人**********************/int ScreenMaleLinkList(LinkList L){ LinkList p; p=L->next; int i=0; while(p) { if(p->s=='m') {  printf("姓名:%s/n",p->name);  if(p->s=='m')  printf("性别:男/n");  else  printf("性别:女/n");  printf("电话号码:%ld/n",p->number);  printf("备注:%s/n",p->remark);   printf("*********************************/n"); } p=p->next; i++; } if(i==0&&!p) { printf("无男性联系人/n"); } return OK;}/*********************筛选所女性联系人**********************/int ScreenFemaleLinkList(LinkList L){ LinkList p; p=L->next; int i=0; while(p) { if(p->s=='f') {  printf("姓名:%s/n",p->name);  if(p->s=='m')  printf("性别:男/n");  else  printf("性别:女/n");  printf("电话号码:%ld/n",p->number);  printf("备注:%s/n",p->remark);   printf("*********************************/n"); } p=p->next; i++; } if(i==0&&!p) { printf("无女性联系人/n"); } return OK;}/************************通讯录功能界面*****************/void FunctionalInterface(){ system ("clear"); printf("*********************************/n"); printf("欢迎使用Linux通讯录!/n"); printf("*********************************/n"); printf("1:输出全部联系人信息/n"); printf("2:插入新的联系人/n"); printf("3:删除一个联系人/n"); printf("4:查找某个联系人/n"); printf("5:清空全部联系人信息/n"); printf("6:筛选全部男性联系人信息/n"); printf("7:筛选全部女性联系人信息/n"); printf("0:退出/n"); printf("*********************************/n");}/*****************删除一个联系人****************************/ int DeleteLinkList(LinkList L){ LinkList head = L; printf("*********************************/n"); printf("请输入删除联系人的方式:/n"); printf("1:按姓名/n"); printf("2:按号码/n"); printf("0:返回/n"); printf("*********************************/n"); printf("请选择:"); int i=3; while(i) { scanf("%d",&i); char Delname[SIZE]; long int j; if(i>2||i<0) {  printf("输入错误,请重新输入:");  scanf("%d",&i);  while(getchar()!='/n')  printf("/n"); } switch(i) {  case 1:  printf("请输入姓名:");  scanf("%s",Delname);  DeleteNameLinkList(head,Delname);  i=0;  break;  case 2:  printf("请输入号码:");  scanf("%ld",&j);  DeleteNumLinkList(head,j);  i=0;  break; }  } }/*******************遍历打印整个链表**********************/int PrintfLinkList(LinkList L){ LinkList p,q; q=p=L->next; int i=0; while(q) { i++; q=q->next; if(i==0&&!p) { printf("无联系人/n"); } } printf("共有%d个联系人/n",i); while(p) { printf("*********************************/n"); printf("姓名:%s/n",p->name); if(p->s=='m')  printf("性别:男/n"); else  printf("性别:女/n"); printf("电话号码:%ld/n",p->number); printf("备注:%s/n",p->remark);  p=p->next; } printf("*********************************/n"); return OK; } int main(){ int a; LinkList head; head=CreateEmptyLinkList(); FirstCreateLinkList(head); FunctionalInterface(); while(a) { printf("请输入您要选择的功能:"); scanf("%d",&a); if(a>7||a<0) {  printf("输入错误,请重新输入:");  scanf("%d",&a);  while(getchar()!='/n')  printf("/n"); } switch(a) {  case 1:  PrintfLinkList(head);  break;  case 2:  CreateLinkList(head);  break;  case 3:  DeleteLinkList(head);  break;  case 4:  FindLinkList(head);  break;  case 5:  ClearLinkList(head);  break;  case 6:  ScreenMaleLinkList(head);  break;  case 7:  ScreenFemaleLinkList(head);  break;  } if(a!=0) {  printf("请按回车键继续:");  getchar();  if(getchar()=='/n')  FunctionalInterface(); } } printf("欢迎再次使用/n"); return 0;}

以上均为自己编写,个人能力有限,如有错误,还请各位批评指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选