本文实例为大家分享了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("%dt%st%sn",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,电话号码为:%sn",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");
}










