字典管理通讯录的增删改查分组

OC试题 ——通讯录(AddressBook) 要求描述:⽤用OC语⾔言完成简易通讯录(实现增删改查)功 能. (注:使⽤用MRC) ⼀一、功能描述: main函数中通过使⽤用Person类和AddressBook类,创建对象、调⽤用⽅方法,实现以下8个功能 : 中.
 话:456); 1).使⽤用便利构造器创建四个Person类的实例(联系⼈人). 姓名:Lucy 性别:⼥女 电话:123 阅读详情
//
//  AddressContact.h
//  OCHomeWorkSet
//
//  Created by lanouhn on 14-8-8.
//  Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface AddressContact : NSObject {
    NSString *_name;//姓名
    NSString *_gender;//性别
    NSString *_phoneNumber;//电话号码
    NSString *_address;//住址
    NSString *_groupName;//分组名称
    NSInteger _age;//年龄
}
//自定义初始化方法
- (id)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber;
//显示联系人信息
- (NSString *)description;
//setter
- (void)name:(NSString *)name;
- (void)gender:(NSString *)gender;
- (void)phoneNumber:(NSString *)phoneNumber;
- (void)address:(NSString *)address;
- (void)groupName:(NSString *)groupName;
//getter
- (NSString *)name;
- (NSString *)gender;
- (NSString *)phoneNumber;
- (NSString *)address;
- (NSString *)groupName;


@end
//
//  AddressContact.m
//  OCHomeWorkSet
//
//  Created by lanouhn on 14-8-8.
//  Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//

#import "AddressContact.h"

@implementation AddressContact
//自定义初始化方法
- (id)initWithName:(NSString *)name phoneNumber:(NSString *)phoneNumber {
    self = [super init];
    if (self) {
        _name = name;
        _phoneNumber = phoneNumber;
    }
    return self;
}
//显示联系人信息
- (NSString *)description
{
    return [NSString stringWithFormat:@"name:%@, phoneNumber:%@", _name, _phoneNumber];
}
//setter
- (void)name:(NSString *)name {
    _name = name;
}
- (void)gender:(NSString *)gender {
    _gender = gender;
}
- (void)phoneNumber:(NSString *)phoneNumber {
    _phoneNumber = phoneNumber;
}
- (void)address:(NSString *)address {
    _address = address;
}
- (void)groupName:(NSString *)groupName {
    _groupName = groupName;
}
//getter
- (NSString *)name {
    return _name;
}
- (NSString *)gender {
    return _gender;
}
- (NSString *)phoneNumber {
    return _phoneNumber;
}
- (NSString *)address {
    return _address;
}
- (NSString *)groupName {
    return _groupName;
}

@end
//
//  AddressBook.h
//  OCHomeWorkSet
//
//  Created by lanouhn on 14-8-8.
//  Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AddressContact.h"
@interface AddressBook : NSObject
//添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组
- (void)addAddressContact:(AddressContact *)addressContact dic:(NSMutableDictionary *)dic;
//从通讯录中根据电话号码搜索联系人
- (void)searchAddressContact:(NSString *)tempPhoneNumber dic:(NSMutableDictionary *)dic;
//根据姓名删除某个联系人
- (void)removeAddressContactByName:(NSString *)tempName dic:(NSMutableDictionary *)dic;
//删除某个分组的全部联系人
- (void)removeAddressContactByGroupName:(NSString *)tempGroupName dic:(NSMutableDictionary *)dic;
@end
//
//  AddressBook.m
//  OCHomeWorkSet
//
//  Created by lanouhn on 14-8-8.
//  Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//

#import "AddressBook.h"

