黑马程序员——C基础---简易通讯录的实现

黑马程序员-通讯录 ------- android培训、java培训、期待与您交流! ---------- 这是黑马视频里用c语言实现的一个通讯录,包涵查找联系人,添加联系人,删除联系人等 功能全,代码简单,思路清晰,很适合初学者。 阅读详情

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

复习的时候本以为文件操作这块很简单,没想到写起来比想象中的难,基础尚不牢固,还需努力

#include <stdio.h>
#include <string.h>

//通讯录界面
void face();
//写入文件
void writeToFile();
//添加联系人
void addContact();
//查看联系人
void checkContact();
//搜索联系人
void searchContact();
//修改联系人
void changeContact();
//删除联系人
void deleteContact();

//联系人结构体
typedef struct {
    char name[21];
    char telNum[21];
}LXR;

//通讯录临时存储表(上限100个)
LXR List[100];
//通讯录联系人个数
int contactCount=0;

//文件保存地址
char *path = "/Users/Zxx/Desktop/test/List.data";
int main(int argc, const char * argv[]) {
    
    int cho = 0;
    
    while (1) {
        face();
        scanf("%d",&cho);
        if (cho>6||cho<1) {
            printf("选择有误请重新选择\n");
        }else
            switch (cho) {
                
                case 1:
                    addContact();
                    break;
                    
                case 2:
                    deleteContact();
                    break;
                    
                case 3:
                    changeContact();
                    break;
                    
                case 4:
                    checkContact();
                    break;
                    
                case 5:
                    searchContact();
                    break;
                    
                case 6:
                    return 0;
                    break;
                    
                default:
                    break;
            }
    }
    return 0;
}

/**
 *  绘制界面
 */
void face(){

    printf("***************************\n");
    printf("       欢迎使用通讯录        \n");
    printf("       1、添加联系人         \n");
    printf("       2、删除联系人         \n");
    printf("       3、修改联系人         \n");
    printf("       4、查看所有联系人      \n");
    printf("       5、搜索联系人         \n");
    printf("       6、退出通讯录         \n");
    printf("***************************\n");
    
}

/**
 *  写入通讯录
 */
void writeToFile(){
    
    FILE *fp = fopen(path, "wb");
    //如果打开成功则先将联系人个数写入文件头部,在将所有练习人写入文件
    if (fp!=NULL) {
        fwrite(&contactCount, sizeof(contactCount), 1, fp);
        for (int i=0; i<contactCount; i++) {
            fwrite(&List[i], sizeof(LXR), 1, fp);
        }
    }else{
        printf("文件打开失败,按任意键退出\n");
        getchar();
        return;
    }
    fclose(fp);
}

/**
 *  添加联系人
 */
void addContact(){
    
    printf("您选择添加联系人,请输入姓名\n");
    scanf("%s",List[contactCount].name);
    printf("请输入号码\n");
    scanf("%s",List[contactCount].telNum);
    //添加联系人,则通讯录联系人个数+1
    contactCount++;
    writeToFile();
    printf("联系人添加成功\n");
}

/**
 *  查看联系人
 */
void checkContact(){
    
    FILE *check = fopen(path, "r");
    printf("编号\t姓名\t号码\n");
    if (check==NULL) {
        printf("通讯录为空,请先添加联系人\n");
    }else{
        //如果通讯录不为空,则先读取联系人个数,再逐个读取联系人并输出
        fread(&contactCount, sizeof(contactCount), 1, check);
        for (int i=1;i<=contactCount;i++) {
            LXR temp;
            fread(&temp, sizeof(LXR), 1, check);
            printf("%d\t%s\t%s\n",i,temp.name,temp.telNum);
        }
    }
    fclose(check);
}

/**
 *  搜索联系人
 */
