文章目录

  • 1.基本功能
  • 2.源码部分
    • ①contact.h代码
    • ②contact.c源码
      • 初始化
      • 扩容
      • 增加通讯录成员
      • 通过姓名查找成员
      • 展示通讯录
      • 删除通讯录成员
      • 修改学生信息
      • 根据姓名进行排序
      • 销毁动态内存申请的空间
    • ③test.c

1.基本功能

我的通讯录实现的几个功能
1.增加通讯录成员
2.动态扩容
3.通过名字搜索通讯录成员
4.展示通讯录
5.删除通讯录成员
6.修改学生信息
7.按照名字进行排序

2.源码部分

①contact.h代码

在这里插入代码片
#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#include<errno.h>
#include<stdlib.h>#define MAX 1000
#define NAME_MAX 20
#define TELE_MAX 13
#define ADDR_MAX 20
#define SEX_MAX 10
#define DEFAULT_SZ 3//定义每个成员数据的结构体
typedef struct PeoInfo
{char name[NAME_MAX];int age;char tele[TELE_MAX];char addr[ADDR_MAX];char sex[SEX_MAX];
}PeoInfo;//定义通讯录结构体
typedef struct Contact
{PeoInfo* data;int sz;      //表示当前通讯录的名字int capacity;//表示最大容量
}Contact;//初始化结构体
void Init(Contact* pc);//增加通讯录成员信息
void Add(Contact* pc);//扩容
void CheckCapacity(Contact* pc);//搜素学生
int SearchByName(Contact* pc);//展示数据
void Show( Contact* pc);//删除
void Delete(Contact* pc);//修改通讯录信息
void Modify(Contact* pc);//按照名字排序
void SortByName(Contact* pc);//销毁动态内存分配所申请到的空间
void DestroyContact(Contact* pc);

②contact.c源码

初始化

void Init(Contact* pc)
{assert(pc);pc->sz = 0;pc->capacity = DEFAULT_SZ;PeoInfo* temp = (PeoInfo*)malloc(pc->capacity * sizeof(PeoInfo));if (temp != NULL){pc->data = temp;}else{printf("Init():%s\n", strerror(errno));}memset(pc->data, 0, sizeof(pc->data));  //直接硬核初始化return;
}

扩容

void CheckCapacity(Contact* pc)
{assert(pc);if (pc->sz == pc->capacity){PeoInfo* temp = (PeoInfo*)realloc(pc->data,(pc->capacity + 2) * sizeof(PeoInfo));if (temp != NULL){pc->data = temp;pc->capacity += 2;printf("扩容成功!\n");return;}else{printf("CheckCapacity():%s\n", strerror(errno));}}return;
}

增加通讯录成员

void Add(Contact* pc)
{assert(pc);CheckCapacity(pc);printf("请输入姓名:\n");//注意这个地方姓名输入的形式scanf("%s", pc->data[pc->sz].name);printf("请输入年龄:\n");scanf("%d", &pc->data[pc->sz].age);printf("请输入性别:\n");scanf("%s", pc->data[pc->sz].sex);printf("请输入电话:\n");scanf("%s", &pc->data[pc->sz].tele);printf("请输入地址:\n");scanf("%s", &pc->data[pc->sz].addr);pc->sz++;printf("增加成功!\n");
}

通过姓名查找成员

