C语言实现简易通讯录
更新时间:2020年4月25日 17:24 点击:1177
本文实例为大家分享了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 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; }
以上均为自己编写,个人能力有限,如有错误,还请各位批评指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
- 很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
- 这篇文章主要为大家详细介绍了原生JS实现微信通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-19
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了利用aotu.js实现微信自动添加通讯录中的联系人,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-28