您的位置:首页 > 编程语言 > C语言/C++

【C语言】通讯录管理系统(容量固定)

2017-03-07 13:53 537 查看
话不多说,直接上代码。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息