简单的C语言通讯录

/*
添加联系人信息
删除指定联系人信息
查找指定联系人信息
修改指定联系人信息
显示所有联系人信息
清空所有联系人
*/

#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#pragma once
 
#define NameMax 20
#define SexMax 3
#define TelMax 11
#define AddressMax 20
#define PeopleMax 1000
 
typedef char Persontype;
 
typedef struct PERSON
{
        Persontype Name[NameMax];//  姓名
        Persontype Sex[SexMax];  // 性别
        int Age;          // 年龄
        Persontype Tel[TelMax]; //联系方式
        Persontype Address[AddressMax]; //地址
 
}Person;
 
typedef struct BOOK
{
        Person Data[PeopleMax];//Address_Book结构体最大存储容量
        int count;    //当前已存储人数
}Book;
 
void Initbook(Book* people); //初始化
 
void show_person(Book* people);//打印
 
void Add_person(Book *people);// 增加成员
 
void Del_person(Book* people);//删除成员
 
int Find_person(Book* people);//查找成员
 
void Change_person(Book* people);//修改成员
 
void BubbleSort_person(Book* people);//冒泡排序



#include<stdio.h>
#include"Address.h"
//初始化
void Initbook(Book* people)
{
    people->count = 0;
}
 
//打印
void show_person(Book* people)
{
    if(people == NULL)
    {
        printf("空通讯录!\n");
        return;
    }
    if(people->count == 0)
    {
        printf("空通讯录!\n");
    }
    int i = 0;
    for(;i <=people->count-1;++i)
    {
        printf("Name:%s\n",people->Data[i].Name);
        printf("Sex:%s\n",people->Data[i].Sex);
        printf("Age:%d\n",people->Data[i].Age);
        printf("Tel:%s\n",people->Data[i].Tel);
        printf("Add:%s\n",people->Data[i].Address);
    }
    printf("\n");
}
 
 
//增加成员
void Add_person(Book *people)
{
    assert(people);
    int i = 0;
    if (people->count > PeopleMax)
    {
        printf("通讯录已满!\n");
        return;
    }
    printf("请输入姓名:\n");
    scanf("%s", (people->Data[people->count]).Name);
    printf("请输入性别:\n");
    scanf("%s", (people->Data[people->count]).Sex);
    printf("请输入年龄:\n");
    scanf("%d", &(people->Data[people->count]).Age);
    printf("请输入联系方式:\n");
    scanf("%s", (people->Data[people->count]).Tel);
    //for(;i<people->count;++i)
    //{
    //    if(strcmp(people->Data[i].Tel, people->Data[people->count].Tel) == 0)
    //    {
    //        printf("输入有误或联系人已存在!\n");
    //    }
    //    return;
    //}
    printf("请输入住址:\n");
    scanf("%s", (people->Data[people->count]).Address);
    printf("增加成功!\n");
    people->count++;
    printf("count = %d\n",people->count);
    
}
//删除成员
void Del_person(Book* people)
{
    if(people == NULL)
    {
        printf("空通讯录!\n");
        return;
    }
    int ret = Find_person(people);
    if(ret != -1)
    {
        int i = ret;
        for(;i<people->count-1;++i)
        {
            people->Data[i] = people->Data[i+1];
        }
        people->count--;
      printf("count = %d\n",people->count);
    }
    else
    {
        printf("没有该成员!\n");
    }
}
 
//查找成员
int Find_person(Book* people)
{
    assert(people);
    char name[20];
    scanf("%s",name);
    int i = 0;
    for(;i<people->count;++i)
    {
        if(strcmp(people->Data[i].Name,name) == 0)
        {
            printf("Name:%s\tSex:%s\tAge:%d\tTel:%s\tAdd\n",people->Data[i].Name,people->Data[i].Sex,people->Data[i].Age,people->Data[i].Tel,people->Data[i].Address);
            return i;
            printf("下标为 %d\n",i);
        }
    }
    printf("没有找到该联系人!\n");
    return -1;
}
 
//修改成员
void Change_person(Book* people)
{
    assert(people);
    int ret = Find_person(people);
    if(ret != -1)
    {
        printf("Name->:\n");
        scanf("%s",people->Data[ret].Name);
        printf("Sex->:\n");
        scanf("%s",people->Data[ret].Sex);
        printf("Age->:\n");
        scanf("%d",&(people->Data[ret]).Age);
        printf("Tel->:\n");
        scanf("%s",people->Data[ret].Tel);
        printf("Add->:\n");
        scanf("%s",people->Data[ret].Address);
    }
    else
    {
        printf("没有该成员!\n");
        return;
    }
}
 
void BubbleSort_person(Book* people)
{
    if(people == NULL)
    {
        printf("空通讯录!\n");
        return;
    }
    int i = 0;
    for(;i<people->count-1;++i)
    {
        int j = 0;
        for(;j<people->count-1-i;++j)
        {
            if(strcmp(people->Data[j].Name,people->Data[j+1].Name) > 0)
            {
                char tmp[NameMax];
                strcpy(tmp,people->Data[j].Name);
                strcpy(people->Data[j].Name,people->Data[j+1].Name);
                strcpy(people->Data[j+1].Name,tmp);
            }
        }
    }
    show_person(people);
}
 
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  退出*********************\n");
}
 
int main()
{
    Book people;
    Initbook(&people);
    while(1)
    {
        menu();
        int n = 0;
        scanf("%d",&n);
        switch(n)
        {
            case 1:
                Add_person(&people);
                break;
            case 2:
                Del_person(&people);
                break;
            case 3:
                Find_person(&people);
                break;
            case 4:
                Change_person(&people);
                break;
            case 5:
                show_person(&people);
                break;
            case 6:
                Initbook(&people);
                break;
            case 7:
                BubbleSort_person(&people);
                break;
            case 8:
                exit(0);
            default:
                {
                    printf("input error!\n");
                    break;
                }
         }
     }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值