实现动态通讯录(C语言)

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

enum Op
{
    EXIT,
    ADD,
    DEL,
    SEARCH,
    MODIFY,
    SHOW,
    EMPTY,
    SORT,
};

void meau()
{
    printf("************************************\n");
    printf("******  1.ADD        2.DEL     *****\n");
    printf("******  3.SEARCH     4.MODIFY  *****\n");
    printf("******  5.SHOW       6.EMPTY   *****\n");
    printf("******  7.SORT       8.EXIT    *****\n");
    printf("************************************\n");
}

test()
{
    int input = 0;
    Contact my_con;
    InitContact(&my_con);
    do
    {
        meau();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case ADD:
            AddContact(&my_con);
            break;
        case DEL:
            DelContact(&my_con);
            break;
        case SEARCH:
            break;
        case MODIFY:
            break;
        case SHOW:
            ShowContact(&my_con);
            break;
        case EMPTY:
            break;
        case SORT:
            break;
        case EXIT:
            DestroyContact(&my_con);
            break;
            printf("输入错误,请重新输入");
            break;
        }
    } while(input);
}

int main()
{
    test();
    system("pause");
    return 0;
}

contact.h

#ifndef _CONTACT_H__
#define _CONTACT_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define DEFAULT_INC 2
#define DEFAULT_SZ 3 
#define MAX 1000
#define MAX_NAME 10
#define MAX_SEX 5
#define MAX_TELE 20
#define MAX_ADD 30

typedef struct PeoInfo //通讯录信息结构体
{
    char name[MAX_NAME];
    int age;
    char sex[MAX_SEX];
    char tele[MAX_TELE];
    char add[MAX_ADD];
}PeoInfo;

typedef struct Contact //个人信息结构体
{
    //PeoInfo contact[MAX]; //MAX为最多可添加的信息量,每条信息为PeoInfo
    PeoInfo *contact;
    int sz;
    int capacity;
}Contact,*pContact;

void InitContact(pContact pcon);
void AddContact(pContact pcon);
void ShowContact(const pContact pcon);
void DelContact(pContact pcon);
int  CheckCapacity(pContact pcon);

#endif

contact.c

#include "contact.h"

void InitContact(pContact pcon)
{
    pcon->sz = 0;
    pcon->contact = (PeoInfo *)malloc(DEFAULT_SZ*sizeof(PeoInfo));
    if (pcon->contact == NULL)
    {
        perror("InitContact::malloc");
        exit(EXIT_FAILURE);
    }
    memset(pcon->contact, 0, DEFAULT_SZ *sizeof(pcon->contact));
    pcon->capacity = DEFAULT_SZ;
}

void DestroyContact(pContact pcon)
{
    free(pcon->contact);
    pcon->contact = NULL;
    pcon->sz = 0;
    pcon->capacity = 0;
}

int CheckCapacity(pContact pcon)
{
    if (pcon->sz == pcon->capacity)
    {
        PeoInfo *tmp = realloc(pcon->contact, pcon->capacity + DEFAULT_INC*sizeof(PeoInfo));
        if (tmp == NULL)
        {
            pcon->contact = tmp;
            pcon->capacity += DEFAULT_INC;
            printf("增容成功!\n");
            return 1;
        }
        else
            return 0;
    }
    return 1;
}

void AddContact(pContact pcon)
{
    if (CheckCapacity(pcon) == 0)
    {
        return;
    }
    printf("请输入姓名:>");
    scanf("%s", pcon->contact[pcon->sz].name);
    printf("请输入年龄:>");
    scanf("%d", &pcon->contact[pcon->sz].age);
    printf("请输入性别:>");
    scanf("%s", pcon->contact[pcon->sz].sex);
    printf("请输入电话:>");
    scanf("%s", pcon->contact[pcon->sz].tele);
    printf("请输入地址:>");
    scanf("%s", pcon->contact[pcon->sz].add);
    pcon->sz++;
    printf("添加成功\n");
}

void ShowContact(const pContact pcon)
{
    int i = 0;
    printf("%10s\t%5s\t%10s\t%10s\t%10s\n", "name", "age", "sex", "tele", "add");
    for (i = 0; i < pcon->sz; i++)
    {
        printf("%10s\t%5d\t%10s\t%10s\t%10s\n",
            pcon->contact[pcon->sz].name,
            pcon->contact[pcon->sz].age,
            pcon->contact[pcon->sz].sex,
            pcon->contact[pcon->sz].tele,
            pcon->contact[pcon->sz].add);
    }
}

static int FindEntry(pContact pcon, char name[])
{
    int i = 0;
    for (i = 0; i < pcon->sz; i++)
    {
        if (strcmp(name, pcon->contact[i].name) == 0)
        {
            return i;
        }
    }
    return -1;
}

void DelContact(pContact pcon)
{
    int pos = 0;
    char name[MAX_NAME] = { 0 };
    if (pcon->sz == 0)
    {
        printf("通讯录已空");
        return;
    }
    printf("请输入想要删除的记录\n");
    scanf("%s", &name);
    pos = FindEntry(pcon, name);
    if (pos == -1)
    {
        printf("你想要删除的记录不存在\n");
    }
    else
    {
        memmove(pcon->contact + pos, pcon->contact + pos + 1, (pcon->sz - pos - 1)*sizeof(PeoInfo));
        pcon->sz--;
        printf("删除成功\n");
    }
}

猜你喜欢

转载自blog.csdn.net/C1029323236/article/details/80632647