模拟实现通信录

实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:
1、添加联系人信息
2、删除指定联系人信息
3、查找指定联系人信息
4、修改指定联系人信息
5、显示所有联系人信息
6、清空所有联系人
7、以名字排序所有联系人

第一步:构建一个联系人的结构体:

typedef struct people {
 char name[200];
 char sex[10];
 int age;
 char number[100];
 char address[500];
}information;

第二步:构建通讯录空间:

typedef struct mindan {
 information everyone[1000];
 int size;
}mindan;

第三步:初始化空间

void Init(mindan* book) {
 book->size = 0;
 for (int i = 0; i < MAX_LEN; i++) {
  strcpy(book->everyone[i].name," ");
  strcpy(book->everyone[i].sex, " ");
  strcpy(book->everyone[i].number, " ");
  strcpy(book->everyone[i].address, " ");
  book->everyone[i].age = 0;
 }
}

第四步:构建总体框架

int meau() {
 printf("*********t通讯录**********\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");
 int chioce;
 scanf("%d",&chioce);
 return chioce;
}

int main() {
 mindan person_info;
 Init(&person_info);
 //定义函数指针func 代表void(*) (mindan*)
 typedef void(*func)(mindan*);
 func fun_table[] = {
  NULL,
  AddInformation,
  DelInformation,
  FindInformation,
  ReInformation,
  PrintInformation,
  DisInformation,
  SortInformation
 };
 while (1) {
  int choose = meau();
  if (choose < 0||choose > sizeof(fun_table)/sizeof(fun_table[0])) {
   printf("输入无效,请重新输入\n");
   continue;
  }
  if (choose == 0) {
   printf("再见\n");
   break;
  }
  else {
   fun_table[choose](&person_info);
  }
 }
 system("pause");
 return 0;
}

第五步:完成创建联系人函数

void AddInformation(mindan* book) {
 if (book->size >= MAX_LEN) {
  printf("存储已满,无法添加!\n");
  return;
 }
 printf("请输入联系人姓名:\n");
 information* p_num =&( book->everyone[book->size]);
 scanf("%s", p_num->name);
 printf("请输入联系人性别:\n");
 scanf("%s", p_num->sex);
 printf("请输入联系人地址:\n");
 scanf("%s", p_num->address);
 printf("请输入联系人号码:\n");
  scanf("%s", p_num->number);
 printf("请输入联系人年龄:\n");
 scanf("%d",&p_num->age);
 book->size++;
 printf("添加联系人成功!\n");
 }

第六步:实现打印函数

void PrintInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 for (int i = 0; i < book->size; i++) {
  printf("------[%d]号联系人-------\n",i);
  printf("姓名:%s\n", book->everyone[i].name);
  printf("性别:%s\n", book->everyone[i].sex);
  printf("年龄:%d\n", book->everyone[i].age);
  printf("号码:%s\n", book->everyone[i].number);
  printf("地址:%s\n", book->everyone[i].address);
 }
}

第七步:实现删除函数

void DelInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 printf("你要删除的序号为");
 int i;
 scanf("%d", &i);
 information* delper = &book->everyone[i];
 if (i >= book->size) {
  printf("无联系人!\n");
  return;
  }
 else {
  strcpy(delper->name, book->everyone[book->size - 1].name);
  strcpy(delper->address, book->everyone[book->size - 1].address);
  strcpy(delper->number, book->everyone[book->size - 1].number);
  strcpy(delper->sex, book->everyone[book->size - 1].sex);
  delper->age = book->everyone[book->size - 1].age;
  book->size--;
  printf("删除成功!\n");
  }
  }

第八步:实现查找功能

void FindInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 printf("你要查找到联系人是:");
 information per_info;
 int flag = 0;
 scanf("%s", &per_info.name);
 int i;
 for (i = 0; i < book->size; i++) {
 if (strcmp(per_info.name, book->everyone[i].name)==0) {
   printf("-------已查找到----------\n");
   printf("姓名:%s\n", book->everyone[i].name);
   printf("性别:%s\n", book->everyone[i].sex);
   printf("年龄:%d\n", book->everyone[i].age);
   printf("号码:%s\n", book->everyone[i].number);
   printf("地址:%s\n", book->everyone[i].address);
   flag = 1;
  }
  else {
   continue;
  } 
  }
 if (flag == 0 && i == book->size) {
  printf("查无此人\n");
 }
}

第九步:实现修改功能

void ReInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 printf("你要修改的联系人序号是:\n");
 int i ;
 scanf("%d", &i);
 information* per_info = &book->everyone[i];
 information pe_info;
 printf("你要修改姓名为(*为不修改):\n");
 scanf("%s", &pe_info.name);
 if (strcmp(pe_info.name, "*") != 0) {
  strcpy(per_info->name, pe_info.name);
 }
 printf("你要修改性别为(*为不修改):\n");
 scanf("%s", &pe_info.sex);
 if (strcmp(pe_info.sex, "*") != 0) {
  strcpy(per_info->sex, pe_info.sex);
 }
 printf("你要修改号码为(*为不修改):\n");
 scanf("%s",&pe_info.number);
 if (strcmp(pe_info.number, "*") != 0) {
  strcpy(per_info->number, pe_info.number);
 }
 printf("你要修改地址为(*为不修改):\n");
 scanf("%s", &pe_info.address);
 if (strcmp(pe_info.address, "*") != 0) {
  strcpy(per_info->address, pe_info.address);
 }
 printf("你要修改年龄为(-1为不修改):\n");
 scanf("%d", &pe_info.age);
 if (pe_info.age != -1) {
  per_info->age = pe_info.age;
 }
  printf("修改完成!\n");
}

第十步:实现清空功能

void DisInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 char a[10];
 printf("确定是否清空:[Y/N]\n");
 scanf("%s", a);
 if ((strcmp(a, "y") == 0) || (strcmp(a, "Y") == 0)) {
  Init(book);
 }
 else {
  printf("清空失败!\n");
  return;
 }
}

第十一步:实现以姓名排序功能:

void SortInformation(mindan* book) {
 if (book->size == 0) {
  printf("无联系人!\n");
  return;
 }
 information* per = &book->everyone[book->size];
 for (int i = 0; i < book->size; i++) {
  for (int j = 0; j < book->size - i - 1; j++) {
   if (strcmp(book->everyone[j].name, book->everyone[j + 1].name) >= 0) {
    memmove(per, &book->everyone[j + 1],ROM_LEN);
    memmove(&book->everyone[j + 1], &book->everyone[j], ROM_LEN);
    memmove(&book->everyone[j], per, ROM_LEN);
   }
  }
 }
 printf("排序完成!\n");
}

这样就可以啦!虽然很简单,但是也能让自己在无聊的时光变得有趣起来;

发布了22 篇原创文章 · 获赞 1 · 访问量 269

猜你喜欢

转载自blog.csdn.net/scacacac/article/details/104868648