C语言实现简易通讯录

来源:互联网 发布:java md5加密与解密 编辑:程序博客网 时间:2024/05/12 03:18

实现通讯录中基本的操作

提供方法:
1. 添加指定联系人信
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字或年龄排序所有联系人

头文件

#include<stdlib.h>#define MAX 1000#define FIRST 3#define EXT 2typedef struct PeoInfo{    char name[20];    char sex[5];    int age;    char phone[12];    char addr[30];}PeoInfo;typedef struct Contact{    int sz;    int capacity;    PeoInfo Info[];}Contact;void init(Contact *pcon);void add(Contact *pcon);void show(Contact *pcon);void modif(Contact *pcon);void sub(Contact *pcon);void search(Contact *pcon);void empty(Contact *pcon);void sort(Contact *pcon);#endif

实现相关函数

#include"contact.h"void init(Contact *pcon){    pcon->sz = 0;    pcon->capacity = FIRST;}int find(Contact* pcon,const char *find_name){    int i = 0;    assert(pcon != NULL);    for(i=0;i<pcon->sz;i++)    {        if(strcmp(pcon->Info[i].name,find_name) == 0)        {            return i;        }    }    return -1;}void add(Contact* pcon){    char name[20];    char sex[5];    int age;    char phone[12];    char addr[30];    assert(pcon != NULL);     if(pcon->sz>=pcon->capacity)    {        PeoInfo *p = realloc(pcon,sizeof(PeoInfo)+EXT*sizeof(PeoInfo));        if(p == NULL)        {            printf("扩容失败!\n");            exit(1);        }        else        {            printf("扩容成功!\n");            pcon->capacity += EXT;        }    }    printf("请输入姓名:>");    scanf("%s",&name);    strcpy(pcon->Info[pcon->sz].name,name);    printf("\n请输入性别:>");    scanf("%s",&sex);    strcpy(pcon->Info[pcon->sz].sex,sex);    printf("\n请输入年龄:>");    scanf("%d",&age);    pcon->Info[pcon->sz].age = age;    printf("\n请输入电话:>");    scanf("%s",&phone);    strcpy(pcon->Info[pcon->sz].phone,phone);    printf("\n请输入地址:>");    scanf("%s",&addr);    strcpy(pcon->Info[pcon->sz].addr,addr);    pcon->sz++;    printf("存储成功!\n");  }void show(Contact *pcon){    int i = 0;    assert(pcon != NULL);    if(pcon->sz == 0)        printf("联系人为空!\n");    else    {        printf("%-12s%-12s%-12s%-12s%-12s\n","name","sex","age","phone","addr");        for(i=0;i<pcon->sz;i++)        {            printf("%-12s%-12s%-12d%-12s%-12s\n",pcon->Info[i].name,pcon->Info[i].sex,pcon->Info[i].age,pcon->Info[i].phone,pcon->Info[i].addr);        }    }}void modif(Contact *pcon){    int ret = 0;    char find_name[20] = {0};    char sex[5] = {0};    int age = 0;    char phone[12] = {0};    char addr[30] = {0};    char name[20] = {0};    int choose = 0;    assert(pcon != NULL);    printf("输入要修改的人名:>\n");    scanf("%s",&find_name);    ret = find(pcon,find_name);    if(ret == -1)        printf("查无此人!\n");    else    {        printf("1.name 2.sex 3.age 4.phone 5.addr 0.save\n");        do        {            printf("请选择要修改的内容:>\n");            scanf("%d",&choose);            switch(choose)            {            case 1:                printf("请重新输入名字:>\n");                scanf("%s",name);                strcpy(pcon->Info[ret].name,name);                break;            case 2:                printf("请重新输入性别:>\n");                scanf("%s",sex);                strcpy(pcon->Info[ret].sex,sex);                break;            case 3:                printf("请重新输入年龄:>\n");                scanf("%d",&age);                pcon->Info[ret].age=age;                break;            case 4:                printf("请重新输入电话:>\n");                scanf("%s",phone);                strcpy(pcon->Info[ret].phone,phone);                break;            case 5:                printf("请重新输入地址:>\n");                scanf("%s",addr);                strcpy(pcon->Info[ret].name,name);                break;            case 0:                printf("保存成功\n");                return;            default:                printf("输入有误\n");            }        }while(1);    }}void sub(Contact *pcon){    char find_name[20] = {0};    int i = 0;    int ret = 0;    assert(pcon != NULL);    printf("请输入你要删除的联系人:>\n");    scanf("%s",find_name);    ret = find(pcon,find_name);    if(ret == -1)        printf("查无此人!\n");    else    {        for(i=0;i<pcon->sz-ret-1;i++)        {            pcon->Info[ret+i] = pcon->Info[ret+i+1];        }        pcon->sz--;        printf("删除成功!\n");    }}void search(Contact *pcon){    int ret = 0;    char find_name[20] = {0};    assert(pcon != NULL);    printf("请输入所查找人的名字:>\n");    scanf("%s",find_name);    ret = find(pcon,find_name);    if(ret == -1)        printf("查无此人!\n");    else    {        printf("name:%s sex:%s age:%d phone:%s addr:%s\n",pcon->Info[ret].name,pcon->Info[ret].sex,pcon->Info[ret].age,pcon->Info[ret].phone,pcon->Info[ret].addr);    }}void empty(Contact *pcon){    pcon->sz = 0;    printf("清空成功!\n");}void sort_by_name(Contact *pcon){    PeoInfo tmp;    int i = 0;    int j = 0;    for(i=0;i<pcon->sz-1;i++)    {        for(j=0;j<pcon->sz-i-1;j++)        {            if(strcmp(pcon->Info[j].name,pcon->Info[j+1].name)>0)            {                tmp = pcon->Info[j];                pcon->Info[j] = pcon->Info[j+1];                pcon->Info[j+1] = tmp;            }        }    }    printf("排序完成!\n");}void sort_by_age(Contact *pcon){    int i = 0;    int j = 0;    PeoInfo tmp;    for(i=0;i<pcon->sz-1;i++)    {        for(j=0;j<pcon->sz-1-i;j++)        {            if(pcon->Info[j].age>pcon->Info[j+1].age)            {                tmp = pcon->Info[j];                pcon->Info[j] = pcon->Info[j+1];                pcon->Info[j+1] = tmp;            }        }    }    printf("排序完成!\n");}void sort(Contact *pcon){    int input = 0;    printf("请选择排序方式:>  1.按名字排序   2.按年龄排序 \n");    scanf("%d",&input);    switch(input)    {    case 1:        sort_by_name(pcon);        break;    case 2:        sort_by_age(pcon);        break;    default:        printf("输入错误,请重新输入!\n");        break;    }}

