C语言实现通讯录

今天写一个简单的C语言小项目,简易的通讯录
编译环境:win10 VS2013
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

通讯录包含的功能:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人

实现原理:利用C语言结构体的功能实现
下面是代码实现:

//Link.c  
#define _CRT_SECURE_NO_WARNINGS 1
#include "Link.h"

void menu()
{
    printf("**************************************\n");
    printf("*********   1.添加指定联系人    ******\n");
    printf("*********   2.显示所有联系人    *******\n");
    printf("*********   3.查找指定联系人   *******\n");
    printf("*********   4.删除指定联系人    *******\n");
    printf("*********   5.修改指定联系人    *******\n");
    printf("*********   6.以名字排序联系人   *******\n");
    printf("*********   7.清除所有联系人     *******\n");
    printf("*********   0.退出             ******\n");
    printf("**************************************\n");
}
int main()
{
    LinkMan lm;
    Init_LinkMan(&lm);
    menu();
    int i = 0;
    printf("请输入你想要查询的内容:");
    scanf("%d", &i);
    do
    {
    switch (i)
    {
    case 0:
        printf("谢谢使用!\n");
        break;
    case 1:
        AddLinkManInfo(&lm);
        break;
    case 2:
        ShowAllLinkManInfo(&lm);
        break;
    case 3:
        FindLinkManInfo(&lm);
        break;
    case 4:
        DeleteLinkManInfo(&lm);
        break;
    case 5:
        ModLinkManInfo(&lm);
        break;
    case 6:
        SortLinkManInfo(&lm);
        break;
    case 7:
        ClearLinkManInfo(&lm);
        break;
    default:
        break;
    }
  }while(i);
    system("pause");
    return 0;
}
//LinkMan.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "Link.h"
#include <string.h>

void menu1()
{
    printf("**************************************\n");
    printf("*********   1.添加指定联系人    ******\n");
    printf("*********   2.显示所有联系人   *******\n");
    printf("*********   3.查找指定联系人   *******\n");
    printf("*********   4.删除指定联系人   *******\n");
    printf("*********   5.修改指定联系人   *******\n");
    printf("*********   6.以名字排序联系人 *******\n");
    printf("*********   7.清除所有联系人   *******\n");    
    printf("*********   0.退出             *******\n");
    printf("**************************************\n");
}
//初始化联系人,将空间置0
void Init_LinkMan(LinkMan* lm)  
{
    int count = sizeof(lm->_Contact);  //先求出联系人的大小
    lm->_count = 0;
    memset(lm->_Contact, 0, count);
}

//将每一个联系人单独保存,便于查找
int Find(LinkMan* lm, char* pName)
{
    int i = 0;
    for (; i < (lm->_count); ++i)
    {
        if (0 == strcmp(lm->_Contact[i]._name, pName))
        {
            return i;
        }
    }

    return -1;
}
//添加联系人
void AddLinkManInfo(LinkMan* lm)   
{
    if (lm->_count > 1000)
        printf("人数已达上限!");
    else
    {
        printf("请输入你要添加联系人的姓名:");
        scanf("%s", lm->_Contact[lm->_count]._name);
        printf("请输入你要添加联系人的性别:");
        scanf("%s", lm->_Contact[lm->_count]._gender);
        printf("请输入你要添加联系人的年龄:");
        scanf("%d", &lm->_Contact[lm->_count]._age);
        printf("请输入你要添加联系人的电话:");
        scanf("%d", lm->_Contact[lm->_count]._tel);
        printf("请输入你要添加联系人的地址:");
        scanf("%s", lm->_Contact[lm->_count]._addr);
        printf("添加联系人成功!\n");
        lm->_count++;
    }
}