int SearchByName(Contact* pc)
{int i = 0;char name[NAME_MAX] = { 0 };printf("请输入要查询的姓名\n");scanf("%s", name);assert(pc && name);for (i = 0; i < pc->sz; i++){if (strcmp(name, pc->data[i].name) == 0)return i;      //如果找到了,那就返回它的下标}printf("搜索不到这个目标\n"); return -1;
}

展示通讯录

void Show( Contact* pc)
{int i = 0;assert(pc);printf("%-20s\t%-5s\t%-10s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-5d\t%-10s\t%-15s\t%-20s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}
}

删除通讯录成员

void Delete(Contact* pc)
{int ret = 0;int i = 0;assert(pc);if (pc->sz == 0){printf("通讯录人数太少,无法删除!\n");return;}ret = SearchByName(pc);if (!ret){printf("查找不到这个目标!\n");}for (i = ret; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("删除指定联系人成功!\n");return;
}

修改学生信息

void Modify(Contact* pc)
{int index = 0;assert(pc);index = SearchByName(pc);if (index==-1){printf("输入错误,找不到该通讯录成员!\n");return;}Show(pc);printf("查找成功!请依次重新输入每项信息:\n");printf("请输入姓名:\n");scanf("%s", pc->data[index].name);printf("请输入年龄:\n");scanf("%d", &pc->data[index].age);printf("请输入性别:\n");scanf("%s", pc->data[index].sex);printf("请输入电话:\n");scanf("%s", &pc->data[index].tele);printf("请输入地址:\n");scanf("%s", &pc->data[index].addr);return;
}

根据姓名进行排序

int cmp(const void* e1,const void* e2)
{//这里注意要转化成结构体指针,再指向姓名return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}              void SortByName(Contact* pc)
{int i = 0, j = 0;assert(pc);qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp);/*for (i = 0; i < pc->sz - 1; i++){for (j = 0; j < pc->sz - i - 1; j++){if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0){PeoInfo temp = pc->data[j];pc->data[j] = pc->data[j + 1];pc->data[j + 1] = temp;}}}*/printf("排序成功!\n");return;
}

销毁动态内存申请的空间

void DestroyContact(Contact* pc)
{free(pc->data);pc->data = NULL;pc->capacity = 0;pc->sz = 0;
}

③test.c

#include"contact.h"enum Oprion
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};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;//PeoInfo* data=(PeoInfo*)calloc(MAX,sizeof(pc->data[0]);Contact con ;//先初始化这个结构体的数据Init(&con);do{      menu();printf("请输入:\n");scanf("%d", &input);switch (input){case ADD: Add(&con);break;case DEL: Delete(&con);break;case SEARCH:SearchByName(&con);break;case MODIFY:Modify(&con);break;case SHOW: Show(&con);break;case SORT: SortByName(&con);break;case EXIT: printf("退出程序\n");DestroyContact(&con);break;default: printf("输入数字无效!\n");break;}} while (input);return 0;
}

C语言通讯录—简单模拟实现相关推荐

  1. 银行业务队列简单模拟 (25 分)c语言c++

    7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...

  2. 用C语言编写简单的通讯录(大一课程作业)

    用C语言编写简单的通讯录(大一课程作业) 该系统概述: 因本人只学习了C语言的基础部分,所以编写该系统时只使用了一个C文件.存储通讯录信息以txt文件方式保存. 系统设计: 显示主菜单主函数:int ...

  3. c语言模拟自动饮料机,C语言--小程序--简单模拟ATM机

    原标题:C语言--小程序--简单模拟ATM机 ATM.H #ifndef ATM_h #define ATM_h #include #include #include typedef struct _ ...

  4. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]

    1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...

  5. c语言简单的atm机编程,C语言ATM机的简单模拟.doc

    PAGE PAGE 10 程序设计实习 -ATM机的简单模拟 院系:信息科学与技术学院 专业:计算机科学与技术 班级:A0611 学号:33号 姓名:石晓珍 ATM机的简单模拟 程序的具体功能: 用C ...

  6. c语言实现简单通讯录(仅代码)

    C语言实现简单通讯录(仅代码) 头文件部分 #pragma once //头文件区域 #include<stdio.h> #include<Windows.h> #includ ...

  7. 【R语言】Splatter,一个用于简单模拟单细胞RNA测序数据的R包

    Splatter是一个用于模拟单细胞RNA测序数据的R包,本文概述并介绍Splatter的功能 一.参数功能 名称 功能 说明 可以通过splatEstimate函数估计 备注 nGenes -> ...

  8. C语言编译抛骰子,简单模拟投掷骰子

    已结贴√ 问题点数:20 回复次数:6 简单模拟投掷骰子 #include #include #include enum Status { CONTINUE, WON, LOST };  // enu ...

  9. Linux 内核 链表 的简单模拟(1)

    第零章:扯扯淡 出一个有意思的题目:用一个宏定义FIND求一个结构体struct里某个变量相对struc的编移量,如 structstudent {int a; //FIND(struct stude ...

  10. c语言模仿atm源代码,C语言ATM程序模拟

    <C语言ATM程序模拟>由会员分享,可在线阅读,更多相关<C语言ATM程序模拟(18页珍藏版)>请在人人文库网上搜索. 1.一. 课题要求1. 当输入给定的卡号和密码(初始卡号 ...

最新文章

  1. Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue
  2. WebAPi接口安全之公钥私钥加密
  3. 论文遇到的格式问题和修正方式
  4. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
  5. leetcode50:Pow(x, n)详解——pygo
  6. 结构体知识------值传递和址传递
  7. 这有8个小秘诀,让你更懂CSS!
  8. [图解]创建虚拟机以及安装CentOS系统和创建自定义布局
  9. MySQL 8 新特性之持久化全局变量的修改
  10. 手机点餐系统概述_自助点餐、自助收银......在餐饮行业有哪些智慧化场景?
  11. mysql万能密码_万能密码:‘or 1=1-- 实战SQL注入,秒破后台
  12. 【4月电视剧网络关注度榜】《小舍得》登顶4月电视剧热度榜
  13. 计算机的装机配件,京东买的配件怎么装机自己组装教程
  14. 硬盘容量和计算机容量的换算,t和g的换算(硬盘容量G跟T的换算)
  15. 关于电脑端微信小程序不能启动解决
  16. 电脑Java安装 报错_Windows10系统电脑安装Java开发环境的方法
  17. 量子密钥分发技术原理
  18. 利用rclone同步google storage cloud和aws s3存储
  19. 移动端Web开发(一)移动端开发的基本概念
  20. 基于python管理系统论文_基于Python语言的实验室管理系统的设计与实现

热门文章

  1. python手机版做小游戏代码大全-用Python设计一个经典小游戏
  2. windows版本和Linux版本的ffmpeg下载使用方法
  3. android 计步器acc,基于加速度的门限检测计步算法设计
  4. Caused by: java.lang.NoSuchMethodException: init [class android.content.Context, interface andr解决
  5. php拼音转为汉字方法二
  6. 四叶草efi_Clover Configurator——四叶草配置引导工具
  7. 日语简历在线做成下载的网站(收藏)不同职业日语简历模板下载免费
  8. 人人开源(快速搭建项目)
  9. Git命令提交代码步骤
  10. postgresql与mysql语法区别