简易通讯录的实现

AddressList.h

#pragma once
#pragma warning (disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<Windows.h>
#include<String.h>
typedef struct MAN//存放人员信息
{
    char _name[20];
    int _age;
    char _sex[10];
    int _numder;
    int _tel;
    char _addr[10];
}MAN;
typedef struct table//把通讯录和人员统计放在结构体内
{
    MAN _num[100];
    int _size;
}table;
void Init_MAN(table* p);//初始化
int Find(table* t, char*name);
void Add_MAN(table*p);//添加联系人信息
void Dele_MAN(table*p);//删除指定联系人信息
void Find_MAN(table*p);//查找联系人
void Change_MAN(table*p);//修改联系人信息
void Display_MAN(table*p);//显示联系人信息
void Empty_MAN(table*p);//清空所有联系人
void Sort_MAN(table*p);//排序联系人

AddressList.c

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

}
void menu1()
{
    printf("**********************************\n");
    printf("*********1、姓名  2、年龄*********\n");
    printf("*********3、学号  4、性别*********\n");
    printf("*********5、地址  6、电话*********\n");
    printf("***************0、 退出***********\n");
}
void Init_MAN(table* p)
{
    assert(p);
    int _size = (sizeof(p->_num));
    p->_size = 0;
    memset(p->_num, 0, _size);
}
int Find(table* t, char*name)
{
    assert(t&&name);
    int i;
    for ( i = 0; i < (t->_size); i++)
    {
        if (strcmp(t->_num[i]._name,name)==0)
        {
            return i;
        }

    }
    return -1;
}
void Add_MAN(table*p)
{
    assert(p);
    printf("请输入你要添加的联系人学号:\n");
    scanf("%d", &(p->_num[p->_size]._numder));
    printf("请输入你要添加的联系人姓名:\n");
    scanf("%s", p->_num[p->_size]._name);
    printf("请输入你要添加的联系人性别:\n");
    scanf("%s", p->_num[p->_size]._sex);
    printf("请输入你要添加的联系人年龄:\n");
    scanf("%d", &(p->_num[p->_size]._age));
    printf("请输入你要添加的联系人电话:\n");
    scanf("%d", &(p->_num[p->_size]._tel));
    printf("请输入你要添加的联系人地址:\n");
    scanf("%s", p->_num[p->_size]._addr);
    if ((p->_size)>100)
    {
        printf("超过上限\n");
    }
    else
    {
        printf("添加成功\n");
        p->_size++;
    }




}
void Dele_MAN(table*p)//删除指定联系人信息
{
    assert(p);
    char name[20] = { 0 };
    printf("请输入要删除的联系人:");
    scanf("%s", &name);
    int ret = Find(p,name);
    int i = 0;
    int n = 0;
    if (ret!=-1)
    {
        printf("请问是否删除:\n");
        printf("删除请按1,否则请按0\n");
        scanf("%d", &n);
        if (n==1)
        {
            for (i = 0; i <= p->_size - 1; i++)
            {
                p->_num[i] = p->_num[i + 1];
            }
            p->_size--;
            printf("删除成功\n");
        }
        else
        {
            printf("删除失败\n");
        }

    }
    else
    {
        printf("此联系人不存在");
    }


}
void Find_MAN(table*p)//查找联系人
{
    assert(p);
    char name[20] = { 0 };
    printf("请输入你要查找联系人的名字:"  );
    scanf("%s", &name);
    int ret = Find(p, name);
    if (ret!=-1)
    {
        printf("联系人的学号为:%d\n", p->_num[ret]._numder);
        printf("联系人的名字为:%s\n", p->_num[ret]._name);
        printf("联系人性别的为:%s\n", p->_num[ret]._sex);
        printf("联系人的年龄为:%d\n", p->_num[ret]._age);
        printf("联系人的电话为:%d\n", p->_num[ret]._tel);
        printf("联系人的地址为:%s\n", p->_num[ret]._addr);
   }
    else
    {
        printf("没找到\n");
    }

}
void Change_MAN(table*p)//修改联系人信息
{
    assert(p);
    char name[20] = { 0 };
    printf("请输入要修改的联系人姓名:");
    scanf("%s", &name);
    int ret = Find(&p, name);
    if (ret!=-1)
    {
        printf("联系人的学号为:%d\n", p->_num[ret]._numder);
        printf("联系人的名字为:%s\n", p->_num[ret]._name);
        printf("联系人性别的为:%s\n", p->_num[ret]._sex);
        printf("联系人的年龄为:%d\n", p->_num[ret]._age);
        printf("联系人的电话为:%d\n", p->_num[ret]._tel);
        printf("联系人的地址为:%s\n", p->_num[ret]._addr);
        int i = 0;
        do
        {
            menu1();
            printf("请输入要修改的属性:\n");
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入要修改的姓名:");//姓名
                scanf("%s", p->_num[ret]._name);
                break;
            case 2:printf("请输入要修改的年龄:");//年龄
                scanf("%d", p->_num[ret]._age);
                break;
            case 3:printf("请输入要修改的学号:");//学号
                scanf("%d", p->_num[ret]._numder);
                break;
            case 4:printf("请输入要修改的性别:");//性别
                scanf("%s", p->_num[ret]._sex);
                break;
            case 5:printf("请输入要修改的地址:");//地址
                scanf("%s", p->_num[ret]._addr);
                break;
            case 6:printf("请输入要修改的电话:");//电话
                scanf("%d", p->_num[ret]._tel);
                break;
            case 0://退出
                exit(0);
                break;
            default:
                printf("输入错误\n");
                break;

             }

        } while (i);

    }




}
void Display_MAN(table*p)//显示联系人信息
{
    assert(p);
    printf("输出所有联系人的信息:\n");
    printf("%10s %7s %6s %8s %9s %10s\n","学号","姓名","性别","年龄","电话","地址");
    for (int i = 0; i<p->_size; i++)
    {
        printf("%10d ", p->_num[i]._numder);
        printf("%7s ", p->_num[i]._name);
        printf("%6s ", p->_num[i]._sex);
        printf("%8d ", p->_num[i]._age);
        printf("%9d ", p->_num[i]._tel);
        printf("%10s ", p->_num[i]._addr);
        printf("\n");

    }


}
void Empty_MAN(table*p)//清空所有联系人
{
    assert(p);
    p->_size = 0;

}
void Sort_MAN(table*p)//排序联系人
{
    assert(p);
    int i,j;
    for (i = 0; i < p->_size; i++)
    {
        for ( j = 0; j < p->_size-1-i; j++)
        {
            if (strcmp(p->_num[j]._name,p->_num[j+1]._name)>0)
            {
                MAN tmp;
                tmp = p->_num[j];
                p->_num[j] = p->_num[j + 1];
                p->_num[j + 1] = tmp;

            }
        }
    }

}

test.c

#include"AddressList.h"
table t;
void test()
{
    int i = 0;
    do
    {
        menu();
        printf("请输入你要进行的选项:");
        scanf("%d", &i);
        switch (i)
        {
        case 1:
            Add_MAN(&t);
            break;
        case 2:
            Dele_MAN(&t);
            break;
        case 3:
            Find_MAN(&t);
            break;
        case 4:
            Change_MAN(&t);
            break;
        case 5:
            Display_MAN(&t);
            break;
        case 6:
            Empty_MAN(&t);
            break;
        case 7:
            Sort_MAN(&t);
            break;
        case 0:
            exit(0);
            break;
        default:
            printf("输入错误\n");
            break;
        }

    } while (i);

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

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值