通讯录的实现(动态实现)

来源:互联网 发布:搜狗拼音去广告优化版 编辑:程序博客网 时间:2024/06/05 17:52

在静态实现1000人通讯录的基础上,这次我们来动态实现,可以动态开辟内存空间,不受人数的限制,但此处的不受限制是相对的,如果内存用完了,那也不能再添加联系人了;

这次我们在静态实现的基础上再次优化,使用了枚举,以及对每次执行完一个功能时的页面进行优化,让使用者不再麻烦的去看最顶上的操作目录;

首先定义了头文件:contacts.h

#include <stdio.h>  #include <string.h>  #include <stdlib.h>  #include <memory.h>   #define MAX 2#define NAME_LENGTH 20 #define SEX_LENGTH 5#define AGE_LENGTH 3#define TELE_LENGTH 20 #define ADDR_LENGTH 30  /*    结构体 用于储存通讯录人员信息*/typedef struct ContactsUser{    char name[NAME_LENGTH];    char sex[SEX_LENGTH];    /*        VS编译器下scanf_s对于长度有安全保护 因此采用字符数组保存年龄    */    char age[AGE_LENGTH];    char tele[TELE_LENGTH];    char addr[ADDR_LENGTH];}ContactsUser;////    结构体 将上一个结构体装起来 同时创建变量记录人数//typedef struct Contacts{    ContactsUser *person;    int user_count;//确定当前容量    int capa;//电话本容量,动态}Contacts,*pContacts;enum op{    EXIT,ADD,    DELE,CLEAR,FID,MODIFY,SHOW,SORT};//typedef struct Contacts *pContacts;int add_contacts(pContacts pcon);//添加函数int dele_contacts(pContacts pcon);//删除函数int clear_contacts(pContacts pcon);//清空函数int find_contacts(pContacts pcon);//查找函数int modify_contacts(pContacts pcon);//修改函数void sort_contacts(pContacts pcon);//排序函数void show_contacts(pContacts pcon);//显示函数void check(pContacts pcon);void menu();//主菜单


然后建立test1.c文件:

