文章目录

  • 静态通讯录的实现
    • 一.通讯录的各项功能及主体框架
    • 1.通讯录的要求实现功能
    • 2.页面菜单
    • 3.通讯录的主体框架实现
    • 4.通讯录初始化及个人信息的表示
    • 二、功能函数的具体实现
    • 1.增加联系人的信息
    • 2.删除联系人的信息
    • 3.修改联系人的信息
    • 4.查找联系人的信息
    • 5.展示通讯录联系人信息
  • 整体代码展示
    • 1.test.c 通讯录主体框架测试文件
    • 2.contact.c 通讯录函数文件
    • 3.contact.h 宏定义及函数声明文件
  • 小结
  • 未完待续.......


静态通讯录的实现


一.通讯录的各项功能及主体框架


1.通讯录的要求实现功能


0.退出菜单
1.添加联系人信息
2.删除指定名字的联系人信息
3.修改联系人的信息
4.查找好友的信息
5.展示通讯录联系人信息

  我们根据通讯录的各项功能进行编写页面菜单

2.页面菜单


void menu(){//打印通讯录菜单//0.退出菜单//1.添加联系人信息//2.删除指定名字的联系人信息//3.修改联系人的信息//4.查找好友的信息//5.展示通讯录联系人信息//6.对通讯录指定信息进行排序printf("*************************************************\n");printf("**********  ——欢迎来到通讯录菜单——  *********\n");printf("**********      0.退出菜单              *********\n");printf("**********      1.添加联系人信息        *********\n");printf("*********       2.删除联系人信息        *********\n");printf("*********       3.修改联系人信息        *********\n");printf("*********       4.查找联系人信息        *********\n");printf("*********       5.展示联系人信息        *********\n");printf("*************************************************\n");}


3.通讯录的主体框架实现


//将菜单的功能一一列举出来,以枚举的类型呈现enum{EXIT,ADD,DEL,MODIFY,SEARCH,SHOW,};int main(){int input = 0;//创建通讯录struct Contact con;  //Con就是通讯录,里面包含1000个人的信息,及sizeInitContact(&con);do{menu();printf("请选择功能:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case MODIFY :MotifyContact(&con);break;case SEARCH :SearchContact(&con);break;case SHOW:ShowContact(con);break;case EXIT:break;default:printf("选择错误,请重新输入!!\n");break;}} while(input);return 0;}


  我们用枚举类型将功能一一列举出来,同时每一个枚举成员也代表着对应的数字,我们在switch ...case 语句中也不用 case 1,case 2来记录每一功能对应的数字了,直接以case ADD,case DEL表示,更加直接了当。

4.通讯录初始化及个人信息的表示


#define MAX 1000#define MAX_name 20#define MAX_tel 20#define MAX_sex 5#define MAX_addr 30struct  PeoInfor{char name[MAX_name];int age;char sex[MAX_sex];char tel[MAX_tel];char addr[MAX_addr];};struct  Contact{struct  PeoInfor date[MAX];  //  存放个人信息int size;                   //记录当前已有的元素个数};void InitContact(struct  Contact* ps){memset(ps->date, 0, sizeof(ps->date));ps->size = 0;   //设置通讯录的元素有0个}

二、功能函数的具体实现


1.增加联系人的信息


void AddContact(struct Contact* ps){if (ps->size == MAX){printf("该通讯录空间已满,无法储存\n");}else{printf("请输入姓名:>");scanf("%s", ps->date[ps->size].name);printf("请输入年龄:>");scanf("%d", &(ps->date[ps->size].age));printf("请输入性别:>");scanf("%s", ps->date[ps->size].sex);printf("请输入电话:>");scanf("%s", ps->date[ps->size].tel );printf("请输入地址:>");scanf("%s", ps->date[ps->size].addr);ps->size++;printf("添加成功\n");}}


2.删除联系人的信息


void DelContact(struct Contact *ps){ //  查找要删除的人在什么位置,根据名字char  name[MAX_name];printf("请输入要删除的联系人名字:>");scanf("%s", name);int i = 0;int j = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[j].name)){break;}} if (i==ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");} else { for (j = i; j < ps->size; j++) { ps->date[j] = ps->date[j + 1];  } } ps->size--; printf("删除成功\n");}


3.修改联系人的信息


void MotifyContact(struct Contact *ps){char  name[MAX_name];printf("请输入要删除的联系人名字:>");scanf("%s", name);int i = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[i].name)){break;}}if (i == ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");}//表示找到该联系人//对下标为i的联系人信息进行修改else{printf("请输入姓名:>");scanf("%s", ps->date[i].name);printf("请输入年龄:>");scanf("%d", &(ps->date[i].age));printf("请输入性别:>");scanf("%s", ps->date[i].sex);printf("请输入电话:>");scanf("%s", ps->date[i].tel);printf("请输入地址:>");scanf("%s", ps->date[i].addr);}printf("修改成功\n");}


4.查找联系人的信息


void SearchContact(struct Contact *ps){char  name[MAX_name];printf("请输入要查找的联系人名字:>");scanf("%s", name);int i = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[i].name)){break;}}if (i == ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");}//表示找到该联系人//对下标为i的联系人信息进行显示else{printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");printf("%10s\t%4d\t%5s\t%12s\t%20s\n",ps->date[i].name,ps->date[i].age,ps->date[i].sex,ps->date[i].tel,ps->date[i].addr);}}


