简单的通讯录实现教程

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括: 
姓名、性别、年龄、电话、住址: 

1. 添加联系人信息 
2. 删除指定联系人信息 
3. 查找指定联系人信息 
4. 修改指定联系人信息 
5. 显示所有联系人信息 
6. 清空所有联系人 
7. 以名字排序所有联系人


思路:将此次函数实现分为3个模块,1.头文件部分。2.主函数测试部分  3.函数实现部分

  1. 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息。所以头文件里应该包括一个结构体,这个结构体里应包含姓名,性别,年龄,电话,住址。同时还可以定义一个结构体,这个结构体里包含通讯录,同时通讯录里人员的计数变量,将通讯录的地址传到别的地方便可以实现对它遍历或者其他操作。
  2. 第二个模块便是我们的测试函数,测试函数便可以实现我们的菜单打印,同时由我们接收不同的值便可以实现不同的操作,就是相应的方法的实现,这里很明显可以通过一个switch语句来进行控制。
  3. 第三个模块便是我们的方法实现的函数,将模块2里定义的类型为通讯录的地址传到各个方法里,这样便可以实现对通讯录的操作。

头文件

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct People
{
   char name[20];
   int  age[10];
   char sex[5];
   int  tel[20];
   char add[20];
}People;
typedef struct List
{
   struct People E[1000];
   int count;
}List;

主函数测试

#include"List.h"
int main()
{
   List L;
   int i = 0;
   int count =0;
   init(&L);
   menu();
   do
   {
	   printf("请选择所要进行的操作:\n");
	   scanf("%d",&i);
		 switch(i)
	   {
	   case 1:
		   Add_E(&L);
		   break;
	   case 2:
		   Del_E(&L);
		   break;
	   case 3:
		   Research_E(&L);
		   break;
	   case 4:
		   Revise_E(&L);
		   break;
	   case 5:
		   Show_E(&L);
		   break;
	   case 6:
		   Clear_E(&L);
		   break;
	   case 7:
		   Sort_E(&L);
		   break;
	   case 0:
		   printf("成功退出\n");
		   return 0;
	   default:
		   printf("输入参数错误\n");
		   break;
	   }
   }
    while(i);
	system("pause");
   return 0;
}

函数实现

#include"List.h"
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");

}

void menu2()//修改联系人时所用到的菜单
{
    printf("**********************\n");
    printf("****1.姓名**2.性别****\n");
    printf("****3.年龄**4.电话****\n");
    printf("****5.地址**6.返回****\n");
    printf("**********************\n");
}

void init(List *L)//初始化
{

    int count = sizeof(L->E);
    L->count = 0;
    memset(L->E, 0,count);
}

int Find(List *L,char* pname)
{
   int j = 0;
   for(;j<L->count;j++)
   {
	   if(strcmp(L->E[j].name,pname) == 0)
	   {
		   return j;
	   }
    }
   return -1;
}
void Add_E(List *L)//添加联系人
{
	
	  printf("请输入联系人姓名:  \n");
	  scanf("%s",L->E[L->count].name);
	  printf("请输入联系人年龄:  \n");
	  scanf("%d",L->E[L->count].age);
	  printf("请输入联系人性别:  \n");
	  scanf("%s",L->E[L->count].sex);
	  printf("请输入联系人电话:  \n");
	  scanf("%d",L->E[L->count].tel);
	  printf("请输入联系人地址:  \n");
	  scanf("%s",L->E[L->count].add);
	  if(L->count>=1000)
	   {
	   printf("通讯录已满!\n");
	   return;
	   }
	  else
	  {
	   L->count++;
	   printf("联系人数据添加成功\n");
	   printf("%d",L->count);
	   }
}

