通讯录的实现

#ifndef _TONGXUNLU_H__
#define _TONGXUNLU_H__
#define MAX_NAME 20
#define MAX_PHONE 11
#define MAX_PEO 1000

typedef struct PeoInfo
{
    char name[MAX_NAME];
    int age;
    char phone[MAX_PHONE];
}PeoInfo;

typedef struct Contact
{
    PeoInfo date[MAX_PEO];//创建一个数组,数组里有MAX_PEO个结构体类型
    int count;//记录通讯录的当前人数
}Contact,*pContact;

enum
{
    EXIT,
    ADD,
    DELETE,
    SELECT,
    MODIFY,
    SHOW,
    EMPT,
    SORT
};
void menu();
void InitContact(pContact pc);
void AddPeoInfo(pContact pc);
void DelPeoInfo(pContact pc);
void ShowPeoInfo(pContact pc);
void SelPeoInfo(pContact pc);
void MfyPeoInfo(pContact pc);
void EmtPeoInfo(pContact pc);
void SorPeoInfo(pContact pc);
#endif
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include"tongxunlu.h"
void menu()//菜单选择界面
{
    printf("---------------------------------------------\n");
    printf("------------ 1.ADD      2.DELETE ------------\n");
    printf("------------ 3.SELECT   4.MODIFY ------------\n");
    printf("------------ 5.SHOW     6.EMPT   ------------\n");
    printf("------------ 7.SORT     0.EXIT   ------------\n");
    printf("---------------------------------------------\n");
}

void InitContact(pContact pc)
{
    assert(pc);
    pc->count = 0;
    memset(pc->date, 0, sizeof(pc->date));
}

int Find(pContact pc, char *pname)
{
    int i = 0;
    for (i = 0; i <= pc->count; i++)
    {
        if (strcmp(pc->date[i].name, pname) == 0)
        {
            return i;
        }
    }
    return -1;
}

void AddPeoInfo(pContact pc)
{
    assert(pc);
    if (pc->count >= MAX_PEO)
    {
        printf("通讯录已满\n");
        return;
    }
    printf("请输入你要添加联系人的姓名:");
    scanf("%s", &pc->date[pc->count].name);
    printf("请输入你要添加联系人的年龄:");
    scanf("%d", &pc->date[pc->count].age);
    printf("请输入你要添加联系人的电话号码:");
    scanf("%s", &pc->date[pc->count].phone);
    printf("添加成功\n");
    pc->count++;
}

void DelPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要删除联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        pc->date[ret] = pc->date[pc->count];
        pc->count--;
        printf("删除成功\n");
    }
    else {
        printf("查无此人\n");
    }
}
void SelPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要查找联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        printf("%-15s %-10d %-10s\n", pc->date[ret].name,
            pc->date[ret].age, pc->date[ret].phone);
    }
    else {
        printf("查无此人\n");
    }
}

void MfyPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要修改联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        printf("%-15s %-10d %-10s\n", pc->date[ret].name,
            pc->date[ret].age, pc->date[ret].phone);
        int i = 0;
        do
        {
            printf("输入你要修改的选项:\n");
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入修改后的名字:");
                scanf("%s", pc->date[ret].name);
                break;
            case 2:
                printf("请输入修改后的年龄:");
                scanf("%d", pc->date[ret].age);
                break;
            case 3:
                printf("请输入修改后的手机号:");
                scanf("%s", pc->date[ret].phone);
                break;
            case 0:
                break;
            default:
                printf("输入错误,请重新输入:");
                break;
            }
        } while (i);
    }
    else {
        printf("查无此人\n");
    }
}
void ShowPeoInfo(pContact pc)
{
    int i = 0;
    printf("-------------------------------------\n");
    printf("name            age        phone\n");
    for (i = 0; i < pc->count; i++)
    {
        printf("%-15s %-10d %-10s\n", pc->date[i].name,
            pc->date[i].age, pc->date[i].phone);
    }
    printf("-------------------------------------\n");
}

void EmtPeoInfo(pContact pc)
{
    pc->count = 0;
}

void SorPeoInfo(pContact pc)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < pc->count; i++)
        for (j = i + 1; j <= pc->count; j++)
        {
            if (strcmp(pc->date[i].name, pc->date[j].name) < 0)
            {
                PeoInfo tmp;
                tmp = pc->date[i];
                pc->date[i] = pc->date[j];
                pc->date[j] = tmp;
            }
        }
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"tongxunlu.h"
int main()
{
    Contact my_con;
    int input = 0;
    InitContact(&my_con);
    do {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input) {
        case EXIT:
            printf("退出成功\n");
            break;
        case ADD:
            AddPeoInfo(&my_con);
            break;
        case DELETE:
            DelPeoInfo(&my_con);
            break;
        case SELECT:
            SelPeoInfo(&my_con);
            break;
        case MODIFY:
            MfyPeoInfo(&my_con);
            break;
        case SHOW:
            ShowPeoInfo(&my_con);
            break;
        case EMPT:
            EmtPeoInfo(&my_con);
            break;
        case SORT:
            SorPeoInfo(&my_con);
            break;
        default:
            printf("瞎搞,重新输入\n");
            break;
        }
    } while (input);
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lly17792230965/article/details/80343621