简单通讯录

测试环境:vs2013

通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人

思路:利用结构体数组,定义一个全局变量count用来统计联系人个数,删除时,将要删的那个与末尾的进行交换,然后count–。清空时,将count置零。

//test.c
#include 
#include 
#include "address.h"

#pragma warning(disable:4996)

//extern int count;
//extern struct adress list[1000];

int main()
{
    int num = 0;

    do
    {
        menu();
        printf("请选择-->(1-8):");
        scanf("%d", &num);
        fflush(stdin);                  //清除
        switch (num)
        {
            case 1:
                add_people(list);       //添加
                break;
            case 2:
                delet_people(list);         //删除
                break;
            case 3:
                find_people(list);          //查找
                break;
            case 4:
                alter_people(list);         //更改
                break;
            case 5:
                show_people(list);
                break;
            case 6:
                empty_people(list);
                break;
            case 7:
                sort_people(list);
                break;
            case 8:
                break;
            default:
                printf("选择错误,请重新选择\n");
                break;
        }
        if (num == 8)break;

    } while (num);


    system("pause");
    return 0;
}
//address.h

#ifndef __ADDRESS_H__
#define __ADDRESS_H__

struct adress
{
    char name[10];
    char sex[1];
    char age[2];
    char tel[12];               //电话用字符串来存
    char adress[50];

}list[1000];


void menu(void);
void add_people(struct adress* list);      //添加联系人
int find_people(struct adress* list);      //查找联系人
void alter_people(struct adress* list);    //更改联系人
void delet_people(struct adress* list);    //删除联系人
void show_people(struct adress* list);     //显示联系人
void sort_people(struct adress* list);     //排序联系人
void empty_people(struct adress* list);    //清空联系人


#endif
//address.c


#include 
#include 
#include 
#include "address.h"
#pragma warning(disable:4996)

int count = 0;

//菜单
void menu(void)
{
    printf("***********************************************************\n");
    printf("****1. 添加联系人信息      2. 删除指定联系人信息******\n");
    printf("****3. 查找指定联系人信息       4. 修改指定联系人信息******\n");
    printf("****5. 显示所有联系人信息       6. 清空所有联系人    ******\n");
    printf("****7. 以名字排序所有联系人   8.退出               ******\n");
    printf("***********************************************************\n");
}

//添加联系人
void add_people(struct adress* list)
{
    assert(list);

    if (1000 == count)
    {
        printf("人已满!!!\n");
    }
    else
    {
        printf("name:");
        scanf("%s", (list + count)->name);
        printf("sex(1or2):");
        scanf("%s", (list + count)->sex);
        printf("age:");
        scanf("%s", (list + count)->age);
        printf("tel:");
        scanf("%s", (list + count)->tel);
        printf("adress:");
        scanf("%s", (list + count)->adress);
        count++;
        printf("添加完成!\n");
    }
}

//查找联系人
int find_people(struct adress* list)
{
    assert(list);
    if (0 == count)
    {
        printf("没有联系人\n");
    }
    else{
        int i = 0;
        char name[20] = "";
        printf("请输入名字:");
        scanf("%s", name);
        for (i = 0; i < count; i++)
        {
            if (strcmp(name, (list + i)->name) == 0)
            {
                printf("name:%s ", (list + i)->name);
                printf("sex:%s ", (list + i)->sex);
                printf("age:%s ", (list + i)->age);
                printf("tel:%s ", (list + i)->tel);
                printf("adress:%s ", (list + i)->adress);
                putchar('\n');

                return i;
            }
        }
        printf("没有此人\n");
    }

    return -1;
}

//更改联系人
void alter_people(struct adress* list)
{
    assert(list);

    if (0 == count)
    {
        printf("没有联系人\n");
    }
    else{
        int ret = find_people(list);
        if (-1 != ret)
        {
            printf("name:");
            scanf("%s", (list + ret)->name);
            printf("sex(1or2):");
            scanf("%s", (list + ret)->sex);
            printf("age:");
            scanf("%s", (list + ret)->age);
            printf("tel:");
            scanf("%s", (list + ret)->tel);
            printf("adress:");
            scanf("%s", (list + ret)->adress);

            printf("修改完成\n");
        }
        else
        {
            NULL;
        }
    }

}
//删除联系人
void delet_people(struct adress* list)   //删除联系人时,将最后一个联系人和这个调换
{
    assert(list);

    if (0 == count)
    {
        printf("没有联系人\n");
    }
    else
    {
        int ret = find_people(list);
        int tmp = count-1;      //需要减1
        if (-1 != ret)
        {

            struct adress t = *(list + ret);       
            *(list + ret) = *(list + tmp);
            *(list + tmp) = t;

            printf("已删除\n");
            count--;
        }
        else
        {
            NULL;
        }
    }
}

//显示联系人
void show_people(struct adress* list)
{
    assert(list);
    if (0 == count)
    {
        printf("没有成员\n");
    }
    else
    {

        int i = 0;
        for (i = 0; i < count; i++)
        {
            printf("name:%s ", (list + i)->name);
            printf("sex:%s ", (list + i)->sex);
            printf("age:%s ", (list + i)->age);
            printf("tel:%s ", (list + i)->tel);
            printf("adress:%s ", (list + i)->adress);
            putchar('\n');
        }
    }
}

//排序联系人
void sort_people(struct adress* list)
{
    assert(list);
    if (0 == count)
    {
        printf("没有联系人,不能排序\n");
    }
    else
    {
        int i = 0;
        int j = 0;
        for (i = 0; i < count - 1; i++)
        {
            for (j = 0; j1 - i; j++)
            {
                if (strcmp((list + j)->name, (list + j + 1)->name) > 0)   //从小到大排序
                {
                    struct adress t = *(list + j);         //交换两个结构体
                    *(list + j) = *(list + j + 1);
                    *(list + j + 1) = t;
                }
            }
        }
    }

}

//清空联系人
void empty_people(struct adress* list)
{
    count = 0;

    printf("已清空\n");
}

在调试时碰到bug,sex和age设置为整型时,在排序时会出错,删数据时,也会出错。而设置成数组时,则无问题。

你可能感兴趣的:(每日练习)