话不多说,直接上代码。
tongxunlu.h
#ifndef _TONGXUNLU_H_
#define _TONGXUNLU_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct tongxunlu
{
char name[16];
char sex;
int age;
char number[16];
char address[32];
}list;
void init(list * signal); //初始化通讯录
void all_show(list *signal); //显示所有联系人信息
void my_add(list *signal); //添加联系人
void my_delete(list *data,list *signal); //删除联系人信息
list * my_reserch(list *signal); //查找联系人信息
void my_remove(list *signal); //修改联系人信息
void name_sort(list *signal); //联系人按照姓名排序
void clear_all(list *signal); //清空所有联系人
#endif
tongxunlu.c
#include "tongxunlu.h"
static int tag =0; //静态全局变量tag,用来记录当前通讯录中的个数
void my_add(list *signal) //添加联系人
{
if(tag<10)
{
signal+= tag;
printf("Please Enter: \n ");
printf(" name\tsex\tage\tnumber\t address\n ");
scanf("%s%s%d%s%s",signal->name,&signal->sex,&signal->age,signal->number,signal->address);
tag++;
}
else
{
printf("the tongxunlu is full!!\n");
}
}
list * my_reserch(list *signal) //查找联系人信息
{
int count = 0;
char str[16] ={'\0'};
printf("请输入要查找的联系人姓名:");
scanf("%s",str);
while(count<10)
{
if(strcmp(str,signal->name)==0)
{
return signal;
}
signal++;
count++;
}
return NULL;
}
void my_delete(list *data,list *signal) //删除联系人信息
{
memset(data,0,sizeof(list));
list *i;
for(i=data;i<signal+9;i++)
{
*data = *(data+1);
data++;
}
memset(data,0,sizeof(list));
tag--;
}
void my_remove(list *signal) //修改联系人信息
{
int n=0;
printf("修改联系人的哪个信息:》1 姓名 》2 性别 》3 年龄 》4 电话号码 》5住址\n");
scanf("%d",&n);
switch(n)
{
case 1:
{
printf("名字修改为:");
scanf("%s",signal->name);
}break;
case 2:
{
printf("性别修改为:");
scanf("%s",&signal->sex);
}break;
case 3:
{
printf("年龄修改为:");
scanf("%d",&signal->age);
}break;
case 4:
{
printf("电话号码修改为:");
scanf("%s",signal->number);
}break;
case 5:
{
printf("住址修改为:");
scanf("%s",signal->address);
}break;
default: printf("Error!!Please try again.\n"); break;
}
}
void all_show(list *signal) //显示所有联系人信息
{
printf(" name\tsex\tage\tnumber\t address\n ");
int count=0;
while(count<10)
{
printf("%s\t%c\t%d\t%s\t%s\n",signal->name,signal->sex,signal->age,signal->number,signal->address);
signal++;
count++;
}
}
void clear_all(list *signal) //清空通讯录,相当于初始化
{
int count=0;
while(count<10)
{
memset(signal,0,sizeof(list));
signal++;
count++;
}
}
static void swap(list * x,list * y)
{
list tmp ;
tmp = *x;
*x = *y;
*y = tmp;
}
void name_sort(list *signal) //联系人按照姓名排序
{
int i=0,j=0,k=0;
for(i=0;i<9;i++) //冒泡排序
{
list *buf = signal;
for(j=0;j<9-i;j++)
{
if(strcmp(buf->name,(buf+1)->name)>0)
{
swap(buf,buf+1);
}
buf++;
}
}
for(k=0;k<tag;k++)
{
*(signal) = *(signal+10-tag);//排好序后,中间不要有空白,分别移动到对应的位置
signal++;
}
memset(signal,0,(10-tag)*sizeof(list));//移动后,将当前还能添加的10-tag个联系人内存空间置0
}
test.c
#include"tongxunlu.h"
void menu()
{
printf("*************************欢迎进入,通讯录管理系统**********************\n");
printf("**********》1 进入通讯录系统************》2 退出通讯录系统*************\n");
printf("***********************************************************************\n");
}
void son_menu()
{
printf("************************欢迎进入,通讯录管理系统*****************************\n");
printf("**********》1 添加联系人*********************》2 删除联系人信息**************\n");
printf("**********》3 查找联系人信息*****************》4 修改联系人信息**************\n");
printf("**********》5 显示所有联系人*****************》6 清空所有联系人**************\n");
printf("**********》7 联系人按名排序*************************************************\n");
}
void gongneng()
{
int q=0;
list *ret,person[10];
clear_all(person);
do
{
son_menu();
int n =0,m=0;
printf("Please Select Gongneng:");
scanf("%d",&n);
switch(n)
{
case 1:
do
{
my_add(person);
printf("添加成功~~\n");
printf("是否继续添加?是(1),否(0)\n");
scanf("%d",&m);
}while(m);
break;
case 2:
do
{
ret = my_reserch(person);
if(ret!= NULL)
{
my_delete(ret,person);
printf("删除成功~~\n");
}
else
{
printf("此通讯录无此人!!!\n");
}
printf("是否继续删除?是(1),否(0)\n");
scanf("%d",&m);
}while(m);
break;
case 3:
ret = my_reserch(person);
if(ret!= NULL)
{
printf("%s %c %d %s %s\n", ret->name,ret->sex,ret->age,ret->number,ret->address);
}
else
{
printf("此通讯录无此人!!!\n");
}
break;
case 4:
do
{
ret = my_reserch(person);
if(ret!= NULL)
{
my_remove(ret);
printf("修改成功~~\n");
}
else
{
printf("此通讯录无此人!!!\n");
}
printf("是否继续修改?是(1),否(0)\n");
scanf("%d",&m);
}while(m);
break;
case 5: all_show(person); break;
case 6: clear_all(person); printf("清空联系人成功~~\n"); break;
case 7: name_sort(person); printf("排序成功~~\n"); break;
default: printf("Enter error,Please try again\n"); break;
}
printf("是否回到功能页?(1),否(0)\n");
scanf("%d",&q);
}while(q);
}
int main()
{
while(1)
{
menu();
int num =0;
printf("Please Enter:");
scanf("%d",&num);
switch(num)
{
case 1: gongneng(); break;
case 2: exit(1); break;
default: printf("Enter error,Please try again\n"); break;
}
}
return 0;
}