@implementation AddressBook
//添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组
- (void)addAddressContact:(AddressContact *)addressContact dic:(NSMutableDictionary *)dic {
    if ([[addressContact name] isEqualToString:@""] || [[addressContact phoneNumber] isEqualToString:@""]) {
        NSLog(@"添加失败");
    } else {
        unichar c = [[addressContact name] characterAtIndex:0];
        NSString *strKey = [NSString stringWithFormat:@"%c", c];
        [[dic objectForKey:strKey] addObject:addressContact];
        NSLog(@"添加%@成功", [addressContact name]);
    }
}
//从通讯录中根据电话号码搜索联系人
- (void)searchAddressContact:(NSString *)tempPhoneNumber dic:(NSMutableDictionary *)dic {
    for (NSString *key in dic) {
        NSMutableArray *arr = [dic objectForKey:key];
        for (AddressContact *addressContact in arr) {
            if ([[addressContact phoneNumber] isEqualToString: tempPhoneNumber]) {
                NSLog(@"%@", addressContact);
            }
        }
    }
}
//根据姓名删除某个联系人
- (void)removeAddressContactByName:(NSString *)tempName dic:(NSMutableDictionary *)dic {
    for (NSString *key in dic) {
        NSMutableArray *arr = [dic objectForKey:key];
        NSArray *tempArr = [NSArray arrayWithArray:arr];
        for (AddressContact *addressContact in tempArr) {
            if ([[addressContact name] isEqualToString: tempName]) {
                [arr removeObject:addressContact];
                NSLog(@"删除联系人%@成功",tempName);
            }
        }
    }
}
//删除某个分组的全部联系人
- (void)removeAddressContactByGroupName:(NSString *)tempGroupName dic:(NSMutableDictionary *)dic {
    NSDictionary *tempdic = [NSDictionary dictionaryWithDictionary:dic];
    for (NSString *key in tempdic) {
        if ([key isEqualToString: tempGroupName]) {
            [[dic objectForKey:key] removeAllObjects];
        }
    }
    NSLog(@"删除%@分组全部联系人成功", tempGroupName);
}
@end
//
//  main.m
//  OCHomeWorkSet
//
//  Created by lanouhn on 14-8-8.
//  Copyright (c) 2014年 vaercly@163.com 陈聪雷. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "AddressContact.h"
#import "AddressBook.h"
#define kWork 4
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        //创建联系人
        AddressContact *wangYi = [[AddressContact alloc] initWithName:@"WangYi" phoneNumber:@"15036894675"];
        AddressContact *songEr = [[AddressContact alloc] initWithName:@"SongEr" phoneNumber:@"15569894675"];
        AddressContact *zhangSan = [[AddressContact alloc] initWithName:@"ZhangSan" phoneNumber:@"15654894675"];
        AddressContact *liSi = [[AddressContact alloc] initWithName:@"LiSi" phoneNumber:@"15036894987"];
        AddressContact *wangWu = [[AddressContact alloc] initWithName:@"WangWu" phoneNumber:@"15036865478"];
        AddressContact *zhaoLiu = [[AddressContact alloc] initWithName:@"ZhaoLiu" phoneNumber:@"13486894675"];
        AddressContact *chenQi = [[AddressContact alloc] initWithName:@"ChenQi" phoneNumber:@"13056894675"];
        AddressContact *zhangJiu = [[AddressContact alloc] initWithName:@"ZhangJiu" phoneNumber:@"13566894987"];
        AddressContact *songBa = [[AddressContact alloc] initWithName:@"SongBa" phoneNumber:@"15036541275"];
        AddressContact *wuShi = [[AddressContact alloc] initWithName:@"WuShi" phoneNumber:@"15039812375"];
        //创建可变数组存储联系人
        NSMutableArray *arrC = [NSMutableArray arrayWithObjects:chenQi, nil];
        NSMutableArray *arrL = [NSMutableArray arrayWithObjects:liSi, nil];
        NSMutableArray *arrS = [NSMutableArray arrayWithObjects:songEr, songBa, nil];
        NSMutableArray *arrW = [NSMutableArray arrayWithObjects:wangYi, wangWu, nil];
        NSMutableArray *arrZ = [NSMutableArray arrayWithObjects:zhangSan, zhaoLiu, zhangJiu, nil];
        //创建字典分组和数组
        NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:arrC, @"C", arrL, @"L", arrS, @"S", arrW, @"W", arrZ, @"Z", nil];
//        NSLog(@"%@", dic);
        //创建一个AddressBook对象
        AddressBook *addressBook = [[AddressBook alloc] init];
#if kWork == 1
        //添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组
        NSLog(@"添加联系人到匹配的分组");
        [addressBook addAddressContact:wuShi dic:dic];
        NSLog(@"%@", dic);
#elif kWork == 2
        //从通讯录中根据电话号码搜索联系人
        NSLog(@"从通讯录中根据电话号码搜索联系人");
        NSLog(@"请输入要查找的联系人的电话号码");
        char a[20] = {0};
        scanf("%s", a);
        NSString *str = [NSString stringWithUTF8String:a];
        [addressBook searchAddressContact:str dic:dic];
