歡迎您光臨本站 註冊首頁

C語言實現簡易通訊錄

←手機掃碼閱讀     ml5rwbikls @ 2020-06-09 , reply:0

本文實例為大家分享了Android九宮格圖片展示的具體代碼,供大家參考,具體內容如下

一、概述

通訊錄的實現其中包括了指針、結構體、動態內存管理、文件的讀寫操作等知識點,是對這些知識點應用鞏固的非常好的例子;

通訊錄功能如下:

  • 添加聯繫人

  • 刪除聯繫人

  • 查找聯繫人

  • 修改聯繫人

  • 顯示所有聯繫人

  • 加載聯繫人

  • 保存聯繫人

  • 聯繫人排序

二、代碼如下

contact.h

  #ifndef CONTACT_H  #define CONTACT_H    #define NAME_MAX 20  #define SEX_MAX 10  #define TEL_MAX 12  #define ADDR_MAX 20  #define MEMBER_MAX 1    typedef struct info  {   char name[NAME_MAX];   char sex[SEX_MAX];   int age;   char tele[TEL_MAX];   char addr[ADDR_MAX];  }info;    typedef struct contact  {   info *data;   int size;   int capacity;  }contact, *pcontact;    //初始化通訊錄  void InitContact(pcontact list);  //添加聯繫人  void AddContact(pcontact list);  //刪除聯繫人  void DellContact(pcontact list);  //查找聯繫人  void FindContact(pcontact list);  //修改聯繫人  void ModContact(pcontact list);  //顯示所有聯繫人  void ShowContact(pcontact list);  //聯繫人排序(選擇法)  void SortContact(pcontact list);  //檢查容量  int CheckSize(pcontact list);  //查找聯繫人在數組data第幾個位置  int FindContactAddr(pcontact list);  //從文件中加載聯繫人到內存  void LoadContact(pcontact list);  //將聯繫人從內從中保存到文件  void SaveContact(pcontact list);    #endif

 

