C语言实现简单通讯录(仅代码)

头文件部分

#pragma once
//头文件区域
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>//定义声明
#define MAX 100
//人的信息
typedef struct PeoInfo
{char name[20];int age;char sex[10];char tel[12];char addr[30];
}PeoInfo;
//通讯录
//typedef struct Contact
//{//  PeoInfo data[MAX];
//  int count;
// }Contact;//动态版本
typedef struct Contact
{PeoInfo* data;int count;int capacity;
}Contact;//函数区域
void menu();
void InitContact(Contact *pc);
void addContact(Contact *pc);
void showContact(const Contact *pc);
void deleteContact(Contact* pc);
void searchContact(const Contact* pc);
void modifyContact(Contact* pc);
void sortContact(Contact* pc);
void DestoryContact(Contact* pc);
void SaveContact(Contact* pc);
void LoadContact(Contact* pc);

函数接口实现

#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");printf("请输入需要的操作:>");}
//初始化通讯录
// 静态版本
//void InitContact(Contact *pc)
//{//  for (int i = 0; i < MAX; i++)
//  {//      memset(pc->data, 0,sizeof(pc->data));
//  }
//  pc->count = 0;
//}//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->count = 0;pc->data = (PeoInfo*)calloc(3,sizeof(PeoInfo));if (pc->data==NULL){printf("%s", strerror(errno));}LoadContact(pc);pc->capacity = 3;
}//添加联系人
//静态版本
//void addContact(Contact* pc)
//{//  system("cls");
//  assert(pc);
//  if (pc->count == MAX)
//  {//      printf("通讯录已满\n");
//      return ;
//  }
//  char option = 'Y';
//
//  while (option == 'Y')
//  {//
//      system("cls");
//      printf("请输入信息\n");
//      printf("请输入名字>");
//      scanf("%s", pc->data[pc->count].name);
//      printf("请输入年龄>");
//      scanf("%d", &pc->data[pc->count].age);
//      printf("请输入性别>");
//      scanf("%s", pc->data[pc->count].sex);
//      printf("请输入电话>");
//      scanf("%s", pc->data[pc->count].tel);
//      printf("请输入地址>");
//      scanf("%s", pc->data[pc->count].addr);
//      printf("是否确定添加 Y/N\n");
//      getchar();//清除printf函数范围值
//      char opt = getchar();
//      if (opt == 'Y')
//      {//          pc->count++;
//          printf("保存成功\n");
//      }
//      else
//      {//          memset(&pc->data[pc->count], 0, sizeof(pc->data[pc->count]));
//          printf("取消成功\n");
//      }
//      printf("是否继续添加 Y/N\n");
//      getchar();
//      option = getchar();
//  }
//  system("cls");
//  printf("成功退出 按任意键回到主页面...\n");
//  getchar();
//  getchar();
//}
//动态版本
void checksum(Contact* pc)
{if (pc->count == pc->capacity){PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));if (ptr == NULL){printf("%s", strerror(errno));return;}else{pc->data = ptr;pc->capacity += 2;printf("增容成功\n");printf("按任意键继续...\n");getchar();getchar();}}
}void LoadContact(Contact* pc)
{FILE* pf = fopen("contact.txt", "rb");if (pf == NULL){perror("fopen");return;}PeoInfo tmp = { 0 };while (fread(&tmp, sizeof(PeoInfo), 1, pf) == 1){checksum(pc);pc->data[pc->count] = tmp;pc->count++;}fclose(pf);pf = NULL;
}void addContact(Contact* pc)
{system("cls");assert(pc);//增容//函数版本/*if (pc->count ==pc->capacity){PeoInfo *ptr=(PeoInfo *)realloc(pc->data, (pc->capacity + 2) * sizeof(PeoInfo));if (ptr == NULL){printf("%s", strerror(errno));return;}else{pc->data = ptr;pc->capacity += 2;}}*/char option = 'Y';while (option == 'Y'){checksum(pc);system("cls");printf("请输入信息\n");printf("请输入名字>");scanf("%s", pc->data[pc->count].name);printf("请输入年龄>");scanf("%d", &pc->data[pc->count].age);printf("请输入性别>");scanf("%s", pc->data[pc->count].sex);printf("请输入电话>");scanf("%s", pc->data[pc->count].tel);printf("请输入地址>");scanf("%s", pc->data[pc->count].addr);printf("是否确定添加 Y/N\n");getchar();//清除printf函数范围值char opt = getchar();if (opt == 'Y'){pc->count++;printf("保存成功\n");}else{memset(&pc->data[pc->count], 0, sizeof(pc->data[pc->count]));printf("取消成功\n");}printf("是否继续添加 Y/N\n");getchar();option = getchar();}system("cls");printf("成功退出 按任意键回到主页面...\n");getchar();getchar();
}//显示联系人
void showContact(const Contact* pc)
{assert(pc);system("cls");printf("所有联系人\n");int i = 0;printf("显示全部\n");printf("%-s\t%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "序号", "名字", "年龄", "性别", "电话", "地址");for (i = 0; i < pc->count; i++){printf("%-d\t%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", i+1,pc->data[i].name, pc->data[i].age,pc->data[i].sex,pc->data[i].tel,pc->data[i].addr);}printf("输入任意键退出...\n");getchar();getchar();
}//查询函数(内部函数)
static int FindName(Contact* pc, char name[])
{assert(pc);int i = 0;for (i = 0; i < pc->count; i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}//删除联系人
void deleteContact(Contact* pc)
{system("cls");assert(pc);if (pc->count == 0){printf("通讯录为空,没有可删除对象\n");printf("按任意键退出...\n");getchar();getchar();}char name[20];printf("请输入要删除的名字>:");scanf("%s", name);int pos = FindName( pc,name);if (pos == -1){system("cls");printf("你删除的姓名不存在\n按任意键退出...");getchar();getchar();return ;}for (int i = pos; i < pc->count-1; i++){pc->data[i] = pc->data[i + 1];}memset(&pc->data[pc->count - 1], 0, sizeof(pc->data[pc->count - 1]));pc->count--;printf("删除成功\n按任意键退出...");getchar();getchar();
}//查询联系人
void searchContact(const Contact* pc)
{system("cls");assert(pc);char name[20];printf("请输入需要查找的名字:>");scanf("%s", name);int pos = FindName(pc, name);if (pos == -1){printf("找不到该对象\n");printf("按任意键退出\n");getchar();getchar();return;}else{printf("%-s\t%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "序号", "名字", "年龄", "性别", "电话", "地址");printf("%-d\t%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n", pos + 1,pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tel,pc->data[pos].addr);}printf("按任意键退出\n");getchar();getchar();
}//修改联系人
void modifyContact(Contact* pc)
{system("cls");assert(pc);char name[20];printf("请输入需要修改的名字:>");scanf("%s", name);int pos = FindName(pc, name);if (pos == -1){printf("要修改的人不存在\n按任意键退出...\n");getchar();getchar();return;}printf("请输入信息\n");printf("请输入名字>");scanf("%s", pc->data[pos].name);printf("请输入年龄>");scanf("%d", &pc->data[pos].age);printf("请输入性别>");scanf("%s", pc->data[pos].sex);printf("请输入电话>");scanf("%s", pc->data[pos].tel);printf("请输入地址>");scanf("%s", pc->data[pos].addr);printf("修改成功\n按任意键退出...\n");getchar();getchar();
}//联系人按名字排序//排序函数
int my_sort(const void* e1,const void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void sortContact(Contact* pc)
{system("cls");assert(pc);qsort(pc->data, pc->count, sizeof(pc->data[0]),my_sort);printf("排序成功\n按任意键退出...\n");getchar();getchar();
}
void SaveContact(Contact* pc)
{assert(pc);FILE* pf = fopen("contact.txt", "wb");if (pf == NULL){perror("fopen");return ;}for (int i = 0; i < pc->count; i++){fwrite(&pc->data[i], sizeof(PeoInfo), 1, pf);}fclose(pf);pf = NULL;
}
void DestoryContact(Contact* pc)
{assert(pc);free(pc->data);pc->data = NULL;
}

主体

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
int main()
{int input = 0;Contact con;//初始化函数InitContact(&con);do {system("cls");menu();scanf("%d", &input);switch (input){case 1:addContact(&con);break;case 2:deleteContact(&con);break;case 3:searchContact(&con);break;case 4:modifyContact(&con);break;case 5:showContact(&con);break;case 6:sortContact(&con);break;case 0:SaveContact(&con);DestoryContact(&con);break;default:system("cls");printf("选择错误,重新选择\n");break;}} while (input);system("cls");puts("成功退出");return 0;
}

c语言实现简单通讯录(仅代码)相关推荐

  1. C语言实现简单通讯录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.分析问题 二.函数具体功能的实现 1.结构体的创建 2.对结构体进行初始化 3.增加联系人 4.find_by_n ...

  2. 数据结构(C语言版)——简单选择排序(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 20 #define ERROR 0 #define OK ...

  3. C语言实现简单的五子棋代码

    #define _CRT_SECURE_NO_WARNINGS // VS2013添加这个宏,关闭C4996报错 #include <stdio.h>#define N 16 // 定义棋 ...

  4. 用c语言实现简单的关机代码

    //简易的关机代码,下面介绍两种方法,一种方法用goto 语句,一种方法用while循环 #include<stdio.h> #include<windows.h> #incl ...

  5. C语言——简易版通讯录完整代码

    目录 一.Contact.h 二.Contact.c 三.test.c 一.Contact.h #pragma once #include <stdio.h> #include <s ...

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

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

  7. android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  8. c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...

    说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...

  9. <C语言>简单表白代码小❤❤

    这是一个简单的表白代码,运用了c语言的编译工具,因为很早之前百度来的,也不记得出处在哪里,注明:转载 #include <windows.h> //win头文件 #include<s ...

最新文章

  1. 在IDE中刷LeetCode,编码调试一体化,刷题效率直线up!
  2. java编程石头剪刀布图片_石头、剪刀、布!10分钟带你打开深度学习大门,代码已开源...
  3. 单独像对相对定向元素解析
  4. Java多线程为什么使用while循环来调用wait方法
  5. 诺基亚java闪退_回顾诺基亚N9:诺基亚手机颜值巅峰,却在发布7天后被“放弃”...
  6. 【下载】快速通过Python笔试?学大家一样先把LeetCode答案私藏了
  7. c++回调函数详解及实现(lambda)
  8. 3.9 使用标尺工具拉直倾斜的图片 [Ps教程]
  9. Webgl(ThreeJS)空间测量\测距功能(附工程文件)
  10. 自己不行就认为别人也不可能
  11. python:比较运算符(等于,小于,大于,不等于,大于等于,小于等于)的简单用法
  12. 企查查api接口批量操作实战
  13. mysql 双冒号,SQL中的双冒号(::)符号
  14. 从孙子兵法理解围棋大龙攻杀的要诀: 攻守双方口诀
  15. 图形学-二维图形的裁剪1.Cohen 2.Liang
  16. CF1005A Tanya and Stairways
  17. 如何在 Windows 中备份与恢复树莓派 SD 卡
  18. python不改变图片尺寸压缩到指定大小 1
  19. Python Mongodb 查询以及批量写、批量查
  20. java FUNCTION传入返回值模式简单记录

热门文章

  1. XMind 8免费激活方法
  2. 电子邮件位于计算机硬盘上吗,2011年计算机一级MSoffice试题及答案解析(42)
  3. 哈希碰撞攻击与防范机制
  4. Android 简单的实现上一张和下一张
  5. js获取本月,本周,当日,时间段
  6. 华为php工程师面试问题,2020年10月php面试笔记
  7. Vscode——jupyter安装
  8. 简单题日常3:f1813:矩阵转置
  9. html 判断复选框是否被选中
  10. 谨防假经济危机“做空”劳动者权益