通讯录c语言需求分析,C语言实现通讯录系统

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

需求分析:

利用文件读,写的方法

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

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

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

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

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

代码实现:

// main.c

// C语言通讯录实现

//

// Created by Brisinga on 15/10/14.

// Copyright © 2015年 yan. All rights reserved.

//

#include

#include

#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

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

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

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

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

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

fwrite(&contact[i], sizeof(Person),1, fp);

}

}

fclose(fp);

}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
源码下载另见:http://download.csdn.net/detail/laudukang/8341541 1.2 系统功能分析 1.2.1 基本功能 (1)基本信息:姓名、手机号码、电子邮箱、生日、所属组、备注、相片。 (2)工作单位:国家、省份、城市、地址、工作单位、所属部门、职位、邮编、电话、传真。 (3)网络信息:个人主页、即时通信工具及号码、备用邮箱。 (4)家庭资料:国家、省份、城市、地址、邮编、电话。 1.2.2 查询模块 (1)默认显示所有条目。 (2)模糊查询:可以按姓名、电话号码、手机、姓名的汉语拼音的声母或全拼查询。支持模糊查询即输入部分数据后,可以查询出符合条件的全部条目。如:输入“张”,列出所有名字中有“张”的条目;输入“2645”列出电话中有该4个数字的所有条目;输入“xl”,列出声母为该2个字母的所有条目。 (3)指定分组后,列出某分组的所有条目。 说明:查询结果如果有多个条目,应按照姓名排序,并使用姓或姓的第一个汉语拼音的字母分类。 1.2.3 删除和修改功能 查询到一个条目后,可以删除该条目或修改条目内容。 1.2.4 通信录内容的导入和导出 要求能够以CSV格式和vCard格式导入和导出通讯录的全部内容,并能够与主流手机或其他通讯录软件交换数据。 1.2.5通讯录的显示 可以设置在显示查询结果时,一个条目可以显示或不显示哪些内容。 1.2.6通讯录数据的录入 输入并存储新的通讯录数据,输入时如果有同名或同电话号码时,应该给出提示。 1.2.7联系人星标 一键收藏自己联系最多的人,更加方便于查找与管理。 1.2.8手机号码归属地识别 根据录入的手机号码,识别出相应的归属地,如号码“1382840****”会被识别为“广东广州移动”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值