C语言简易通讯录实现

C语言通讯录

1.创建menu函数和循环结构

void menu(int* input) {

    printf("******************************\n");
    printf("******1. add      2. del******\n");
    printf("******3. modify   4. serach***\n");
    printf("******5. show     6. sort*****\n");
    printf("******0. exit            *****\n");
    printf("******************************\n");
    printf("请输入操作->");
    scanf("%d", input);
}

2.创建contact.h

#pragma once
#include<string.h>
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TEL_MAX 13
enum contacts {
    EXIT,
    ADD,
    DEL,
    MODIFY,
    SERACH,
    SHOW,
    SORT
};
typedef struct peopleInfo
{
    char name[NAME_MAX];
    int age;
    char sex[SEX_MAX];
    char addr[ADDR_MAX];
    char tel[TEL_MAX];
}People;

typedef struct contact
{
    People pepinfo[100];
    int sz;
} Contact;
void init_contact(Contact* contact);
void addpep(Contact* contact);
void show(const Contact* contact);
void del(const Contact* contact);
void serach(const Contact* contact);
void modify(Contact* contact);
void sort(Contact* contact);

包含引入头文件和函数声明

3.创建信息和通讯录结构体

typedef struct peopleInfo
{
    char name[NAME_MAX];
    int age;
    char sex[SEX_MAX];
    char addr[ADDR_MAX];
    char tel[TEL_MAX];
}People;

typedef struct contact
{
    People pepinfo[100];
    int sz;
} Contact;

4.初始化contact对象的函数

void  init_contact(Contact* contact) {
    assert(contact);
    contact->sz = 0;
    memset(contact->pepinfo, 0, sizeof(contact->pepinfo));
}

将数组中的元素初始化成0

5.增加成员的函数

void addpep(Contact* contact) {
    
    assert(contact);
    if (contact->sz >= 100)
    {
        printf("联系人已满,无法添加!");
        return;
    }
    else {
        printf("请输入姓名\n");
        scanf("%s", contact->pepinfo[contact->sz].name);
        printf("请输入年龄\n");
        scanf("%d", &contact->pepinfo[contact->sz].age);
        printf("请输入性别\n");
        scanf("%s", contact->pepinfo[contact->sz].sex);
        printf("请输入地址\n");
        scanf("%s", contact->pepinfo[contact->sz].addr);
        printf("请输入电话\n");
        scanf("%s", contact->pepinfo[contact->sz++].tel);
    }

}

6.显示所有成员的函数

void show(const Contact* contact) {
    assert(contact);
    printf("%-20s%-10s%-10s%-12s%-30s\n", "姓名", "年龄", "性别", "电话", "地址");
    for (int i = 0; i < contact->sz; i++)
    {
        People p = contact->pepinfo[i];
        //printf("%sssss\n", p.name);
        printf("%-20s%-10d%-10s%-12s%-30s\n", p.name, p.age, p.sex, p.tel, p.addr);
    }

}

7.删除成员函数

void del( Contact* contact) {
    assert(contact);
    char arr[NAME_MAX];
    int ret;
    printf("请输入要删除成员的姓名\n");
    scanf("%s", arr);
    ret = findByName(contact, arr);
    if (ret == -1) {
        printf("没找到成员\n");
    }
    else {
        for (int i = ret; i < contact->sz - 1; i++) {
            contact->pepinfo[i] = contact->pepinfo[i + 1];
        }
        contact->sz--;
        printf("删除成功\n");
    }
}

8.查找成员函数

int findByName(const Contact* contact,const char* p) {
    int i = 0;
    for (int i = 0; i < contact->sz; i++)
    {
        if (!strcmp(contact->pepinfo[i].name, p))return i;
    }
    return -1;
}
void serach(const Contact* contact) {
    assert(contact);
    char arr[NAME_MAX];
    int ret;
    printf("请输入要查找成员的姓名\n");
    scanf("%s", arr);
    ret = findByName(contact, arr);
 
    if (ret == -1) {
        printf("没找到成员\n");
    }else{
        printf("%-20s%-10s%-10s%-12s%-30s\n", "姓名", "年龄", "性别", "电话", "地址");
        People p = contact->pepinfo[ret];
        printf("%-20s%-10d%-10s%-12s%-30s\n", p.name, p.age, p.sex, p.tel, p.addr);
    }
}

9.修改成员函数

void modify(Contact* contact) {
    assert(contact);
    char arr[NAME_MAX];
    int ret;
    printf("请输入要修改成员的姓名\n");
    scanf("%s", arr);
    ret = findByName(contact, arr);
    if (ret == -1) {
        printf("没找到成员\n");
    }
    else {
        printf("请输入姓名\n");
        scanf("%s", contact->pepinfo[ret].name);
        printf("请输入年龄\n");
        scanf("%d", &contact->pepinfo[ret].age);
        printf("请输入性别\n");
        scanf("%s", contact->pepinfo[ret].sex);
        printf("请输入地址\n");
        scanf("%s", contact->pepinfo[ret].addr);
        printf("请输入电话\n");
        scanf("%s", contact->pepinfo[ret].tel);
    }
}

10.按姓名排序

int namecmp(void* p1, void* p2) {
    return strcmp(((People*)p1)->name, ((People*)p2)->name);
}
void sort(Contact* contact) {
    assert(contact);
    qsort(contact->pepinfo,contact->sz,sizeof(People),namecmp);
    printf("排序完成\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值