通讯录(动态版本)
来源:互联网 发布:人工智能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
- 通讯录(动态版本)
- 实现动态版本通讯录(在简易通讯录的基础上)
- 通讯录动态版本
- 通讯录动态开辟版本
- 通讯录动态版本
- 通讯录--动态版本
- 通讯录小项目(C语言动态版本)
- 通讯录(静态版本)
- 通讯录(文件版本)
- 通讯录(文件版本)
- 动态的文件版本的通讯录
- c语言实现动态版本通讯录
- C++通讯录(基础版本)
- c语言通讯录的简单实现文件版本(动态开辟内存)
- 通讯录(二)----动态实现
- 通讯录(动态版)二
- 通讯录2.0(动态实现)
- 静态通讯录、动态通讯录
- viewpager fragment FragmentStatePagerAdapter数据删除后更新界面
- 问题总结
- 在简历中应用STAR法则
- c++编程出现 MFC error C3646: 未知重写说明符
- MySql常见语法
- 通讯录(动态版本)
- Appium 实现 LockViewPatter 手势密码输入方法之一
- android实现截屏功能代码
- Website Password hacking using WireShark
- 欢迎使用CSDN-markdown编辑器
- React 入门实例教程
- poj 3616 Milking Time 【区间DP】
- scala学习笔记12 操作符
- Python网络数据采集11(译者:哈雷)