动态通讯录

动态通讯录:

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

具体实现如下:

头文件:contact.h

#ifndef __CONTACT_H__

#define __CONTACT_H__

#define BIG 100

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

#include <Windows.h>

typedef struct Man 
{
    char name[20];
    char sex[10];
    int age;
    char address[30];
    char tel[20];
}Man;

typedef struct Contact 
{
    Man* start;
    int count;
    int info;
}Contact;

void menu();
void init_con(Contact* pcon);
int cmp_con(Contact* pcon,char* name);
void check_con(Contact* pcon);
void add_con(Contact* pcon);
void del_con(Contact* pcon);
void find_con(Contact* pcon);
void mod_con(Contact* pcon);
void show_con(Contact* pcon);
void empty_con(Contact* pcon);
void sort_con(Contact* pcon);

#endif //CONTACT_H__

contact.c :

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"

void menu()
{
    printf("***********************************\n");
    printf("**********1:添加   2:删除**********\n");
    printf("**********3:查找   4:修改**********\n");
    printf("**********5:显示   6:清空**********\n");
    printf("**********7:排序   0:退出**********\n");
    printf("***********************************\n");
}

void init_con(Contact* pcon)
{
    pcon->start = (Man*)malloc(20 * sizeof(Man));
    if(pcon->start == NULL)
    {
        printf("空间不足\n");
        return;
    }
    pcon->count = 0;
    pcon->info = BIG;
}

void check_con(Contact* pcon)
{
    Contact *temp;
    if(pcon->count == pcon->info)
    {
        temp = (Contact *)realloc(pcon->start,BIG*sizeof(Man));
        if(temp == NULL)
        {
            printf("空间不足\n");
            return;
        }
        else
        {
            pcon->start = temp;
            pcon->info += BIG;
        }
    }
}
int cmp_con(Contact* pcon,char* name)
{
    int i = 0;
    for(i=0;i<pcon->count;i++)
    {
        if(strcmp(pcon->start[i].name,name) == 0)
        {
            return i;
        }
    }
    return -1;
}

void add_con(Contact* pcon)
{
    check_con(pcon);
    if(pcon->count == pcon->info)
    {
        printf("已存满\n");
        return;
    }
    else
    {
        printf("请输入姓名>");
        scanf("%s",pcon->start[pcon->count].name);
        printf("请输入性别>");
        scanf("%s",pcon->start[pcon->count].sex);
        printf("请输入年龄>");
        scanf("%d",&pcon->start[pcon->count].age);
        printf("请输入地址>");
        scanf("%s",pcon->start[pcon->count].address);
        printf("请输入电话>");
        scanf("%s",pcon->start[pcon->count].tel);
    }
    printf("信息录入完毕\n");
    pcon->count++;
}

void del_con(Contact* pcon)
{
    char name[20];
    int input = 0;
    int ret = 0;
    int i = 0; 
    printf("请输入要删除那个人的姓名>");
    scanf("%s",name);
    ret = cmp_con(pcon,name);
    if(ret == -1)
    {
        printf("没有此人的信息\n");
        return;
    }
    printf("****** 确定要删除? ******\n");
    printf("******1:删除 2:取消******\n");
    printf("请选择>");
    scanf("%d",input);
    if(input == 2)
    {
        printf("取消成功\n");
        return;
    }
    for(i=ret;i<pcon->count-1;i++)
    {
        Man temp;
        temp = pcon->start[i];
        pcon->start[i] = pcon->start[i+1];
        pcon->start[i+1] = temp;
    }
    printf("删除完毕\n");
}

void find_con(Contact* pcon)
{
    int ret = 0;
    char name[20];
    printf("请输入要查找那个人的姓名>");
    scanf("%s",name);
    ret = cmp_con(pcon,name);
    if(ret == -1)
    {
        printf("没有此人\n");
        return;
    }
    printf("\n");
    printf("姓名为: %s\n",pcon->start[ret].name);
    printf("性别为: %s\n",pcon->start[ret].sex);
    printf("年龄为: %d\n",pcon->start[ret].age);
    printf("地址为: %s\n",pcon->start[ret].address);
    printf("电话为: %s\n",pcon->start[ret].tel);
    printf("\n");
}

void mod_con(Contact* pcon)
{
    char name[20];
    int ret = 0 ;
    printf("请输入要修改那个人的姓名>");
    scanf("%s",name);
    ret = cmp_con(pcon,name);
    if(ret == -1)
    {
        printf("没有此人\n");
        return;
    }
    printf("请输入姓名>");
    scanf("%s",pcon->start[pcon->count].name);
    printf("请输入性别>");
    scanf("%s",pcon->start[pcon->count].sex);
    printf("请输入年龄>");
    scanf("%d",&pcon->start[pcon->count].age);
    printf("请输入地址>");
    scanf("%s",pcon->start[pcon->count].address);
    printf("请输入电话>");
    scanf("%s",pcon->start[pcon->count].tel);
    printf("修改完毕\n");
}

void show_con(Contact* pcon)
{
    int i = 0;
    for (i = 0; i <(pcon->count); i++)
    {
        printf("\n");
        printf("姓名为:%s\n",pcon->start[i].name);
        printf("性别为:%s\n",pcon->start[i].sex);
        printf("年龄为:%d\n",pcon->start[i].age);
        printf("地址为:%s\n",pcon->start[i].address);
        printf("电话:%s\n",pcon->start[i].tel);
        printf("\n");
    }
    printf("输出完毕\n");
}

void empty_con(Contact* pcon)
{
    pcon->count = 0;
    printf("清空完成\n");
}

void sort_con(Contact* pcon)
{
    int i = 0;
    int j = 0;
    for(i=0;i<pcon->count-1;i++)
    {
        for(j=0;j<pcon->count-1-i;i++)
        {
            if(strcmp(pcon->start[j].name,pcon->start[j+1].name)>0)
            {
                Man temp;
                temp = pcon->start[j];
                pcon->start[j] = pcon->start[j+1];
                pcon->start[j+1] = temp;
            }
        }
    }
    printf("排序完成\n");
}

test.c :

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"

int main()
{
    Contact my_con;
    int input = 0;
    void (* p[8])(Contact *pcon) = {NULL,add_con,del_con,find_con,mod_con,show_con,empty_con,sort_con};
    init_con(&my_con);
    do 
    {
        menu();
        printf("请选择>");
        scanf("%d",&input);
        if((input>0)&&(input<=7))
        {
            p[input](&my_con);
        }
        else
        {
            printf("选择错误\n");
        }
    } while (input);
    free(my_con.start);
    return 0;
}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值