#elif kWork == 3
        //根据姓名删除某个联系人
        NSLog(@"根据姓名删除某个联系人");
        NSLog(@"请输入要删除联系人的姓名");
        char a[20] = {0};
        scanf("%s", a);
        NSString *str = [NSString stringWithUTF8String:a];
        [addressBook removeAddressContactByName:str dic:dic];
        NSLog(@"%@", dic);
#elif kWork == 4
        //删除某个分组的全部联系人
        NSLog(@"删除分组的全部联系人");
        NSLog(@"请输入要删除联系人的分组");
        char a[20] = {0};
        scanf("%s", a);
        NSString *str = [NSString stringWithUTF8String:a];
        [addressBook removeAddressContactByGroupName:str dic:dic];
        NSLog(@"%@", dic);
#endif
    }
    return 0;
}


JavaFX桌面通讯录:支持拼音首字母快速定位与分组管理 一款基于JavaFX开发的本地化通讯录管理工具,专为中文联系人设计。输入姓名后自动解析拼音首字母,并按A-Z顺序实时归类到对应分组;左侧显示完整字母导航栏,右侧提供固定快捷字母条,点击即滚动至该字母开头的所有联系人区域。支持联系人新增、编辑、删除操作,所有变更即时同步分组索引与界面布局。查询功能覆盖姓名、电话、邮箱字段,支持模糊匹配并高亮结果,同时保留原有首字母分组结构。底层采用双数组字典树(DoubleArrayTrie)加速汉字转拼音过程,集成PinyinHelper、ChineseHelper等工具类 阅读详情

相关推荐

Python通讯录管理系统课程设计项目实战

随着信息技术的快速发展,个人与组织对信息管理的需求日益增长。通讯录作为最基础的信息管理系统之一,广泛应用于日常沟通、客户管理及团队协作中。本章将从项目的背景与意义出发,阐述开发一个基于Python语言的通讯录管理系统的必要性与实际价值。系统以简洁高效为目标,结合Python强大的数据处理能力和易于扩展的特性,构建一个具备增删改查、数据持久化和图形界面交互功能的桌面级应用。# 示例:一个极简的联系人添加逻辑雏形。

weixin_34581040的博客 920

Python:用字典建立一个通讯录,向字典中添加和删除通讯人信息,查询某个人的信息,然后输出通讯录中所有人的信息。