contact.c

  #include#include#include#include "contact.h"    //初始化通訊錄  void InitContact(pcontact list)  {   list->data = (info *)malloc(sizeof(info)* MEMBER_MAX);   list->size = 0;   list->capacity = MEMBER_MAX;   //每次初始化是加載一遍文件,防止最新錄入的在保存在文件時覆蓋上次   //打開程序時保存的信息   LoadContact(list);  }    //添加聯繫人  void AddContact(pcontact list)  {   info tmp_member;   if (CheckCapacity(list) == 0)   {   printf("成員已滿,添加失敗!");   return;   }     printf("請輸入姓名:");   scanf("%s", tmp_member.name);   printf("請輸入性別:");   scanf("%s", tmp_member.sex);   printf("請輸入年齡:");   scanf("%d", &tmp_member.age);   printf("請輸入電話:");   scanf("%s", tmp_member.tele);   printf("請輸入地址:");   scanf("%s", tmp_member.addr);   list->data[list->size] = tmp_member;   printf("添加成功! ");   list->size++;  }    //刪除聯繫人  void DellContact(pcontact list)  {   char tmp_name[NAME_MAX] = { 0 };   int ret = 0;   printf("請輸入姓名:");   scanf("%s", tmp_name);   ret = FindContactAddr(list, tmp_name);   if (ret == -1)   {   printf("無此聯繫人! ");   return;   }   for (ret; ret < list->size - 1; ret++)   {   list->data[ret] = list->data[ret + 1];   }   printf("刪除成功! ");   list->size--;  }    //查找聯繫人  void FindContact(pcontact list)  {   char tmp_name[NAME_MAX] = { 0 };   printf("請輸入姓名:");   scanf("%s", tmp_name);   for (int i = 0; i < list->size; i++)   {   if (strcmp(tmp_name, list->data[i].name) == 0)   {   printf("=============================== ");   printf("姓名:%s ", list->data[i].name);   printf("性別:%s ", list->data[i].sex);   printf("年齡:%d ", list->data[i].age);   printf("電話:%s ", list->data[i].tele);   printf("地址:%s ", list->data[i].addr);   printf("=============================== ");   return;   }   }   printf("無此聯繫人! ");  }    //查找聯繫人在數組data第幾個位置  int FindContactAddr(pcontact list, char *tmp_name)  {   for (int i = 0; i < list->size; i++)   {   if (strcmp(tmp_name, list->data[i].name) == 0)   return i;   }   return -1;  }    //修改聯繫人  void ModContact(pcontact list)  {   info tmp_member;   int ret = 0;   printf("請輸入姓名:");    scanf("%s", tmp_member.name);   ret = FindContactAddr(list, tmp_member.name);   if (ret == -1)   {   printf("無此聯繫人! ");   return;   }   printf("請輸入性別:");   scanf("%s", tmp_member.sex);   printf("請輸入年齡:");   scanf("%s", &tmp_member.age);   printf("請輸入電話:");   scanf("%s", tmp_member.tele);   printf("請輸入地址:");   scanf("%s", tmp_member.addr);   list->data[ret] = tmp_member;   printf("修改成功! ");  }    //聯繫人排序(選擇法)  void SortContact(pcontact list)  {   info tmp_member;   for (int i = 0; i < list->size - 2; i++)   {   for (int j = 1; j < list->size - 1; j++)   {   if (strcmp(list->data[i].name, list->data[j].name) > 0)   {   tmp_member = list->data[i];   list->data[i] = list->data[j];   list->data[j] = tmp_member;   }   }   }  }    //檢查上次動態開闢的空間是否夠用,不夠時繼續開闢  int CheckCapacity(pcontact list)  {   if (list->size == list->capacity)   {   info *tmp = (info *)malloc(sizeof(info)* (list->capacity + 10));   if (tmp == NULL)   return 0;   memcpy(tmp, list->data, sizeof(info) * list->size);   free(list->data);   list->data = tmp;   list->capacity += 10;   }   return 1;  }    //顯示所有聯繫人  void ShowContact(pcontact list)  {   for (int i = 0; i < list->size; i++)   {   printf("============第%d位============== ", i + 1);   printf("姓名:%s ", list->data[i].name);   printf("性別:%s ", list->data[i].sex);   printf("年齡:%d ", list->data[i].age);   printf("電話:%s ", list->data[i].tele);   printf("地址:%s ", list->data[i].addr);   printf("=============================== ");   }  }    //從文件中加載聯繫人到內存  void LoadContact(pcontact list)  {   info tmp_member;   FILE *pf = NULL;   pf = fopen("./contatc.dat", "rb");   if (pf == NULL)   perror("fopen error");   //按照內存塊讀取,一次讀1塊,1塊大小是sizeof(info)   while (fread(&tmp_member, sizeof(info), 1, pf))   {   if (CheckCapacity(list))   {   list->data[list->size] = tmp_member;   list->size++;   }   }   if (pf != NULL)   {   fclose(pf);   pf = NULL;   printf("加載成功! ");   }  }    //將聯繫人從內從中保存到文件  void SaveContact(pcontact list)  {   FILE *pf = NULL;   pf = fopen("./contatc.dat", "wb");   if (pf == NULL)   perror("fopen error");   for (int i = 0; i < list->size; i++)   {   //按照內存塊寫入,一次寫1塊,1塊大小是sizeof(info)   fwrite(list->data + i, sizeof(info), 1, pf);   }    if (pf != NULL)   {   fclose(pf);   pf = NULL;   printf("保存成功! ");   }  }

 

test.c

  #define _CRT_SECURE_NO_WARNINGS  #include#include "contact.h"    enum opt  {   Exit,   Add,   Dell,   Find,   Mod,   Show,   Load,   Save,   Sort,  };    void menu(void)  {   printf("/*========================通訊錄======================*/ ");   printf("/*=   0.退出通訊錄 1.添加聯繫人   =*/ ");   printf("/*=   2.刪除聯繫人 3.查找聯繫人   =*/ ");   printf("/*=   4.修改聯繫人 5.顯示所有聯繫人  =*/ ");   printf("/*=   6.加載聯繫人 7.保存聯繫人   =*/ ");   printf("/*=   8.聯繫人排序       =*/ ");   printf("/*====================================================*/ ");  }    void TestContact(void)  {   contact pc;   InitContact(&pc);   int opt = 0;   do   {   menu();   printf("請選擇:>");   scanf("%d", &opt);   switch (opt)   {   case Exit:   printf("退出系統... ");   break;   case Add:   AddContact(&pc);   break;   case Dell:   DellContact(&pc);   break;   case Find:   FindContact(&pc);   break;   case Mod:   ModContact(&pc);   break;   case Show:   ShowContact(&pc);   break;   case Load:   LoadContact(&pc);   break;   case Save:   SaveContact(&pc);   break;   case Sort:   SortContact(&pc);   break;   default:   printf("輸入選項有誤,重新輸入! ");   break;   }     } while (opt);  }    int main(void)  {   TestContact();     printf(" ");   system("pause");   return 0;  }

[ml5rwbikls ] C語言實現簡易通訊錄已經有238次圍觀

http://coctec.com/docs/c/language/show-post-237605.html