c语言实现通讯录

题目要求:实现一个通讯录,可容纳1000人,功能包括:增加,删除,查找,修改

头文件         

#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>

#define MAX_SZ 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

//类型的声明
typedef struct PeoInfo
{
    char name[MAX_NAME];
    char sex[MAX_SEX];
    int age;
    char tele[MAX_TELE];
    char addr[MAX_ADDR];
}PeoInfo;//人员信息

typedef struct Contact
{
    PeoInfo data[MAX_SZ];
    int sz;
}Contact;//通讯录

enum Con
{
    Exit,
    Add,
    Del,
    Search,
    Modefy,
    Printf
};


//函数的声明

//初始化
void InitContact(Contact* pc);

//增加
void AddContact(Contact* pc);

//打印
void PrintfContact(Contact* pc);

//删除
void DelContact(Contact* pc);

//查找
void SearchContact(Contact* pc);

//修改
void ModefyContact(Contact* pc);

函数

#include"contact.h"

//初始化
void InitContact(Contact* pc)
{
    assert(pc);
    pc->sz = 0;
    memset(pc->data, 0, sizeof(pc->data));
    return;
}

//增加
void AddContact(Contact* pc)
{
    assert(pc);
    if (pc->sz == MAX_SZ)
    {
        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");
    return;
}

//打印
void PrintfContact(Contact* pc)
{
    assert(pc);
    int i;
    printf("%-10s%-30s%-5s%-5s%-12s%-30s\n","编号", "姓名", "性别", "年龄", "电话", "地址");
    for (i = 0; i < pc->sz; i++)
    {
        printf("%-10d%-30s%-5s%-5d%-12s%-30s\n", i+1, pc->data[i].name, pc->data[i].sex,
            pc->data[i].age,pc->data[i].tele, pc->data[i].addr);
    }
    return;
}

//寻找
int Findbyname(Contact* pc, char* name)
{//找到返回下标,没找到返回-1
    int i;
    for (i = 0; i < pc->sz; i++)
    {
        if (0 == strcmp(pc->data[i].name, name))
        {
            return i;
        }
    }
    return -1;
}
//删除
void DelContact(Contact* pc)
{
    assert(pc);
    if (pc->sz == 0)
    {
        printf("通讯录已空,无法删除\n");
        return;
    }
    char name[MAX_NAME];
    printf("请输入要删除联系人的姓名:>");
    scanf("%s", name);
    //找到
    int ret=Findbyname(pc,name);
    if (ret == -1)
    {
        printf("没找到该联系人\n");
    }
    else
    {
        int i;
        for (i = ret; i < pc->sz - 1; i++)
        {
            pc->data[i] = pc->data[i + 1];
        }
        printf("删除成功\n");
        pc->sz--;
    }
    return;
}

//查找
void SearchContact(Contact* pc)
{
    assert(pc);
    char name[MAX_NAME];
    printf("请输入你要查找的联系人姓名:>");
    scanf("%s", name);
    int ret=Findbyname(pc, name);
    if (ret == -1)
    {
        printf("没找到该联系人\n");
    }
    else
    {
        printf("找到了\n");
        printf("%-10s%-30s%-5s%-5s%-12s%-30s\n", "编号", "姓名", "性别", "年龄", "电话", "地址");
        printf("%-10d%-30s%-5s%-5d%-12s%-30s\n", ret + 1, pc->data[ret].name, pc->data[ret].sex,
            pc->data[ret].age, pc->data[ret].tele, pc->data[ret].addr);
    }
}

//修改
void ModefyContact(Contact* pc)
{
    assert(pc);
    char name[MAX_NAME];
    printf("请输入你要修改的联系人姓名:>");
    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");
        return;
    }
}

通讯录实现

#include"contact.h"

void menu()
{
    printf("******************************\n");
    printf("****        通讯录        ****\n");
    printf("****1.Add         2.Del   ****\n");
    printf("****3.Search      4.Modefy****\n");
    printf("****5.Print       0.Exit  ****\n");
    printf("******************************\n");
}

void test()
{
    Contact con;
    //初始化
    InitContact(&con);
    int input = 0;
    do
    {
        menu();
        printf("请输入;>");
        scanf("%d", &input);
        switch (input)
        {
        case Add:
            AddContact(&con);
            break;
        case Del:
            DelContact(&con);
            break;
        case Search:
            SearchContact(&con);
            break;
        case Modefy:
            ModefyContact(&con);
            break;
        case Printf:
            PrintfContact(&con);
            break;
        case Exit:
            printf("已退出通讯录\n");
            break;
        default:
            break;
        }
    } while (input);
}
int main()
{
    test();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值