前言: 上篇我们通过结构体的构建来创造通讯录的联系人内容以及封装100个联系人,并实现了通讯录的增删查改等基本功能,这篇我们要进行改造的内容就是将固定的100个联系人容量改为不定长,有几个联系人就进行扩容...1.进阶通讯录特点: ①基本的增删查改功能; ②通讯录的空间是不固定的,大小是可以调整的 ③默认能放3个人的信息,如果不够就每次增加2个人的信息 2.实现步骤: (1)定义一个结构体来存储联系人的基本信息例如...int sz;//用来记录存放联系人个数 int capacity;//记录通讯录当前的最大容量 }Contact; (3)初始化通讯录; void InitContact(Contact* pc...(5)基本功能函数 可以通过http://t.csdnimg.cn/gIo96百行代码实现简单通讯录来查看哦;这里将增加联系人函数与删除联系人函数单独拿出来,因为有改进的地方 ①增加联系人函数 int...;//记录通讯录当前的最大容量 }Contact; //函数声明 void InitContact(Contact* pc);//初始化 void AddContact(Contact* pc);//
.append(this.address); return sb.toString(); } } 创建核心业务类 package top.thecat; import java.util.ArrayList...; import java.util.List; /** * 核心业务类 */ public class Operate { private List list;...}else { System.out.println("输入有误,请重新输入"); } } 测试验证类中得验证方法...System.out.println("通讯录管理系统已恢复初始化状态,请继续操作!")...for (int i=0;i<this.list.size();i++){ (this.list.get(i)).setId(i+1); } } 项目演示 java
toString() { return "Contact [name=" + name + ", phone=" + phone + "]"; } } package tongxun; import java.util.HashMap...; import java.util.Iterator; import java.util.Map; import java.util.Set; public class ConTactService...Integer k=it.next(); System.out.println("Num:"+k+"---"+contacts.get(k)); } } } package tongxun; import java.util.Iterator...; import java.util.Map; import java.util.Set; public class Test { public static void main(String[]
【通讯录项目 (3 / 3)】基于顺序表的通讯录实现——通讯录项目实现 前言 前两章我们已经知道顺序表的功能并完成了功能实现,下面我们将实现通讯录的以下功能: 1 项目预备工作 1.1 多文件处理...代码中“前置声明”是为了避免后续引用出现问题。我们通过“typedef”进行重命名,方便后续书写代码。 2 功能实现 上面将我们的准备工作进行完毕,下面开始实现功能。我们基于顺序表在进行操作。...2.1 初始化通讯录 “初始化”只需要简单的引用顺序表的初始化即可。...2.4 展示通讯录 展示通讯录的功能是对顺序表展示的扩展。...下面我们开始完善界面内容,来把通讯录的功能进行整合。
一、本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步” ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通讯录...获取通讯录密钥的目的: 通过企业ID(CorpId)和 通讯录密钥可以获取通讯录相关接口的使用凭证(AccessToken)。有了AccessToken,就可以使用通讯录相关接口了。...2.2对象的序列化的目的 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。...以下代码为文本消息的json字符串,将text属性类型设为Text,Text类中包含content属性。...2.1 工具类之微信参数封装类——WeiXinParamesUtil.java 此类封装了微信的相关参数,如企业id、应用凭证、通讯录凭证等。封装起来更易维护,实现一处修改多处改变。
//typedef struct Contact //{ // PeoInfo data[MAX];//存放数据 // int sz;//记录的是当前通讯录中存放的人的信息数 //}Contact;...//动态通讯录版本 typedef struct Contact { PeoInfo* data;//存放数据 int sz;//记录的是当前通讯录中存放的人的信息数 int capacity;...//记录的是当前通讯录的容量 }Contact; //初始化通讯录 void InitContact(Contact* pc); //增加联系人 void AddContact(Contact* pc...sizeof(PeoInfo)); if (pc->data == NULL) { perror("InitContact->calloc"); return; } //加载文件中的信息到通讯录...; break; case SHOW: ShowContact(&con); break; case SORT: break; case EXIT: //保存通讯录中的数据到文件中
基于顺序表的通讯录实现——顺序表介绍 文章目录 基于顺序表的通讯录实现——顺序表介绍 1.1 数据结构 1.1.1什么是数据? 1.1.2什么是结构? 概念 :数据结构是计算机存储、组织数据的⽅式。...当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的⽅式。...同理,程序中如果不对数据进⾏管理,可能会导致数据丢失、操作数据困难、野指针等情况。通过数据结构,能够有效将数据组织和管理在⼀起。按照我们的⽅式任意对数据进⾏增删改查等操作。...假定数组有10个空间,已经使⽤了5个,向数组中插⼊数据步骤: 求数组的⻓度,求数组的有效数据个数,向下标为数据有效个数的位置插⼊数据(注意:这⾥是否要判断数组是否满了,满了还能继续插⼊吗)?...线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。
-- 通讯录 --> ...{ this.isLoad = true; this.getContactsList(); }, mounted() {}, methods: { //获取通讯录列表...padding: 30rpx 0; text-align: center; } } } 4.自我总结 1.这个页面的构成是头部(搜索)、中间列表部分(通讯录列表展示...我记得在第一次做的时候,整个页面都会拉动,因为我把头部组件和中间的写在一坨上了,正确的就是以上的写法。
学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。...typedef struct SeqList Contact;//改通讯录的名字,没有包含顺序表的头文件,所以需要写出完整的名字 void ContactInit(Contact*con); //通讯录的销毁...(Contact*con); //通讯录的查找 void ContactFind(Contact*con); //通讯录的展示 void ContactShow(Contact*con); typedef...); printf("请输入要添加的联系人住址:\n”); scanf("%s",info.addr); //往通讯录中添加数据 SLPushBack(con,info);/.../尾插,顺序表中已有方法的复用 } //通讯录删除联系人 int FindByName(Contact*con,char name[]) { for(int i=0;isize;i+
基于顺序表的通讯录实现——顺序表功能实现 顺序表功能实现 基于顺序表的通讯录实现——顺序表功能实现 1 初始化与销毁 1.1 初始化 1.2 销毁 2 头部插入与删除 2.1 头部插入 2.1.1检查容量...经过上一篇文章我们对顺序表有了一个初步的认识,下面我们将通过C语言实现顺序表的功能,包括: 增加数据 删除数据 查找数据 修改数据 可以把顺序表看作一种特殊的数组,我们下面将要进行的操作是基于...i++) { ps->a[i] = ps->a[i + 1]; // a[size-2]=a[size-1] (模拟最后一次操作) } ps->size--; } 头部删除非常简单,将顺序表中的数据从第二个依次向前覆盖即可...6 结束语 顺序表的功能我们已经实现,我们使用的是最简单的顺序表,所以整个过程看起来没有困难。在下一篇文章中我们将进行通讯录的实现。...在通讯录里,顺序表的类型不在是简单的" int ",而是结构体类型。 下面给出通讯录的基本功能供大家参考预习。
C语言通讯录功能的实现 一、项目需求: 我们需要一个通讯录,可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。...并且在通讯录中要求实现下述功能: 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 以名字排序所有联系人 二、模块化代码 在代码编辑中,为了避免代码过于冗长...一个人的通讯录信息结构体已经已经建立好了。现在我们需要一个结构体数组,来存放1000个人的信息,同时出于功能的需求,我们还要知道通讯录已经存储了多少个人的信息,所以我们再建立一个通讯录本结构体。...enum { Exit, Add, Del, Search, Modify, Show, Sort, }; 写在contact.h头文件中 那么循环可以更改为上述名字。...,所以不需要在头文件中声明也是可以的。
目录 思路 代码实现 完整代码(可自取) 思路 在前面的文章中,已经讲解了动态版本的通讯录的实现,但是动态通讯录存在一个致命缺陷,就是它不能自动保存数据,而前面一篇文章中学到了数据持久化的方法之一:即把数据存放在磁盘文件上...假如我们在退出的时候,通过文件操作,把我们所写的数据存在磁盘文件里,然后我们再进行下一次的使用的时候,在初始化阶段就从磁盘中读取这些数据,这不就实现了。...从文件中读取信息(初始化阶段完成) //读通讯录文件信息 //size_t fread(void* ptr, size_t size, size_t count, FILE* stream) void...) { //失败则打印错误报告 perror("Storage_Contact::fopen"); return; } int i = 0; //将sz个数据都写入到文件中 for...struct contact con; //初始化通讯录(读之前通讯录的信息) Init_contact(&con); do { menu(); printf("请选择:->");
1.前言 整理学习”Android动画效果集合开源APP(BaseAnimation)程序源码“中的通讯录效果。...>笔记20 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(一) ---- 3.2 通讯录界面ListView的数据填充 加载联系人的方法容易理解,排序》加载》处理 >笔记...21 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(二) ---- 3.3 联系人的搜索 搜索部分难点是拿出搜索的内容,首先自定义了ClearEditText,给出了一个...textchange的监听,然后进行匹配>筛选>排序>加载到联系人列表中。...public void afterTextChanged(Editable s) { } }); /** * 根据输入框中的值来过滤数据并更新
if语句if语句是Java语言中的一种条件语句,用于在程序运行时基于给定的条件选择要执行的语句块。...如果条件为true,那么将执行if代码块中的语句;否则,将执行else代码块中的语句。...除了基本的if语句,Java还提供了一些变体,可以更灵活地控制代码的执行流程。下面是其中一些常见的变体:if-else-if语句在需要根据多个条件进行选择的情况下,可以使用if-else-if语句。...如果所有条件都不满足,那么将执行else代码块中的语句。...三目运算符Java还提供了一种特殊的条件语句,称为三目运算符(或者叫条件运算符)。它的基本语法结构如下:result = condition ?
对于Scanner的进一步理解还是在LeetCode的一道算法题上,题目大意是输入一组分式加法构成的字符串,要求输出分式相加的结果。首先是输入”-2/3+2/3-4/5″,接着求其和。...首先第一步需要解析字符串为所需的数据,我使用了split()的方式,有位大哥就使用了`scanner.useDelimiter(pattern)`方法,直接将数据解析到了Scaner对象中。...# Scanner的工作方式 Scanner的分隔符模式将输入分割到令牌(token,就是临时存储区域),默认情况下以**空格**分割。然后可以使用各种next方法将得到的令牌转换成不同类型的值。...`pattern的模式`,并返回一个新的Scanner对象。...**总结:使用Scanner+正则的组合可以简化很多字符串的处理,而无需使用大量的代码分割字符串和数值转换。
1.前言 整理学习”Android动画效果集合开源APP(BaseAnimation)程序源码“中的通讯录效果。...---- 3.目录 3.1 A-Z的字母索引 3.2 联系人界面ListView的数据填充 3.3 联系人的搜索 3.1 A-Z的字母索引 ?...通过自定义一个View界面,绘制一个A-Z竖向排列的布局,通过触摸事件监听,根据触摸的区域和字母高度的计算出position,再向联系人Listview提供一个方向输出position值!...*b数组的长度就等于点击b中的个数....firstChar == section) { return i; } } return -1; } ---- 3.2 通讯录界面
1.前言 整理学习”Android动画效果集合开源APP(BaseAnimation)程序源码“中的通讯录效果。...---- 3.目录 3.1 A-Z的字母索引 3.2 联系人界面ListView的数据填充 3.3 联系人的搜索 3.1 A-Z的字母索引 通过自定义一个View界面,绘制一个A-Z竖向排列的布局,通过触摸事件监听...,根据触摸的区域和字母高度的计算出position,再向联系人Listview提供一个方向输出position值!...>笔记20 | 学习整理开源APP(BaseAnimation)程序源码“中的通讯录效果(一) ---- 3.2 通讯录界面ListView的数据填充 加载联系人的方法容易理解,排序》加载》处理 XML...,相等的元素不会被重新排序。
大家好,又见面了,我是你们的朋友全栈君。 展开全部 代码块是一种常见的代码形式。...代码块的格式如下: 1、普通代码块:是最常见的代码块,在方法里用一对“{}”括起来的数据,就是普通的代码块, 2、构造代码块:是在类中直接定义的,用“{}”括起来的代码。...3、静态代码块:他在类中的成员位置,用“{}”括起来的代码。...所以他会执行class Nihaoa类下的静态块,在执行 main方法,编译class GouZao类,然后执行代码,静态的执行一次,构造方法块每次执行 java中“:” 如果是switch...中的,是它的一种固定写法。
一个例子 Object类是所有类的父类,如果你去查看java.lang.Object类的源码,你会发现里面有个finalize方法,这个方法没有默认实现,需要子类根据实际情况重写这个方法,但是如果不恰当使用...类里也有一个引用队列,这个引用队列是JVM和垃圾回收器打交道的唯一途径,当垃圾回收器需要回收该对象时,会把该对象放到引用队列中,这样java.lang.ref.Finalizer类就可以从队列中取出该对象...$100(Finalizer.java:14) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 这个线程唯一的职责就是不断的从...java.lang.ref.Finalizer.ReferenceQueue队列中取对象,当一个对象进入到队列中,finalizer线程就执行对象的finalize方法并且把对象从队列中删除,因此在下一次...histo:live 8700|head -n 10命令强制触发一次GC,结果和前面的分析一致,Finalizer对象都放到引用队列中,并依次调用了对象的finalize方法,内存中java.lang.ref.Finalizer
所以我们创建一个容量为1000PerInfo的数组的,当我们向里面加入一个人的信息时,我们需要知道通讯录的 容量是否已经达到最值,一旦达到便无法加入信息,由此可知,我们需要一个变量去统计通讯录中的人数。...此时我们如果进行增删改查,我们传参的时候即要传联系人的信息和人数,为了减少传参的个数,我们可以将联系人和人数一起放到一个结构体中。该结构体就定义为通讯录。...typedef struct contact { PerInfo data[MAX]; int len; }contact; 3.初始化通讯录 当我们创建好通讯录后需要对通讯录中的数组和变量进行初始化...所以我们将通讯录中的数据都初始化为0,并将这个功能单独定义成一个函数。...通讯录基本功能的实现 1.增加联系人 首先我们要判断通讯录中是否已满,如果已满自然不能加入联系人。如果未满,则添加联系人。
领取专属 10元无门槛券
手把手带您无忧上云