void searchContact(){

    printf("请输入你要搜索的联系人姓名或者号码\n");
    char ch[21];
    scanf("%s",ch);
    int flag=1;
    FILE *check = fopen(path, "r");
    //读取通讯录联系人个数
    fread(&contactCount, sizeof(contactCount), 1, check);
    if (check!=NULL) {
        //循环遍历通讯录
        for (int i=0;i<contactCount;i++) {
            LXR temp;
            fread(&temp, sizeof(LXR), 1, check);
            //将接收的字符串与每个联系人的姓名和电话号码分别比较,若有一个符合,则输出该联系人信息
            if(!strcmp(ch, temp.name)||!strcmp(ch, temp.telNum)){
                printf("已找到你要查找的人\n姓名\t号码\n%s\t%s\n",temp.name,temp.telNum);
                flag = 0;
            }
        }
    }else
        printf("你的通讯录为空,请先添加联系人\n");
    fclose(check);
    if (flag) {
        printf("您的通讯录里没有此人\n");
    }
}

/**
 *  修改联系人
 */
void changeContact(){

    checkContact();
    FILE *change = fopen(path, "rb+");
    
    if (change!=NULL) {
        
        fread(&contactCount, sizeof(contactCount), 1, change);
        printf("请选择你要修改的联系人\n");
        int a,flag=0;
        LXR temp;
        scanf("%d",&a);
        
        if (a<1||a>contactCount) {
            printf("选择有误,请从新选择\n");
        }else{
            printf("请输入姓名\n");
            scanf("%s",temp.name);
            printf("请输入电话号码\n");
            scanf("%s",temp.telNum);
            //读取所有联系人的信息
            for (int i=0;i<=contactCount;i++) {
                fread(&List[i], sizeof(LXR), 1, change);
            }
            printf("你要用\n%s\t%s\n覆盖\n%s\t%s\n1.确认 .2取消\n",temp.name,temp.telNum,List[a-1].name,List[a-1].telNum);
            scanf("%d",&flag);
            if (flag==1) {
                //将新信息覆盖到旧的信息上
                List[a-1] = temp;
                writeToFile();
            }
        }
    }
    fclose(change);
}

/**
 *  删除联系人
 */
void deleteContact(){

    checkContact();
    printf("请选择你要删除的联系人\n");
    int a,flag = 2;
    scanf("%d",&a);
    
    FILE *delete = fopen(path, "rb+");
    if (delete!=NULL) {
        fread(&contactCount, sizeof(contactCount), 1, delete);
        for (int i=0;i<=contactCount;i++) {
            fread(&List[i], sizeof(LXR), 1, delete);
        }
        printf("你要删除的是\n%s\t%s\n是否确认删除?\n1.删除\t2.取消\n",List[a-1].name,List[a-1].telNum);
        scanf("%d",&flag);
        if (flag == 1) {
            //将要删除的联系人后面的所有联系人整体前移一位,然后联系人总数减一
            for (int j=a; j<contactCount; j++) {
                List[j-1]=List[j];
            }
            contactCount--;
            writeToFile();
        }
    }
    fclose(delete);
}


C++通讯录管理系统 通讯录管理系统 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退出当前使用的通讯录 2、创建项目 创建项目步骤如下: 阅读详情

相关推荐

黑马程序员 2016年 C基础讲义

2016年黑马程序员视频对应的讲义,有需要的可以下载,可以私信联系我找对应的视频,这个只是文档

黑马程序员C++课程基础部分大作业:通讯录管理系统

首先展示一下完整代码,之后再分部分讲解每个功能的具体代码含义。

ZuHaohua的博客 870

传智播客旗下黑马程序员c++视频课程内部讲义

传智播客旗下黑马程序员c++视频课程内部讲义 就是上课时老师翻阅的那个讲义

黑马程序员01-通讯录管理系统

