100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > c语言通讯录——动态内存版

c语言通讯录——动态内存版

时间:2023-10-13 04:20:56

相关推荐

c语言通讯录——动态内存版

本程程序实现了几个功能

1.增加成员 2.删除成员

3.修改 4.查找

5.排序 6.清空通讯录

程序如下所示

本程序分为三个文件

contact.h

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>#define NAME_MAX 10#define SEX_MAX 3#define TELE_MAX 12#define ADDR_MAX 20#define INIT_GROSS 3typedef struct PeoInf{char name[NAME_MAX];char sex[SEX_MAX];int age;char tele[TELE_MAX];char addr[ADDR_MAX];}PeoInf;//静态版//typedef struct Contact//{//PeoInf data[1000];//int Sub;//}Contact;//动态版typedef struct Contact{PeoInf* data;int Sub;int gross;}Contact;enum menu{Exit,Add,Dele,Reverse,Find,Sort,Dtl,Print};//初始化通讯录void Initinal_Contact(Contact* p);//通过名称查找成员int FindName(Contact* p);//通讯录添加成员void Add_Contact(Contact* p);//通讯录删除成员void Dele_Contact(Contact* p);//通讯录成员信息修改void Reverse_Contact(Contact* p);//通讯录成员查找void Find_Contact(Contact* p);//对于通讯录成员排序void Sort_Contact(Contact* p);//打印通讯录所有成员void Print_Contact(Contact* p);

text.c

#include"contact.h"void menu(){printf("*******************************\n");printf("*** 1.Add 2.Dele***\n");printf("*** 3.Reverse 4.Find***\n");printf("*** 5.Sort6.Dtl***\n");printf("*** 7.print0.Exit***\n");printf("*******************************\n");}void text(){int input = 0;Contact contact;Initinal_Contact(&contact);do{menu();scanf("%d", &input);switch (input){case Add:Add_Contact(&contact);break;case Dele:Dele_Contact(&contact);break;case Reverse:Reverse_Contact(&contact);break;case Find:Find_Contact(&contact);break;case Sort:Sort_Contact(&contact);break;case Dtl:Dtl_Contact(&contact);break;case Print:Print_Contact(&contact);break;case Exit:break;default:printf("输入错误,请重新输入\n");}} while (input);free(contact.data);}int main(){text();return 0;}

contact.c

#include"contact.h"//初始化通讯录void Initinal_Contact(Contact* p){//总量初始化p->gross = INIT_GROSS;//下标初始化p->Sub = 0;//申请一块空间并初始化p->data = (PeoInf*)malloc(p->gross * sizeof(PeoInf));if (p->data == NULL){perror("Initial_Contact malloc");return;}memset(p->data, 0, sizeof(PeoInf)*p->gross);}//通过姓名查找成员int FindName(Contact* p){char name[20];scanf("%s", name);int i = 0;for (i = 0; i < p->Sub; i++){if (strcmp(p->data[i].name, name) == 0)return i;}return -1;}//增容void CheckCapacity(Contact* p){if (p->Sub == p->gross){PeoInf* tmp = (PeoInf*)realloc(p->data, sizeof(PeoInf) * (p->gross+2));if (tmp != NULL){p->data = tmp;printf("存储空间已满,已增容\n");p->gross += 2;}}}//通讯录添加成员void Add_Contact(Contact* p){//空间已满 增容CheckCapacity(p);//成员信息录入printf("请输入姓名:");scanf("%s", p->data[p->Sub].name);printf("请输入性别:");scanf("%s", p->data[p->Sub].sex);printf("请输入年龄:");scanf("%d", &p->data[p->Sub].age);printf("请输入电话:");scanf("%s", p->data[p->Sub].tele);printf("请输入住址:");scanf("%s", p->data[p->Sub].addr);printf("成员信息录入成功\n");//成员数增加p->Sub++;}//通讯录删除成员void Dele_Contact(Contact* p){//通讯录为空的情况if (p->Sub == 0)printf("通讯录为空,无法删除\n");//通讯录非空的情况else{printf("请输入要删除的成员姓名\n");int ret = FindName(p);if (ret == -1)printf("查无此人\n");else{int i = 0;for (i = ret; i < p->Sub-1; i++)p->data[i] = p->data[i + 1];p->Sub--;printf("删除成功\n");}}}//通讯录成员信息修改void Reverse_Contact(Contact* p){printf("请输入要修改的成员的姓名\n");int ret = FindName(p);if (ret == -1)printf("查无此人\n");else{printf("请重新输入信息\n");printf("请输入姓名:");scanf("%s", p->data[ret].name);printf("请输入性别:");scanf("%s", p->data[ret].sex);printf("请输入年龄:");scanf("%d", &p->data[ret].age);printf("请输入电话:");scanf("%s", p->data[ret].tele);printf("请输入住址:");scanf("%s", p->data[ret].addr);printf("成员信息录入成功\n");}}//通信录成员查找void Find_Contact(Contact* p){printf("请输入要查找的成员的姓名\n");int ret = FindName(p);if (ret == -1)printf("查无此人\n");else{printf("该成员的信息为\n");//上标识printf("%-20s %-20s %-20s %-20s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");printf("%-20s %-20s %-20d %-20s %-20s\n", p->data[ret].name, p->data[ret].sex, p->data[ret].age, p->data[ret].tele, p->data[ret].addr);}}//data的排序方法int* PeoInf_Cmp(const void* e1, const void* e2){return strcmp((PeoInf*)e1, (PeoInf*)e2);}//对于通讯录成员排序void Sort_Contact(Contact* p){qsort(p->data, p->Sub, sizeof(PeoInf), PeoInf_Cmp);printf("已排序\n");}//删库void Dtl_Contact(Contact* p){memset(p->data, 0, sizeof(p->data));p->Sub = 0;p->gross = INIT_GROSS;realloc(p->data, sizeof(PeoInf) * p->gross);printf("已删库\n");}//打印通讯录所有成员void Print_Contact(Contact* p){if (p->Sub == 0)printf("无联系人\n");else{//上标识printf("%-20s %-20s %-20s %-20s %-30s\n", "姓名", "性别", "年龄", "电话", "住址");//成员打印int i = 0;for (i = 0; i < p->Sub; i++)printf("%-20s %-20s %-20d %-20s %-20s\n", p->data[i].name, p->data[i].sex, p->data[i].age, p->data[i].tele, p->data[i].addr);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。