菜鸟如何快速理解实现通讯录——静态方法-创新互联

       不是有一句话叫做学生给学生当老师,学生最容易听懂明白吗?没错,我这个菜鸟给你讲讲这个通讯录项目的实现,让你更能清楚明白其中的奥秘。

成都创新互联致力于网站设计制作、网站制作,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择成都创新互联,就选择了安全、稳定、美观的网站建设服务!

       这个代码没有经过过多的优化,只是为了代码能够让更多的人读懂,所以也不是最好的代码,你们可以理解了以后自己去做做优化。

      代码用的知识就是C语言中最基本的操作。

项目要求:

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址

提供方法:

1. 添加联系人信息

2. 删除指定联系人信息

3. 查找指定联系人信息

4. 修改指定联系人信息

5. 显示所有联系人信息

6. 清空所有联系人

7. 以名字排序所有联系人

代码实现:

AddRess.h

#ifndef __ADDRESS_H__
#define __ADDRESS_H__
#include 
#include 
#include 
#include 
#define  MAX 10     //这里我为了调试方便取了一个较小的数值
enum OP
{
 EXIT = 0,//退出
 ADD,     //增加联系人
 DEL,     //删除联系人
 SEEK,    //查找联系人
 REVISE,  //修改联系人
 SHOW,    //显示所有联系人
 EMPTY,   //清空所有联系人
 SORT,    //以名字排序所有联系人
};
//姓名、性别、年龄、电话、住址
typedef struct PesonMessage
{
 char name[20];
 char sex[5];
 int age;
 char tel[15];
 char address[20];
}PesonMessage;
//通讯录成员结构体;
typedef struct Peson
{
 PesonMessage people[MAX];
 int size;
}Peson,*pPeson;
void Print_AddRess();
void Add_AddRess(pPeson peson);
void Show_AddRess(pPeson peson);
void Empty_AddRess(pPeson peson);
void Del_AddRess(pPeson peson);
void Seek_AddRess(pPeson peson);
void Revise_AddRess(pPeson peson);
void Sort_AddRess(pPeson peson);
void Cheak(pPeson peson);
#endif//__ADDRESS_H__

