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);

}

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

02-04 19:02
查看更多