5.展示通讯录联系人信息


void ShowContact(struct Contact ps){if (ps.size == 0){printf("通讯录为空,无法展示\n");}else{printf("%10s\t%4s\t%5s\t%12s\t%20s\n","名字","年龄","性别","电话","地址");int i = 0;for (i = 0; i < ps.size; i++){printf("%10s\t%4d\t%5s\t%12s\t%20s\n", ps.date[i].name, ps.date[i].age,ps.date[i].sex,ps.date[i].tel,ps.date[i].addr);}}}


整体代码展示


1.test.c 通讯录主体框架测试文件


#include <stdio.h>#include "contact.h"#include <string.h>void menu(){//打印通讯录菜单//0.退出菜单//1.添加联系人信息//2.删除指定名字的联系人信息//3.修改联系人的信息//4.查找好友的信息//5.展示通讯录联系人信息//6.对通讯录指定信息进行排序printf("*************************************************\n");printf("**********  ——欢迎来到通讯录菜单——  *********\n");printf("**********      0.退出菜单              *********\n");printf("**********      1.添加联系人信息        *********\n");printf("*********       2.删除联系人信息        *********\n");printf("*********       3.修改联系人信息        *********\n");printf("*********       4.查找联系人信息        *********\n");printf("*********       5.展示联系人信息        *********\n");printf("*************************************************\n");}//将菜单的功能一一列举出来,以枚举的类型呈现enum{EXIT,ADD,DEL,MODIFY,SEARCH,SHOW,};int main(){int input = 0;//创建通讯录struct Contact con;  //Con就是通讯录,里面包含1000个人的信息,及sizeInitContact(&con);do{menu();printf("请选择功能:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case MODIFY :MotifyContact(&con);break;case SEARCH :SearchContact(&con);break;case SHOW:ShowContact(con);break;case EXIT:break;default:printf("选择错误,请重新输入!!\n");break;}} while(input);return 0;}


2.contact.c 通讯录函数文件