通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人∶向通讯录中添加新人,信息包括((姓名、性别、年龄、联系电话、家庭住址)最多记录1000人。显示联系人:显示通讯录中所有联系人信息。删除联系人:按照姓名进行删除指定联系人。查找联系人:按照姓名查看指定联系人信息。修改联系人:按照姓名重新修改指定联系人。清空联系人:清空通讯录中所有信息。退出通讯录:退出当前使用的通讯录。

m0_61913508的博客 479

黑马程序员匠心之作 C++教程_第2阶段实战-通讯录管理讲义.rar

黑马程序员匠心之作 C++教程讲义,适合初学者,视频教程全程无废话

黑马C++学习笔记-C语言部分 通讯录管理系统

系统功能: 1、添加、删除、查找以及修改联系人 2、显示所有联系人 3、清空所有联系人 4、退出通讯录系统

C++学习(黑马程序员)之通讯录管理系统(附完整代码)【代码实战】

利用C++来实现一个通讯录管理系统涵盖了从需求分析到功能实现的全过程。系统包括以下主要功能:添加联系人、显示联系人、删除联系人、查找联系人、修改联系人、清空联系人信息,以及退出程序。附有完整代码(三百多行),可以运行,注释什么的都很详细,结合了一些知识点讲解

学习中 1930

USB3.0一致性测试方案

为各测试项目具体测试结果包括脉冲串突发时间、脉冲串重复时间、时钟周期以及眼图等完整USB3.0测试项目,工程师可以看到各项测试的具体结果方便观察。RIGOL 提供了一套完善的工具,包括数字示波器、专业的测试夹具以及全自动一致性测试软件,使得USB 3.0设备设计人员能够高效精确地进行信号捕捉、测试与分析。报告第二部分测试摘要,在此可以看到USB3.0测试所有测试项目,并且可以观看到测试是否正常,可以帮助工程师更好的判断测试结果。,以简化下载、存储以及对于多媒体的大量内容的共享。

2409_87378937的博客 2531

[C++项目] 通讯录管理系统

文章目录通讯录管理系统1、系统需求2、创建项目2.1 创建项目2.2添加文件3、菜单功能4、退出功能5、添加联系人5.1 设计联系人结构体5.2 设计通讯录结构体5.3 main函数中创建通讯录5.4 封装添加联系人函数5.5 测试添加联系人功能6、显示联系人6.1 封装显示联系人函数6.2 测试显示联系人功能7、删除联系人7.1 封装检测联系人是否存在7.2 封装删除联系人函数7.3 测试删除联系人功能8、查找联系人8.1 封装查找联系人函数8.2 测试查找指定联系人9、修改联系人9.1 封装修改联系人

yegeli的博客 770

用VSCode搭建Vue.js开发环境及Vue.js第一个应用

用VSCode搭建Vue.js开发环境及Vue.js第一个应用

m0_61961937的博客 1万+

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8270

黑马程序员---c语言 通讯录的实现

经过半个月的学习,c语言告一段落,老师领着大家做了个有关通讯录的项目,由于要照顾基础比较薄弱的同学,做的比较简单粗糙,为了让通讯录有实用价值,自己改造了一晚上,终于把它改造的简单易懂,模块性强,有实用的通讯录。 通讯录实现的思路如下: 1 制作通讯录的操作界面 (1)打印

yanyanren1的博客 377

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1518

黑马程序员----C语言学习笔记之学习总结《通讯录》程序实现

《通讯录》功能展示 跟着视频自学了一个星期C语言,今天终于搞定了,花了四个小时终于把这个小程序搞定了,也许还有很多bug,不过目前重大bug都搞定了,希望大家多多指出我的错误,或者不合适的地方,共同学习 1、操作界面及框架 1)引入头文件 2)进行必要地宏定义 3)定义文件名称变量、联系人数组、联系人结构体 4)定义函数、并进行函数声明 5)编写循环控

chunhuayun的专栏 906

Winget安装失败:深入解析InternetOpenUrl()错误0x80072efd的根源与修复