主函数部分

#include<stdio.h>#include"contact.h"enum op{    EXIT,    ADD,    SUB,    SEARCH,    MODIF,    SHOW,    EMPTY,    SORT,};void meun(){    printf("*****************************\n");    printf("****   1.Add     2.Sub   ****\n");    printf("****   3.Search  4.Modif ****\n");    printf("****   5.Show    6.Empty ****\n");    printf("****   7.Sort    0.exit  ****\n");    printf("*****************************\n");}//姓名、性别、年龄、电话、住址int main(){    int input = 0;    Contact* pcon = (Contact *)malloc(sizeof(Contact)+FIRST*sizeof(PeoInfo));    if(pcon == NULL)    {        printf("开辟失败!");        exit(1);    }    init(pcon);    meun();    do{        printf("请输入你的选择:>\n");        scanf("%d",&input);        switch(input)        {        case EXIT:            free(pcon);            return;        case ADD:            add(pcon);            break;        case SUB:            sub(pcon);            break;        case SEARCH:            search(pcon);            break;        case MODIF:            modif(pcon);            break;        case SHOW:            show(pcon);            break;        case EMPTY:            empty(pcon);            break;        case SORT:            sort(pcon);            break;        default:            printf("输入错误,请重新输入.\n");        }    }while(1);    return 0;}
原创粉丝点击