通讯录(动态版本)

来源:互联网 发布:人工智能a7论坛 编辑:程序博客网 时间:2024/06/12 22:57

这篇博客和上一篇博客都是实现通讯录,只不过这篇是用动态开辟的方法来实现的,它是预先开辟了一块空间,如果预先空间开辟的空不够存储成员,那么就动态的增长开辟。

头文件concate.h

<span style="font-size:18px;">#ifndef __CONCATE_H__#define __CONCATE_H__#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_NAME 10#define MAX_SEX  5#define MAX_ADDR 20#define MAX_TELE 12#define DEFAULT  2         //初始通讯录大小#define INC_COUNT 10       //每次增容大小typedef struct PeoINFO{char name[MAX_NAME];int age;char sex[MAX_SEX];char tele[MAX_TELE];char addr[MAX_ADDR];}Peo;typedef struct Con{Peo *con;int count;int capacity;}Con,*pCon;void Initcon(pCon pcon);void add(pCon pcon);void show(pCon pcon);void del(pCon pcon);void search(pCon pcon); void mod(pCon pcon);void sort(pCon pcon);void Exit(pCon pcon);void destory(pCon pcon);#endif  //_CONCATE_H__</span>

源文件concate.c

<span style="font-size:18px;">#include "concate.h"void Initcon(pCon pcon)      //初始化{pcon->con =(Peo*)malloc(DEFAULT*sizeof(Peo));if(pcon->con ==NULL){printf("out of memory\n");exit(EXIT_FAILURE);}memset(pcon->con,0,DEFAULT*sizeof(Peo));  //pcon->count =0;pcon->capacity =DEFAULT;}void check_capa(pCon pcon)    //检测{Peo *ptr=NULL;if(pcon->count ==pcon->capacity ){ ptr=(Peo*)realloc(pcon->con ,(pcon->count +INC_COUNT)*sizeof(Peo));   if(ptr ==NULL)     {    printf("out of memory\n");    exit(EXIT_FAILURE);     }       else    {   pcon->con =ptr;   pcon->capacity =pcon->capacity  +INC_COUNT;    }}}void add(pCon pcon)        {    check_capa(pcon);printf("name:");scanf("%s",pcon->con [pcon->count ].name);printf("age:");        scanf("%d",&(pcon->con [pcon->count ].age));printf("sex:");        scanf("%s",pcon->con [pcon->count ].sex);printf("tele:");        scanf("%s",pcon->con [pcon->count ].tele);printf("addr:");        scanf("%s",pcon->con [pcon->count ].addr );pcon->count++;}int find(pCon pcon){    char name[10]={0};int i=0;printf("请输入姓名:>");scanf("%s",name);for(i=0;i<pcon->count ;i++){        if(strcmp(name,pcon->con [i].name)==0){return i;}}return -1;}void del(pCon pcon){int i=0;int ret=0;if(pcon->count ==0){printf("通讯录为空\n");return;}ret=find(pcon);if(ret==-1){printf("没有找到\n");}else{for(i=ret;i<pcon->count-1;i++){pcon->con [i]=pcon->con [i+1];}        pcon->count --;printf("删除成功\n");}}void search(pCon pcon){int ret=0;if(pcon->count ==0){printf("通讯录为空\n");return;}ret=find(pcon);if(ret==-1){printf("没有找到\n");}else{printf("%5s\t%s\t%5s\t%5s\t%5s\n","name","age","sex","tele","addr");printf("%5s\t%d\t%5s\t%5s\t%5s\n",pcon->con [ret ].name,pcon->con [ret ].age,pcon->con [ret].sex,pcon->con [ret ].tele,pcon->con [ret ].addr);}}void mod(pCon pcon){int ret=0;if(pcon->count ==0){printf("通讯录为空\n");return;}    ret=find(pcon);if(ret==-1){printf("没有找到\n");}else{printf("name:");scanf("%s",&(pcon->con [ret].name) );printf("age:");        scanf("%d",&(pcon->con [ret ].age));printf("sex:");        scanf("%s",&(pcon->con [ret].sex) );printf("tele:");        scanf("%s",&(pcon->con [ret].tele) );printf("addr:");        scanf("%s",&(pcon->con [ret].addr) );}}void sort(pCon pcon)     //从小到大{int flag=0;int i=0;int j=0;for(i=0;i<pcon->count -1;i++){flag=1;for(j=0;j<pcon->count -i-1;j++){if(strcmp(pcon->con [j].name ,pcon->con [j+1].name )>0){Peo tmp=pcon->con [j];pcon->con [j]=pcon->con [j+1];pcon->con [j+1]=tmp;flag=0;}}if(flag==1)break;} //show(pcon);printf("排序完成\n");}void Exit(pCon pcon){exit(0);}void show(pCon pcon){int i=0;printf("%5s\t%s\t%5s\t%5s\t%5s\n","name","age","sex","tele","addr");//printf("%d\n",pcon->count );for(i=0;i<pcon->count ;i++){printf("%5s\t%d\t%5s\t%5s\t%5s\n",pcon->con [i ].name,pcon->con [i ].age,pcon->con [i ].sex,pcon->con [i ].tele,pcon->con [i].addr);}}void destory(pCon pcon){if(pcon->con !=NULL){free(pcon->con );pcon->con =NULL;}}</span>
测试源文件test.c

<span style="font-size:18px;">#include "concate.h"enum op{EXIT,    //从0开始ADD,DEL,SEARCH,MOD,SHOW,SORT};   //增加代码的可读性void menu(){printf("****1.add 2.del 3.search 4.mod 5.show 6.sort 0.exit****\n");}int main(){Con my_con;int input=1;Initcon(&my_con);while(input){menu();printf("请输入:>");scanf("%d",&input);switch(input){case ADD:{    add(&my_con);    break;}case DEL:{    del(&my_con);    break;}case SEARCH:{    search(&my_con);    break;}case MOD:{    mod(&my_con);    break;}case SHOW:{    show(&my_con);    break;}case SORT:{    sort(&my_con);    break;}case EXIT:{    destory(&my_con);    Exit(&my_con);    break;}default:break;}}system("pause");return 0;}</span>


0 0
原创粉丝点击