本文深入解析了使用Winget时遇到的InternetOpenUrl()错误0x80072efd。该错误通常源于DNS解析失败、网络代理配置不当或系统安全策略冲突,导致无法连接软件源。文章提供了从刷新DNS、修改Hosts文件到配置代理等一套完整的诊断与修复方案,帮助开发者快速解决安装障碍,恢复Winget的正常使用。

weixin_29290259的博客 935

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2104

黑马程序员-----C语言学习之通讯录应用的代码实现

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4

wxh794708907的博客 629

STM32 IIC温湿度传感器(STH45)实验

精度 ΔRH = ±1.0 %RH, ΔT = ±0.1 °C• 平均电流:0.4 μA,空闲电流:80 nA• I2C FM、CRC 校验和、乘法。I2C 地址。• 专利保护选项 [1]、PTFE 膜和可拆卸保护盖• 工作范围:0 …100 %相对湿度,−40…125 摄氏度• 在冷凝环境中功能齐全• 动力加热器,真正的NIST可追溯性• JEDEC JESD47 认证 • 符合 ISO 17025 : 2017 的传感器专用校准证书,3 点温度校准。

baidu_34971492的博客 3075

C++通讯录管理系统项目

学习B站上黑马程序员C++视频做出来的好玩的小项目。编译环境:DEV C++

m0_70482070的博客 215

华为OD机试真题 新系统2026-04-01 C语言 实现【计算数列位置N的值】

1、输入M、N两个数,则按照以下规则形成一个数列; 2、数列的前M个元素的值为1到M; 3、从M+1个元素开始,计算的逻辑为: 如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;

MISAYAONE的博客 591

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

黑马程序员——iOS核心基础(15-16天)-黑马程序员-专题视频课程

C语言基础15-16天。其中包括通讯录项目实战。

heima_cxy的博客 317

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

黑马程序员C++学习总结【基础篇】

附:参考自哔哩哔哩黑马程序员所做的学习笔记

小幸运召唤师的博客 1322

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

黑马程序员——C基础之通讯录

#include #include #define N 100 #define NAMELEN 22 #define NUMLEN 12 typedef struct{     char name[NAMELEN];     char telNum[NUMLEN]; }Person; Person contacts[

xiaohei3576的博客 856

黑马程序员——C语言基础---通讯录

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------ 一、功能分析及实现步骤 0、初始化 /** 初始化方法,用于初始化数据 思路: 1)尝试性的读取文件 2)如果成功了,说明文件存在,则读取文件内容 3)不成功,说明文件不存在, 1)创建文件 2)写入联系人数量 */ 1、添加联系人 /**

lhp_heima的博客 2021

C++实现简单的通讯录管理系统

该通讯录管理系统仅使用C/C++基础语法来实现通过提示对通讯录进行添加,查看,删除,查找,修改联系人以及清空通讯录功能,十分简单。适合用来对C/C++基础知识的巩固。 下面为代码片: #include<iostream> #include<string> using namespace std; #define MAX 100 //通讯录最大人数 void showMenu(); void addPerson(struct addressList* adl); void sh

weixin_43628768的博客 2996

黑马程序员 C++ 通讯录管理系统 学习记录

通讯录管理系统 文章目录1.系统需求2、创建项目2.1 创建项目2.2添加文件3、菜单功能4、退出功能5、添加联系人5.1 设计联系人结构体5.2 设计通讯录结构体5.3 main函数中创建通讯录5.4 封装添加联系人函数5.5 测试添加联系人功能6、显示联系人6.1 封装显示联系人函数6.2 测试显示联系人功能7、删除联系人7.1 封装检测联系人是否存在7.2 封装删除联系人函数7.3 测试删除联系人功能8、查找联系人8.1 封装查找联系人函数8.2 测试查找指定联系人9、修改联系人9.1 封装修改联系

张时贰的博客 1266
上一篇: 黑马程序员——C基础---圆括号的使用总结
下一篇: 黑马程序员——OC基础---类方法的总结
abuzzworld
博客等级 码龄18年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值