黑马程序员-c语言-通讯录的实现
来源:互联网 发布:同志手机聊天软件 编辑:程序博客网 时间:2024/05/16 13:03
<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方式打开文件 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"); }
1 0
- 黑马程序员-c语言-通讯录的实现
- 黑马程序员---c语言 通讯录的实现
- 【黑马程序员】C语言—通讯录系统的实现
- 黑马程序员-C语言下的通讯录
- 黑马程序员-c语言通讯录
- 黑马程序员-----C语言学习之通讯录应用的代码实现
- 黑马程序员——C基础---简易通讯录的实现
- 黑马程序员----C语言学习笔记之学习总结《通讯录》程序实现
- 黑马程序员--C语言自学笔记---15C语言版通讯录
- 黑马程序员——c语言综合运用:通讯录
- 黑马程序员——C语言基础---通讯录
- c语言实现----通讯录
- C语言实现通讯录
- C语言实现通讯录
- c语言实现通讯录
- C语言实现通讯录
- 黑马程序员-----------C语言基础-----------C语言实战(C语言版通讯录)
- C语言实现的通讯录例子
- 内存管理
- Git魔法
- 南阳264 国王的魔镜
- Oracle开发人员守则
- TextView显示html图片的方法
- 黑马程序员-c语言-通讯录的实现
- Exploit writing tutorial part1: Stack Based Overflows
- 程序包
- 大数据下的sql语句使用
- 传统企业进军互联网运营是个筐
- Hibernate 入门教程
- 南阳273 字母小游戏
- 黑马程序员——Java集合框架(二)之泛型
- easeljs的基础