通讯录的实现(另附完整源码)

简介: 通讯录的实现(另附完整源码)

对于通讯的实习,想必会是,学习计算机专业的毕业设计吧!!但是,却是难到了不少人!!叫苦连天!也有不少人在咨询笔者的!!最近以来,笔者刚学习了结构体!所以顺便花了三天多,研究了一下通讯录的实现!所以,笔者打算分享出来,与大家共勉!!


注意,这个是:静态的版本!!其他的版本,请等待笔者后续更新!!请不要着急!


下面,我们需要在写之前,有自己的想法:在以下三个文件名中,分别有自己的专门输入的东西!!


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);


上面就是一个静态的通讯录源代码!!与大家分享一下!!若有不懂得地方,请各位老铁及时私聊!!


相关文章
|
存储 编解码 C语言
【c语言】通讯录(动态版+文件+背景音乐)含源码
【c语言】通讯录(动态版+文件+背景音乐)含源码
75 0
|
存储 搜索推荐
C进阶:通讯录(动态版本 + 文件操作)附源码(上)
C进阶:通讯录(动态版本 + 文件操作)附源码
46 0
C进阶:通讯录(动态版本 + 文件操作)附源码(下)
C进阶:通讯录(动态版本 + 文件操作)附源码(下)
70 0
|
6月前
文件版本的通讯录
文件版本的通讯录
52 1
手把手教你写通讯录(含动态版) 1
手把手教你写通讯录(含动态版)
通讯录的8种功能的具体实现和整个程序的代码
具体详细讲解看上一个博客(贼细) 1.头文件(声明各种函数和定义各种类型的地方) 2.测试文件(main函数所在,代码开始的地方) 3.函数实现文件(8种功能的具体实现,每一个函数都是独立实现,无嵌套使用) 4.以上你可以写在一个文件中也可以写在不同文件中
【C】—文件版本通讯录的实现
【C】—文件版本通讯录的实现