黑马程序员-c语言-通讯录的实现
2015-06-28 14:30
363 查看
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"> ------</span><a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none; font-family: Arial; font-size: 14px; line-height: 26px;">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!</a><span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"> -------</span>
// // main.c // telNum // // Created by leon on 15/6/27. // Copyright (c) 2015年 Leon. All rights reserved. // #include <stdio.h> #include <string.h> /*************** 宏定义 ***************/ #define N 100 //定义宏定义 #define NAMELEN 22 #define NUMLEN 12 /*************** 定义部分 ***************/ //定义联系人的结构体 typedef struct{ //联系人 char name[NAMELEN]; //电话号码 char telNum[NUMLEN]; }Person; //存储所有的联系人,联系人的数组 Person contacts[100]; //定义联系人的个数 int totalContactCount=0; //接受用户输入烦人编号 int fno; //定义数据文件保存的位置 char *filePath="telbook.data"; /*************** 函数的声明 ***************/ int validateInput(int num,int min, int max); void init(); void doAdd(); void doDelete(); void doUpdate(); void doList(); void doSearchByName(); void writeFile(); int main (int argc,const char * argv[]) { init(); printf("通讯录初始化完成:\n"); while(1){ printf("\n"); //软件的界面显示出来 printf("**************************\n"); printf("******欢迎使用通讯录******\n"); printf("******1、添加联系人 ******\n"); printf("******2、删除联系人 ******\n"); printf("******3、修改联系人 ******\n"); printf("******4、查看所有联系人 **\n"); printf("******5、搜索联系人 ******\n"); printf("******6、退出系统 ********\n"); printf("**************************\n\n"); //提示用户选择一个序号 printf("请选择1-6之间的功能编号:\n"); scanf("%d",&fno); //判断编号是否合法 validateInput(fno,1,6); switch(fno) { case 1: //执行添加 doAdd(); break; case 2: //执行删除 doDelete(); break; case 3: //执行修改 doUpdate(); break; case 4: //执行查看 doList(); break; case 5: //执行搜索 doSearchByName(); break; case 6: //执行退出 printf("系统正在退出...\n"); printf("系统已退出\n"); return 0; break; default:break; } } } int validateInput(int num,int min, int max){ if(num<min || num>max){ printf("非法的输入!"); return 1; } return 0; } //添加联系人 /* 思路: 1、提示用户输入姓名和电话号码 2、接受用户输入的内容 3、保存到联系人数组 4、写入到文件中 */ void doAdd(){ printf("您选择的是添加联系人,请按提示操作:\n"); // 1、提示用户输入姓名 printf("请输入联系人姓名:(*注意联系人姓名中间不能有空格)\n"); //totalContactCount = 0 // 2、接收用联系人 scanf("%s",contacts[totalContactCount].name); // 3、提示用户输入电话号码 printf("请输入联系人电话:(*注意联系人电话号码中间不能有空格)\n"); // 4、接受电话号码 scanf("%s",contacts[totalContactCount].telNum); // 5、确认添加 int flag; printf("你确认要添加数据吗?1.确认 0.取消\n"); scanf("%d",&flag); if(flag){ // 6、联系人的个数+1 totalContactCount ++; // 7、把联系人信息写入文件中 writeFile(); } } //删除联系人 /* 思路: 1、让用户输入要删除的数据的编号 2.判断编号再次是否合法 3、让用户再次确认删除 4、开始删除数组元素 5、删除文件内容 */ void doDelete(){ printf("您选择的是删除联系人,请按提示操作:\n"); doList(); // 1、让用户输入要删除的数据的编号 int no; printf("请输入要删除的联系人的编号:\n"); scanf("%d",&no); // 2.判断编号再次是否合法(编号不能大于联系人个数) if(validateInput(no,1,totalContactCount)){ return ; } // 3、让用户再次确认删除 int flag; printf("删除联系人后,数据将无法恢复,你确认要删除吗?1.确认 0.取消\n"); scanf("%d",&flag); if(flag){ // 4、开始删除数组元素 // 1)删除的元素正好是数组的最后一个元素 if(no == totalContactCount){ totalContactCount--; }else{ // 只需要让联系人个数-1 // 2)如果删除的元素不是数组的最后一个元素 for(int i=no;i<totalContactCount;i++){ //元素的移动覆盖 contacts[no-1] = contacts[no]; } totalContactCount --; } // 联系人数量-1 // 5、同步更新内容 printf("数据更新成功"); } } //修改联系人 /* 思路: 1、提示输入要修改的联系人编号 2、判断编号是否合法 3、请用户输入新的姓名、电话 4、请用户再次确认修改 5、开始修改用户信息 6、更新到文件中 */ void doUpdate(){ printf("您选择的是联系修改人,请按提示操作:\n"); doList(); // 1、让用户输入要删除的数据的编号 int no; printf("请输入要删除的联系人的编号:\n"); scanf("%d",&no); // 2.判断编号再次是否合法(编号不能大于联系人个数) if(validateInput(no,1,totalContactCount)){ return ; } // 3、请用户输入新的姓名、电话 char name1[NAMELEN]; char tel[NUMLEN]; printf("请输入新的姓名"); scanf("%s",name1); printf("请输入新的电话\n"); scanf("%s",tel); // 4、请用户再次确认修改 int flag; printf("确认将永久修改信息,你确认修改吗?1.确定 0.取消\n"); if(flag){ // 5、开始修改用户信息 strcpy(contacts[no-1].name,name1); strcpy(contacts[no-1].telNum,tel); // 6、写入到文件中 writeFile(); } } //显示所有联系人 /* 思路: 前提:系统已经完成了初始化工作(如果文件存在则读取数据) 1、首先做一个判断 totalContactCount == 0 //表示没有联系人 2、如果不等于0 开始遍历,并且输出联系人的信息 */ void doList(){ printf("您选择的是查看联系人,联系人如下:\n"); //判断通讯录是否为空 if(totalContactCount == 0){ printf("您的通讯录为空,请添加联系人"); } else{ //输出格式 printf("编号\t 姓名\t 电话\t \n"); //遍历联系人数组 for(int i=0;i<totalContactCount;i++){ printf("%d\t %s\t %s\t \n",i+1,contacts[i].name,contacts[i].telNum); } } } //搜索联系人 /* 思路:根据姓名查找联系人 1、提示用户输入要查找的人的姓名 2、遍历联系人数组,查找有没有这个人 3、查找到了,把电话号码显示出来 4、没有查找到 ,提示没有这个联系人 */ void doSearchByName(){ printf("您选择的是搜索联系人,请按提示操作:\n"); char name[NAMELEN]; // 1、提示用户输入要查找的人的姓名 printf("请输入要查找的用户名:\n"); scanf("%s",name); // 2、遍历联系人数组,查找有没有这个人 for(int i=0;i<totalContactCount;i++){ //1)输入的姓名和cintacts[i].name比较 if(strcmp(name,contacts[i].name)==0){ //2)打印出姓名相应的电话号码 printf("您搜索的联系人%s的电话号码是:%s\n",name,contacts[i].telNum); break;//循环停止 } // 3、没有查找到 ,提示没有这个联系人 if(i==totalContactCount){ printf("对不起,查无此人!\n"); } } } //通讯录初始化 /* 1、尝试性读取数据文件 2、如果读取成功,说明文件存在 如果存在,要读取联系人数据,保存到联系人数组 contacts 3、如果读取失败,说明我们是第一次使用通讯录 如果是第一次使用 1)创建联系人数据文件 2)把当前联系人的个数写入到文件中 totalContactCount */ void init(){ //定义文件指针,并且打开文件 FILE *fp=fopen(filePath,"r"); if(fp!=NULL){ //第一步:读取联系人的个数 fread(&totalContactCount,sizeof(totalContactCount),1,fp); //第二部:读取每一个联系人 for(int i=0; i<totalContactCount;i++){ fread(&contacts[i],sizeof(Person),1,fp); } } else{ //创建文件 fp=fopen(filePath,"wb"); //写入联系人 fwrite(&totalContactCount,sizeof(totalContactCount),1,fp); printf("通讯录文件创建成功~\n"); } //关闭文件指针 fclose(fp); } //写数据到文件中 /* 思路: 1、以wb方式打开文件 2、先写联系人个数 3、写每个联系人数据 */ void writeFile(){ //1、 以wb方式打开文件 9f22 FILE *fp = fopen(filePath,"wb"); // 2、先写联系人个数 fwrite(&totalContactCount,sizeof(totalContactCount),1,fp); //3、写每个联系人数据 for(int i=0;i<totalContactCount;i++){ //每次都写入一个数组的元素 fwrite(&contacts[i],sizeof(Person),1,fp); } printf("文件更新成功\n"); }
相关文章推荐
- Android获取手机通讯录、sim卡联系人及调用拨号界面方法
- Android通讯录开发之删除功能的实现方法
- extmail全局地址本生成脚本
- AH名片簿客户通讯录管理软件V3.78
- [应用模板]HTML5+Phonegap通讯录
- lync 通讯录
- 让IT工作者过度劳累的13个坏习惯
- 通讯录相关(编辑)
- android手机应用程序操作手机通讯录的联系人
- IOS打电话的3种方法
- Android跳转微信朋友圈与聊天界面
- Android备份、还原通讯录和短信
- 数据结构课程设计
- Android手机通讯录应用
- android查询通话记录小结
- 用struts2 完成一个简单的通讯录,实现增删改查,分页,文件上传(头像),表单验证(两种方法)
- 对360通讯录的反编译分析
- 无秘
- 获得通讯录中联系人的所有属性
- 恢复微信通讯录的方法有哪些