简单的通讯录(C语言实现)

2017-01-12 19:08:51来源:作者:人点击

第七城市
通讯录实现的功能2017-01-11:1、添加联系人 2、删除联系人3、查找联系人 4、修改联系人5、显示联系人 6、清空通讯录7、按照姓名进行排序 8、退出程序该通讯录将联系人的信息保存在文件中在VS2013中打开文件直接创建,创建建的文件名字是contact.dat,操作步骤如下:








使用的文件操作函数如下:fopen 函数原型为 FILE *fopen( const char *fname, const char *mode );打开由fname(文件名)指定的文件并返回一个关联该文件的流.如果发生错误, fopen()返回NULL.mode(方式)是用于决定文件的用途fwrite:函数原型为 size_t fwrite ( const void * buffer, size_t size, size_t count, FILE * stream );从buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量. fread:函数原型为:size_t fread( void *buffer, size_t size, size_t num, FILE *stream );读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组数据来自给出的输入流.




完整代码:

头文件:Addersss.h

1 #define _CRT_SECURE_NO_WARNINGS 1 2 #ifndef _ADDRESS_LIST_H_ 3 #define _ADDRESS_LIST_H_ 4 #include<stdio.h> 5 #include<string.h> 6 #include<stdlib.h> 7 #define NAME_MAX 12 8 #define TEL_MAX 12 9 #define SEX_MAX 510 #define  ADDR_MAX 2011 #define INIT 412 #define SIZE 413 enum OP14 {15  EXIT,  //退出16  ADD,  //添加17  DEL,//删除18  SEARCH, //查找19  REVISE, //修改20  DISPLAY, //打印21  SORT, //排序22  EMPTY //清空23 };24 typedef struct PerInfo25 {26  char name[NAME_MAX];//姓名27  int age; // 年龄28  char sex[SEX_MAX];//性别29  char tel[TEL_MAX]; //电话30  char address[ADDR_MAX];//地址31 }PerInfo;32 typedef struct Contact33 {34  PerInfo* data;//存储所有联系人的信息35  int size;36  int capacity;37 }Contact, *Pcon;38 void Add(Pcon Con); //添加联系人39 void Delete(Pcon Con);//删除联系人40 void Revise(Pcon Con);//修改联系人41 void Search(Pcon Con);//查找联系人42 void Display(Pcon Con);//打印联系人43 void Init(Pcon Con);//初始化通讯录44 void Save_Contact(Pcon Con); //存储联系人45 void Load_Contact(Pcon Con);//加载联系人46 void Empty(Pcon Con); //清空联系人47 void Sort(Pcon Con);//对联系人进行排序48 void Free(Pcon Con);//释放空间49 50 #endif //_ADDRESS_LIST_H_


Contact.c

