C语言 使用结构体实现简单的通讯录

来源:互联网 发布:首届江苏网络 编辑:程序博客网 时间:2024/05/21 04:51

C语言 用结构体实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人

代码实现:

头文件:

#ifndef __HEAD_H__////防止头文件被多次调用#define __HEAD_H__                 #include<stdio.h>#include<string.h>#include<stdlib.h>#define PEOPLE_MAX 1000#define NAME_LENTH 20#define SEX_LENTH 5#define AGE_LENTH 10#define TEL_LENTH 15#define ADDR_LENTH 50//宏定义各个数据所需的大小,后续引用直接可以使用名称,或需修改时只用修改这里就可以了struct People{char name[NAME_LENTH];char sex[SEX_LENTH];int  age;char tel[TEL_LENTH ];char addr[ADDR_LENTH];};//定义人的信息结构体(包含各种信息)struct Contact{struct People person[PEOPLE_MAX];int user_count;};//定义通讯录结构体(包含人的信息的结构体和用户个数)typedef struct Contact * pContact;int add_contact(pContact pcon);      //pContact是一个结构体指针类型,pcon是一个指向struct Contact的一个指针int dele_contact(pContact pcon);//例如:typedef int *  int 即 int *p  ==> int pint find_contact(pContact pcon);int modify_contact(pContact pcon);int show_contact(pContact pcon);int clear_contact(pContact pcon);void menu();//函数的声明#endif

各种函数实现:

#include"head.h"       int add_contact(pContact pcon){if(pcon->user_count >= PEOPLE_MAX){printf("contact is full!\n");return -1;}else{printf("input name,please!\n");scanf("%s",pcon->person[pcon->user_count].name);printf("input sex,please!\n");scanf("%s",pcon->person[pcon->user_count].sex);printf("input age,please!\n");scanf("%d",&pcon->person[pcon->user_count].age);      //这里用%d输出intprintf("input tel,please!\n");scanf("%s",pcon->person[pcon->user_count].tel);printf("input addr,please!\n");scanf("%s",pcon->person[pcon->user_count].addr);(pcon->user_count)++;}return 0;}//添加信息的实现int dele_contact(pContact pcon){int ret = find_contact(pcon);//调用查找函数并保存其值if(ret != -1){int i = 0;i = ret;//这里要用另一个变量来保存输入的姓名for(i = 0;i < pcon->user_count-1;i++){pcon->person[i] = pcon->person[i+1];       //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤}pcon->user_count --;       //直接减去最后一个即count--}return 0;}int find_contact(pContact pcon){int i = 0;char ret[NAME_LENTH];//用另一个数组来保存nameprintf("input name,please!\n");scanf("%s",ret);while(i <= pcon->user_count){if(strcmp(ret,pcon->person[i].name)== 0)        //比较输入的姓名和通讯录中已有的姓名{printf("name\tsex\tage\ttel\taddr\t\n");printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);return i;}i++;}printf("sorry,the name you find is not exist!\n");return -1;}int modify_contact(pContact pcon)//修改函数,首先找到如要修改的姓名,然后重新输入{int ret = find_contact(pcon);if(ret != -1){printf("input name,please!\n");scanf("%s",pcon->person[ret].name);printf("input sex,please!\n");scanf("%s",pcon->person[ret].sex);printf("input age,please!\n");scanf("%d",&(pcon->person[ret].age));printf("input tel,please!\n");scanf("%s",pcon->person[ret].tel);printf("input addr,please!\n");scanf("%s",pcon->person[ret].addr);}else{printf("sorry,the name you find is not exist!\n");}return 0;}int show_contact(pContact pcon){int i = 0;printf("name\tsex\tage\ttel\t\taddr\t\n");//制表符来制作表头for(i = 0;i < pcon->user_count;i++){printf("%s\t",pcon->person[i].name);printf("%s\t",pcon->person[i].sex);printf("%d\t",pcon->person[i].age);printf("%s\t",pcon->person[i].tel);printf("%s\t\n",pcon->person[i].addr);}printf("\n");return 0;}int clear_contact(pContact pcon){pcon->user_count = 0 ;return 0;}//清除所有人,直接让成员个数变为0即可void menu(){printf("-------contact---------\n");printf("  1.添加联系人信息     \n");printf("  2.删除指定联系人信息 \n");printf("  3.查找指定联系人信息 \n");printf("  4.修改指定联系人信息 \n");printf("  5.显示所有联系人信息 \n");printf("  6.清空所有联系人     \n");printf("  0.谢谢使用           \n");printf("-------contact---------\n");}

主函数:

#include"head.h"int main(){int n=1;struct Contact people;//调用通讯录结构体people.user_count = 0;//初始化user_countwhile(n){menu();printf("please input\n");scanf("%d",&n);switch(n){case 1:{add_contact(&people);break;}case 2:{dele_contact(&people);break;}case 3:{find_contact(&people);break;}case 4:{modify_contact(&people);break;}case 5:{show_contact(&people);break;}case 6:{clear_contact(&people);break;}default:{return 0;break;}//switch  case语句分支选择不同函数实现不同作用}}return 0;}
结果实现:




0 0
原创粉丝点击