




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年农业类实习报告4-4
- 职业学校学生实习三方协议模板
- 出国英语饮食篇Dining
- 新教师教学方法与实践培训心得体会
- 金融投资决策会议流程标准
- EMS(ISO14001)管理评审报告-2025年
- 电商平台疫情防控及应急处置流程
- 英语教师成长发展计划
- 人教版六年级英语教学计划的案例分享
- 克拉玛依教育项目商业计划书
- 2025年中国冷库用叉车数据监测研究报告
- 2025年高考第二次模拟考试物理(浙江卷)(参考答案)-20250416-113627
- 2025年化妆师职业技能考试试题及答案
- GA 1812.1-2024银行系统反恐怖防范要求第1部分:人民币发行库
- 2025中信建投证券股份限公司校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025年山东省泰安市新泰市中考二模化学试题(原卷版+解析版)
- 2025年鸡蛋市场调查报告
- 2025年职业技能竞赛(计算机程序员赛项)参考试题(附答案)
- 合伙人商业保密协议书9篇
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 2025年全国中小学生百科知识竞赛题库及答案(480题)
评论
0/150
提交评论