1 #define _CRT_SECURE_NO_WARNINGS 1  2 #include"AddressList.h"  3 void judge_full(Pcon Con) //当实际联系人个数和初始化的容量相等时用realloc增容  4 {  5  if (Con->capacity == Con->size)  6  {  7 PerInfo* tmp = (PerInfo*)realloc(Con->data, (Con->capacity + SIZE)*sizeof(PerInfo));  8 if (tmp == NULL)  9 { 10 printf("out of memery/n"); 11 exit(EXIT_FAILURE); 12 } 13 else 14 { 15 Con->data = tmp; 16 Con->capacity += SIZE; 17 } 18  } 19 } 20 int  Find(Pcon Con, char* str) //查找联系人函数 21 { 22  for (int i = 0; i < Con->size; i++) 23  { 24 if (strcmp(str, Con->data[i].name) == 0) 25 { 26 return i; 27 } 28  } 29  return -1;//没有找到返回 -1 30 } 31 void Add(Pcon Con) //添加 32 { 33  judge_full(Con); 34  printf("请输入联系人的姓名 年龄  性别 电话号码,家庭住址/n"); 35  scanf("%s%d%s%s%s", Con->data[Con->size].name, 36 &Con->data[Con->size].age, 37 Con->data[Con->size].sex, 38 Con->data[Con->size].tel, 39 Con->data[Con->size].address); 40  Con->size++; 41  printf("添加成功/n"); 42  return; 43 } 44 void Delete(Pcon Con)//删除联系人 45 { 46  char input[NAME_MAX]; 47  int i = 0; 48  printf("请输入联系人姓名:/n"); 49  scanf("%s", input); 50  int ret = Find(Con, input); 51  if (ret != -1) 52  { 53 for (i = ret; i < Con->size; i++) 54 { 55 Con->data[i] = Con->data[i + 1]; //将所要删除的元素后面的元素都往前移动 56  57 } 58 Con->size--; 59  } 60  else 61  { 62 printf("这个联系人不存在!/n"); 63  } 64 } 65 void Revise(Pcon Con) //修改联系人 66 { 67  char input[NAME_MAX]; 68  printf("请输入联系人姓名:/n"); 69  scanf("%s", input); 70  int ret = Find(Con, input); 71  if (ret != -1) 72  { 73 printf("请输入修改后联系人的姓名,性别,年龄,电话号码,家庭住址/n"); 74 scanf("%s, %s, %d, %s, %s", 75 Con->data[ret].name, 76 Con->data[ret].sex, 77 Con->data[ret].age, 78 Con->data[ret].tel, 79 Con->data[ret].address); 80 printf("修改完成/n"); 81  } 82  else 83  { 84 printf("该联系人不存在/n"); 85  } 86 } 87 void Search(Pcon Con) 88 { 89  char input[NAME_MAX]; 90  printf("请输入联系人姓名:/n"); 91  scanf("%s", input); 92  int ret = Find(Con, input); 93  if (ret != -1) 94  { 95 printf("%s,%s,%d,%s,%s/n", 96 Con->data[ret].name, 97 Con->data[ret].sex, 98 Con->data[ret].age, 99 Con->data[ret].tel,100 Con->data[ret].address);101  }102  else103  {104 printf("该联系人不存在!/n");105  }106 }107 void Display(Pcon Con)108 {109  int i = 0;110  while (i < Con->size)111  {112 printf("%s,%s,%d,%s,%s/n",113 Con->data[i].name,114 Con->data[i].sex,115 Con->data[i].age,116 Con->data[i].tel,117 Con->data[i].address);118 i++;119  }120 }121 void Init(Pcon Con)122 {123  Con->data = (PerInfo*)malloc(SIZE*sizeof(PerInfo)); //开辟空间124  if (Con->data == NULL)125  {126 printf("out of memory/n");127 exit(EXIT_FAILURE);128  }129  Con->size = 0;130  Con->capacity = INIT;131  Load_Contact(Con);132 }133 void Save_Contact(Pcon Con) //存储联系人134 {135  FILE* pfwrite = fopen("contact.dat", "w");136  if (pfwrite == NULL)137  {138 perror("open file for write");139 exit(EXIT_FAILURE);140  }141  for (int i = 0; i < Con->size; i++)142  {143 fwrite(&(Con->data[i]), sizeof(PerInfo), 1, pfwrite);144  }145  fclose(pfwrite);146 }147 void Load_Contact(Pcon Con)//加载联系人148 {149  FILE* pfread = fopen("contact.dat", "r");150  PerInfo tmp = { 0 };151  if (pfread == NULL)152  {153 perror("open file for  read");154 exit(EXIT_FAILURE);155  }156  while (fread(&tmp, 1, sizeof(PerInfo), pfread))157  {158 judge_full(Con);159 Con->data[Con->size] = tmp;160 Con->size++;161  }162 }163 void Empty(Pcon Con)//清空联系人164 {165  Con->size = 0;166  return;167 }168 void Sort(Pcon Con) //按照联系人姓名进行排序169 {170  int flag = 0;171  for (int i = 0; i < Con->size - 1; i++) //需要排n-1趟172  {173 int flag = 0;174 for (int j = 0; j < Con->size - 1 - i; j++) //每趟进行n-1-i次比较175 {176 if (strcmp(Con->data[j].name, Con->data[j + 1].name)>0) //按照升序进行排序177 {178  flag = 1;179  PerInfo tmp = Con->data[j];180  Con->data[j] = Con->data[j + 1];181  Con->data[j + 1] = tmp;182 }183 }184 if (flag == 0)185 {186 break;187 }188  }189 }190 void Free(Pcon Con)191 {192  free(Con->data);193  Con->data = NULL;194 195 }


Test.c

1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include"AddressList.h" 3 void Print() 4 { 5  6  printf("**********************************************************/n"); 7  printf("*********1:添加联系人*****2:删除联系人********************/n"); 8  printf("*********3:查找联系人***** 4 : 修改联系人********************/n"); 9  printf("*********5:显示所有联系人***6:排序*************************/n");10  printf("*********7:清空联系人********0:退出************************/n");11  printf("**********************************************************/n");12 }13 int main()14 {15  Contact pcon;16  Init(&pcon);17  int input;18  while (1)19  {20 Print();21 printf("选择一个操作:");22 scanf("%d", &input);23 switch (input)24 {25 case EXIT:26 Save_Contact(&pcon);27 Free(&pcon);28 exit(0);29 break;30 case ADD:31 Add(&pcon);32 break;33 case DEL:34 Delete(&pcon);35 break;36 case SEARCH:37 Search(&pcon);38 break;39 case REVISE:40 Revise(&pcon);41 break;42 case SORT:43 Sort(&pcon);44 break;45 case DISPLAY:46 Display(&pcon);47 break;48 case EMPTY:49 Empty(&pcon);50 break;51 default:52 printf("选择错误,请重新选择:/n");53 54 }55  }56  system("pause");57  return 0;58 }








---恢复内容结束---
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台