首页 > 编程 > C++ > 正文

C语言通讯录实例分享

2020-05-23 13:32:32
字体:
来源:转载
供稿:网友

本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下

main.c文件:

// // main.c // c语言通讯录 // // Created by stevenchang on 9/6/15. // Copyright (c) 2015 cz. All rights reserved. //  /**  1.添加联系人  2.删除联系人  3.更新联系人  4.显示所有联系人  5.查找联系人  6.退出系统  */ #include <stdio.h>  int main(int argc, const char * argv[]) {   //程序的初始化   initContacts();      while(1) {     int flag = 0;     printf("*************C语言通讯录*************/n");     printf("************1.添加用户***************/n");     printf("************2.删除用户***************/n");     printf("************3.更新用户***************/n");     printf("************4.查找用户***************/n");     printf("************5.显示所有用户************/n");     printf("************6.退出系统***************/n");     printf("************************************/n");          printf("请输入1-6的功能编号 :/n");     scanf("%d",&flag);     //判断编号是否合法     validateNum(flag, 1, 6);          switch (flag) {       case 1:         addContact();  //添加用户         break;       case 2:         deleteContact();   //删除用户         break;       case 3:         updateContact();    //更新用户         break;       case 4:         searchContact();    //查找用户         break;       case 5:         listContact();   //显示所有用户         break;       case 6:         printf("系统正在退出!/n");         printf("成功退出系统!/n");         return 0;         break;       default:         break;     }        }   return 0; } 

MyFile.c文件:

// // MyFile.c // c语言通讯录 // // Created by stevenchang on 9/6/15. // Copyright (c) 2015 cz. All rights reserved. //  #include "MyFile.h"  //**************函数的实现**********************//  /**  * 添加联系人  */ void addContact() {   int flag = 0;   printf("您选择的是添加联系人,请按操作进行!/n");   printf("请输入用户姓名(*注意联系人姓名中间不能有空格):/n");   scanf("%s",contacts[totalContactsCount].name);   printf("请输入电话(*注意联系人电话中间不能有空格): /n");   scanf("%s",contacts[totalContactsCount].tel);   printf("是否确认添加!1:是  0:否/n");   scanf("%d",&flag);   if (flag) {     //联系人个数加1     totalContactsCount++;          //将联系人信息保存到文件中     writeFile();   }   printf("已经放弃添加!/n");   return ; }  /**  * 删除联系人  */ void deleteContact() {   int no;   printf("您选择的是删除联系人,请按操作进行!/n");   printf("请输入要删除的编号:/n");   scanf("%d",&no);      //判断输入的编号是否合法   if (!validateNum(no, 1, totalContactsCount)) {     printf("您输入的编号不合法!/n");     return ;   }   //合法   //如果删除的是最后一个元素   if (no == totalContactsCount) {     totalContactsCount--;   } else {     //如果删除的不是最后一个元素     for (int i = no; i < totalContactsCount; i++) {       contacts[no-1] = contacts[no];  //元素的移动和覆盖     }     totalContactsCount--;   }      //同步文件   writeFile(); }  /**  * 更新联系人  */ void updateContact() {   int no;   char newName[NAMELENGTH];   char newTel[TELLENGTH];   printf("您选择的是更新联系人,请按操作进行!/n");   printf("请输入要修改的联系人编号:/n");   scanf("%d",&no);      //判断编号是否合法   if (!validateNum(no, 1, totalContactsCount)) {     return ;   }      //合法   printf("请重新输入用户名:/n");   scanf("%s",newName);   printf("请重新输入电话号码/n");   scanf("%s",newTel);      strcpy(contacts[no-1].name, newName);   strcpy(contacts[no-1].tel, newTel);      //写入文件   writeFile(); }  /**  * 显示所有联系人  */ void listContact() {   printf("您选择的是显示所有联系人,联系人如下!/n");      if (totalContactsCount > 0) {     printf("序号/t姓名/t电话/n");     for (int i = 0 ; i < totalContactsCount; i++) {       printf("%d/t%s/t%s/n",i+1,contacts[i].name, contacts[i].tel);     }   } else {     printf("联系人为空,请添加联系人!/n");     return ;   } }  /**  * 查找联系人  */ void searchContact() {   printf("您选择的是查找联系人,请按操作进行!/n");   char searchName[NAMELENGTH];   printf("请输入要查找的联系人姓名:/n");   scanf("%s",searchName);   for (int i = 0 ; i < totalContactsCount; i++) {     if (strcmp(searchName, contacts[i].name)==0) { //说明相同       printf("联系人姓名为:%s,电话号码为:%s/n",contacts[i].name,contacts[i].tel);       return ;     }     if (i == totalContactsCount-1) {       printf("此联系人不存在!/n");     }   } }  /**  * 通讯录的初始化  */ void initContacts() {   printf("通讯录正在初始化!/n");   FILE *fp = fopen(filePath, "r");   if (fp!=NULL) { //读取文件成功     //读取联系人的个数     fread(&totalContactsCount, sizeof(totalContactsCount), 1, fp);     //读取每个联系人     for (int i = 0; i < totalContactsCount; i++) {       //读取联系人数据,到联系人数组中       fread(&contacts[i], sizeof(Person), 1, fp);     }   } else {     //读取文件失败     //创建文件     fp = fopen(filePath, "wb");     //写入联系人的个数     fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);          printf("通讯录文件创建成功!/n");   }      //关闭文件指针   fclose(fp);   printf("通讯录初始化成功!/n"); }  /**  * 判断功能编号是否合法 1:合法  0:非法  */ int validateNum(int num, int min, int max) {   if (num < min || num > max) {     printf("输入的功能编号不正确,请重新输入!/n");     return 0;   }   return 1; }  /**  *将联系人写入文件  */ void writeFile() {   //以二进制文件打开文件   FILE *fp = fopen(filePath, "wb");      if (fp != NULL) {     //写入联系人个数     fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);     //写入每个联系人个数     for (int i = 0; i < totalContactsCount; i++) {       fwrite(&contacts[i], sizeof(Person), 1, fp);     }   }      fclose(fp);   printf("文件更新成功/n"); } 

MyFile.h文件:

// // MyFile.h // c语言通讯录 // // Created by stevenchang on 9/6/15. // Copyright (c) 2015 cz. All rights reserved. //  #ifndef __c_______MyFile__ #define __c_______MyFile__  #include <stdio.h> #include <string.h>  #define N 100     //宏定义一个通讯录的容量 #define NAMELENGTH 22  //宏定义一个名字的长度 #define TELLENGTH 12   //宏定义一个电话号码的长度  //********************函数的声明*********************// void addContact();  //添加联系人 void deleteContact();  //删除联系人 void updateContact();  //更新联系人 void listContact();  //显示所有联系人 void searchContact();  //查找联系人 void initContacts();   //通讯录的初始化 int validateNum(int num, int min, int max);  //判断功能编号是否合法 1:合法  0:非法 void writeFile();  //将联系人写入文件  typedef struct Person {  //定义一个结构体   char name[NAMELENGTH];   //定义姓名数组   char tel[TELLENGTH];   //定义结构体数组 } Person;  //定义文件路径 char *filePath = "telData.data"; int totalContactsCount = 0; Person contacts[N];  //定义Person结构体数组  #endif /* defined(__c_______MyFile__) */ 

C语言,通讯录

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表