用字典建立一个通讯录,向字典中添加和删除通讯人(名字、电话、邮箱、工作单位等),查询某个人的信息,然后输出通讯录中所有人的信息。 采用列表里套字典的方法,比较简单 contacts = [] def add(): mes = "Please enter the message of the people,and spilt them with space" mes +="\nphone email adress " name = input("Please enter the na

qq_53709900的博客 4674

通讯录设计--添加,删除,修改,读取文件

程序具有添加,删除,修改联系人等功能,联系人的存储使用STL向量及迭代器实现,可以从文件中读取和删除联系人,文件可分为指定文件和默认文件两种

python_用字典做一个电话簿(实现增删改查)

print('------欢迎来到一次性的电话簿------') import pickle dict1 = {} while True: x = input('请输入要进行的操作:如:新建或修改为"1"、查询:"2"、删除"3":') # 存储数据 序列化字典 with open('addressbook.txt', 'ab+') as io1: pick...

cwy0502的博客 5379

python实现通讯录功能

功能:实现增删改查,通讯录记录为姓名和电话;通讯录保存为文件,下次可继续使用;通讯录可按照姓名或者电话排序并显示出来。

通讯录的增加修改和删除

通讯录的增加修改和删除,可以有效的利用自己想做的加以扩展

​《Python从入门到精通:全栈开发与人工智能实战》

3.1.1 列表的创建与基本操作python # 列表创建 empty_list = [] numbers = [1, 2, 3, 4, 5] mixed_list = [1, "hello", 3.14, True] nested_list = [[1, 2], [3, 4], [5, 6]] # 使用list()构造函数 list1 = list("hello") # ['h', 'e', 'l', 'l

2503_92646890的博客 248

用Python列表和字典完成一个简单的通讯录管理器

1.实验内容 通讯录管理器是一款生活实用软件,用来协助管理手机中的所有联系人。这个案例要求使用函数完成通讯录中联系人数据的增删改查等各种功能。根据键盘的输入来选择对应的函数要完成的功能。 2.实验步骤 (1)实现显示通讯录的功能菜单函数。 (2)完成获取用户输入信息的函数。 (3)完成“1.添加联系人”、“2.删除联系人”、“3.修改联系人”、“4.查询联系人”、“5.显示所有联系人”和“6.保存数据”功能的函数。数据以字符串的形式保存在文本文件中。 (4)主函数中利用循环,不断要等待用户输入1~6的数字,利用选择结构实现当用户输入不同的数字时,调用对应的函数,完成相应的功能。当用户输入0时,

Python基础 - 通讯录程序 增删改查功能实现

文章摘要 本文介绍了使用Python实现通讯录程序的增删改查(CRUD)功能。首先分析了为何选择字典列表作为数据结构,对比了不同存储方式的优缺点。随后详细讲解了各功能模块的实现: 添加功能:包含输入验证、重复检查 删除功能:实现大小写不敏感的姓名匹配和安全删除 修改功能:支持选择性更新字段 查询功能:提供模糊搜索和精确查找 每个功能都配有完整代码、关键解析和流程图,并强调输入验证和错误处理的重要性。项目采用纯Python实现,无需外部依赖,适合初学者学习基础语法和数据结构操作。通过这个实用案例,读者可以掌握

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

Windows服务器渗透必备:5款杀软在线识别平台实测对比(附避坑指南)

本文针对Windows服务器渗透测试中的关键环节,实测对比了五款主流的在线杀软识别平台。文章从实战场景出发,深入分析了各平台在识别准确率、响应速度、隐匿性及使用风险上的差异,并提供了详尽的避坑指南与高级隐匿技巧,旨在帮助安全人员快速、精准地识别目标环境安全防护,为后续行动奠定情报基础。

weixin_29322553的博客 433

将CityScapes数据集转换为COCO格式的实例分割数据集

##¥##2019年结束前最后两小时,写出本年度最后一篇博客,不是博主没地方去跨年,实在是Coding乐趣无穷ahhhh ##¥## COCO数据集是研究实例分割的通用数据集,但是针对道路环境的数据较少,对于自动驾驶和移动机器人的应用并不适配。而提供道路环境的实例分割数据的数据集目前有KITTI、CityScapes、Apllo等,CityScapes算是应用较广,数据质量较高的一个,所以,本篇...

陆羽飞的博客 9940

通讯录

题目要求 OC上机考试试题 ————通讯录 要求描述:用OC语言完成简易通讯录(实现增删改查)功能. (注:使用MRC) 一、功能描述: main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能: 1).使用便利构造器创建四个Person类的实例(联系人). 姓名:Lucy 性别:女 电话:123 年龄:21 姓名:Jo

SmellLife 539

FAST-LIO2实战:从零搭建香港大学火星实验室SLAM框架(附官方数据集测试指南)

本文提供了一份详细的FAST-LIO2实战指南,帮助读者从零开始搭建香港大学火星实验室开源的这一高效激光惯性里程计框架。内容涵盖系统环境配置、依赖安装、源码编译、官方数据集测试以及参数调优,旨在让开发者快速上手并应用于机器人SLAM项目。

ppp33的博客 688

php通讯录的增删改查,用OC语言完成简易通讯录(实现增删改查)功能.

(注:使用MRC)一、功能描述:main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能:1).使用便利构造器创建四个Person类的实例(联系人).姓名:Lucy 性别:女 电话:123 年龄:21姓名:Joe 性别:男 电话:456 年龄:17姓名:Baby 性别:女 电话:789 年龄:27姓名:Linda 性别:女 电话:000 年龄:212)....

weixin_42548893的博客 250

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 525

Ruoyi-Cloud集成Seata2.0实现分布式事务

在网络上,关于Spring Cloud和Ruoyi-Cloud整合Seata的教程有很多,针对不同版本的 Seata 也有不少相关教程。事实上,无论是 Spring Cloud 还是 Ruoyi-Cloud,其整合 Seata 的原理基本相同。这篇博文将详细介绍如何在本地开发环境下,在中实现Seata 2.0的整合,希望能为大家在分布式项目中实现 Seata 的整合提供实用的帮助,提供一个清晰的操作思路。

