通讯录的实现(另附完整源码)
对于通讯的实习,想必会是,学习计算机专业的毕业设计吧!!但是,却是难到了不少人!!叫苦连天!也有不少人在咨询笔者的!!最近以来,笔者刚学习了结构体!所以顺便花了三天多,研究了一下通讯录的实现!所以,笔者打算分享出来,与大家共勉!!
注意,这个是:静态的版本!!其他的版本,请等待笔者后续更新!!请不要着急!
下面,我们需要在写之前,有自己的想法:在以下三个文件名中,分别有自己的专门输入的东西!!
1.test.c : 测试通讯录的!
2.contact.c : 通讯录的实现!
3.contact.h : 通讯录的声明!
在通讯录中:定义100个人的信息,每个人的信息都包含:
姓名
性别
电话
年龄
住址
在菜单栏中的提示:也是该通讯录的主要内容!!
1.增加联系人
2.修改指定联系人
3.删除指定联系人
4.查找指定联系人
5.排序通讯录
6.显示通讯录的信息
下面请看笔者的源代码!!
在test.c文件中!测试通讯录的!
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void menu()
{printf("**************************************\n");printf("***** 1. add 2. del *****\n");printf("***** 3. search 4. modify *****\n");printf("***** 5. show 6. sort *****\n");printf("***** 0. exit *****\n");printf("**************************************\n");
}int main()
{int input = 0;//创建通讯录struct Contact con;//通讯录//初始化通讯录InitContact(&con);do{ menu();printf("请选择>:");scanf("%d", &input);switch (input){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:SearchContact(&con);break;case 4:ModifyContact(&con);break;case 5:ShowContact(&con);break;case 6:SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
在contact .c文件中:通讯录的实现!
#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void InitContact(struct Contact* pc)
{assert(pc);pc->sz = 0;memset(pc->data, 0, MAX *sizeof(struct PeoInfo));
}void AddContact(struct Contact* pc)
{assert(pc);if (pc->sz == MAX){printf("通讯录已满,无法添加数据\n");return;}//增加人的信息printf("请输入名字:>");scanf("%s", pc->data[pc->sz].name);printf("请输入性别:>");scanf("%s", pc->data[pc->sz].sex);printf("请输入年龄:>");scanf("%d", &(pc->data[pc->sz].age));printf("请输入电话:>");scanf("%s", pc->data[pc->sz].tele);printf("请输入地址:>");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("成功增加联系人\n");
}void ShowContact(const struct Contact* pc)
{int i = 0;printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[i].name,pc->data[i].sex,pc->data[i].age,pc->data[i].tele,pc->data[i].addr);}
}static int FindByName(const struct Contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}void DelContact(struct Contact* pc)
{char name[MAX_NAME];printf("请输入要删除人的名字:>");scanf("%s", name);//查找一下指定的人是否存在int ret = FindByName(pc, name);if (ret == -1)printf("要删除的人不存在\n");else{//删除int j = 0;for (j = ret; j < pc->sz-1; j++){pc->data[j] = pc->data[j + 1];}pc->sz--;printf("成功删除指定联系人\n");}
}void SearchContact(const struct Contact* pc)
{char name[MAX_NAME];printf("请输入要查找的人的名字:>");scanf("%s", name);//查找一下指定的人是否存在int ret = FindByName(pc, name);if (ret == -1)printf("要查找的人不存在\n");else{printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "性别", "年龄", "电话", "地址");printf("%-20s\t%-5s\t%-5d\t%-12s\t%-30s\n", pc->data[ret].name,pc->data[ret].sex,pc->data[ret].age,pc->data[ret].tele,pc->data[ret].addr);}
}void ModifyContact(struct Contact* pc)
{printf("请输入要修改人的名字:>");char name[MAX_NAME];scanf("%s", name);int ret = FindByName(pc, name);if (ret == -1)printf("要修改的人不存在\n");else{printf("请输入名字:>");scanf("%s", pc->data[ret].name);printf("请输入性别:>");scanf("%s", pc->data[ret].sex);printf("请输入年龄:>");scanf("%d", &(pc->data[ret].age));printf("请输入电话:>");scanf("%s", pc->data[ret].tele);printf("请输入地址:>");scanf("%s", pc->data[ret].addr);printf("修改成功\n");}
}//int CmpByAge(const void* e1, const void* e2)
//{
// return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age;
//}
//
按照年龄来排序
//void SortContact(struct Contact* pc)
//{
// qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByAge);
//}int CmpByName(const void* e1, const void* e2)
{return strcmp( ((struct PeoInfo*)e1)->name, ((struct PeoInfo*)e2)->name);
}//按照年龄来排序
void SortContact(struct Contact* pc)
{qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByName);
}
在contact.h文件中:通讯录的声明!
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30//表示人信息
struct PeoInfo
{char name[MAX_NAME];char sex[MAX_SEX];char tele[MAX_TELE];int age;char addr[MAX_ADDR];
};//通讯录
struct Contact
{struct PeoInfo data[MAX];int sz;
};//初始化通讯录
void InitContact(struct Contact* pc);//增加人的信息到通讯录
void AddContact(struct Contact* pc);//显示通讯录中的信息
void ShowContact(const struct Contact* pc);//删除指定联系人
void DelContact(struct Contact* pc);//查找指定联系人
void SearchContact(const struct Contact* pc);//修改指定联系人的信息
void ModifyContact(struct Contact* pc);//排序通讯录中的信息 - 年龄
void SortContact(struct Contact* pc);
上面就是一个静态的通讯录源代码!!与大家分享一下!!若有不懂得地方,请各位老铁及时私聊!!
通讯录的实现(另附完整源码)相关推荐
- JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码)
JavaScript实现唯一路径问题的动态编程方法的算法(附完整源码) dpUniquePaths.js完整源代码 dpUniquePaths.test.js完整源代码 dpUniquePaths.j ...
- JavaScript实现唯一路径问题的回溯方法的算法(附完整源码)
JavaScript实现唯一路径问题的回溯方法的算法(附完整源码) btUniquePaths.js完整源代码 btUniquePaths.test.js完整源代码 btUniquePaths.js完 ...
- JavaScript实现squareMatrixRotation方阵旋转算法(附完整源码)
JavaScript实现squareMatrixRotation方阵旋转算法(附完整源码) squareMatrixRotation.js完整源代码 squareMatrixRotation.test ...
- JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码)
JavaScript实现递归楼梯问题(带记忆的递归解决方案)算法(附完整源码) recursiveStaircaseMEM.js完整源代码 recursiveStaircaseMEM.test.js完 ...
- JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码)
JavaScript实现递归楼梯问题(迭代解决方案)算法(附完整源码) recursiveStaircaseIT.js完整源代码 recursiveStaircaseIT.test.js完整源代码 r ...
- JavaScript实现递归楼梯问题(动态规划解决方案)算法(附完整源码)
JavaScript实现递归楼梯问题(动态规划解决方案)算法(附完整源码) recursiveStaircaseDP.js完整源代码 recursiveStaircaseDP.test.js完整源代码 ...
- JavaScript实现递归楼梯问题(蛮力解决方案)算法(附完整源码)
JavaScript实现递归楼梯问题(蛮力解决方案)算法(附完整源码) recursiveStaircaseBF.js完整源代码 recursiveStaircaseBF.test.js完整源代码 r ...
- JavaScript实现截留雨水问题的动态编程方法算法(附完整源码)
JavaScript实现截留雨水问题的动态编程方法算法(附完整源码) dpRainTerraces.js完整源代码 dpRainTerraces.tset.js完整源代码 dpRainTerraces ...
- JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码)
JavaScript实现截留雨水问题的蛮力方法的算法(附完整源码) bfRainTerraces.js完整源代码 bfRainTerraces.test.js完整源代码 bfRainTerraces. ...
- JavaScript实现knight Tour骑士之旅算法(附完整源码)
JavaScript实现knight Tour骑士之旅算法(附完整源码) knightTour.js完整源代码 knightTour.test.js完整源代码 knightTour.js完整源代码 f ...
最新文章
- Samba如何配置共享资源
- 【POJ 3273】 Monthly Expense (二分)
- Cocos2d-x 3.0正式版及android环境搭建
- 揭秘.NET Core剪裁器背后的技术
- 最强云硬盘来了,让AI模型迭代从1周缩短到1天
- Spring-Security (学习记录二)--修改为自己的登录页面
- 分布式文件系统MooseFs部署(二)
- 错过现场不要紧,数据智能技术论坛文章、视频大回顾
- 黑马程序员传智播客python 协程greenlet gevent学习笔记
- 【Multisim仿真】10秒倒计时8路抢答器
- IoT全品类全场景来了,但5G时代“大雁群飞”仍需紧盯“服务”
- mysql查询字段最大的一条数据类型_SQL查询一个表中类别字段中Max()最大值对应的记录...
- 几款入夏品牌包包可以看看
- 服务器winsxs文件夹怎么清理工具,Winsxs文件夹内容怎么清理 Winsxs文件夹瘦身清理教程图解...
- python基础爬虫篇
- Apollo(阿波罗)(一)环境搭建
- 云桌面服务器中兴,随需而动——中兴通讯VDI+VOI融合云桌面解决方案
- 【开发随记】【提效】工作习惯那些事系列之一——To-Do List
- 比较好的文档翻译软件-哪个翻译软件最精准
- 深入理解HTML表格秘籍