#include "contacts.h" void menu(){    printf("------------ 服务菜单 ---------------\n");printf("-------------------------------------\n");printf("           1.添加联系人\n");printf("           2.删除联系人\n");printf("           3.清空联系人\n");printf("           4.查找联系人\n");printf("           5.修改联系人\n");printf("           6.显示所有联系人\n");    printf("           7.排序联系人\n");printf("           0.退出\n");printf("-------------------------------------\n");}/*    查询实体函数  用于将输入的用户特征和储存进行比较(strcmp)    方便其他功能函数的调用*/int find_entry(pContacts pcon){    int i = 0;    char name[NAME_LENGTH];    printf("请输入名字:");    scanf_s("%s", name,NAME_LENGTH);    for (i = 0; i < pcon->user_count; i++)    {        if (strcmp(pcon->person[i].name, name) == 0) //输入和存储进行比较        {             return i;        }    }    return -1;}  /*    增添函数*/int add_contacts(pContacts pcon){    if (pcon->user_count==pcon->capa)    {        ContactsUser *tmp = (ContactsUser*)realloc (pcon->person,(pcon->capa +3)*sizeof(ContactsUser));          if(tmp == NULL)  { printf("内存不足\n");      return -1;}        else  {pcon->person = tmp;              (pcon->capa)+= 3;            return 1;}            }    else    {    printf("请输入名字:");    /*        scanf_s安全函数  应该添加控制长度的参数    */    scanf_s("%s", pcon->person[pcon->user_count].name, NAME_LENGTH);    /*        数组从下标为0到下标为user_count-1 ,则在user_count处操作    */    printf("请输入性别:");    scanf_s("%s", pcon->person[pcon->user_count].sex, SEX_LENGTH);    printf("请输入年龄:");    scanf_s("%s", pcon->person[pcon->user_count].age, AGE_LENGTH);    printf("请输入电话:");    scanf_s("%s", pcon->person[pcon->user_count].tele,TELE_LENGTH);    printf("请输入地址:");    scanf_s("%s", pcon->person[pcon->user_count].addr, ADDR_LENGTH);printf("添加成功!\n");     pcon->user_count++;//添加结束 人员数目增加1    return 1;    }     }   /*    删除函数*/int dele_contacts(pContacts pcon){    int i = 0;    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置     if (ret != -1)    {        for (i = ret; i < pcon->user_count - 1; i++)        {            pcon->person[i] = pcon->person[i + 1];        }        printf("删除成功!\n");        pcon->user_count--;        return 1;    }    else    {        printf("找不到联系人\n");        return -1;    }}   /*    清空函数*/int clear_contacts(pContacts pcon){     /*memset(pcon->person,0,MAX);*/    /*    memset函数 在一段内存中填充给定的值     是对较大结构体或数组清零的最快方法    */    pcon->user_count = 0;//count 赋值0  进行清零    printf("清空成功!");       return 1;}  /*    查找函数*/int find_contacts(pContacts pcon){    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置    if (ret != -1)    {printf("该联系人的信息为:\n");        printf("姓名:%-5s\n", pcon->person[ret].name, NAME_LENGTH);        printf("性别:%-5s\n", pcon->person[ret].sex, SEX_LENGTH);        printf("年龄:%-5s\n", pcon->person[ret].age, AGE_LENGTH);        printf("电话:%-5s\n", pcon->person[ret].tele, TELE_LENGTH);        printf("地址:%-5s\n", pcon->person[ret].addr, ADDR_LENGTH);        return 1;    }    else    {        printf("找不到该联系人\n");        return -1;    }}  /*    修改函数*/int modify_contacts(pContacts pcon){    int ret = find_entry(pcon);//定义ret 接收find_entry的返回位置    if (ret != -1)    {   printf("请重新编辑该联系人信息:\n");        printf("请输入姓名:");        scanf_s("%s", pcon->person[ret].name, NAME_LENGTH);        printf("请输入性别:");        scanf_s("%s", pcon->person[ret].sex, SEX_LENGTH);        printf("请输入年龄:");        scanf_s("%s", pcon->person[ret].age, AGE_LENGTH);        printf("请输入电话:");        scanf_s("%s", pcon->person[ret].tele, TELE_LENGTH);        printf("请输入地址:");        scanf_s("%s", pcon->person[ret].addr, ADDR_LENGTH);printf("修改成功!");        return 1;    }    else    {        printf("找不到该联系人\n");        return -1;    }}  /*    显示函数*/void show_contacts(pContacts pcon){    int i = 0;    printf("%10s\t%4s\t%3s\t%13s\t%10s\n","姓名","性别","年龄","电话","地址");    for (i = 0;i< pcon->user_count;i++)    {    printf("%10s\t%4s\t%3s\t%13s\t%10s\n", pcon->person[i].name, pcon->person[i].sex, pcon->person[i].age,pcon->person[i].tele, pcon->person[i].addr);    }    printf("\n");}//排序函数void sort_contacts(pContacts pcon){int i=0;    int j=0;for(i=0;i<(pcon->user_count-1);i++){for(j=0;j<(pcon->user_count-1)-i;j++){if((strcmp(pcon->person[j].name,pcon->person[j+1].name))>0){    ContactsUser  tmp=pcon->person[j];pcon->person[j]=pcon->person[j+1];pcon->person[j+1]=tmp; }}}printf("排序完成!");}

test2.c

#include "contacts.h" /*    主函数*/int main(){    int input = 1;//定义一个输入初始化Contacts user = {0};    user.capa = MAX;    user.user_count = 0;//为user_count进行初始化    user.person = (ContactsUser*)malloc(sizeof(ContactsUser)*MAX);if(user.person==NULL){printf("内存不足\n");}else{    menu();      while (input)    {        printf("\n  请选择数字编号:\n");        scanf("%d", &input);        switch (input)  //switch-case 使用不同的功能函数        {        case ADD:            add_contacts(&user); menu();            break;        case DELE:            dele_contacts(&user); menu();            break;        case CLEAR:            clear_contacts(&user); menu();            break;        case FID:            find_contacts(&user); menu();            break;        case MODIFY:            modify_contacts(&user); menu();            break;        case SHOW:            show_contacts(&user); menu();            break;        case SORT:            show_contacts(&user); menu();            break;        case EXIT:            printf("感谢使用!\n");            break;        default:            printf("输入有误!\n");             break;        }    }}free(user.person);user.person=NULL;     return 0;} 
ok!!!come on!!!


0 0
原创粉丝点击