学习C语言: 制作一个简单的通讯录

学习对象:zgege
网址:https://blog.csdn.net/zgege/article/details/79676582
改了原博主的一些小错误
实现功能:退出 添加联系人
删除联系人 修改联系人
查找联系人 通讯录初始化
通讯录输出 通讯录排序

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


#if 0
参考:zgege
网址:https://blog.csdn.net/zgege/article/details/79676582
改了原博主的一些小错误
#endif // 0
typedef struct peo              //定义通讯录联系人结构
{
    char name[30];
    char sex[10];
    int age;
    char tele[20];
    char address[40];
}Peo;

typedef struct sequence         //定义通讯录结构
{
    Peo people[1000];
    int i;
}Sequence;

int find(Sequence *book, char *names)
{
    int n = 0;
    while(n < book->i)
    {
        if(strcmp(book->people[n].name, names) == 0)       
            break;
        n++;
    }
    if(n > book->i)
        return -1;
    else                       //没找到则返回-1
        return n;              //找到则返回n
}

void Add(Sequence *book)
{
    if(book->i >= 1000)
    {
        printf("通讯录已满!\n");
    }
    else
    {
        printf("请输入名字:");
        scanf("%s", book->people[book->i].name);
        printf("请输入性别:");
        scanf("%s", book->people[book->i].sex);
        printf("请输入年龄:");
        scanf("%d", &book->people[book->i].age);
        printf("请输入电话:");
        scanf("%s", book->people[book->i].tele);
        printf("请输入地址:");
        scanf("%s", book->people[book->i].address);
        ++book->i;          //为什么要加1
        printf("添加成功!\n");
    }
}

void dele(Sequence *book, char *names)
{
     if(book->i <= 0)
     {
         printf("通讯录已空!\n");
     }
     else
     {
         int n = 0;
         n = find(book, names);
         if(n == -1)
         {
             printf("查无此人!\n");
         }
         else
         {
             while(n < book->i)
             {
                 book->people[n] = book->people[n+1];
                 n++;
             }
             book->i--;
             printf("删除成功!\n");
         }
      }
}

void change(Sequence *book, char *names)
{
    int t = 0;
    t = find(book, names);
    if(t == -1)
    {
        printf("查无此人!\n");
    }
    else
    {
        printf("请输入名字:");
        scanf("%s", book->people[t].name);
        printf("请输入性别:");
        scanf("%s", book->people[t].sex);
        printf("请输入年龄:");
        scanf("%d", &book->people[t].age);
        printf("请输入电话:");
        scanf("%s", book->people[t].tele);
        printf("请输入地址:");
        scanf("%s", book->people[t].address);
        printf("修改成功!\n");
    }
}

void output(Sequence *book)
{
    if(book->i <= 0)
    {
        printf("通讯录为空!\n");
    }
    else
    {
        int n = 0;
        while(n < book->i)
        {
            printf("名字:%s 性别:%s 年龄:%d 电话:%s 地址:%s\n",
                   book->people[n].name,
                   book->people[n].sex,
                   book->people[n].age,
                   book->people[n].tele,
                   book->people[n].address);
                   n++;
        }
    }
}

void init(Sequence *book)
{
    book->i = 0;
    printf("初始化成功!\n");
}

void sort(Sequence *book)
{
    if(book->i > 1)
    {
        int i = 0;
        int j = 0;
        int flag = 0;
        for(i = 0; i < book->i-1; i++)
        {
            flag = 1;
            for(j = 0; j < book->i - i -1; j++)
            {
                if(strcmp(book->people[j].name, book->people[j + 1].name)<0)
                    {
                        char arr[50];
                        strcpy(arr, book->people[j].name);
                        strcpy(book->people[j].name, book->people[j+1].name);
                        strcpy(book->people[j+1].name, arr);

                        strcpy(arr, book->people[j].sex);
                        strcpy(book->people[j].sex, book->people[j+1].sex);
                        strcpy(book->people[j+1].sex, arr);

                        int tmp = book->people[j].age;
                        book->people[j].age = book->people[j+1].age;
                        book->people[j+1].age = tmp;

                        strcpy(arr, book->people[j].tele);
                        strcpy(book->people[j].tele, book->people[j+1].tele);
                        strcpy(book->people[j+1].tele, arr);

                        strcpy(arr, book->people[j].address);
                        strcpy(book->people[j].address, book->people[j+1].address);
                        strcpy(book->people[j+1].address, arr);
                        flag = 0;
                    }
            }
            if(flag)
                break;
        }
    }
    printf("排序成功!\n");
}

void execute(Sequence book)
{
    int n = 0;
    char name[20];
    while(1)
    {
        printf("**********************************\n");
        printf("**  0.exit           1.add      **\n");
        printf("**  2.delate         3.change   **\n");
        printf("**  4.find           5.init     **\n");
        printf("**  6.output         7.sort     **\n");
        printf("请选择:");
        scanf("%d",&n);
        switch(n)
        {
        case 0:
            exit(1);
            break;
        case 1:
            Add(&book);
            break;
        case 2:
            printf("请输入姓名:");
            scanf("%s", name);
            dele(&book, name);
            break;
        case 3:
            printf("请输入姓名:");
            scanf("%s", name);
            change(&book, name);
            break;
        case 4:
            printf("请输入姓名:");
            scanf("%s", name);
            int t = find(&book, name);
            if(t == -1)
                printf("查无此人!\n");
            else
                printf("姓名:%s 性别:%s 年龄:%d 电话:%s 地址:%s\n",
                   book.people[t].name,
                   book.people[t].sex,
                   book.people[t].age,
                   book.people[t].tele,
                   book.people[t].address);
            break;
        case 5:
            init(&book);
            break;
        case 6:
            output(&book);
            break;
        case 7:
            sort(&book);
            break;
        default:
            printf("选择无效!\n");
            break;
        }
    }
}

int main()
{
    Sequence book;

    book.i = 0;
    execute(book);
    system("pause");
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值