//显示所有联系人
void ShowAllLinkManInfo(LinkMan* lm)  
{
    int num = lm->_count;
    printf("输出所有人的信息:");
    printf("%10s%7s%6s%8s%10s\n", "姓名", "性别", "年龄", "电话", "地址");
    for (; num > 0; --num)
    {
        printf("%10s", lm->_Contact[num]._name);
        printf("%10s", lm->_Contact[num]._gender);
        printf("%10d", lm->_Contact[num]._age);
        printf("%10d", lm->_Contact[num]._tel);
        printf("%10s", lm->_Contact[num]._addr);
    }
}
//查找指定联系人
void FindLinkManInfo(LinkMan* lm)
{
    char name[20] = { 0 };
    int result = 0;
    printf("请输入你要查找的联系人姓名:");
    scanf("%s", name);
    result = Find(lm, name);
    if ( result)
    {
        printf("姓名:%s\n", lm->_Contact[result]._name);
        printf("性别:%s\n", lm->_Contact[result]._gender);
        printf("年龄:%d\n", lm->_Contact[result]._age);
        printf("电话:%d\n", lm->_Contact[result]._tel);
        printf("地址:%s\n", lm->_Contact[result]._addr);      
    }
    else
    {
        printf("您查找的联系人不存在\n");
    }
}
//删除指定联系人
void DeleteLinkManInfo(LinkMan* lm)
{
    char name[20] = { 0 };
    int result = 0;
    int r = 0;  //用来确认是否删除联系人
    printf("请输入想要删除联系人的姓名:");
    scanf("%s", name);
    result = Find(lm, name);
    if (result)
    {
        printf("确定删除该联系人?\n");
        printf("是请按1,否请按0\n");
        scanf("%d", r);
        if (1 == r)
        {
            int i = 0;
            for (; i < (lm->_count); ++i)
            {
                lm->_Contact[i] = lm->_Contact[i + 1];
            }
            lm->_count--;
            printf("删除成功。\n");
        }
        else
        {
            printf("删除失败。\n");
        }
    }
    else
        printf("您要删除的联系人不存在\n");
}

//修改指定联系人
void ModLinkManInfo(LinkMan* lm)
{
    char name[20] = { 0 };
    int result = 0;
    printf("请输入你要修改的联系人姓名:");
    scanf("%s", name);
    result = Find(lm, name);
    if (result)
    {
        {
            printf("姓名:%s\n", lm->_Contact[result]._name);
            printf("性别:%s\n", lm->_Contact[result]._gender);
            printf("年龄:%d\n", lm->_Contact[result]._age);
            printf("电话:%d\n", lm->_Contact[result]._tel);
            printf("地址:%s\n", lm->_Contact[result]._addr);
        }
        int i = 0;
        do
        {
            menu1();
            printf("请输入你要修改的选项:");
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请把姓名修改为:");
                scanf("%s", lm->_Contact[result]._name);
                break;
            case 2:
                printf("请把性别修改为:");
                scanf("%s", lm->_Contact[result]._gender);
                break;
            case 3:
                printf("请把年龄修改为:");
                scanf("%d", &lm->_Contact[result]._age);
                break;
            case 4:
                printf("请把电话修改为:");
                scanf("%d", lm->_Contact[result]._tel);
                break;
            case 5:
                printf("请把地址修改为:");
                scanf("%s", lm->_Contact[result]._addr);
                break;
            default:
                break;
            }
        } while (i);
    }
    else
    {
        printf("您要修改的联系人不存在\n");
    }

}
//按名字排序联系人
void SortLinkManInfo(LinkMan* lm)
{
    int i = 0;
    int j = 0;
    for (; i < (lm->_count) - 1; ++i)
    {
        for (; j < (lm->_count) - i; ++j)
        {
            if (strcmp(lm->_Contact[j]._name, lm->_Contact[j + 1]._name) > 0)
            {
                LinkManInfo temp;
                temp = lm->_Contact[j];
                lm->_Contact[j] = lm->_Contact[j + 1];
                lm->_Contact[j + 1] = temp;
            }
        }
    }
}
//清空所有联系人
void ClearLinkManInfo(LinkMan* lm)
{
    lm->_count = 0;
}
//Link.h
#ifndef  __LINKMAN_H__
#define  __LINKMAN_H__ 


#include <stdio.h>
#include <stdlib.h>

//建立结构体存放联系人基本信息
typedef struct LinkManInfo
{
    char _name[20];
    char _gender[5];
    int _age;
    int _tel[12];
    char _addr[40];

}LinkManInfo;
//用一个结构体来存放1000个联系人
typedef struct LinkMan
{
    LinkManInfo _Contact[1000];
    int _count;    //通信录中保存联系人的个数
}LinkMan;

//通讯录实现方法
void Init_LinkMan(LinkMan* lm);         //初始化通讯录
void AddLinkManInfo(LinkMan* lm);       //添加指定联系人
void ShowAllLinkManInfo(LinkMan* lm);   //显示所有联系人
void FindLinkManInfo(LinkMan* lm);      //查找指定联系人
void DeleteLinkManInfo(LinkMan* lm);    //删除指定联系人
void SortLinkManInfo(LinkMan* lm);      //按名字排序联系人
void ModLinkManInfo(LinkMan* lm);       //修改指定联系人
void ClearLinkManInfo(LinkMan* lm);     //清空所有联系人
#endif

这里写图片描述
写完这个通讯录我还有一点小问题,就是在我录取完联系人信息之后我还想让它在返回去调用其他函数,我应该怎么做?求大佬们指点一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值