C语言通讯录实例分享

本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下

main.c文件:

//

// main.c

// c语言通讯录

//

// Created by stevenchang on 9/6/15.

// Copyright (c) 2015 cz. All rights reserved.

//

/**

1.添加联系人

2.删除联系人

3.更新联系人

4.显示所有联系人

5.查找联系人

6.退出系统

*/

#include <stdio.h>

int main(int argc, const char * argv[]) {

//程序的初始化

initContacts();

while(1) {

int flag = 0;

printf("*************C语言通讯录*************\n");

printf("************1.添加用户***************\n");

printf("************2.删除用户***************\n");

printf("************3.更新用户***************\n");

printf("************4.查找用户***************\n");

printf("************5.显示所有用户************\n");

printf("************6.退出系统***************\n");

printf("************************************\n");

printf("请输入1-6的功能编号 :\n");

scanf("%d",&flag);

//判断编号是否合法

validateNum(flag, 1, 6);

switch (flag) {

case 1:

addContact(); //添加用户

break;

case 2:

deleteContact(); //删除用户

break;

case 3:

updateContact(); //更新用户

break;

case 4:

searchContact(); //查找用户

break;

case 5:

listContact(); //显示所有用户

break;

case 6:

printf("系统正在退出!\n");

printf("成功退出系统!\n");

return 0;

break;

default:

break;

}

}

return 0;

}

MyFile.c文件:

//

// MyFile.c

// c语言通讯录

//

// Created by stevenchang on 9/6/15.

// Copyright (c) 2015 cz. All rights reserved.

//

#include "MyFile.h"

//**************函数的实现**********************//

/**

* 添加联系人

*/

void addContact() {

int flag = 0;

printf("您选择的是添加联系人,请按操作进行!\n");

printf("请输入用户姓名(*注意联系人姓名中间不能有空格):\n");

scanf("%s",contacts[totalContactsCount].name);

printf("请输入电话(*注意联系人电话中间不能有空格): \n");

scanf("%s",contacts[totalContactsCount].tel);

printf("是否确认添加!1:是 0:否\n");

scanf("%d",&flag);

if (flag) {

//联系人个数加1

totalContactsCount++;

//将联系人信息保存到文件中

writeFile();

}

printf("已经放弃添加!\n");

return ;

}

/**

* 删除联系人

*/

void deleteContact() {

int no;

printf("您选择的是删除联系人,请按操作进行!\n");

printf("请输入要删除的编号:\n");

scanf("%d",&no);

//判断输入的编号是否合法

if (!validateNum(no, 1, totalContactsCount)) {

printf("您输入的编号不合法!\n");

return ;

}

//合法

//如果删除的是最后一个元素

if (no == totalContactsCount) {

totalContactsCount--;

} else {

//如果删除的不是最后一个元素

for (int i = no; i < totalContactsCount; i++) {

contacts[no-1] = contacts[no]; //元素的移动和覆盖

}

totalContactsCount--;

}

//同步文件

writeFile();

}

/**

* 更新联系人

*/

void updateContact() {

int no;

char newName[NAMELENGTH];

char newTel[TELLENGTH];

printf("您选择的是更新联系人,请按操作进行!\n");

printf("请输入要修改的联系人编号:\n");

scanf("%d",&no);

//判断编号是否合法

if (!validateNum(no, 1, totalContactsCount)) {

return ;

}

//合法

printf("请重新输入用户名:\n");

scanf("%s",newName);

printf("请重新输入电话号码\n");

scanf("%s",newTel);

strcpy(contacts[no-1].name, newName);

strcpy(contacts[no-1].tel, newTel);

//写入文件

writeFile();

}

/**

* 显示所有联系人

*/

void listContact() {

printf("您选择的是显示所有联系人,联系人如下!\n");

if (totalContactsCount > 0) {

printf("序号\t姓名\t电话\n");

for (int i = 0 ; i < totalContactsCount; i++) {

printf("%d\t%s\t%s\n",i+1,contacts[i].name, contacts[i].tel);

}

} else {

printf("联系人为空,请添加联系人!\n");

return ;

}

}

/**

* 查找联系人

*/

void searchContact() {

printf("您选择的是查找联系人,请按操作进行!\n");

char searchName[NAMELENGTH];

printf("请输入要查找的联系人姓名:\n");

scanf("%s",searchName);

for (int i = 0 ; i < totalContactsCount; i++) {

if (strcmp(searchName, contacts[i].name)==0) { //说明相同

printf("联系人姓名为:%s,电话号码为:%s\n",contacts[i].name,contacts[i].tel);

return ;

}

if (i == totalContactsCount-1) {

printf("此联系人不存在!\n");

}

}

}

/**

* 通讯录的初始化

*/

void initContacts() {

printf("通讯录正在初始化!\n");

FILE *fp = fopen(filePath, "r");

if (fp!=NULL) { //读取文件成功

//读取联系人的个数

fread(&totalContactsCount, sizeof(totalContactsCount), 1, fp);

//读取每个联系人

for (int i = 0; i < totalContactsCount; i++) {

//读取联系人数据,到联系人数组中

fread(&contacts[i], sizeof(Person), 1, fp);

}

} else {

//读取文件失败

//创建文件

fp = fopen(filePath, "wb");

//写入联系人的个数

fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);

printf("通讯录文件创建成功!\n");

}

//关闭文件指针

fclose(fp);

printf("通讯录初始化成功!\n");

}

/**

* 判断功能编号是否合法 1:合法 0:非法

*/

int validateNum(int num, int min, int max) {

if (num < min || num > max) {

printf("输入的功能编号不正确,请重新输入!\n");

return 0;

}

return 1;

}

/**

*将联系人写入文件

*/

void writeFile() {

//以二进制文件打开文件

FILE *fp = fopen(filePath, "wb");

if (fp != NULL) {

//写入联系人个数

fwrite(&totalContactsCount, sizeof(totalContactsCount), 1, fp);

//写入每个联系人个数

for (int i = 0; i < totalContactsCount; i++) {

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

}

}

fclose(fp);

printf("文件更新成功\n");

}

MyFile.h文件:

//

// MyFile.h

// c语言通讯录

//

// Created by stevenchang on 9/6/15.

// Copyright (c) 2015 cz. All rights reserved.

//

#ifndef __c_______MyFile__

#define __c_______MyFile__

#include <stdio.h>

#include <string.h>

#define N 100 //宏定义一个通讯录的容量

#define NAMELENGTH 22 //宏定义一个名字的长度

#define TELLENGTH 12 //宏定义一个电话号码的长度

//********************函数的声明*********************//

void addContact(); //添加联系人

void deleteContact(); //删除联系人

void updateContact(); //更新联系人

void listContact(); //显示所有联系人

void searchContact(); //查找联系人

void initContacts(); //通讯录的初始化

int validateNum(int num, int min, int max); //判断功能编号是否合法 1:合法 0:非法

void writeFile(); //将联系人写入文件

typedef struct Person { //定义一个结构体

char name[NAMELENGTH]; //定义姓名数组

char tel[TELLENGTH]; //定义结构体数组

} Person;

//定义文件路径

char *filePath = "telData.data";

int totalContactsCount = 0;

Person contacts[N]; //定义Person结构体数组

#endif /* defined(__c_______MyFile__) */

以上是 C语言通讯录实例分享 的全部内容, 来源链接: utcz.com/z/319271.html

回到顶部