关于如下简易通讯录程序Search函数设计的思路

该简易通讯录的一个函数Search应实现以下功能:允许用户输入一串字符,一旦Name、Number、Email、Department四条信息中有一条含有用户输入的字符串(如用户输入123,Number值为12345的通讯录信息应该被查找出来),就打印所有符合条件的通讯录信息。
初学者想咨询一下该函数的设计思路,谢谢!

#include 
#include 
#include 





struct Information
{
    char name[255];
    char number[255];
    char email[255];
    char department[255];
}Information;

struct Contact_list
{
    int sizeofContact;
    struct Information context[500];
};

static int SearchNumber (const struct Contact_list *a, char number[255])
{
    int i = 0;
    for(i = 0; i < a->sizeofContact; i++)
    {
        if(0 == strcmp(a->context[i].number, number))
        {
            return i;
        }
    }
    return -1;
}

void Print_contact_list (const struct Contact_list *a) {
    int i = 0;
    for (i = 0; i < a->sizeofContact; i++)
    {
        printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
    }
}

void Add_a_contact (struct Contact_list *a)
{
    getchar();
    printf("Name:");
    gets(a->context[a->sizeofContact].name);
    printf("Number:");
    scanf("%s",a->context[a->sizeofContact].number);
    printf("Email:");
    scanf("%s",a->context[a->sizeofContact].email);
    getchar();
    printf("Department:");
    gets(a->context[a->sizeofContact].department);
    a->sizeofContact++;
}

void Modify_a_contact (struct Contact_list *a)
{
    char number[255];
    printf("Enter phone number to modify:");
    scanf("%s", number);
    int x = SearchNumber(a, number);
    if (x == -1)
    {
        printf("Entry does not exist.\n");
    }
    else
    {
        getchar();
        printf("Enter new name (return to keep [%s]): ", a->context[x].name);
        gets(a->context[x].name);
        printf("Enter new number (return to keep [%s]): ", a->context[x].number);
        scanf("%s", a->context[x].number);
        printf("Enter new email (return to keep [%s]): ", a->context[x].email);
        scanf("%s", a->context[x].email);
        getchar();
        printf("Enter new department (return to keep [%s]): ", a->context[x].email);
        gets(a->context[x].email);
    }
}

void Delete_a_contact (struct Contact_list *a)
{
    char number[255];
    printf("Enter phone number to delete (return to cancel): ");
    scanf("%s", number);
    int x = SearchNumber(a, number);
    int y = 0;
    for(y = x; y < a->sizeofContact-1; y++)
    {
        a->context[y] = a->context[y + 1];
    }
    a->sizeofContact--;
    printf("Successfully deleted the entry for %s\n", number);
}




void menu()
{
    printf("1) Print contact list\n");
    printf("2) Add a contact\n");
    printf("3) Modify a contact\n");
    printf("4) Delete a contact\n");
    printf("5) Search\n");
    printf("6) Quit\n");
};


int main()
{
    int x = 0;
    struct Contact_list C;
    do {
        begin:
        menu();
        printf("Option:");
        scanf("%d",&x);
        switch(x)
        {
            case 1:
                Print_contact_list(&C);
                break;
            case 2:
                Add_a_contact(&C);
                break;
            case 3:
                Modify_a_contact(&C);
                break;
            case 4:
                Delete_a_contact(&C);
                break;
            case 6:
                return 0;
        }
    } while (x);
    return 0;
}

就逐个字符串strcmp进行比较啊,有一个为0就满足条件,输出结构数据就是了。你想要的思路指哪方面呢?SearchNumber函数你不都写了么,对哪块不满意啊