C语言实现简易通讯录分享!

本文实例为大家分享了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 0  typedef 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 Errorn");   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 Errorn");   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 Errorn");   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 Errorn");   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 Errorn");   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("姓名:%sn",q->name);   if(q->s=='m')   printf("性别:男n");   else   printf("性别:女n");   printf("电话号码:%ldn",q->number);   printf("备注:%sn",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("姓名:%sn",q->name);   if(q->s=='m')   printf("性别:男n");   else   printf("性别:女n");   printf("电话号码:%ldn",q->number);   printf("备注:%sn",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("姓名:%sn",q->name);   if(q->s=='m')   printf("性别:男n");   else   printf("性别:女n");   printf("电话号码:%ldn",q->number);   printf("备注:%sn",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("姓名:%sn",q->name);   if(q->s=='m')   printf("性别:男n");   else   printf("性别:女n");   printf("电话号码:%ldn",q->number);   printf("备注:%sn",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("姓名:%sn",p->name);    if(p->s=='m')    printf("性别:男n");    else    printf("性别:女n");    printf("电话号码:%ldn",p->number);    printf("备注:%sn",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("姓名:%sn",p->name);    if(p->s=='m')    printf("性别:男n");    else    printf("性别:女n");    printf("电话号码:%ldn",p->number);    printf("备注:%sn",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("姓名:%sn",p->name);   if(p->s=='m')    printf("性别:男n");   else    printf("性别:女n");   printf("电话号码:%ldn",p->number);   printf("备注:%sn",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;  }

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言实现简易通讯录分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483460.html

(1)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