AddRess.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "AddRess.h"
void Print_AddRess()
{
 printf("**************************\n");//输出的时候要保证屏幕上干净整齐
 printf("*****0.   退出系统   *****\n");//让别人有读下去的兴趣
 printf("*****1.添加联系人信息*****\n");
 printf("*****2.删除联系人信息*****\n");
 printf("*****3.查找联系人信息*****\n");
 printf("*****4.修改联系人信息*****\n");
 printf("*****5.显示联系人信息*****\n");
 printf("*****6.清空所有联系人*****\n");
 printf("*****7.名字排序联系人*****\n");
 printf("**************************\n");
}
void Add_AddRess(pPeson peson)
{
 assert(peson);//断言指针是否有效
 if(peson->size < MAX)//判断peson->size是否合法
 {
  //简单的输入输出
  printf("添加联系人信息\n");//姓名、性别、年龄、电话、住址
  printf("请输入联系人姓名:\n");
  scanf("%s",&(peson->people[peson->size].name));
  printf("请输入联系人的性别:\n");
  scanf("%s",&(peson->people[peson->size].sex));
  printf("请输入联系人的年龄:\n");
  scanf("%d",&(peson->people[peson->size].age)); 
  printf("请输入联系人的电话:\n");
  scanf("%s",&(peson->people[peson->size].tel));
  printf("请输入联系人的住址:\n");
  scanf("%s",&(peson->people[peson->size].address));
  peson->size++;//每次增加一个联系人,有效的size都要+1
 }
 else
 {
  printf("通讯录已满\n");//如果peson->size >= MAX
 }
}
void Show_AddRess(pPeson peson)
{
 int i = 0;
 assert(peson);//断言指针是否有效
 printf("%5s\t","name");//%Xs  的方式使字符串从最右边开始打印对齐  X可是是随意的值,这里的取了一个较小的数字
 printf("%5s\t","sex");
 printf("%5s\t","age");
 printf("%5s\t","tel");
 printf("%5s\t","address");
 printf("\n");
 for (i = 0;i size;i++)
 {
  printf("%5s\t",peson->people[i].name);
  printf("%5s\t",peson->people[i].sex);
  printf("%5d\t",peson->people[i].age);
  printf("%5s\t",peson->people[i].tel);
  printf("%5s\t",peson->people[i].address);
  printf("\n");
 }
}
void Empty_AddRess(pPeson peson)
{
 assert(peson);//断言指针是否有效
 peson->size = 0;
}
void Del_AddRess(pPeson peson)
{
 char name[20] = {0};
 int i = 0;
 assert(peson);//断言指针是否有效
 if (peson->size == 0)
 {
  printf("通讯录已空\n");
 }
 printf("请输入需要删除联系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)//判断输入的姓名和通讯录的姓名是否一致
  {
   for (;i < peson->size;i++)
   {
    peson->people[i] = peson->people[i + 1];//发现一致的名字后,从当前下标的后一个下标的所有有效值赋值给前一个
   }                                           //覆盖掉需要删除的值,注意这里不能从最后一个有效值开始往前赋值,会丢失数据的
   peson->size--;//每次删除一个数据,有效size要减掉一个
  } 
 }
 if (i == peson->size)
 {
  printf("对不起,找不到您所要删除的联系人\n");
 }
}
void Seek_AddRess(pPeson peson)
{
 char name[20] = {0};
 int i = 0;
 assert(peson);//断言指针是否有效
 if (peson->size == 0)
 {
  printf("通讯录已空\n");
 }
 printf("请输入需要查找联系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)
  {
   printf("%5s\t","name");
   printf("%5s\t","sex");
   printf("%5s\t","age");
   printf("%5s\t","tel");
   printf("%5s\t","address");
   printf("\n");
   printf("%5s\t",peson->people[i].name);
   printf("%5s\t",peson->people[i].sex);
   printf("%5d\t",peson->people[i].age);
   printf("%5s\t",peson->people[i].tel);
   printf("%5s\t",peson->people[i].address);
   printf("\n");
  } 
 }
}
void Revise_AddRess(pPeson peson)
{
 char name[20] = {0};
 char Char_Tmp[20] = {0};
 int Int_Tmp = 0;
 int i = 0;
 int num = 0;
 assert(peson);//断言指针是否有效
 if (peson->size == 0)
 {
  printf("通讯录已空\n");
 }
 printf("请输入需要修改的联系人的姓名");
 scanf("%s",&name);
 for (i = 0;i < peson->size; i++)
 {
  if (strcmp(name,peson->people[i].name) == 0)
  {
   printf("1.name\n");
   printf("2.sex\n");
   printf("3.age\n");
   printf("4.tel\n");
   printf("5.address\n");
   printf("请输入需要修改的对应序号:\n");
   scanf("%d",&num);
   switch (num)
   {
   case 1:
    printf("请输入联系人姓名\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].name,Char_Tmp);
    break;
   case 2:
    printf("请输入联系人性别\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].sex,Char_Tmp);
    break;
   case 3:
    printf("请输入联系人年龄\n");
    scanf("%d",&Int_Tmp);
    peson->people[i].age = Int_Tmp;
    break;
   case 4:
    printf("请输入联系人电话\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].tel,Char_Tmp);
    break;
   case 5:
    printf("请输入联系人住址\n");
    scanf("%s",&Char_Tmp);
    strcpy(peson->people[i].address,Char_Tmp);
    break;
   default:
    printf("对不起,输入错误\n");
    break;
   }
  } 
 }
}
void Sort_AddRess(pPeson peson)//冒泡排序
{
 char name[20] = {0};
 int i = 0;
 int j = 0;
 PesonMessage tmp;
 assert(peson);//断言指针是否有效
 if (peson->size == 0)
 {
  printf("通讯录已空\n");
 }
 for (i = 0; i < peson->size-1; i++)//排序的趟数
 {
  for (j = 0;j < peson->size - i - 1;j++)//比较的个数
  {
   if (strcmp(peson->people[j].name,peson->people[j + 1].name) < 0)
   {
    //strcpy(tmp,peson->people[j].name);    //刚开始欠缺考虑只是交换了两组姓名而已
    //strcpy(peson->people[j].name,peson->people[j + 1].name);
    //strcpy(peson->people[j + 1].name,tmp);
    tmp = peson->people[j];
    peson->people[j] = peson->people[j+1];
    peson->people[j+1] = tmp;
   }
  }
 }
}
void Cheak(pPeson peson)
{
 int index = 0;
 while(1)
 {
  Print_AddRess();
  printf("请选择:\n");
  scanf("%d",&index);
  switch(index)
  {
  case EXIT:
   exit(0);
   break;
  case ADD:
   Add_AddRess(peson);
   break;
  case DEL:
   Del_AddRess(peson);
   break;
  case SEEK:
   Seek_AddRess(peson);
   break;
  case REVISE:
   Revise_AddRess(peson);
   break;
  case SHOW:
   Show_AddRess(peson);
   break;
  case EMPTY:
   Empty_AddRess(peson);
   break;
  case SORT:
   Sort_AddRess(peson);
   break;
  default:
   printf("输入有误\n");
   break;
  }
 }
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "AddRess.h"

int main()

{

 Peson peson;

 peson.size = 0;

 Cheak(&peson);

 system("pause");

 return 0;

}

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

菜鸟如何快速理解实现通讯录——静态方法

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


分享文章:菜鸟如何快速理解实现通讯录——静态方法-创新互联
网页链接:http://pwwzsj.com/article/gdipj.html