通讯录1 动态开辟内存

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>
#include<stdlib.h>

struct stu
{
    char name[5];
    char sex[2];
    int age;
    char  phone[15];
    char add[20];
};
typedef struct info
{
    struct stu *n;
    int  size;
}stu_info;
void init_info(stu_info *p)
{
    assert(p);
    int i = 0;
    int j = 0;
    p->n = (struct stu*)malloc(sizeof(struct stu) * 1000);
    printf("请输入你要插入的联系人的个数:");
    scanf("%d", &i);
    if (i > 0 && i <= 1000)
    {
        for (;j < i;j++)
        {
            printf("请输入第%d个联系人的姓名:", j + 1);
            scanf("%s", &p->n[j].name);
            printf("请输入第%d个联系人的性别:", j + 1);
            scanf("%s", &p->n[j].sex);
            printf("请输入第%d个联系人的年龄:", j + 1);
            scanf("%d", &p->n[j].age);
            printf("请输入第%d个联系人的电话:", j + 1);
            scanf("%s", &p->n[j].phone);
            printf("请输入第%d个联系人的住址:", j + 1);
            scanf("%s", &p->n[j].add);
            p->size++;
        }
    }
}
void print_info(stu_info *p)
{
    assert(p);
    int i = 0;
    int j = p->size;
    printf("name\tsex\tage\tphone\tadd\n");
    while (j--)
    {
        printf("%s\t", p->n[i].name);
        printf("%s\t", p->n[i].sex);
        printf("%d\t", p->n[i].age);
        printf("%s\t", p->n[i].phone);
        printf("%s\n", p->n[i].add);
        i++;
    }
}
void insert_info(stu_info *p)
{
    assert(p);
    int j = 0;

    printf("请输入新添加的第%d个联系人的姓名:", j + 1);
    scanf("%s", &(p->n[p->size].name));
    printf("请输入新添加的第%d个联系人的性别:", j + 1);
    scanf("%s", &(p->n[p->size].sex));
    printf("请输入新添加的第%d个联系人的年龄:", j + 1);
    scanf("%d", &(p->n[p->size].age));
    printf("请输入新添加的第%d个联系人的电话:", j + 1);
    scanf("%s", &(p->n[p->size].phone));
    printf("请输入新添加的第%d个联系人的住址:", j + 1);
    scanf("%s", &(p->n[p->size].add));
    p->size++;

}
void delete_info(stu_info *p)
{
    int i = 0;
    int j = p->size;
    char name[20] = { 0 };
    assert(p);
    printf("请输入你要删除的联系人的姓名:");
    scanf("%s", &name);
    for (;i < j;i++)
    {
        if (strcmp(p->n[i].name, name) == 0)
        {
            for (;i < j - 1;i++)
            {
                p->n[i] = p->n[i + 1];
            }
            p->size--;
            return;
        }
    }
    printf("你输入的联系人不存在\n");
}
void search_info(stu_info *p)
{
    int i = 0;
    int j = p->size;
    char name[20] = { 0 };
    printf("请输入你要查找的联系人的姓名:");
    scanf("%s", &name);
    for (;i < j;i++)
    {
        if (strcmp(p->n[i].name, name) == 0)
        {
            printf("该联系人的信息如下:\n");
            printf("name\tsex\tage\tphone\tadd\n");
            printf("%s\t%s\t%d\t%s\t%s\n", p->n[i].name, p->n[i].sex, p->n[i].age, p->n[i].phone, p->n[i].add);
            return;
        }
    }
    printf("你要查找的联系人不存在");
}
void modify_info(stu_info *p)
{
    int i = 0;
    int j = p->size;
    char name[20] = { 0 };
    printf("请输入你要修改的联系人的姓名:");
    scanf("%s", &name);
    for (;i < j;i++)
    {
        if (strcmp(p->n[i].name, name) == 0)
        {
            printf("请输入该名联系人的姓名:\n");
            scanf("%s", &p->n[i].name);
            printf("请输入该名联系人的性别:\n");
            scanf("%s", &p->n[i].sex);
            printf("请输入该名联系人的年龄:\n");
            scanf("%d", &p->n[i].age);
            printf("请输入该名联系人的电话:\n");
            scanf("%s", &p->n[i].phone);
            printf("请输入该名联系人的住址:\n");
            scanf("%s", &p->n[i].add);
            printf("修改成功!\n");
        }
    }
}
void clear_info(stu_info *p)
{
    memset(p->n, '0', sizeof(struct stu) * 1000);
}
void sort_info(stu_info *p)
{
    int i = 0;
    int k = 0;
    int j = p->size;
    struct stu n = { 0 };
    printf("对联系人信息进行排序:\n");
    for (i=0;i < j - 1;i++)
    {
        for (k = 0;k < j - i - 1;k++)
        {
            if (p->n[k].name < p->n[k + 1].name)
            {
                n = p->n[k];
                p->n[k] = p->n[k + 1];
                p->n[k + 1] = n;

            }
        }
    }
}
int main()
{

    stu_info p;
    p.size = 0;

    init_info(&p); //初始化通讯录
    print_info(&p);//输出
    insert_info(&p);//增加联系人信息
    print_info(&p);
    delete_info(&p);//删除联系人信息
    print_info(&p);
    search_info(&p);//查询联系人信息
    modify_info(&p);//修改联系人信息
    print_info(&p);
    sort_info(&p);//对联系人信息排序
    print_info(&p);
    clear_info(&p);//清空联系人信息
    free(p.n);

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ferlan/article/details/79593777
今日推荐