有趣的通讯录—<静态版>

在这里我们要解决的问题是采用顺序表的形式制作一个通讯录。

对于顺序表就是一种静态的模式,后续会有动态模式,以及文件操作模式,敬请期待!!!

后续我会更新其他方式的操作。
在这里,我们需要三个文件,contact.h封装结构体以及函数声明,conteact.c封装函数算法,最后,test.c封装主函数和测试函数。

contact.h


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define NAME_MAX 20
#define  SEX_MAX 5
#define TELE_MAX 20
#define ADD_MAX 50
#define MAX_SIZE 1000
struct contact
{
    char name[NAME_MAX];
    char sex[SEX_MAX];
    int age;
    char tele[TELE_MAX];
    char address[ADD_MAX];
};

struct A
{
    struct contact arr[MAX_SIZE];
    int i;
};


enum op
{
    EXIT,
    ADD,
    DEL,
    SEARCH,
    MODIFY,
    DISPLAY,
    CLEAR,
    SORT
};


void Add(struct A *con);

void print_contact(struct A *con);

int find_position(struct A *pcon);

int delete_contact(struct A *pcon);

int find_contacts(struct A *pcon);

int revise_contact(struct A *pcon);

void put_empty(struct A *pcon);

void sort_name(struct A *pcon);

void _init_contact(struct A *pcon);

void print_menu();

contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"

//添加联系人信息
void Add(struct A *con)
{
    printf("请输入名字:");
    scanf("%s", con->arr[con->i].name);
    printf("请输入性别:");
    scanf("%s", con->arr[con->i].sex);
    printf("请输入年龄:");
    scanf("%d", &(con->arr[con->i].age));
    printf("请输入电话号码:");
    scanf("%s", con->arr[con->i].tele);
    printf("请输入地址:");
    scanf("%s", con->arr[con->i].address);
    con->i++;
    printf("添加完毕。\n");

}
//打印所有联系人信息
void print_contact(struct A *con)
{
    printf("打印联系人信息\n");

    int i = 0;
    printf("%-10s%-5s%-5s%-15s%-20s\n", "name",
        "sex", "age", "tele",
        "ddress");
    for (i = 0; i < con->i; i++)
    {
        printf("%-10s%-5s%-5d%-15s%-20s\n", con->arr[i].name,
            con->arr[i].sex, con->arr[i].age, con->arr[i].tele,
            con->arr[i].address);
    }
    printf("\n");
}


//查找指定联系人所在位置
int find_position(struct A *pcon)
{
    int i = 0;
    char name[20];
    printf("请输入你所要查找的名字:");
    scanf("%s", name);
    for (i = 0; i < pcon->i; i++)
    {
        if (strcmp(pcon->arr[i].name, name) == 0)
        {
            return i;
        }
    }
    return -1;
}



//删除所有联系人信息
int delete_contact(struct A *pcon)
{
    int i = 0;
    printf("删除联系人\n");
    int ret = find_position(pcon);
    if (ret != -1)
    {
        for (i = ret; i < pcon->i - 1; i++)
        {
            pcon->arr[i] = pcon->arr[i + 1];
        }
        pcon->i--;
        return 1;
    }
    else
        printf("没有找到这个人,无法删除!\n");
    return 0;



}

//查找并且输出这个找到的信息。
int find_contacts(struct A *pcon)
{
    printf("查找联系人\n");
    int ret = find_position(pcon);
    if (ret != -1)
    {
        printf("姓名:%s\n", pcon->arr[ret].name);
        printf("性别:%s\n", pcon->arr[ret].sex);
        printf("年龄:%d\n", pcon->arr[ret].age);
        printf("电话号码:%s\n", pcon->arr[ret].tele);
        printf("地址:%s\n", pcon->arr[ret].address);
        return 1;
    }
    printf("没有找到\n");
    return 0;
}

//修改指定联系人的信息
int revise_contact(struct A *pcon)
{
    int ret = find_position(pcon);
    printf("修改联系人\n");
    if (ret != -1)
    {
        printf("请输入你所想要修改的数据:");
        printf("请输入名字:");
        scanf("%s", pcon->arr[ret].name);
        printf("请输入性别:");
        scanf("%s", pcon->arr[ret].sex);
        printf("请输入年龄:");
        scanf("%d", &(pcon->arr[ret].age));
        printf("请输入电话号码:");
        scanf("%s", pcon->arr[ret].tele);
        printf("请输入地址:");
        scanf("%s", pcon->arr[ret].address);
        return 1;
    }
    printf("没有找到你所需要修改的联系人。\n");
    return 0;
}

//清空所有联系人
void put_empty(struct A *pcon)
{
    printf("清空联系人\n");
    memset(pcon->arr, 0, 1000 * sizeof(struct contact));
    pcon->i = 0;
}

//以名字排序所有联系人

void sort_name(struct A *pcon)
{
    printf("排序\n");
    char ch = 0;
    int i = 0;
    int j = 0;
    printf("请选择排序方式(‘<’代表由z->a,'>'代表由a->z):");
    fflush(stdin);
    scanf("%c", &ch);
    int flag = 0;
    if (ch == '>')
    {

        for (i = 0; i < pcon->i; i++)
        {
            flag = 0;
            for (j = 0; j < pcon->i - i - 1; j++)
            {
                if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)>0)
                {
                    struct contact tmp = { 0 };
                    tmp = pcon->arr[j];
                    pcon->arr[j] = pcon->arr[j + 1];
                    pcon->arr[j + 1] = tmp;
                    flag = 1;
                }

            }
            if (flag == 0)
                break;
        }
    }
    else if (ch == '<')
    {
        for (i = 0; i < pcon->i; i++)
        {
            flag = 0;
            for (j = 0; j < pcon->i - i - 1; j++)
            {
                if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)<0)
                {
                    struct contact tmp = { 0 };
                    tmp = pcon->arr[j];
                    pcon->arr[j] = pcon->arr[j + 1];
                    pcon->arr[j + 1] = tmp;
                    flag = 1;
                }

            }
            if (flag == 0)
                break;
        }
    }
    else
        printf("选择错误,请返回重新选择:\n");
    printf("排序结束!\n");


}


void _init_contact(struct A *pcon)
{
    pcon->i = 0;
    memset(pcon->arr, 0, MAX_SIZE*sizeof(struct contact));


}


void print_menu()
{
    printf("$$$$$$$$CONTACT-TEXT$$$$$$$$\n");
    printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
    printf("$$$  1.add      2.del    $$$\n");
    printf("$$$  3.search   4.modify $$$\n");
    printf("$$$  5.show     6.clr    $$$\n");
    printf("$$$  7.sort     0.exit   $$$\n");
    printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"
void Test()
{
    struct A con;
    int input = 1;
    _init_contact(&con);
    while (input)
    {
        print_menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
        case ADD:
            Add(&con);
            break;
        case DEL:
            delete_contact(&con);
            break;
        case SEARCH:
            find_contacts(&con);
            break;
        case MODIFY:
            revise_contact(&con);
            break;
        case DISPLAY:
            print_contact(&con);
            break;
        case CLEAR:
            put_empty(&con);
            break;
        case SORT:
            sort_name(&con);
            break;
        case EXIT:
            break;
        default:
            break;
        }
    }

}
int main()
{
    Test();
    system("pause");
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值