C语言实现简易通讯录(静态版本)的代码分享_第1页
C语言实现简易通讯录(静态版本)的代码分享_第2页
C语言实现简易通讯录(静态版本)的代码分享_第3页
C语言实现简易通讯录(静态版本)的代码分享_第4页
C语言实现简易通讯录(静态版本)的代码分享_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C语言实现简易通讯录(静态版本)的代码分享目录一、通讯录1.演示效果2.完整代码二、代码解析1.宏定义及结构体声明2.主菜单函数3.主函数4.查找函数5.初始化联系人信息6.添加联系人信息7.显示所有联系人信息8.删除指定联系人信息9.修改联系人信息10.查找指定联系人11.按照姓氏对联系人信息排序12.清空所有联系人信息

一、通讯录

1.演示效果

2.完整代码

#define_CRT_SECURE_NO_WARNINGS1

//#include"ConTacts.h"

#includeassert.h

#includestdio.h

#defineMAX30

#defineNAME20

#defineTEL20

#defineADR30

structPopInfo{//声明一个结构体用来保存个人信息

charname[NAME];//姓名

intage;//年龄

chartel[TEL];//手机号

charadr[ADR];//住址

structContact{

structPopInfodata[MAX];//用结构体数组来存储多个人的信息

intsz;//用来记录存储几个人的信息

voidInitContact(structContact*con)//初始化联系人信息

assert(con);

memset(con-data,0,MAX*sizeof(structPopInfo));

con-sz=0;

voidAddContact(structContact*con)//添加联系人信息

assert(con);

printf("请输入姓名:");

scanf("%s",con-data[con-sz].name);

printf("请输入年龄:");

scanf("%d",(con-data[con-sz].age));

printf("请输入手机号:");

scanf("%s",con-data[con-sz].tel);

printf("请输入住址:");

scanf("%s",con-data[con-sz].adr);

con-sz++;

printf("成功添加联系人!\n");

voidShowContact(structContact*con)//显示所有联系人信息

inti=0;

printf("%-20s\t%-20s\t%-20s\t%-20s\t\n","姓名","年龄","手机号","住址");

for(i=0;icon-i++)

printf("%-20s\t%-20d\t%-20s\t%-20s\t\n",con-data[i].name,con-data[i].age,con-data[i].tel,con-data[i].adr);

intFind(structContact*con)//根据姓名查找存放联系人信息的数组下标

charname[20];

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

returni;

break;

return-1;

voidDelContact(structContact*con)//删除指定联系人信息函数

assert(con);

printf("请输入你要删除的联系人姓名:");

/*charname[20];

printf("请输入你要删除的联系人姓名:");

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

printf("删除成功!\n");

con-sz--;

break;

inti=Find(con);

if(i==-1)

printf("未找到你要删除的联系人\n");

intj=0;

for(j=i;j=con-j++)

con-data[j]=con-data[j+1];

con-sz--;

printf("删除成功!\n");

voidModContact(structContact*con)//修改联系人信息

assert(con);

printf("请输入你要修改的联系人姓名:");

/*charname[20];

printf("请输入你要修改的联系人姓名:");

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

printf("找到要修改的联系人!\n");

break;

inti=Find(con);

if(i==-1)

printf("未找到你要删除的联系人\n");

else

printf("请输入姓名:");

scanf("%s",con-data[i].name);

printf("请输入年龄:");

scanf("%d",(con-data[i].age));

printf("请输入手机号:");

scanf("%s",con-data[i].tel);

printf("请输入住址:");

scanf("%s",con-data[i].adr);

printf("成功修改联系人信息!\n");

voidSearchContact(structContact*con)//查找指定联系人

assert(con);//断言,con不能指向NULL

printf("请输入你要查找的联系人姓名:");

/*charname[20];

printf("请输入你要查找的联系人姓名:");

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

break;

inti=Find(con);

if(i==-1)

printf("没有找到你要查找的联系人!\n");

else

printf("%-20s\t%-20s\t%-20s\t%-20s\t\n","姓名","年龄","手机号","住址");

printf("%-20s\t%-20d\t%-20s\t%-20s\t\n",con-data[i].name,con-data[i].age,con-data[i].tel,con-data[i].adr);

intcmp_name(constvoid*e1,constvoid*e2)//qsort中的比较函数

returnstrcmp(((structPopInfo*)e1)-name,((structPopInfo*)e2)-name);//只能对字符及字符串排序,如果是数字,会出错

voidSort_name_Contact(structContact*con)//qsort函数排序

qsort(con-data,con-sz,sizeof(structPopInfo),cmp_name);

printf("排序成功\n");//名字按照字母的ASCII码值从小到大排序

voidClearContact(structContact*con)//清空所有联系人信息

charstr[10];

while(1)

printf("确定清空通讯录吗?(yes/no):");

scanf("%s",str);

if(strcmp(str,"yes")==0)

con-sz=0;

printf("已清空通讯录!\n");

break;

elseif(strcmp(str,"no")==0)

printf("已取消!\n");

break;

else

printf("输入错误,请重新输入!\n");

enumum{//用枚举类型表示input的值

Exit,//Exit是常量值0,退出程序

Add,//Add是常量值1,添加联系人信息

Del,//Del是常量值2,删除指定联系人信息

Mod,//3,修改联系人信息

Search,//4,查找联系人信息

Sort_name,//5,按照姓氏对联系人信息排序

Show,//6,显示联系人信息

Clear//7,清空所有联系人信息

voidmenu()

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");

intmain()

intinput=0;

structContactcon;

InitContact(con);//初始化联系人信息

do{

menu();

printf("请选择:");

scanf("%d",input);

switch(input)

caseAdd:

AddContact(con);//添加联系人信息

break;//break仅退出switch语句,不会退出do-while循环

caseDel:

DelContact(con);//删除指定联系人信息

break;

caseMod:

ModContact(con);//修改联系人信息

break;

caseSearch:

SearchContact(con);//查找指定联系人

break;

caseSort_name:

Sort_name_Contact(con);//按照姓氏对联系人信息排序

break;

caseShow:

ShowContact(con);//显示所有联系人信息

break;

caseClear:

ClearContact(con);//清空所有联系人信息

break;

caseExit:

printf("退出程序\n");

break;

default:

printf("输入错误,请重新选择\n");

break;

}while(input);

return0;

二、代码解析

1.宏定义及结构体声明

#includeassert.h

#includestdio.h

#defineMAX30

#defineNAME20

#defineTEL20

#defineADR30

structPopInfo{//声明一个结构体用来保存个人信息

charname[NAME];//姓名

intage;//年龄

chartel[TEL];//手机号

charadr[ADR];//住址

structContact{

structPopInfodata[MAX];//用结构体数组来存储多个人的信息

intsz;//用来记录存储几个人的信息

};

定义structPopInfo结构体用来保存联系人的信息,再定义structContact,用来保存多个联系人的信息以及记录所存储联系人个数。

2.主菜单函数

voidmenu()

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");

3.主函数

intmain()

enumum{//用枚举类型表示input的值

Exit,//Exit是常量值0,退出程序

Add,//Add是常量值1,添加联系人信息

Del,//Del是常量值2,删除指定联系人信息

Mod,//3,修改联系人信息

Search,//4,查找联系人信息

Sort_name,//5,按照姓氏对联系人信息排序

Show,//6,显示联系人信息

Clear//7,清空所有联系人信息

intinput=0;

structContactcon;

InitContact(con);//初始化联系人信息

do{

menu();

printf("请选择:");

scanf("%d",input);

switch(input)

caseAdd:

AddContact(con);//添加联系人信息

break;//break仅退出switch语句,不会退出do-while循环

caseDel:

DelContact(con);//删除指定联系人信息函数

break;

caseMod:

ModContact(con);//修改联系人信息

break;

caseSearch:

SearchContact(con);//查找指定联系人

break;

caseSort_name:

Sort_name_Contact(con);//按照姓氏对联系人信息排序

break;

caseShow:

ShowContact(con);//显示所有联系人信息

break;

caseClear:

ClearContact(con);

break;

caseExit:

printf("退出程序\n");

break;

default:

printf("输入错误,请重新选择\n");

break;

}while(input);

return0;

}

4.查找函数

intFind(structContact*con)//根据姓名查找存放联系人信息的数组下标

charname[20];

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

returni;

break;

return-1;

根据姓名查找存放联系人信息的数组下标,用于后来查找、删除、修改联系人信息时使用。

5.初始化联系人信息

voidInitContact(structContact*con)//初始化联系人信息

assert(con);

memset(con-data,0,MAX*sizeof(structPopInfo));

con-sz=0;

assert(con);是判断指针con是否为空,判断memset(con-data,0,MAX*sizeof(structPopInfo))是将结构体structContact中structPopInfo类型的数组data置为0。con-sz=0;是将所记录的联系人个数置为0。

6.添加联系人信息

voidAddContact(structContact*con)//添加联系人信息

assert(con);

printf("请输入姓名:");

scanf("%s",con-data[con-sz].name);

printf("请输入年龄:");

scanf("%d",(con-data[con-sz].age));

printf("请输入手机号:");

scanf("%s",con-data[con-sz].tel);

printf("请输入住址:");

scanf("%s",con-data[con-sz].adr);

con-sz++;

printf("成功添加联系人!\n");

注意在输入年龄的时候因为年龄是int类型,要用符号取出地址,再进行赋值。

7.显示所有联系人信息

voidShowContact(structContact*con)//显示所有联系人信息

inti=0;

printf("%-20s\t%-20s\t%-20s\t%-20s\t\n","姓名","年龄","手机号","住址");

for(i=0;icon-i++)

printf("%-20s\t%-20d\t%-20s\t%-20s\t\n",con-data[i].name,con-data[i].age,con-data[i].tel,con-data[i].adr);

printf(%-20s\t%-20s\t%-20s\t%-20s\t\n,姓名,年龄,手机号,住址)中的%-20s\t%-20s\t%-20s\t%-20s\t\n是为了让打印联系人信息的时候更加直观,%-20s\t%-20s\t%-20s\t%-20s\t\n中的-是为了让其左对齐,把-去掉可以是右对齐。

8.删除指定联系人信息

voidDelContact(structContact*con)//删除指定联系人信息函数

assert(con);

printf("请输入你要删除的联系人姓名:");

/*charname[20];

printf("请输入你要删除的联系人姓名:");

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

printf("删除成功!\n");

con-sz--;

break;

inti=Find(con);

if(i==-1)

printf("未找到你要删除的联系人\n");

intj=0;

for(j=i;j=con-j++)

con-data[j]=con-data[j+1];

con-sz--;

printf("删除成功!\n");

}

代码中注释部分可以在不调用Find函数时删除联系人信息,在成功删除联系人信息后,要将存放联系人个数的变量进行修改。

9.修改联系人信息

voidModContact(structContact*con)//修改联系人信息

assert(con);

printf("请输入你要修改的联系人姓名:");

/*charname[20];

printf("请输入你要修改的联系人姓名:");

scanf("%s",name);

inti=0;

for(i=0;icon-i++)

if(strcmp(con-data[i].name,name)==0)

printf("找到要修改的联系人!\n");

break;

inti=Find(con);

if(i==-1)

printf("未找到你要删除的联系人\n");

else

printf("请输入姓名:");

scanf("%s",con-data[i].name);

printf("请输入年龄:");

scanf("%d",(con-data[i].age));

printf("请输入手机号:");

scanf("%s",con-data[i].tel);

printf("请输入住址:");

scanf("%s",con-data[i].adr);

printf("成功修改联系人信息!\n");

}

10.查找指定联系人

voidSearchContact(structContact*con)//查找指定联系人

assert(con);//断言,con不能指向NULL

printf("请输入你要查找的联系人姓名:");

/*charname[20];

printf("请输入你要查找的联系人姓名:");

scanf("%s",n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论