通讯录的c语言实现源代码

简单通讯录的实现还是包括三个源文件,test.c(实现通讯录主逻辑),txl.c(实现用到的各个函数),txl.h(存放txl中用到的各种头文件与声明)。

txl.h

#ifndef __TXL_H__//**txl.h**#define __TXL_H__
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#include<errno.h>enum option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,EMPTY,SORT};
#define MAX 1000
#define MAX_NAME 15
#define MAX_SEX 5
#define MAX_NUM 12
#define MAX_DAARESS 30
#define MAX_CAP 2
typedef struct addr
{char name[MAX_NAME];char sex[MAX_SEX];short int age;char num[MAX_NUM];char address[MAX_DAARESS];}addr;typedef struct contact
{addr* data;int sz;int capacity;
}contact;void Initcontact(contact* pcon);
void addcontact(contact* pcon);
void showcontact(const contact* pcon);
void delcontact(contact* pcon);
void emptycontct(contact* con);
void searchcontact(const contact* pcon);
void xuicontact(contact* pcon);
void sortcontact(contact* pcon);
void checkcapacity(contact* pcon);
void destorycontact(contact* pcon);
void savecontact(contact* pcon);
void loadcontact(contact* pcon);#endif

text.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"txl.h"
void menu()
{printf("***************************\n");printf("**** 1.add    2.del    ****\n");printf("**** 3.search 4.modify ****\n");printf("**** 5.show   6.empty  ****\n");printf("**** 7.sort   0.exit   ****\n");printf("***************************\n");
}
int main()
{int len = 0;int input = 0;contact con;   Initcontact(&con);  do{menu();printf("请输入你要完成的操作\n");scanf("%d",&input);switch(input){case ADD:addcontact(&con);break;case DEL:delcontact(&con);break;case SEARCH:searchcontact(&con);break;case MODIFY:xuicontact(&con);break;case SHOW:showcontact(&con);break;           case EMPTY:emptycontct(&con);break;case SORT:sortcontact(&con);break;case EXIT:savecontact(&con);printf("保存成功\n");destorycontact(&con);printf("程序退出\n");break;default:printf("输入有误\n");break;}}while(input);return 0;
}

txl.h

