用c语言实现静态版本的通讯录
本代码包含3个部分,自定义了一个头文件contact.h,测试文件test.c以及contact.c实现各个功能
contact.h
#ifndef _CONTACT_H
#define _CONTACT_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
//姓名 性别 年龄 住址 电话
#define MAX_NEME 10
#define MAX_SEX 3
#define MAX_AGE 20
#define MAX_ADDR 20
#define MAX_TEL_ 10
#define MAX 100
typedef struct people
{
char name [10];
char sex [3];
int age ;
char addr[20];
int tel [10];
}people;
typedef struct contact
{
people con[MAX];
int count ;
}con,*pcon;
void init_people(pcon p);//初始化
void add(pcon p);//增加
void del(pcon p);//删除
void search(pcon p);//查找
void mod(pcon p);//修改
void show(pcon p);//显示
void empty(pcon p);//清空
void sort(pcon p);//排序
#endif
test.c
#include"contact.h"
enum PEO //枚举 增加代码的可读性,默认为0,1,2,3...
{
EXIT,
ADD,
DEL,
SEARCH,
MOD,
SHOW,
EMPTY,
SORT,
};
void menu()
{
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");
}
void test()
{
con my_con;
int input=1;
init_people(&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 EMPTY:
{
empty(&my_con);
break;
}
case SORT:
{
sort(&my_con);
break;
}
case EXIT:
{
exit(0);
break;
}
}
}
}
int main()
{
test();
system("pause");
return 0;
}
contact.c
#include"contact.h"
void init_people(pcon p)//结构体数组的初始化
{
memset(p->con,0,MAX*sizeof(people));
p->count=0;
}
void add(pcon p)//增加
{
if(p->count<100)
{
printf("请输入姓名 :");
scanf("%s",p->con[p->count].name);
printf("请输入性别:");
scanf("%s",(p->con[p->count].sex));
printf("请输入年龄:");
scanf("%d",&(p->con[p->count].age));
printf("请输入地址:");
scanf("%s",(p->con[p->count].addr));
printf("请输入电话:");
scanf("%s",(p->con[p->count].tel));
p->count ++;
}
else
{
printf("通讯录已满\n");
}
}
int find(pcon p,char *name)
{
int i=0;
for(i=0;i<p->count;i++)
{
if(strcmp(p->con[i].name,name)==0)
return i;
}
return -1;
}
void del(pcon p)//删除
{
int i=0;
char name[8] ={0};
int ret=0;
printf("请输入删除人的姓名");
scanf("%s",name);
ret=find(p,name);
if(ret!=-1)
{
for(i=ret;i<p->count-1;i++)
{
p->con[i]=p->con[i+1];
}
p->count--;
printf("删除成功");
}
else
printf("没有此联系人");
}
void search(pcon p)//查找指定联系人
{
char name[8]={0};
int i=0;
int ret=0;
printf("请输入要查找的联系人的姓名:");
scanf("%s",name);
ret=find(p,name);
if(ret!=-1)
{
printf("%s",p->con[ret].name);
printf("%s",p->con[ret].sex);
printf("%d",p->con[ret].age);
printf("%s",p->con[ret].addr);
printf("%s",p->con[ret].tel);
}
else
{
printf("此联系人不存在\n");
}
}
void mod(pcon p)//修改
{
char name[8]={0};
int i=0;
int ret=0;
printf("请输入要修改的联系人的姓名:");
scanf("%s",name);
ret=find(p,name);
if(ret!=-1)
{
printf("请输入要修改的联系人的姓名:");
scanf("%s",p->con[ret].name);
printf("请输入要修改的联系人的性别:");
scanf("%s",p->con[ret].sex);
printf("请输入要修改的联系人的年龄:");
scanf("%d",p->con[ret].age);
printf("请输入要修改的联系人的地址:");
scanf("%s",p->con[ret].addr);
printf("请输入要修改的联系人的电话:");
scanf("%s",p->con[ret].tel);
}
else
{
printf("此通讯录中没有此联系人\n");
}
}
void show(pcon p)//显示所有联系人的信息
{
int i=0;
printf("输出所有联系人的信息\n");
printf("%5s\t%5s\t%5s\t%5s\t%5s\n","name","sex","age","addr","tel");//\t是制表符
printf("%d",p->count );
for(i=0;i<p->count;i++)
{
printf("%5s\t%5s\t%5d\t%5s\t%5s\n",p->con[i].name,p->con[i].sex,
p->con[i].age,p->con[i].addr,p->con[i].tel);
}
}
void empty(pcon p)//清空
{
p->count=0;
printf("通讯录已清空\n");
}
void sort(pcon p)//冒泡排序
{
int i=0;
int j=0;
int flag=0;
for(i=0;i<(p->count)-1;i++)
{
flag=1;
for(j=0;j<(p->count)-i-1;j++)
{
if(strcmp(p->con[j].name,p->con[j+1].name)>0)
{
people tmp=p->con[j];
p->con[j]=p->con[j+1];
p->con[j+1]=tmp;
flag=0;
}
}
if(flag==1)
break;
}
}
这篇博客介绍了如何使用C语言来实现一个静态版本的通讯录,包括头文件contact.h的设计,以及test.c和contact.c文件中实现的不同功能。
8161

被折叠的 条评论
为什么被折叠?