void Revise_E(List *L)//修改指定联系人信息
{
   int i = 0;
   int ret = 0;
   char name[20] = {0};
   printf("请输入要修改的联系人:\n");
   scanf("%s",name);
   ret = Find(L,name);
   if(ret != -1)
   {
        printf("  姓名%s ",L->E[ret].name);
	    printf("  年龄%d",*(L->E[ret].age)); 
		printf("  性别%s",L->E[ret].sex);  
	    printf("  电话%d",*(L->E[ret].tel));  
		printf("  住址%s",L->E[ret].add);
		printf("\n");
		do
		{
            menu2();
            printf("输入你要修改的选项:\n");
			scanf("%d",&i);
			switch(i)
			{
			case 1:
                printf("请把姓名修改成:");
				scanf("%s", L->E[ret].name);
                break;
            case 2:
                printf("请把性别修改成:");
                scanf("%s", L->E[ret].sex);
                break;
            case 3:
                printf("请把年龄修改成:");
                scanf("%d", &(L->E[ret].age));
                break;
            case 4:
                printf("请把电话修改成:");
                scanf("%s", L->E[ret].tel);
                break;
            case 5:
                printf("请把地址修改成:");
                scanf("%s",L->E[ret].add);
                break;
            case 6:
                return;
            default:
                printf("输入错误");
                break;
			}
		}while(i);
   }
   else
    {
        printf("你要修改的联系人不存在\n");
    }
}
void Del_E(List *L)//删除指定联系人
{
	char name[20] = {0};
	int i = 0;
	int n = 0;
	int ret = 0;
	printf("请输入删除联系人姓名:\n");
	scanf("%s",name);
	ret = Find(L,name);
	if(ret != -1)
	{
	  printf("你是否要删除该联系人?\n");
      printf("删除请按1 不删除请按0\n");
	  scanf("%d",&n);
	  if(1 == n)
	  {
		  for(i=ret;i<(L->count);i++)
		  {
			  L->E[i] = L->E[i + 1];//联系人信息依次覆盖
		  }
		  L->count--;
		  printf("删除成功\n");
	  }
	  else
	  {
	  printf("删除失败\n");
	  }
}
}

void Show_E(List *L)//显示所有联系人
{  
    int i = 0; 
	if(L->count == 0)
	{
	printf("无联系人!\n");
	}
	for(; i<L->count; i++) 
    {  
		printf("  第%d个人信息为:  \n",i+1);
		printf("  姓名%s ",L->E[i].name);
	    printf("  年龄%d",*(L->E[i].age)); 
		printf("  性别%s",L->E[i].sex);  
	    printf("  电话%d",*(L->E[i].tel));  
		printf("  住址%s",L->E[i].add);  
		printf("\n");  
    }  
} 
void Clear_E(List* L)//清空通讯录
{
    L->count = 0;
	printf("成功清除!\n");
}

void Research_E(List *L)//查找指定联系人
{
   int ret = 0;
   char name[20] = {0};
   printf("请输入需要查找联系人姓名: \n");
   scanf("%s",name);
   ret = Find(L,name);
   if(ret != -1)
   {
		printf("  姓名%s ",L->E[ret].name);
	    printf("  年龄%d",*(L->E[ret].age)); 
		printf("  性别%s",L->E[ret].sex);  
	    printf("  电话%d",*(L->E[ret].tel));  
		printf("  住址%s",L->E[ret].add); 
		printf("\n");
		
   }
   else
   {
	   printf("查找的联系人不存在\n");
   }
}
 void Sort_E(List* L)
 {
    int i = 0;
	int j = 0;
	for(;i<L->count - 1;i++)
	{
		for(;j<(L->count - 1 - i);j++)
	   {
		   if(strcmp(L->E[j].name,L->E[j + 1].name)>0)
		 {
		   People tmp;
		   tmp = L->E[j];
		   L->E[j] = L->E[j + 1];
           L->E[j + 1] = tmp;
		 }
	   }
	}
	printf("排序成功!\n");
 }


猜你喜欢

转载自blog.csdn.net/w_j_f_/article/details/80067959
今日推荐