用C语言写一个电话簿管理系统

发布时间:2021-08-11 18:54:43 作者:chen
来源:亿速云 阅读:204

本篇内容介绍了“用C语言写一个电话簿管理系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

代码如下:

#include<string.h>#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define NULL 0typedef 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;}//口令验证,密码为:20160390527void 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; }}}

“用C语言写一个电话簿管理系统”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. python写一个cmdb管理系统
  2. C语言用函数实现电话簿管理系统

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:怎么用C语言实现简易通讯录

下一篇:C语言怎么实现万年历小程序

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》