SR003的博客 2246

Python+MySQL实现一个简单的通讯录管理系统

我来教你用Python+MySQL实现一个完整的通讯录管理系统。

yayait123的博客 54

【第三只眼:Oracle通过归档日志查看系统的业务高峰sql】

根据oracle归档的业务高峰量,查找业务sql,进行优化

霍然的专栏 578

OC-通讯录

要求描述:用OC语言完成简易通讯录(实现增删改查)功能.(注:使用MRC) 1.创建AddressBook类. 1)使用字典作为容器,字典的Key值为分组名(姓名首字母),value值为数组,数组中存放联系人(Person实例).(5分) 2)添加联系人.要求(20分) a.判断姓名和电话不能为空否则添加失败. b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:不能有...

weixin_30951231的博客 130

Python爬虫终极实战:逆向解析+异步处理,高效爬取中关村在线万级产品数据

爬虫工程师的战场,已经从简单的HTML解析,转向了对网络协议、JavaScript执行逻辑的深度逆向工程。然后刷新页面,当浏览器发起这个请求时,执行会暂停,我们可以一步步跟蹤调用栈(Call Stack),找到发起请求前的JavaScript代码,从而发现参数的计算逻辑。它们会添加一个动态的、一次性的签名(token)或加密参数,用于验证请求的合法性。这是整个爬虫最核心、最具技术含量的部分。的请求,其响应体正是结构清晰的JSON数据,包含了当前页面的所有手机信息(产品ID、名称、价格、图片等)。

2201_76125261的博客 429

【量化入门】Tushare库获取公募基金的历史净值

在本文中,我们将介绍如何使用Python的Tushare库获取公募基金的历史净值。

木头大左的博客 1143

[TwistedFate]中等通讯录

AddressPerson.h{ NSString *_name; NSString *_gender; NSString *_phoneNumber; NSString *_address; NSString *_groupName; NSInteger _age; }- (instancetype)initWithName:(NSString *)

Do not just be a pragrammer 493

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

(四大天王)Python程序设计之四大核心数据结构:字典篇

字典(Dictionary)是Python中一种可变、无序(Python 3.7+ 保持插入顺序)、基于键值对(Key-Value Pair)的容器数据类型。用花括号{}表示,键和值之间用冒号分隔,键值对之间用逗号分隔。# 创建一个简单的字典# 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}# 字典的值可以是任意类型,包括其他容器"grades": [85, 90, 78], # 值是列表"contact": { # 值是另一个字典。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 154

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

用OC语言完成简易通讯录(实现增删改查)功能.

(注:使用MRC)一、功能描述:main函数中通过使用Person类和AddressBook类,创建对象、调用方法,实现以下8个功能:1).使用便利构造器创建四个Person类的实例(联系人).姓名:Lucy 性别:女 电话:123 年龄:21姓名:Joe 性别:男 电话:456 年龄:17姓名:Baby 性别:女 电话:789 年龄:27姓名:Linda 性别:女 电话:0...

weixin_34120274的博客 146

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

iOS简单通讯录

// // Contact.h // contactDemo // // Created by laouhn on 15/10/26. // Copyright (c) 2015年 laouhn. All rights reserved. //#import <Foundation/Foundation.h>@interface Contact : NSObject //姓名 @proper

w1035524412的博客 854

Python字典核心原理与高效应用:从哈希表到实战技巧

在数据结构中,哈希表是实现高效键值映射的核心机制,它通过哈希函数将键转换为索引,实现接近O(1)的查找性能,是构建高性能应用的基础。这种技术价值在于能以极快的速度进行数据关联与检索,广泛应用于缓存系统、数据库索引和配置管理等场景。在Python中,字典正是基于哈希表实现的典范,其优雅的语法和强大的功能使其成为处理JSON数据、进行数据分组聚合的利器。本文深入探讨了字典的底层哈希表原理,并详细介绍了如何使用字典推导式、defaultdict等高级技巧来优化代码,同时揭示了在遍历中修改字典等常见性能陷阱,帮助开

weixin_32705179的博客 319
上一篇: malformed or corrupted AST file:"Unable to load module
下一篇: block 语句
vaercly
博客等级 码龄12年 46粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值