C语言如何实现电话簿管理系统

这篇文章主要介绍了C语言如何实现电话簿管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

本文实例为大家分享了C语言电话簿管理系统的具体代码,供大家参考,具体内容如下

/*大二实践周所作,
时间:2017.9,11
电话簿管理系统
*/

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineNULL0
typedefstructlianxiren{
charjob[30];
charnumber[20];
charname[10];
charemail[30];
structlianxiren*next;
}lianxiren;
#defineLENsizeof(lianxiren)
lianxiren*creat_list()
{
lianxiren*head,*p1,*p2;
charname[10];intn=0;
head=NULL;
p1=(lianxiren*)malloc(LEN);
p2=p1;
printf("请输入姓名(姓名为0时停止创建):");
gets(name);
if(strcmp(name,"0")==0)return0;
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;
returnhead;
}//链表创建函数
lianxiren*shifang_list(lianxiren*head)
{
lianxiren*p1;
for(;head!=NULL;)
{
p1=head;
head=head->next;
free(p1);
}
returnhead;
}//释放链表函数
voidprint_list(lianxiren*head)
{
voidcaidan();
intn=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);
}//打印链表函数
intlength(lianxiren*head)
{
intn=0;
lianxiren*p;
p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
returnn;
}

voidpaixu1(lianxiren*head)
{
voidcaidan();
intn=length(head);
inti,j;
lianxirentemp,*p;
p=head;
lianxirena[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);
}
voidpaixu2(lianxiren*head)
{
voidcaidan();
intn=length(head);inti,j;
lianxirentemp,*p;
p=head;
lianxirena[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);
}
voidpaixu_list(lianxiren*head)
{
voidcaidan();
if(head==NULL)
{printf("电话簿为空,请重新创建!");
return;
}
chara;
printf("1,按电话号码升序排序\n2,按姓名字母升序排序\n");
printf("请选择一种排序方法:");
a=getchar();
getchar();
switch(a){
case'1':paixu1(head);break;
case'2':paixu2(head);break;
default:printf("输入有误!\n");break;
}
}
voidchazhao1(lianxiren*head)
{if(head==NULL)
{
printf("电话簿为空,请重新创建");
return;
}
charname[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);
}//通过名字查找
voidchazhao2(lianxiren*head)
{if(head==NULL)
{
printf("电话簿为空,请重新创建");
return;
}
charnumber[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);
}//通过电话号码查找
voidchazhao(lianxiren*head)
{
intn;
printf("1,通过名字查找\n2,通过电话号码查找\n3,退出\n请选择你需要的服务:");
scanf("%d",&n);
getchar();
while(1)
{
switch(n){
case1:{chazhao1(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;
case2:{chazhao2(head);printf("请选择服务项:");scanf("%d",&n);getchar();}break;
case3:return;break;
default:{printf("输入不正确!");printf("请选择服务项:");scanf("%d",&n);getchar();}break;
}}
}//查找联系人
voidadd_list(lianxiren*head)
{
lianxiren*p1,*p2,*h;
charname[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);
}
elsereturn;
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)
{
chara[20];
printf("请输入联系人名字或电话:");
gets(a);
if(head==NULL)
{
printf("电话簿为空,请重新创建");
returnhead;
}
lianxiren*p=head;
while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0)
{
p=p->next;
if(p==NULL){printf("电话簿未有此联系人\n");
returnhead;}
}
printf("查找到了!");
printf("\n名字:");puts(p->name);
printf("\n电话号码:");puts(p->number);
printf("\n工作单位:");puts(p->job);
printf("\nE-mail:");puts(p->email);
putchar('\n');
intn;
while(1)
{printf("请选择操作项(1,名字2,电话号码3,工作单位4,E-mail5,退出):");
scanf("%d",&n);
getchar();
switch(n)
{
case1:{printf("请输入名字:");gets(p->name);}break;
case2:{printf("请输入电话号码:");gets(p->number);}break;
case3:{printf("请输入工作单位:");gets(p->job);}break;
case4:{printf("请输入E-mail:");gets(p->email);}break;
case5:returnhead;break;
default:printf("输入错误!");break;
}
}
}//修改链表函数
lianxiren*delete_list(lianxiren*head)
{
chara[20];
printf("请输入联系人名字或电话:");
gets(a);
if(head==NULL)
{
printf("电话簿为空,请重新创建");
returnhead;
}
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");
returnhead;}
}
printf("查找到了!");
printf("\n名字:");puts(p->name);
printf("\n电话号码:");puts(p->number);
printf("\n工作单位:");puts(p->job);
printf("\nE-mail:");puts(p->email);
putchar('\n');
charn;
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;
}
returnhead;
}//删除链表函数
voidsave_list(lianxiren*head)
{FILE*fp;
if((fp=fopen("dianhuabu.dat","wb"))==NULL){
printf("Filecannotbeopened\n");
exit(0);}
if(head==NULL)
{
printf("通讯录为空\n");
return;
}
lianxiren*p1=head;
while(p1!=NULL)
{
if(fwrite(p1,LEN,1,fp)!=1){
printf("cannotopenfile\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("电话簿为空,请重新创建");
returnhead;
}
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);
}//文件读取函数
intkouling()
{
chars[20];
printf("请输入口令:");
intn=0;
while(n<3)
{scanf("%s",s);
getchar();
if(strcmp(s,"20160390527")==0)
return0;
else{n++;
if(n==3){
printf("抱歉,输入错误\n");
return1;}
printf("口令错误,请重新输入\n");
}
}return1;
}//口令验证,密码为:20160390527
voidcaidan()
{
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");
}//菜单界面
voidmain()
{
if(kouling())return;//口令验证
system("cls");
caidan();//进入菜单界面
printf("请选择你所需要的服务:");
intn;scanf("%d",&n);
getchar();
lianxiren*head;
while(1){
system("cls");
caidan();
switch(n){
case1:{
head=creat_list();
system("cls");
caidan();
print_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服务,请重新输入:");
scanf("%d",&n);
getchar();}break;//创建电话簿(创建链表、写入文件,释放链表)
case2:{
head=load_list(head);
chazhao(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服务,请重新输入:");
scanf("%d",&n);
getchar();}break;//查找联系人(读入文件、查找函数、释放链表)
case3:{
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;//添加联系人(读入文件、添加链表、写入文件、释放链表)
case4:{
head=load_list(head);
head=xiugai_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服务,请重新输入:");
scanf("%d",&n);
getchar();}break;//修改联系人(读入文件,修改链表、写入文件、释放链表)
case5:{
head=load_list(head);
head=delete_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服务,请重新输入:");
scanf("%d",&n);
getchar();}break;//删除联系人(读入文件,删除链表、写入文件、释放链表)
case6:{
head=load_list(head);
paixu_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服务,请重新输入:");
scanf("%d",&n);
getchar();}break;//查看电话簿(读入文件,排序链表、释放链表)
case7:{
system("cls");
return;}break;//退出
default:{
printf("\n输入有误,请重新输入:");
scanf("%d",&n);
getchar();}break;
}}
}

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现电话簿管理系统”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!

发布于 2021-05-30 14:07:43
分享
海报
187
上一篇:C语言如何实现经典24点纸牌益智游戏下一篇:C语言如何实现简单停车场管理系统
目录

    忘记密码?

    图形验证码