简单的通讯录(C语言实现)
通讯录实现的功能
1、添加联系人 2、删除联系人
3、查找联系人 4、修改联系人
5、显示联系人 6、清空通讯录
7、按照姓名进行排序 8、退出程序
该通讯录将联系人的信息保存在文件中
在VS2013中打开文件直接创建,创建建的文件名字是contact.dat,操作步骤如下:


使用的文件操作函数如下:
fopen
函数原型为 FILE *fopen( const char *fname, const char *mode );
打开由fname(文件名)指定的文件并返回一个关联该文件的流.如果发生错误, fopen()返回NULL.
mode(方式)是用于决定文件的用途
fwrite:
函数原型为 size_t fwrite ( const void * buffer, size_t size, size_t count, FILE * stream );
从buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流.
返回值是已写的对象的数量.
fread:
函数原型为size_t fread( void *buffer, size_t size, size_t num, FILE *stream );
读取[num]个对象(每个对象大小为size(大小)指定的字节数),
并把它们替换到由buffer(缓冲区)指定的数组
数据来自给出的输入流.
完整代码:
头文件:Addersss.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _ADDRESS_LIST_H_
#define _ADDRESS_LIST_H_
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NAME_MAX 12
#define TEL_MAX 12
#define SEX_MAX 5
#define ADDR_MAX 20
#define INIT 4
#define SIZE 4
enum OP
{
EXIT, //退出
ADD, //添加
DEL,//删除
SEARCH, //查找
REVISE, //修改
DISPLAY, //打印
SORT, //排序
EMPTY //清空
};
typedef struct PerInfo
{
char name[NAME_MAX];//姓名
int age; // 年龄
char sex[SEX_MAX];//性别
char tel[TEL_MAX]; //电话
char address[ADDR_MAX];//地址
}PerInfo;
typedef struct Contact
{
PerInfo* data;//存储所有联系人的信息
int size;
int capacity;
}Contact, *Pcon;
void Add(Pcon Con); //添加联系人
void Delete(Pcon Con);//删除联系人
void Revise(Pcon Con);//修改联系人
void Search(Pcon Con);//查找联系人
void Display(Pcon Con);//打印联系人
void Init(Pcon Con);//初始化通讯录
void Save_Contact(Pcon Con); //存储联系人
void Load_Contact(Pcon Con);//加载联系人
void Empty(Pcon Con); //清空联系人
void Sort(Pcon Con);//对联系人进行排序
void Free(Pcon Con);//释放空间 #endif //_ADDRESS_LIST_H_
Contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"AddressList.h"
void judge_full(Pcon Con) //当实际联系人个数和初始化的容量相等时用realloc增容
{
if (Con->capacity == Con->size)
{
PerInfo* tmp = (PerInfo*)realloc(Con->data, (Con->capacity + SIZE)*sizeof(PerInfo));
if (tmp == NULL)
{
printf("out of memery\n");
exit(EXIT_FAILURE);
}
else
{
Con->data = tmp;
Con->capacity += SIZE;
}
}
}
int Find(Pcon Con, char* str) //查找联系人函数
{
for (int i = ; i < Con->size; i++)
{
if (strcmp(str, Con->data[i].name) == )
{
return i;
}
}
return -;//没有找到返回 -1
}
void Add(Pcon Con) //添加
{
judge_full(Con);
printf("请输入联系人的姓名 年龄 性别 电话号码,家庭住址\n");
scanf("%s%d%s%s%s", Con->data[Con->size].name,
&Con->data[Con->size].age,
Con->data[Con->size].sex,
Con->data[Con->size].tel,
Con->data[Con->size].address);
Con->size++;
printf("添加成功\n");
return;
}
void Delete(Pcon Con)//删除联系人
{
char input[NAME_MAX];
int i = ;
printf("请输入联系人姓名:\n");
scanf("%s", input);
int ret = Find(Con, input);
if (ret != -)
{
for (i = ret; i < Con->size; i++)
{
Con->data[i] = Con->data[i + ]; //将所要删除的元素后面的元素都往前移动 }
Con->size--;
}
else
{
printf("这个联系人不存在!\n");
}
}
void Revise(Pcon Con) //修改联系人
{
char input[NAME_MAX];
printf("请输入联系人姓名:\n");
scanf("%s", input);
int ret = Find(Con, input);
if (ret != -)
{
printf("请输入修改后联系人的姓名,性别,年龄,电话号码,家庭住址\n");
scanf("%s, %s, %d, %s, %s",
Con->data[ret].name,
Con->data[ret].sex,
Con->data[ret].age,
Con->data[ret].tel,
Con->data[ret].address);
printf("修改完成\n");
}
else
{
printf("该联系人不存在\n");
}
}
void Search(Pcon Con)
{
char input[NAME_MAX];
printf("请输入联系人姓名:\n");
scanf("%s", input);
int ret = Find(Con, input);
if (ret != -)
{
printf("%s,%s,%d,%s,%s\n",
Con->data[ret].name,
Con->data[ret].sex,
Con->data[ret].age,
Con->data[ret].tel,
Con->data[ret].address);
}
else
{
printf("该联系人不存在!\n");
}
}
void Display(Pcon Con)
{
int i = ;
while (i < Con->size)
{
printf("%s,%s,%d,%s,%s\n",
Con->data[i].name,
Con->data[i].sex,
Con->data[i].age,
Con->data[i].tel,
Con->data[i].address);
i++;
}
}
void Init(Pcon Con)
{
Con->data = (PerInfo*)malloc(SIZE*sizeof(PerInfo)); //开辟空间
if (Con->data == NULL)
{
printf("out of memory\n");
exit(EXIT_FAILURE);
}
Con->size = ;
Con->capacity = INIT;
Load_Contact(Con);
}
void Save_Contact(Pcon Con) //存储联系人
{
FILE* pfwrite = fopen("contact.dat", "w");
if (pfwrite == NULL)
{
perror("open file for write");
exit(EXIT_FAILURE);
}
for (int i = ; i < Con->size; i++)
{
fwrite(&(Con->data[i]), sizeof(PerInfo), , pfwrite);
}
fclose(pfwrite);
}
void Load_Contact(Pcon Con)//加载联系人
{
FILE* pfread = fopen("contact.dat", "r");
PerInfo tmp = { };
if (pfread == NULL)
{
perror("open file for read");
exit(EXIT_FAILURE);
}
while (fread(&tmp, , sizeof(PerInfo), pfread))
{
judge_full(Con);
Con->data[Con->size] = tmp;
Con->size++;
}
}
void Empty(Pcon Con)//清空联系人
{
Con->size = ;
return;
}
void Sort(Pcon Con) //按照联系人姓名进行排序
{
int flag = ;
for (int i = ; i < Con->size - ; i++) //需要排n-1趟
{
int flag = ;
for (int j = ; j < Con->size - - i; j++) //每趟进行n-1-i次比较
{
if (strcmp(Con->data[j].name, Con->data[j + ].name)>) //按照升序进行排序
{
flag = ;
PerInfo tmp = Con->data[j];
Con->data[j] = Con->data[j + ];
Con->data[j + ] = tmp;
}
}
if (flag == )
{
break;
}
}
}
void Free(Pcon Con)
{
free(Con->data);
Con->data = NULL; }
Test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"AddressList.h"
void Print()
{ printf("**********************************************************\n");
printf("*********1:添加联系人*****2:删除联系人********************\n");
printf("*********3:查找联系人***** 4 : 修改联系人********************\n");
printf("*********5:显示所有联系人***6:排序*************************\n");
printf("*********7:清空联系人********0:退出************************\n");
printf("**********************************************************\n");
}
int main()
{
Contact pcon;
Init(&pcon);
int input;
while ()
{
Print();
printf("选择一个操作:");
scanf("%d", &input);
switch (input)
{
case EXIT:
Save_Contact(&pcon);
Free(&pcon);
exit();
break;
case ADD:
Add(&pcon);
break;
case DEL:
Delete(&pcon);
break;
case SEARCH:
Search(&pcon);
break;
case REVISE:
Revise(&pcon);
break;
case SORT:
Sort(&pcon);
break;
case DISPLAY:
Display(&pcon);
break;
case EMPTY:
Empty(&pcon);
break;
default:
printf("选择错误,请重新选择:\n"); }
}
system("pause");
return ;
}
---恢复内容结束---
简单的通讯录(C语言实现)的更多相关文章
- Python初学者笔记(4)-简单的通讯录
要求: 编写一个简单的通讯录 1.通讯录包含至少包含姓名.电话号码.电子邮箱:2.通讯录的信息能够保存在本地磁盘:3.通讯录查找特定人员的信息:4.通讯录能够修改特定人员的信息:5.通讯录能够删除特定 ...
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...
- iOS学习之Object-C语言简单的通讯录管理系统
用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 * 需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...
- 【Android Demo】简单手机通讯录
Android 系统给我们提供了访问通讯录的接口,通过接口获取通讯录信息.Adapter 与 View 的连接主要依靠 getView 这个方法返回我们需要的自定义 view. ListView 是 ...
- Swift 简单的通讯录
Swift 通讯录实战 1.功能需求 整个项目由三个界面构成:首页面(全部联系人),添加联系人界面和联系人详情界面 整个项目使用纯代码编程 数据处理方面使用一个工具类,处理所有数据的增删改查. 首页由 ...
- 【C++ in Qt5】一个简单的通讯录程序,支持文件存取
https://github.com/shalliestera/AddressBook 使用Qt5完成了一些之前用DevCpp很难做到的事,比如更简单地实现“从文件读取”和“保存到文件”的功能.之前我 ...
- JSON的简单介绍以及C语言的JSON库使用
JSON概述 JSON: JavaScript 对象表示法( JavaScript Object Notation) .是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集. JSON采 ...
- php简单实现通讯录采集,我的第一个php,适合新手
起源于要整理通讯录,原先用的是文件调查,现在学了php,就自己试一下.程序短小精悍,适于学习.有两个文件,bj.html用于显示和采集表单信息.bj.php用于处理数据和反馈结果.突出之处在于可以上传 ...
- Android程序设计-简单手机通讯录
在微信中,手机QQ中你会发现软件读取手机通讯录这个功能,这个功能使得软件更好的与手机联系人绑定,从而达到分享,拨打电话,读取用户信息等操作.下面我们将通过一个demo实现这个功能 首先我们看一下效果图 ...
随机推荐
- jmeter参数化之CSV Data Set Config
在jmeter中,可以用CSV Data Set Config实现参数化. 1.准备参数化数据
- JS中通过call方法实现继承
原文:JS中通过call方法实现继承 讲解都写在注释里面了,有不对的地方请拍砖,谢谢! <html xmlns="http://www.w3.org/1999/xhtml"& ...
- 曲演杂坛--一条DELETE引发的思考
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...
- leetcode[89] Merge Sorted Array
合并两个有序数组,放在A中,A中的空间足够. Given two sorted integer arrays A and B, merge B into A as one sorted array. ...
- 我的Android 4 学习系列之文件、保存状态和首选项
目录 使用Shared Preference 保留简单的应用程序数据 保存回话间的Activity实例数据 管理应用程序首选项和创建Preference Screen 保存并加载文件以及管理本地文件系 ...
- win8安装tfs2010提示未启用iis6.0未启用兼容模式需要静态内容组件
笔者的电脑由于安装TFS2010就提示这个错误,当时网上也没有很好地办法,重装iis组件也不行.如果你同样没有找到更好的办法,建议安装tfs2012,但在vs2010使用tfs2012是无法创建团队项 ...
- Windows平台分布式架构实践负载均衡
Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...
- 为什么使用Ninject?
Ninject 3 学习笔记 一.为什么使用Ninject? 分类: 程序2012-11-10 19:23 2209人阅读 评论(0) 收藏 举报 c#iocNinject框架注入 最近在使用IoC进 ...
- Binder机制,从Java到C (3. ServiceManager in Java)
上一篇 Binder机制,从Java到C (2. IPC in System Service :AMS) 中提到 Application是通过ServiceManager找到了AMS 的servic ...
- java使用maven创建springmvc web项目
创建maven项目,使用maven-archetype-webapp 创建完成后首先是在pom.xml里增加maven的依赖 <dependencies> <dependency&g ...