首页 > 编程 > C > 正文

C语言实现通讯录系统

2020-01-26 13:46:07
字体:
来源:转载
供稿:网友

C语言通讯录系统实现,供大家参考,具体内容如下

需求分析:

利用文件读,写的方法

实现增加通讯录联系人信息

实现删除通讯录联系人信息

实现查找通讯录联系人信息

实现修改通讯录联系人信息

实现查看现有通讯录联系人信息

代码实现:

// main.c // C语言通讯录实现 // // Created by Brisinga on 15/10/14. // Copyright © 2015年 yan. All rights reserved. //  #include <stdio.h> #include<string.h> #define LEN 10 #define NAMELEN 22 #define TELLEN 12  //*************结构体变量定义**************** //定义联系人的个数 int contactCount = 0; //定义结构体 typedef struct{   //定义联系人姓名  char name[NAMELEN];  //定义联系人电话  char tel[TELLEN];  }Person;  //初始化联系人数组 Person contact[LEN]; //定义文件名 charchar *path = "a.data";  //接收用户输入的编号 int no; //**************函数声明********************  //初始化声明 void init(); //校验声明 int isValid(int n,int min,int max); //添加联系人 void addContact(); //删除联系人 void deleteContact(); //修改联系人 void updateContact(); //查看所有联系人 void doList(); //搜索联系人 void searchContact(); //退出系统 void quit(); //联系人写入文件 void writeFile(); //***************************************   int main(int argc, const charchar * argv[]) {     //通讯录初始化  init();  printf("通讯录初始化成功!/n");        while (1) {      //定义界面  printf("**********************************/n");  printf("***********欢迎使用通讯录***********/n");  printf("***********1.添加联系人*************/n");  printf("***********2.删除联系人*************/n");  printf("***********3.修改联系人*************/n");  printf("***********4.查看所有联系人**********/n");  printf("***********5.搜索联系人*************/n");  printf("***********6.退出系统***************/n");  printf("**********************************/n");         //提示用户输入编号   printf("请输入要进行操作的编号:/n");   scanf("%d",&no);   //判断输入是否合法   isValid(no, 1, 6);   //判断用户的操作   switch (no) {    case 1:     //添加联系人     addContact();     break;    case 2:     //删除联系人     deleteContact();     break;    case 3:     //更新联系人     updateContact();     break;    case 4:     //查看联系人     doList();     break;    case 5:     //搜索联系人     searchContact();     break;    case 6:     //退出     quit();     return 0;         default:     break;   }     }  return 0; }  //通讯录初始化 void init(){   //定义文件指针  FILEFILE *fp = fopen(path, "r");  //判断通讯录是否存在  if (fp!=NULL) {  //如果存在  //1.读取联系人个数   fread(&contactCount, sizeof(contactCount), 1, fp);  //2.读取每一个联系人nts   for (int i=0; i<contactCount; i++) {    fread(&contact[i], sizeof(Person), 1, fp);   }     }else{    //如果不存在  //创建通讯录   fp = fopen(path, "wb");  //写入当前联系人的个数   fwrite(&contactCount, sizeof(contactCount), 1, fp);   }  fclose(fp);  }  //校验输入是否合法 int isValid(int n,int min,int max){    //如果输入的编号大于min小于max,则返回0  if (n>=min&&n<=max) {   return 0;  }    //否则返回1  printf("输入非法!/n");  return 1;  }  //添加联系人 void addContact(){    //提示用户输入要添加联系人的姓名  printf("请输入要添加的联系人姓名:*注意姓名之间不能有空格/n");  //接收联系人姓名  scanf("%s",contact[contactCount].name);  //提示用户输入要添加联系任的电话  printf("请输入要添加联系人的电话: *注意电话号码之间不能有空格/n");  //接收联系人电话  scanf("%s",contact[contactCount].tel);  //询问是否确定添加  printf("确定要添加么?1.确定 0.取消/n");  scanf("%d",&no);  if (no) {   contactCount++;   //写入文件   writeFile();   printf("添加成功!/n");  }   }  //删除联系人 void deleteContact(){    //显示联系人  doList();  int flag;  //提示用户输入要删除联系人的编号  printf("请输入要删除联系人的编号:/n");  //接收用户输入的编号  scanf("%d",&no);  //判断编号是否合法  if(!isValid(no, 1, contactCount)){  //编号合法   printf("确定要删除么?删除后将无法恢复!1.确定 0.取消/n");   scanf("%d",&flag);   if (flag) {    //如果要删除的联系人在末尾   if (no==contactCount) {    //则contactCount-1    contactCount--;   }else{    //如果要删除的联系人不在末尾  //移动数组元素    for (int i=no-1; i<contactCount-1; i++) {     contact[i]=contact[i+1];    }       }  //contactCount--    contactCount--;  //写文件   writeFile();   }    }else  //编号不合法,则退出   printf("编号不合法!/n");   return ;  }  //修改联系人 void updateContact(){    //显示联系人  doList();  //提示用户输入要修改联系人的编号  printf("请输入要修改的联系人的编号:/n");  //接收用户输入的编号  scanf("%d",&no);  //判断编号是否合法  int flag;  if (!isValid(no, 1, contactCount)) {   //提示用户输入新的的联系人的姓名    printf("请输入新的姓名:*注意:姓名之间不能有空格/n");    //接收用户输入的姓名    scanf("%s",contact[no-1].name);    //提示用户输入新的电话号码    printf("请输入新的电话号码:*注意:电话号码之间不能有空格/n");    //接收用户输入的电话号码    scanf("%s",contact[no-1].tel);       //询问用户确定修改么?   printf("确定要修改么?1.确定 0.取消/n");   scanf("%d",&flag);   if (flag) {       //写文件    writeFile();    printf("联系人修改成功!/n");   }else{      printf("编号不合法!!/n");    return ;      }    }    }  //查看所有联系人 void doList(){    printf("显示所有联系人:/n");  printf("编号/t姓名/t电话/n");  for (int i=0; i<contactCount; i++) {   printf("%d/t%s/t%s/n",i+1,contact[i].name,contact[i].tel);  }  }  //搜索联系人 void searchContact(){    int flag = 1;  //接收用户输入的姓名  char searchName[NAMELEN];  //接收用户输入的电话  char searchTel[TELLEN];  //询问用户搜索方式  printf("请输入查找的方式: 1.按姓名查找 2.按电话号码查找/n");  //接收用户的搜索方式  scanf("%d",&no);  if (no==1) {   //请用户输入要查找的姓名   printf("请输入要查找到姓名:/n");   scanf("%s",searchName);   for (int i=0; i<contactCount; i++) {    if (!strcmp(searchName,contact[i].name)) {     printf("您查找的联系人为:/n");     printf("%d/t%s/t%s/n",i+1,contact[i].name,contact[i].tel);     return ;    }else{         flag = 0;    }   }     }else if(no==2){      //请用户输入要查找的电话号码   printf("请输入要查找的电话号码:/n");   scanf("%s",searchTel);   for (int i=0; i<contactCount; i++) {    if (!strcmp(searchTel,contact[i].tel)) {     printf("您查找的联系人为:/n");     printf("%d/t%s/t%s/n",i+1,contact[i].name,contact[i].tel);     return ;    }else{          flag = 0;    }   }      }else{   printf("非法输入!/n");   return ;  }  if (!flag) {   printf("很抱歉!小伙伴不在通讯录中!/n");  }       }  //退出系统 void quit(){    printf("系统正在退出.../n");  printf("系统已经退出!/n");    }  //联系人写入文件 void writeFile(){   //定义文件指针  FILEFILE *fp = fopen(path, "wb");  if (fp!=NULL) {   //写入联系人个数   fwrite(&contactCount, sizeof(contactCount), 1, fp);   //写入每个联系人   for (int i=0; i<contactCount; i++) {        fwrite(&contact[i], sizeof(Person),1, fp);   }     }  fclose(fp);  }

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

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

图片精选