静态版通讯录的实现

首先也是自定义头文件,函数实现部分还有测试函数
头文件部分:

#ifndef  __CONTACT_H__
#define  __CONTACT_H__

#define  MAX_NAME   20
#define  MAX_SEX     5
#define  MAX_TELE   12
#define  MAX_ADDR  100
#define  MAX      1000

typedef struct PeoInfo//定义结构体包括名字 年龄 性别 电话 地址
{
    char name[MAX_NAME];
    int age;
    char sex[MAX_SEX];
    char tele[MAX_TELE];
    char addr[MAX_ADDR];
}PeoInof;

typedef struct Con
{
    PeoInof con[MAX];
    int sz;
}Con,*pCon;

enum input
{
    EXIT,
    ADD,
    DELETE,
    SEARCH,
    MODIFY,
    SHOW,
    EMPTY,
    SORT
};
void init(pCon Con);//初始化通讯录
void add(pCon Con);//添加联系人
void delete(pCon Con);//删除联系人
void search(pCon Con);//查找联系人
void modify(pCon Con);//修改联系人
void show(pCon Con);//显示联系人
void empty(pCon Con);//清空通讯录
void sort(pCon Con);//排序联系人

#endif

函数实现部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contact.h"
void init(pCon Con)//初始化通讯录
{
    memset(Con->con, 0, MAX*sizeof(PeoInof));
    Con->sz = 0;
}
int  find_peo(pCon Con,char *name)
{
    int i = 0;
    if (Con->sz == 0)
    {
        printf("通讯录为空,不能查找联系人!\n");
    }
    else
    {
        for (i = 0; i < Con->sz; i++)
        {
            if (strcmp(Con->con[i].name, name) == 0)
                return i;
        }
    }
    return -1;
}
void add(pCon Con)//添加联系人
{
    if (Con->sz == MAX)
    {
        printf("通讯录已满,不能再添加!\n");
    }
    else
    {
        printf("请输入姓名:");
        scanf("%s", Con->con[Con->sz].name);
        printf("请输入年龄:");
        scanf("%d", &Con->con[Con->sz].age);
        printf("请输入性别:");
        scanf("%s", Con->con[Con->sz].sex);
        printf("请输入电话:");
        scanf("%s", Con->con[Con->sz].tele);
        printf("请输入地址:");
        scanf("%s", Con->con[Con->sz].addr);
        Con->sz++;
        printf("添加联系人成功!\n");
    }
}
void delete(pCon Con)//删除指定联系人
{
    if (Con->sz == 0)
    {
        printf("通讯录为空,不能进行删除!\n");
    }
    else
    {
        int i = 0;
        int ret = 0;
        char name[MAX_NAME] = { 0 };
        printf("请输入要删除人的姓名:");
        scanf("%s",name);
        ret = find_peo(Con, name);
        if (ret != -1)
        {
            for (i = ret; i < Con->sz - 1; i++)
            {
                Con->con[i] = Con->con[i + 1];
            }
            Con->sz--;
            printf("删除成功!\n");
        }
        else
        {
            printf("没有此联系人!\n");
        }
    }
}
void search(pCon Con)//查找指定联系人
{
    int i = 0;
    int ret = 0;
    char name[MAX_NAME] = { 0 };
    printf("请输入要查找的人的姓名:");
    scanf("%s",name);
    ret = find_peo(Con, name);
    if (ret != -1)
    {
        printf("%5s %5d %5s %5s %5s\n", 
            Con->con[ret].name,
            Con->con[ret].age,
            Con->con[ret].sex,
            Con->con[ret].tele,
            Con->con[ret].addr);
    }
    else
    {
        printf("没有找到指定联系人!\n");
    }
}
void modify(pCon Con)//修改指定联系人
{
    int i = 0;
    int ret = 0;
    char name[MAX_NAME] = { 0 };
    printf("请输入要修改的人的姓名:");
    scanf("%s",name);
    ret = find_peo(Con,name);
    if (ret != -1)
    {
        printf("%5s %5s %5s %5s %5s\n", "name", "age", "sex", "tele", "addr");
        scanf("%5s%5d%5s%5s%5s", 
            Con->con[ret].name,
           &Con->con[ret].age,
            Con->con[ret].sex,
            Con->con[ret].tele,
            Con->con[ret].addr);
        printf("修改成功,修改后为:\n");
        printf("%5s %5d %5s %5s %5s\n",
            Con->con[ret].name,
            Con->con[ret].age,
            Con->con[ret].sex,
            Con->con[ret].tele,
            Con->con[ret].addr);
    }
    else
    {
        printf("没有此联系人!\n");
    }

}
void show(pCon Con)//显示联系人
{
    int i = 0;
    for (i = 0; i < Con->sz; i++)
    {
        printf("%5s %5d %5s %5s %5s\n", 
            Con->con[i].name,
            Con->con[i].age,
            Con->con[i].sex,
            Con->con[i].tele,
            Con->con[i].addr);
    }
}
void empty(pCon Con)//清空通讯录
{
    Con->sz = 0;
    printf("完成清空!\n");
}
void sort(pCon Con)//排序
{
    int i = 0;
    if (Con->sz == 0)
    {
        printf("通讯录为空!\n");
    }
    else
    {
        for (i = 0; i<Con->sz - 1; i++)
        {
            int j = 0;
            for (j = 0; j<Con->sz - 1 - i; j++)
            {
                if (strcmp(Con->con[j].name, Con->con[j + 1].name)>0)
                {
                    PeoInof tmp = Con->con[j];
                    Con->con[j] = Con->con[j + 1];
                    Con->con[j + 1] = tmp;
                }
            }
        }
        printf("排序完成!\n");
    }
}

主函数的测试部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include "contact.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()
{
    menu();
    Con my_con;
    init(&my_con);
    int input = 0;
    while (input)
    {
        printf("请输入要执行的操作:");
        scanf("%d",&input);
        switch (input)
        {
        case ADD:
            add(&my_con);
            break;
        case DELETE:
            delete(&my_con);
            break;
        case SEARCH:
            search(&my_con);
            break;
        case MODIFY:
            modify(&my_con);
            break;
        case SHOW:
             show(&my_con);
            break;
        case EMPTY:
            empty(&my_con);
            break;
        case SORT:
            sort(&my_con);
            break;  
        case EXIT:
            break;
        default:
        printf("请输入正确选项\n");
            break;
        }
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值