#include <stdio.h>#include <string.h>#include "contact.h"void InitContact(struct  Contact* ps){memset(ps->date, 0, sizeof(ps->date));ps->size = 0;   //设置通讯录的元素有0个} void AddContact(struct Contact* ps){if (ps->size == MAX){printf("该通讯录空间已满,无法储存\n");}else{printf("请输入姓名:>");scanf("%s", ps->date[ps->size].name);printf("请输入年龄:>");scanf("%d", &(ps->date[ps->size].age));printf("请输入性别:>");scanf("%s", ps->date[ps->size].sex);printf("请输入电话:>");scanf("%s", ps->date[ps->size].tel );printf("请输入地址:>");scanf("%s", ps->date[ps->size].addr);ps->size++;printf("添加成功\n");}}void ShowContact(struct Contact ps){if (ps.size == 0){printf("通讯录为空,无法展示\n");}else{printf("%10s\t%4s\t%5s\t%12s\t%20s\n","名字","年龄","性别","电话","地址");int i = 0;for (i = 0; i < ps.size; i++){printf("%10s\t%4d\t%5s\t%12s\t%20s\n", ps.date[i].name, ps.date[i].age,ps.date[i].sex,ps.date[i].tel,ps.date[i].addr);}}}void DelContact(struct Contact *ps){ //  查找要删除的人在什么位置,根据名字char  name[MAX_name];printf("请输入要删除的联系人名字:>");scanf("%s", name);int i = 0;int j = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[j].name)){break;}} if (i==ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");} else { for (j = i; j < ps->size; j++) { ps->date[j] = ps->date[j + 1];  } } ps->size--; printf("删除成功\n");}void MotifyContact(struct Contact *ps){char  name[MAX_name];printf("请输入要删除的联系人名字:>");scanf("%s", name);int i = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[i].name)){break;}}if (i == ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");}//表示找到该联系人//对下标为i的联系人信息进行修改else{printf("请输入姓名:>");scanf("%s", ps->date[i].name);printf("请输入年龄:>");scanf("%d", &(ps->date[i].age));printf("请输入性别:>");scanf("%s", ps->date[i].sex);printf("请输入电话:>");scanf("%s", ps->date[i].tel);printf("请输入地址:>");scanf("%s", ps->date[i].addr);}printf("修改成功\n");}void SearchContact(struct Contact *ps){char  name[MAX_name];printf("请输入要查找的联系人名字:>");scanf("%s", name);int i = 0;//查找名字for (i = 0; i < ps->size; i++){if (0 == strcmp(name, ps->date[i].name)){break;}}if (i == ps->size)   // i从循环里出来,strcmp还是不等于0{printf("未找到该联系人的信息\n");}//表示找到该联系人//对下标为i的联系人信息进行显示else{printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");printf("%10s\t%4d\t%5s\t%12s\t%20s\n",ps->date[i].name,ps->date[i].age,ps->date[i].sex,ps->date[i].tel,ps->date[i].addr);}}


3.contact.h 宏定义及函数声明文件


#define MAX 1000#define MAX_name 20#define MAX_tel 20#define MAX_sex 5#define MAX_addr 30struct  PeoInfor{char name[MAX_name];int age;char sex[MAX_sex];char tel[MAX_tel];char addr[MAX_addr];};struct  Contact{struct  PeoInfor date[MAX];  //  存放个人信息int size;                   //记录当前已有的元素个数};// 声明函数void InitContact(struct  Contact* ps);void AddContact(struct Contact* ps);void ShowContact(struct Contact ps);void DelContact(struct Contact *ps);void MotifyContact(struct Contact *ps);void SearchContact(struct Contact *ps);


小结


  由于我们写的通讯录是有一定空间的,我们定义的通讯录空间是一定的,所以仍然存在限制和缺点。

#define MAX 1000struct  Contact{struct  PeoInfor date[MAX];  //  存放个人信息int size;                   //记录当前已有的元素个数};


  这就是通讯录的1.0版本,后续将持续更新,我们将在2.0版本升级为拥有动态内存空间的通讯录,在3.0版本将升级为拥有文件操作保存功能的通讯录版本。


  欢迎大家的关注与欣赏!!



未完待续…



C语言实战项目——动态通讯录2.0

©著作权归作者所有:来自51CTO博客作者Rich_?ིྀ的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 一个简易的通讯录的实现
  2. 通讯录的实现
  3. android从手机中获取通讯录时按名称排序
  4. 程序代码删除联系人的分组
  5. [android研究联系人之二]联系人Email/Nickname数据操作
  6. android中判断sim卡状态和读取联系人资料的方法
  7. android项目之通讯录数据库
  8. Android4.4 Telephony流程分析——联系人(Contact)列表缩略图的
  9. android获取单个通讯录联系人信息并分享内容(短信邀请)

随机推荐

  1. 基本sql:输出用双引号括起来的标题
  2. 一条SQL语句实现添加不重复记录
  3. Sql server 2005中output用法解析
  4. 整取整存,尽可能的减少SQL连接数.
  5. SQL查找条件语句构造类
  6. Oracle:从SQL文件批量导入数据
  7. sql2008中如何收缩数据库日志文件
  8. 当 IDENTITY_INSERT 设置为 OFF 时,不能为
  9. 在用apt源安装mysql-server时出现如下错
  10. pl/sql数据插入出现中文乱码问题