用c语言设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。功能要求如下: 1、查询功能:

用c语言设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理。功能要求如下: 1、查询功能:
( l )按类查询
将所有记录分为办公类(A)、个人类(B)和商务类(0 .按类查询选中某类时,显示所有属于此类记录的姓名和电话号码。
(2)按姓名查询
输入奸名后,显示此人对应的相关信息•
2、添加功能:
能添加新记录(一个记录包括:姓名、电话号码、分类(可选项有:A办公类B个人类C商务类)、电了邮件)•例如:
杨洋B588888888商务类chuny@126 om
当录入了重复的姓名和电话号码时,则提示数录入重复并取消录入:当通信录中超过巧条信息时,存储空间己满.不能再录入新数据:录入的新数据能按递增的砺序自动进行条目编号•
3,修改功能:选中某个人的姓名时,可对此人的相应敌锯进行修改。
毒、除功能:选中某个人的姓名时.可对此人的相应敌掘进行删除,并自动调整后续条目的编号.

  #include "stdio.h"
  #include "conio.h"
  #include "stdlib.h"
  #include "string.h"
  #define MAXRECORD (1024)
  enum RecordType{OFFICE,PERSON,BUSINESS};
  const char* const TypeName[] = {"办公","个人","商务"};
  typedef struct Record
  {
  char name[128];
  char phoneNum[32];
  char email[128];
  RecordType type;
  }Record;
  int recordNum = 0;
  void ClearRecord(Record* record)
  {
  memset((void*)record,0,sizeof(*record));
  recordNum--;
  }
  void ShowMainMenu()
  {
  system("cls");
  printf("1.查询\n2.添加\n3.修改\n4.删除\n5.退出\n");
  }
  void InputRecord(Record* record)
  {
  if(recordNum == MAXRECORD)
  {
  printf("人数已满。\n");
  getch();
  }
  system("cls");
  printf("分别录入名字、手机号、电子邮箱、类型(0|办公 1|个人 2|商务):\n");
  scanf("%s%s%s%d",record->name,record->phoneNum,record->email,&(record->type));
  recordNum++;
  }
  void SelectFromName(const Record* record)
  {
  system("cls");
  printf("输入查询名字:\n");
  char name[128]={0};
  scanf("%s",name);
  printf("查询结果:\n");
  for(int i = 0;i<recordNum;i++)
  if(!(strcmp(name,(record+i)->name)))
  printf("(%d):%s\t%s\t%s\t%s\n",i+1,(record+i)->name,(record+i)->phoneNum,(record+i)->email,TypeName[(record+i)->type]);
  printf("\n按任意键继续……");
  getch();
  }
  void SelectFromType(const Record* record)
  {
  system("cls");
  printf("输入查询类型(0|办公 1|个人 2|商务):\n");
  int type = 0;
  scanf("%d",&type);
  printf("查询结果:\n");
  for(int i = 0;i<recordNum;i++)
  if(type == (record+i)->type)
  printf("(%d):%s\t%s\t%s\t%s\n",i+1,(record+i)->name,(record+i)->phoneNum,(record+i)->email,TypeName[(record+i)->type]);
  printf("\n按任意键继续……");
  getch();
  }
  void SelectRecord(const Record* record)
  {
  while(1)
  {
  system("cls");
  printf("选择查询方案(0|按名字 1|按类型 2|返回上级菜单):\n");
  char chGet = getch();
  switch(chGet)
  {
  case '0':
  SelectFromName(record);
  break;
  case  '1':
  SelectFromType(record);
  break;
  case  '2':
  return;
  default:
  break;
  }
  }
  }
  void UpdateRecord(Record* record)
  {
  system("cls");
  printf("输入修改名字:\n");
  char name[128]={0};
  scanf("%s",name);
  for(int i = 0;i<recordNum;i++)
  if(!(strcmp(name,(record+i)->name)))
  {
  printf("分别录入名字、手机号、电子邮箱、类型(0|办公 1|个人 2|商务):\n");
  scanf("%s%s%s%d",(record+i)->name,(record+i)->phoneNum,(record+i)->email,&((record+i)->type));
  printf("\n修改成功,按任意键继续……");
  getch();
  return;
  }
  printf("\n查无此人,按任意键继续……");
  getch();
  }
  void DeleteRecord(Record* record)
  {
  system("cls");
  printf("输入删除名字:\n");
  char name[128]={0};
  scanf("%s",name);
  for(int i = 0;i<recordNum;i++)
  if(!(strcmp(name,(record+i)->name)))
  {
  for(int j = i;j<recordNum - 1;j++)
  *(record+j) = *(record+j+1);
  ClearRecord(record+recordNum-1);
  printf("\n删除成功,按任意键继续……");
  getch();
  return;
  }
  printf("\n查无此人,按任意键继续……");
  getch();
  }
  void RunRecord(Record* record)
  {
  while(1)
  {
  ShowMainMenu();
  char chGet = getch();
  switch(chGet)
  {
  case  '1':
  SelectRecord(record);
  break;
  case  '2':
  InputRecord(record+recordNum);
  break;
  case '3':
  UpdateRecord(record);
  break;
  case '4':
  DeleteRecord(record);
  break;
  case '5':
  return;
  default:
  break;
  }
  }
  }
  int main()
  {
  Record* allRecord = (Record*)malloc(MAXRECORD*sizeof(Record));
  memset((void*)allRecord,0,MAXRECORD*sizeof(Record));
  RunRecord(allRecord);
  return 0;
  }

追问

你运行了么 不对啊

能不能给改改

追答

能运行,你是linux吗?我是用vs2008编译的
如果你是linux,就要改一些地方

追问

cfree

追答

我这用cfree正常编译和运行

温馨提示:答案为网友推荐,仅供参考