C语言通讯录 C语言通讯录实例分享
StevenLoveMaggie 人气:0想了解C语言通讯录实例讲解的相关内容吗,StevenLoveMaggie在本文为您仔细讲解C语言通讯录的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点: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__) */
加载全部内容