C语言实现电话簿管理系统
更新时间:2020年4月25日 17:24 点击:1394
本文实例为大家分享了C语言电话簿管理系统的具体代码,供大家参考,具体内容如下
/*大二实践周所作, 时间:2017.9,11 电话簿管理系统 */ #include<string.h> #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define NULL 0 typedef struct lianxiren{ char job[30]; char number[20]; char name[10]; char email[30]; struct lianxiren*next; }lianxiren; #define LEN sizeof(lianxiren) lianxiren* creat_list() { lianxiren *head,*p1,*p2; char name[10];int n=0; head=NULL; p1=(lianxiren *)malloc(LEN); p2=p1; printf("请输入姓名(姓名为0时停止创建):"); gets(name); if(strcmp(name,"0")==0)return 0; else { strcpy(p1->name,name); printf("请输入电话号码:");gets(p1->number); printf("请输入工作单位:");gets(p1->job); printf("请输入E-mail:");gets(p1->email); } while(1) { n++; if(n==1) head=p1; else p2->next=p1; p2=p1; printf("请输入姓名(姓名为0时停止创建):"); gets(name); if(strcmp(name,"0")==0)break; else{ p1=(lianxiren*)malloc(LEN); strcpy(p1->name,name); printf("请输入电话号码:");gets(p1->number); printf("请输入工作单位:");gets(p1->job); printf("请输入E-mail:");gets(p1->email);} }p2->next=NULL; return head; }//链表创建函数 lianxiren* shifang_list(lianxiren*head) { lianxiren*p1; for(;head!=NULL;) { p1=head; head=head->next; free(p1); } return head; }//释放链表函数 void print_list(lianxiren*head) { void caidan(); int n=0; printf("现在通讯录中有如下成员:"); while(head!=NULL) { printf("\n名字:");puts(head->name); printf("\n电话号码:");puts(head->number); printf("\n工作单位:");puts(head->job); printf("\nE-mail:");puts(head->email); putchar('\n'); head=head->next;n++; if(n%8==0){ printf("按回车键显示下一页"); getchar(); system("cls"); caidan(); } } printf("总共%d个联系人\n",n); }//打印链表函数 int length(lianxiren*head) { int n = 0; lianxiren *p; p = head; while(p != NULL) { p = p->next; n++; } return n; } void paixu1(lianxiren*head) { void caidan(); int n=length(head); int i,j; lianxiren temp,*p; p=head; lianxiren a[100]; for(i=1;i<=n;i++) { strcpy(a[i].name,p->name); strcpy(a[i].number,p->number); strcpy(a[i].job,p->job); strcpy(a[i].email,p->email); p=p->next; } for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) {if(strcmp(a[j].number,a[j+1].number)>0) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } printf("现在通讯录中有如下成员:"); for(i=1;i<=n;i++) { printf("\n名字:");puts(a[i].name); printf("\n电话号码:");puts(a[i].number); printf("\n工作单位:");puts(a[i].job); printf("\nE-mail:");puts(a[i].email); putchar('\n'); if(i%8==0){ printf("按回车键显示下一页"); getchar(); system("cls"); caidan(); } } printf("总共%d个联系人\n",n); } void paixu2(lianxiren*head) { void caidan(); int n=length(head);int i,j; lianxiren temp,*p; p=head; lianxiren a[100]; for(i=1;i<=n;i++) { strcpy(a[i].name,p->name); strcpy(a[i].number,p->number); strcpy(a[i].job,p->job); strcpy(a[i].email,p->email); p=p->next; } for(i=1;i<=n-1;i++) { for(j=1;j<=n-i;j++) {if(strcmp(a[j].name,a[j+1].name)>0) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } printf("现在通讯录中有如下成员:"); for(i=1;i<=n;i++) { printf("\n名字:");puts(a[i].name); printf("\n电话号码:");puts(a[i].number); printf("\n工作单位:");puts(a[i].job); printf("\nE-mail:");puts(a[i].email); putchar('\n'); if(i%8==0){ printf("按回车键显示下一页"); getchar(); system("cls"); caidan(); } } printf("总共%d个联系人\n",n); } void paixu_list(lianxiren*head) { void caidan(); if(head==NULL) {printf("电话簿为空,请重新创建!"); return; } char a; printf("1,按电话号码升序排序\n2,按姓名字母升序排序\n"); printf("请选择一种排序方法:"); a=getchar(); getchar(); switch(a){ case'1':paixu1(head);break; case'2':paixu2(head);break; default:printf("输入有误!\n");break; } } void chazhao1(lianxiren*head) {if(head==NULL) { printf("电话簿为空,请重新创建"); return; } char name[10]; printf("请输入名字:");gets(name); while(strcmp(name,head->name)!=0) {head=head->next; if(head==NULL){printf("电话簿未有此联系人\n"); return;} } printf("%s的电话号码为:",name); puts(head->number); printf("\n工作单位:");puts(head->job); printf("\nE-mail:");puts(head->email); }//通过名字查找 void chazhao2(lianxiren*head) {if(head==NULL) { printf("电话簿为空,请重新创建"); return; } char number[20]; printf("请输入电话号码:");gets(number); while(strcmp(number,head->number)!=0) {head=head->next; if(head==NULL){printf("电话簿未有此联系人\n"); return;} } printf("%s的主人为:",number); puts(head->name); printf("\n工作单位:");puts(head->job); printf("\nE-mail:");puts(head->email); }//通过电话号码查找 void chazhao(lianxiren*head) { int n; printf(" 1,通过名字查找\n 2,通过电话号码查找\n 3,退出\n请选择你需要的服务:"); scanf("%d",&n); getchar(); while(1) { switch(n){ case 1:{chazhao1(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break; case 2:{chazhao2(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break; case 3:return;break; default:{printf("输入不正确!");printf("请选择服务项:");scanf("%d",&n);getchar();}break; }} }//查找联系人 void add_list(lianxiren*head) { lianxiren*p1,*p2,*h; char name[10]; printf("请输入名字(名字为0时停止)"); gets(name); if(strcmp(name,"0")!=0) { p1=(lianxiren*)malloc(LEN); strcpy(p1->name,name); printf("请输入电话号码:");gets(p1->number); printf("请输入工作单位:");gets(p1->job); printf("请输入E-mail:");gets(p1->email); } else return; h=p1; while(1) { p2=p1; printf("请输入名字(名字为0时停止)"); gets(name); if(strcmp(name,"0")==0)break; else{ p1=(lianxiren*)malloc(LEN); strcpy(p1->name,name); printf("请输入电话号码:");gets(p1->number); printf("请输入工作单位:");gets(p1->job); printf("请输入E-mail:");gets(p1->email); p2->next=p1; } } p1=head->next; head->next=h; p2->next=p1; }//添加链表函数 lianxiren*xiugai_list(lianxiren*head) { char a[20]; printf("请输入联系人名字或电话:"); gets(a); if(head==NULL) { printf("电话簿为空,请重新创建"); return head; } lianxiren*p=head; while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0) { p=p->next; if(p==NULL){printf("电话簿未有此联系人\n"); return head;} } printf("查找到了!"); printf("\n名字:");puts(p->name); printf("\n电话号码:");puts(p->number); printf("\n工作单位:");puts(p->job); printf("\nE-mail:");puts(p->email); putchar('\n'); int n; while(1) {printf("请选择操作项(1,名字2,电话号码3,工作单位4,E-mail 5,退出):"); scanf("%d",&n); getchar(); switch(n) { case 1:{printf("请输入名字:");gets(p->name);}break; case 2:{printf("请输入电话号码:");gets(p->number);}break; case 3:{printf("请输入工作单位:");gets(p->job);}break; case 4:{printf("请输入E-mail:");gets(p->email);}break; case 5:return head;break; default:printf("输入错误!");break; } } }//修改链表函数 lianxiren*delete_list(lianxiren*head) { char a[20]; printf("请输入联系人名字或电话:"); gets(a); if(head==NULL) { printf("电话簿为空,请重新创建"); return head; } lianxiren*p=head,*p1; while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0) { p1=p; p=p->next; if(p==NULL){printf("电话簿未有此联系人\n"); return head;} } printf("查找到了!"); printf("\n名字:");puts(p->name); printf("\n电话号码:");puts(p->number); printf("\n工作单位:");puts(p->job); printf("\nE-mail:");puts(p->email); putchar('\n'); char n; printf("是否删除该联系人(Y/N)"); n=getchar(); switch(n) { case 'y': case 'Y':{if(p==head){head=p->next;free(p);}else{p1->next=p->next;free(p);}printf("成功删除!");}break; case 'N': case 'n':printf("取消删除!");break; default:printf("输入错误!");break; } return head; }//删除链表函数 void save_list(lianxiren*head) {FILE *fp; if((fp=fopen("dianhuabu.dat","wb"))==NULL) { printf("File cannot be opened\n"); exit(0);} if(head==NULL) { printf("通讯录为空\n"); return; } lianxiren*p1=head; while(p1!=NULL) { if(fwrite(p1,LEN,1,fp)!=1){ printf("cannot open file\n"); return;} p1=p1->next; } printf("保存完毕!\n"); fclose(fp); }//文件写入函数 lianxiren*load_list(lianxiren*head) {FILE *fp; if((fp=fopen("dianhuabu.dat","rb"))==NULL) { printf("电话簿为空,请重新创建\n"); exit(0);} lianxiren*p1,*p2; p1=(lianxiren*)malloc(LEN); if(fread(p1,LEN,1,fp)==0) {printf("电话簿为空,请重新创建"); return head; } head=p1; p2=p1; p1=(lianxiren*)malloc(LEN); while(fread(p1,LEN,1,fp)) { p2->next=p1; p2=p1; p1=(lianxiren*)malloc(LEN); } p2->next=NULL; free(p1); return(head); fclose(fp); }//文件读取函数 int kouling() { char s[20]; printf("请输入口令:"); int n=0; while(n<3) {scanf("%s",s); getchar(); if(strcmp(s,"20160390527")==0) return 0; else{n++; if(n==3){ printf("抱歉,输入错误\n"); return 1;} printf("口令错误,请重新输入\n"); } }return 1; }//口令验证,密码为:20160390527 void caidan() { printf(" 欢迎进入电话簿系统 \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("********************************************\n"); }//菜单界面 void main() { if(kouling()) return;//口令验证 system("cls"); caidan();//进入菜单界面 printf(" 请选择你所需要的服务:"); int n;scanf("%d",&n); getchar(); lianxiren*head; while(1){ system("cls"); caidan(); switch(n){ case 1:{ head=creat_list(); system("cls"); caidan(); print_list(head); save_list(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//创建电话簿(创建链表、写入文件,释放链表) case 2:{ head=load_list(head); chazhao(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//查找联系人(读入文件、查找函数、释放链表) case 3:{ head=load_list(head); add_list(head); system("cls"); caidan(); print_list(head); save_list(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//添加联系人(读入文件、添加链表、写入文件、释放链表) case 4:{ head=load_list(head); head=xiugai_list(head); save_list(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//修改联系人(读入文件,修改链表、写入文件、释放链表) case 5:{ head=load_list(head); head=delete_list(head); save_list(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//删除联系人(读入文件,删除链表、写入文件、释放链表) case 6:{ head=load_list(head); paixu_list(head); shifang_list(head); printf("********************************************\n"); printf("\n如需要其他服务,请重新输入:"); scanf("%d",&n); getchar();}break;//查看电话簿(读入文件,排序链表、释放链表) case 7:{ system("cls"); return;}break;//退出 default:{ printf("\n输入有误,请重新输入:"); scanf("%d",&n); getchar();}break; }} }
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
上一篇: Qt自定义控件实现进度仪表盘
下一篇: Qt自定义控件实现圆盘进度条
相关文章
- 这篇文章主要为大家详细介绍了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
- 护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
- 这篇文章主要介绍了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
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
- 本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。...2020-04-25