C语言实现通讯录系统

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

}

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

您可能感兴趣的文章:

  • C语言实现简单的通讯录
  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例
  • 使用C语言中的time函数获取系统时间
  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
  • 基于C语言实现简单的12306火车售票系统
  • C语言职工管理系统设计
  • c语言实现系统时间校正工具代码分享
  • Linux系统中C语言编程创建函数fork()执行解析
  • 浅谈Windows系统下C语言编程中Glib库的使用
  • C语言设计图书登记系统与停车场管理系统的实例分享
(0)

相关推荐

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • 使用C语言中的time函数获取系统时间

    可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为:time_t time(time_t * t);如果你已经声明了参数t,你可以从参数t返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数.如果参数为空(NULL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间: 复制代码 代码如下: #i

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>        /*屏幕操作函数库*/ /*主管权限数据格式化*/#define HEADER1_zg "-----------------------------货物管理系统(主管)--------------------------------\n"#define H

  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例

    通讯录管理系统 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计

  • 浅谈Windows系统下C语言编程中Glib库的使用

    在这个C的变成世界里,有许多实用的库,其中最有名的且最通用(跨多个平台的实现包括Windows,要知道很多实用的编程库都不提供Windows的实现)就是GLib这个库,其中就有实现线程的部分. glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性. glib是Gtk +库和Gnome的基础.glib可以在多个平台下使用,比如Linux.Unix.Windows等.glib为许多标准的.常用的C语言结构提供了相应的替代物. 如果在程序中要使用到glib库中的函数,则应该包

  • c语言实现系统时间校正工具代码分享

    复制代码 代码如下: //*******************************************************************//Time Protocol是一种非常简单的应用层协议.它返回一个未格式化的32位二进制数字, //这个数字描述了从1900年1月1日午夜到现在的秒数.服务器在端口37监听协议请求,以 //TCP/IP或者UDP/IP格式返回响应.将服务器的返回值转化为本地时间是客户端程序的责任. //这里使用的时间服务器是129.132.2.21,更

  • 基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件). 在编写的过程中我觉得在判断火车的状态比较值得深究.这里假设火车主要有四种状态: 1.未发车 2.已发车 3.停止检票 4.停止退票 在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小

  • Linux系统中C语言编程创建函数fork()执行解析

    最近在看进程间的通信,看到了fork()函数,虽然以前用过,这次经过思考加深了理解.现总结如下: 1.函数本身 (1)头文件 #include<unistd.h> #include<sys/types.h> (2)函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 (3)函数说明 一

  • C语言实现简单的通讯录

    用C语言写了一个简单的通讯录,说简单一是功能简单,二是也没有加读写文件操作,只是作为链表操作的一个练习,希望能给这方面的新手一此引导和帮助. 代码: /* 转贴请注明出处 */ /* 作者:小浦原(ID:blueboy82006) */ /* http://blog.csdn.net/blueboy82006 */ #include <stdio.h> #include <stdlib.h> #include<string.h> #include<ctype.h&

  • C语言职工管理系统设计

    本文实例为大家分享了C语言职工管理系统设计代码,供大家参考,具体内容如下 代码如下: #include<stdio.h> #include<stdlib.h> #include <string.h> struct Worker { int id;//工号 char name[16];//姓名 char sex[8];//性别 int age;//年龄 char edu_exp[32];//学历 int wage;//工资 char adress[32];//地址 cha

随机推荐