用单链实现通讯录

来源:互联网 发布:kj90数据采集传输协议 编辑:程序博客网 时间:2024/05/19 02:42
#include <stdio.h>#include <stdlib.h>#include <string.h>#define T 1;#define F -1;struct address{    int id;    char name[20];    char number[20];    char address[20];    struct address* next;};typedef struct address* node;int init(node* head);           //头节点int insert(node head, int i);   //添加用户void delete_id(node head);      //按id删除void delete_name(node head);    // 按名删除void delete_number(node head);  //按号码删除void update_id(node head);      //按id修改void update_name(node head);    //按名修改void update_number(node head);  //按号码修改void query_id(node head);       //按id查找void query_name(node head);     //按名查找void query_number(node head);   //按号码查找void print_name(node head);     //显示所有用户(按名)(冒泡排序(交换节点))void print_number(node head);   //显示所有用户(按号码)(插入排序)void interface();int main(){    int n, i = 1, back = 1;    int nd, idd;    char named[20], numberd[20];     node head = NULL;    init(&head);    while (back)    {           interface();        scanf("%d", &n);        printf("\n");        switch (n)        {            case 1: insert(head, i++);break;            case 2: printf("\n\t\t\tdelete according to?\n\t\t\t1.id 2.name 3.number  :");                    int de;                    scanf("%d", &de);                    switch (de)                    {                        case 1: delete_id(head);break;                        case 2: delete_name(head);break;                        case 3: delete_number(head);break;                        default: printf("\t\t\twrong number\n");break;                    }                    break;            case 3: printf("\n\t\t\tupdate according to?\n\t\t\t1.id 2.name 3.number  :");                    int up;                    scanf("%d", &up);                    switch (up)                    {                        case 1: update_id(head);break;                        case 2: update_name(head);break;                        case 3: update_number(head);break;                        default: printf("\t\t\twrong number\n");break;                    }                    break;            case 4: printf("\n\t\t\tquery according to?\n\t\t\t1.id 2.name 3.number  :");                    int qu;                    scanf("%d", &qu);                    switch (qu)                    {                        case 1: query_id(head);break;                        case 2: query_name(head);break;                        case 3: query_number(head);break;                        default: printf("\t\t\twrong number\n");break;                    }                    break;            case 5: printf("\n\t\t\tprintf according to?\n\t\t\t1.name 2.number  :");                    int pr;                    scanf("%d", &pr);                    switch (pr)                    {                        case 1: print_name(head);break;                        case 2: print_number(head);break;                        default: printf("\t\t\twrong number\n");break;                    }                    break;            case 6: back = 0;break;            default: printf("\t\t\twrong number\n");break;        }    }    return 0;}int init(node* head){    node newnode = (node)malloc(sizeof(struct address));    if (NULL == newnode)    {        return F;    }    newnode->next = NULL;    *head = newnode;}int insert(node head, int i){    node newnode = (node)malloc(sizeof(struct address));    if (NULL == newnode)    {        return F;    }    newnode->id = i;    printf("\t\t\tPlesae input name: ");    scanf("%s", newnode->name);    printf("\t\t\tPlesae input number: ");    scanf("%s", newnode->number);    printf("\t\t\tPlesae input address: ");    scanf("%s", newnode->address);    newnode->next = head->next;    head->next = newnode;}void delete_id(node head){    int i;    printf("\t\t\tWho do you want to deleta?\n\t\t\tid:");    scanf("%d", &i);    while (head->next->id != i)    {        head = head->next;    }    node temp = head->next->next;    free(head->next);    head->next = temp;}void delete_name(node head){    char name1[20];    printf("\t\t\tWho do you want to deleta?\n\t\t\tname:");    scanf("%s", name1);    while (strcmp(head->next->name,name1) != 0)    {        head = head->next;    }    node temp = head->next->next;    free(head->next);    head->next = temp;    }void delete_number(node head){    char number1[20];    printf("\t\t\tWho do you want to deleta?\n\t\t\tnumber:");    scanf("%s", number1);    while (strcmp(head->next->number,number1) != 0)    {        head = head->next;    }    node temp = head->next->next;    free(head->next);    head->next = temp;    }void update_id(node head){    int i;    printf("\t\t\tWho do you want to update?\n\t\t\tid:");    scanf("%d", &i);    while (head->next->id != i)    {        head = head->next;    }    printf("\t\t\tPlease input new name:");    scanf("%s", head->next->name);    printf("\t\t\tPlease input new number:");    scanf("%s", head->next->number);    printf("\t\t\tPlease input new address:");    scanf("%s", head->next->address);}void update_name(node head){    char name1[20];    printf("\t\t\tWho do you want to update?\n\t\t\tname:");    scanf("%s", name1);    while (strcmp(head->next->name,name1) != 0)    {        head = head->next;    }    printf("\t\t\tPlease input new name:");    scanf("%s", head->next->name);    printf("\t\t\tPlease input new number:");    scanf("%s", head->next->number);    printf("\t\t\tPlease input new address:");    scanf("%s", head->next->address);}void update_number(node head){    char number1[20];    printf("\t\t\tWho do you want to update?\n\t\t\tnumber:");    scanf("%s", number1);    while (strcmp(head->next->number,number1) != 0)    {        head = head->next;    }    printf("\t\t\tPlease input new name:");    scanf("%s", head->next->name);    printf("\t\t\tPlease input new number:");    scanf("%s", head->next->number);    printf("\t\t\tPlease input new address:");    scanf("%s", head->next->address);}void query_id(node head){    int i;    printf("\t\t\tWho do you want to query?\n\t\t\tid:");    scanf("%d", &i);    while (head->next->id != i)    {        head = head->next;    }    printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",             head->next->id, head->next->name, head->next->number, head->next->address);}void query_name(node head){    char name1[20];    printf("\t\t\tWho do you want to query?\n\t\t\tname:");    scanf("%s", name1);    while (strcmp(head->next->name,name1) != 0)    {        head = head->next;    }    printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",             head->next->id, head->next->name, head->next->number, head->next->address);}void query_number(node head){    char number1[20];    printf("\t\t\tWho do you want to query?\n\t\t\tnumber:");    scanf("%s", number1);    while (strcmp(head->next->number,number1) != 0)    {        head = head->next;    }    printf("\t\t\tid:%d\tname:%s\tnumber:%s\taddress:%s\n",             head->next->id, head->next->name, head->next->number, head->next->address);}void print_name(node head){        int i, j, count = 0;    node temp = head;    while (temp->next != NULL)    {        count++;        temp = temp->next;    }    for (i = 0; i < count - 1; i++)    {        node temp0 = head->next;        node pre = head;        for (j = count -1; j > i; j--)        {            if (strcmp(temp0->name,temp0->next->name) > 0)            {                pre->next = temp0->next;                temp0->next = temp0->next->next;                pre->next->next = temp0;                temp0 = pre->next;            }            temp0 = temp0->next;            pre = pre->next;        }    }    while (head->next != NULL)    {        printf("\t\t\tid::%d\tname:%s\tnumber:%s\taddress:%s\n",                 head->next->id, head->next->name, head->next->number, head->next->address);        head = head->next;    }}void print_number(node head){    node p1 = head->next->next, pp1 = head->next;    while (p1 != NULL)    {        node temp = p1;        node p2 = head->next;        node pp2 = head;        while (p2 != p1)        {            if(strcmp(p2->number,p1->number) > 0)            {                p1 = p1->next;                pp1->next = temp->next;                pp2->next = temp;                temp->next = p2;                break;            }            p2 = p2->next;            pp2 = pp2->next;        }        p1 = p1->next;        pp1 = pp1->next;    }    while (head->next != NULL)    {        printf("\t\t\tid::%d\tname:%s\tnumber:%s\taddress:%s\n",                 head->next->id, head->next->name, head->next->number, head->next->address);        head = head->next;    }}void interface(){    printf("\n\t\t\tPlease select number:\n");    printf("\n\t\t\t****************************\n");    printf("\t\t\t* 1.insert        2.delete *\n");    printf("\t\t\t* 3.update        4.query  *\n");    printf("\t\t\t* 5.print         6.quit   *\n");    printf("\t\t\t****************************\n\n");    printf("\t\t\tYour choice is:");}

1.节点的排序
2. 数组可用scanf() 录入