#define _CRT_SECURE_NO_WARNINGS 1
#include"txl.h"
void loadcontact(contact* pcon)
{addr tmp = {0};FILE* pf = fopen("contact.text","rb");assert(pcon != NULL);  if(pf == NULL){perror("程序出错\n");return ;}while(fread(&tmp , sizeof(addr),1,pf)){checkcapacity(pcon);pcon -> data[pcon -> sz] = tmp;pcon -> sz++; }
}
void Initcontact(contact* pcon)
{assert(pcon != NULL);pcon -> sz = 0;pcon ->capacity = MAX_CAP;pcon ->data = (addr*)malloc(pcon ->capacity*sizeof(addr));memset(pcon->data, 0, pcon ->capacity*sizeof(addr));loadcontact(pcon);
}void addcontact(contact* pcon)
{if(pcon -> sz == pcon ->capacity){checkcapacity(pcon);}assert(pcon != NULL);printf("请输入名字\n");scanf("%s",pcon -> data[pcon -> sz].name);printf("请输入性别\n");scanf("%s",pcon -> data[pcon -> sz].sex);printf("请输入年龄\n");scanf("%d",&(pcon -> data[pcon -> sz].age));printf("请输入电话\n");scanf("%s",pcon -> data[pcon -> sz].num);printf("请输入住址\n");scanf("%s",pcon -> data[pcon -> sz].address);pcon -> sz++;printf("添加成功\n");    }void savecontact(contact* pcon)
{int i = 0;FILE* pf = fopen("contact.text","wb");if(pf == NULL){perror("程序出错\n");return ;}for(i = 0; i < pcon -> sz; i++){fwrite(pcon ->data+i,sizeof(addr),1,pf);}
}void destorycontact(contact* pcon)
{assert(pcon != NULL);free(pcon -> data);pcon -> data = NULL;pcon -> capacity = 0;pcon -> sz = 0;
}void checkcapacity(contact* pcon)
{if(pcon -> sz == pcon ->capacity){addr* ptr = realloc(pcon ->data, (pcon ->capacity+2)*sizeof(addr));if(ptr != NULL){pcon -> data = ptr;pcon -> capacity += 2;}printf("扩容成功\n");}
}void showcontact(const contact* pcon){int i = 0;assert(pcon != NULL);printf("%-15s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "性别", "年龄", "电话", "地址");for(i=0; i<pcon->sz; i++){printf("%-15s\t%-5s\t%-5d\t%-12s\t%-20s\n", pcon->data[i].name, pcon->data[i].sex,pcon->data[i].age,pcon->data[i].num,pcon->data[i].address);}}//void showcontact(contact* pcon)
//{
//  int i = 0;
//  assert(pcon != NULL);
//  printf("%-15s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "性别", "年龄", "电话", "地址");
//  for(i = 0; i < pcon -> sz; i++)
//  {
//      printf("%-15s\t%-5s\t%-5d\t%-12s\t%-20s\n",
//          pcon -> data[i].name,
//          pcon -> data[i].sex,
//          pcon -> data[i].age,
//          pcon -> data[i].num,
//          pcon -> data[i].address);
//  }
//}static int findname(const contact* pcon ,char name[])
{int i = 0;assert(pcon != NULL);  for(i = 0; i < pcon -> sz; i++){if(strcmp(pcon -> data[i].name, name) == 0){return i;}}return -1;
}void delcontact(contact* pcon)
{int pos = 0;char name[MAX_NAME]={0};int i = 0;assert(pcon != NULL);if(pcon -> sz == 0){printf("通讯录为空,无法删除\n");}else{printf("请输入要删除人的姓名\n");scanf("%s", name);pos = findname(pcon , name);if(pos == -1){printf("要删除的人不存在\n");}else{for(i = pos; i < pcon -> sz-1;i++){pcon -> data[i] = pcon -> data[i+1];}pcon -> sz--;printf("删除成功\n");}}
}void emptycontct(contact* pcon)
{int input = 0;printf("危险操作,清空输入1,不清空输入0\n");scanf("%d",&input);if(input == 1){pcon -> sz = 0;pcon ->capacity = MAX_CAP;pcon ->data = (addr*)malloc(pcon ->capacity*sizeof(addr));memset(pcon->data, 0, pcon ->capacity*sizeof(addr));printf("清空成功\n");}else{;}}void searchcontact(const contact* pcon)
{int pos = 0;char name[MAX_NAME] = {0};assert(pcon != NULL);printf("请输入你要查找人的名字\n");scanf("%s",name);pos = findname(pcon ,name);if(-1 == pos){printf("你所要查找的人不存在\n");}else{printf("%-15s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "性别", "年龄", "电话", "地址");printf("%-15s\t%-5s\t%-5d\t%-12s\t%-20s\n", pcon->data[pos].name, pcon->data[pos].sex,pcon->data[pos].age,pcon->data[pos].num,pcon->data[pos].address);}}void xuicontact(contact* pcon)
{int pos = 0;char name[MAX_NAME] = {0};assert(pcon != NULL);printf("请输入你要修改的人的名字\n");scanf("%s",name);pos = findname(pcon ,name);if(-1 == pos){printf("你所要修改的人不存在\n");}else{        printf("请输入名字\n");scanf("%s",pcon -> data[pcon -> sz+pos-1].name);printf("请输入性别\n");scanf("%s",pcon -> data[pcon -> sz+pos-1].sex);printf("请输入年龄\n");scanf("%d",&(pcon -> data[pcon -> sz+pos-1].age));printf("请输入电话\n");scanf("%s",pcon -> data[pcon -> sz+pos-1].num);printf("请输入住址\n");scanf("%s",pcon -> data[pcon -> sz+pos-1].address);        }
}int cmp_age(const void* e1,const void* e2)
{return ((struct addr*)e1)->age - ((struct addr*)e2)->age;
}void sortcontact(contact* pcon)//快速排序
{assert(pcon != NULL);qsort(pcon->data,pcon->sz,sizeof(addr),cmp_age);printf("排序成功\n");
}//void sortcontact(contact* pcon)  //以名字排序联系人(冒泡排序)
//{
//  int flag=0;
//  int i=0;
//  int j=0;
//  for(i=0;i<pcon->sz-1;i++)
//  {
//      flag=0;
//      for(j=0;j<pcon->sz-1-i;j++)
//      {
//          if(strcmp(pcon->data[j].name,pcon->data[j+1].name) > 0)
//          {
//              addr tmp=pcon->data[j];
//              pcon->data[j]=pcon->data[j+1];
//              pcon->data[j+1]=tmp;
//              flag=1;
//          }
//      }
//      if(flag == 0)
//
//          break;
//
//  }
//}

[c语言]——C语言实现通讯录相关推荐

  1. C语言课程设计:通讯录系统

    C语言课程设计:通讯录系统 [题目4]通讯录程序设计 设计一个实用的小型通讯录程序,具有添加,查询和删除功能.由姓名,籍贯,电话号码1,电话号码2,电子邮箱组成,姓名可以由字符和数字混合编码.电话号码 ...

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

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

  3. 你是真的“C”——详解C语言实现文件版通讯录

    详解C语言实现文件版通讯录

  4. 通讯录管理系统C语言课程设计大作业,c语言课程设计报告---通讯录管理系统.doc...

    c语言课程设计报告---通讯录管理系统.doc Yangtze University College of Arts and Science 学生实习手册 (课程设计报告) 学 部 理 工 学 部 专 ...

  5. OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

    Osc乱弹歌单(2019)请戳(这里) [今日歌曲] @花间小酌:#今日歌曲推荐# 分享The Score的单曲<Revolution> <Revolution>- The S ...

  6. python语言是哪种语言_python语言是哪种语言

    python的三种选择语句_电子/电路_工程科技_专业资料.本文将详细介绍 Python 语言中的三种选择语句:if 语句,if/else 语句和 if/elif/else 语句.对 于每种语句,.. ...

  7. 为什么我们需要一门新语言——Go语言

    编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有 PHP.Python.Perl.Ruby.JavaS ...

  8. 职工信息管理程序设计c语言,C语言程序设计职工信息管理系统.docx

    C语言程序设计职工信息管理系统.docx 1 数信学院数信学院 课程设计报告课程设计报告 课程名称课程名称C C 语言程序设计语言程序设计_ _ 题目名称题目名称职工信息管理系统职工信息管理系统 学生 ...

  9. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

最新文章

  1. 为什么Python是数据科学领域最受欢迎的语言
  2. 双指针算法之快慢指针(一):力扣【判断链表是否有环】leetcode-141、142
  3. 冒泡排序python实现
  4. 在 ubuntu 上编译 qtopia-2.2.0问题
  5. [BUUCTF-pwn]——picoctf_2018_shellcode
  6. java 兔子生仔问题
  7. 牛客网【每日一题】7月31日题目精讲—兔子的区间密码
  8. Google Guava –与Monitor同步
  9. mysql问题处理积累
  10. Android pid uid
  11. linux编译内核支持pam,linux编译内核make menuconfig报错解决办法
  12. http协议里的chunked编码与测试
  13. linux QT 程序自启动,Qt Windows下开机自动启动自己的程序
  14. 深度学习:词嵌入Embedding
  15. 小课堂 | 你听过雾计算?对了,还有霾计算
  16. 阿里云移动推送iOS
  17. Unity实现3D模式下的摄像机视角控制
  18. 中国诗歌艺术9诗的魅惑:中国诗歌的几个基本元素之诗的节奏与韵律
  19. 网工必备工具软件——一看就懂,一听就会,一做就废
  20. 1273:【例9.17】货币系统

热门文章

  1. 快速入门html、css和javascript
  2. 玩一玩游戏之Hello World
  3. Unity中的UGUI源码解析之事件系统(2)-EventSystem组件
  4. 使用python的turtle库函数画圣诞树详细教程
  5. 5线制jlink仿真接线的方法
  6. PHP 服务器端解决axios 跨域问题
  7. 【秋招总结】面试相关-基础概念
  8. 视频输出在显卡和主板间切换
  9. 华为交换机telnet配置方法
  10. 20分钟了解计算机组成:CPU、带宽、外频和倍频、内存、cache、显卡、操作系统、硬盘接口、5种视频输出线接口