当前位置: 首页 > news >正文

拼电商客户管理系统

内容来自:尚硅谷

难度:easy

目 标

l 模拟实现一个基于文本界面的 拼电商客户管理系统
l 进一步掌握编程技巧和调试技巧,熟悉面向对象编程
l 主要涉及以下知识点:
Ø 类结构的使用:属性、方法及构造器
Ø 对象的创建与使用
Ø 类的封装性
Ø 声明和使用数组
Ø 数组的插入、删除和替换

关键字的使用:this

 需求说明

模拟实现基于文本界面的拼电商客户管理系统

该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。

项目采用分级菜单方式。主菜单如下:

             -----------------拼电商客户管理系统-----------------

                                     1 添 加 客 户

                                     2 修 改 客 户

                                     3 删 除 客 户

                                     4 客 户 列 表

                                     5 退           出

                                     请选择(1-5)_

每个客户的信息被保存在 Customer 对象中。
以一个 Customer 类型的数组来记录当前所有的客户。
每次“添加客户”(菜单 1 )后,客户( Customer )对象被添加到数组中。
每次“修改客户”(菜单 2 )后,修改后的客户( Customer )对象替换数组中原对象。
每次“删除客户”(菜单 3 )后,客户( Customer )对象被从数组中清除。
执行“客户列表 ”(菜单 4 )时,将列出数组中所有客户的信息。

“添加客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)1

---------------------添加客户---------------------

姓名:佟刚

性别:男

年龄:35

电话:010-56253825

邮箱:tongtong@atguigu.com

---------------------添加完成---------------------

“修改客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)2

---------------------修改客户---------------------

请选择待修改客户编号(-1退出)1

姓名(佟刚)<直接回车表示不修改>

性别()

年龄(35)

电话(010-56253825)

邮箱(tongtong@atguigu.com)tongg@atguigu.com

---------------------修改完成---------------------

“删除客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)3

---------------------删除客户---------------------

请选择待删除客户编号(-1退出)1

确认是否删除(Y/N)y

---------------------删除完成---------------------

“客户列表”的界面及操作过程如下所示:

  ……

   请选择(1-5)4

---------------------------客户列表---------------------------

编号  姓名       性别    年龄   电话                   邮箱

 1    佟刚         男        45     010-56253825   tong@abc.com

 2    封捷         女        36     010-56253825   fengjie@ibm.com

 3    雷丰阳     男        32      010-56253825   leify@163.com

-------------------------客户列表完成-------------------------

 

 

 

 1实现Customer

1. 按照设计要求编写 Customer 类,并编译
2. Customer 类中临时添加一个 main 方法中,作为单元测试方法。

  在方法中创建Customer对象,并调用对象的各个方法,以测试该类是否编写正确。

//package com.atguigu.p2;public class Customer {private String name;private char gender;private int age;private String phone;private String email;public Customer(String name, char gender, int age) {this(name, gender, age, "", "");}
//    public Customer(String name, char gender, int age) {
//        this(name, gender, age, "", "");
//    }public Customer(String name,  char gender, int age, String phone,String email) {this.name = name;this.gender = gender;this.age = age;this.phone = phone;this.email = email;}public String getName() {return name;}public void setName(String name) {this.name = name;}public  char getGender() {return gender;}public void setGender( char gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getDetails() {return name + "\t" + gender + "\t\t" + age + "\t\t" + phone + "\t" + email;}
}

2CustomerList类的设计

l CustomerList Customer 对象的管理模块,内部使用数组管理一组 Customer 对象
l 本类封装以下信息:
Ø Customer[] customers :用来保存客户对象的数组
Ø int total = 0                 :记录已保存客户对象的数量
l 该类至少提供以下构造器和方法:
Ø public CustomerList (int totalCustomer )
Ø public boolean addCustomer (Customer customer)
Ø public boolean replaceCustomer (int index, Customer cust )
Ø public boolean deleteCustomer (int index)
Ø public Customer[] getAllCustomers ()
Ø public Customer getCustomer (int index)
Ø public int getTotal ()

l public CustomerList ( int totalCustomer )
Ø 用途:构造器,用来初始化 customers 数组
Ø 参数: totalCustomer :指定 customers 数组的最大空间
l public boolean addCustomer (Customer customer )
Ø 用途:将参数 customer 添加组中最后一个客户对象记录之后
Ø 参数: customer 指定要添加的客户对象
Ø 返回:添加成功返回 true false 表示数组已满,无法添加
l public boolean replaceCustomer ( int index, Customer cust )
Ø 用途:用参数 customer 替换数组中由 index 指定的对象
Ø 参数: customer 指定替换的新客户对象

             index指定所替换对象在数组中的位置,从0开始

Ø 返回:替换成功返回 true false 表示索引无效,无法替换
l public boolean deleteCustomer ( int index)
Ø 用途:从数组中删除参数 index 指定索引位置的客户对象记录
Ø 参数: index 指定所删除对象在数组中的索引位置,从 0 开始
Ø 返回:删除成功返回 true false 表示索引无效,无法删除
l public Customer[] getAllCustomers ()
Ø 用途:返回数组中记录的所有客户对象
Ø 返回: Customer[] 数组中包含了当前所有客户对象,该数组长度与对象个数相同。
l public Customer getCustomer ( int index)
Ø 用途:返回参数 index 指定索引位置的客户对象记录
Ø 参数: index 指定所要获取的客户在数组中的索引位置,从 0 开始
Ø 返回:封装了客户信息的 Customer 对象

1. 按照设计要求编写 CustomerList 类,并编译
2. CustomerList 类中临时添加一个 main 方法中,作为单元测试方法。
3. 在方法中创建 CustomerList 对象(最多存放 5 个客户对象),然后分别用模拟数据调用以下各个方法,以测试各方法是否编写正确:
addCustomer ()
replaceCustomer ()
deleteCustomer ()
getAllCustomers ()
getCustomer ()
getTotal ()
4. 进一步测试以下情况,以验证该类是否编写正确:
调用 addCustomer 方法,添加至少 5 个以上客户对象时
当数组中客户对象数量为 0 时,仍然调用 replaceCustomer 方法替换对象
当数组中客户对象数量为 0 时,仍然调用 deleteCustomer 方法删除对象
对于 replaceCustomer deleteCustomer getCustomer 的调用,当参数 index 的值无效时(例如 -1 6
getAllCustomers 方法返回的数组长度是否与实际的客户对象数量一致

public class CustomerList {private Customer[] customers;private int total = 0;public CustomerList(int totalCustomer) {customers = new Customer[totalCustomer];}public boolean addCustomer(Customer customer) {if (total >= customers.length) {return false;}customers[total++] = customer;return true;}public Customer getCustomer(int index) {if (index < 0 || index >= total) {return null;}return customers[index];}public boolean replaceCustomer(int index, Customer cust) {if (index < 0 || index >= total) {return false;}customers[index] = cust;return true;}public boolean deleteCustomer(int index) {if (index < 0 || index >= total) {return false;}for (int i = index; i < total - 1; i++) {customers[i] = customers[i + 1];}customers[--total] = null;return true;}public Customer[] getAllCustomers() {Customer[] custs = new Customer[total];for (int i = 0; i < total; i++) {custs[i] = customers[i];}return custs;}}

3CustomerView类的设计

l CustomerView 为主模块,负责菜单的显示和处理用户操作
l 本类封装以下信息:
Ø CustomerList customerList = new CustomerList (10);

  创建最大包含10个客户对象的CustomerList 对象,供以下各成员方法使用。

l 该类至少提供以下方法:
Ø public void enterMainMenu ()
Ø private void addNewCustomer ()
Ø private void modifyCustomer ()
Ø private void deleteCustomer ()
Ø private void listAllCustomers ()

public static void main(String[] args)

l public void enterMainMenu ()
Ø 用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法(如 addNewCustomer ),以完成客户信息处理。
l    private void addNewCustomer ()

  private void modifyCustomer()

  private void deleteCustomer()

  private void listAllCustomers()

Ø 用途:这四个方法分别完成“添加客户”、“修改客户”、“删除客户”和“客户列表”等各菜单功能。

  这四个方法仅供enterMainMenu()方法调用。

l public static void main(String[] args )
Ø 用途:创建 CustomerView 实例,并调用 enterMainMenu () 方法以执行程序。

1. 按照设计要求编写 CustomerView 类,逐一实现各个方法,并编译
2. 执行 main 方法中,测试以下功能:
主菜单显示及操作是否正确
“添加客户”操作是否正确,给用户的提示是否明确合理;测试当添加的客户总数超过 10 时,运行是否正确
“修改客户”操作是否正确,给用户的提示是否明确合理;
“删除客户”操作是否正确,给用户的提示是否明确合理;
“客户列表”操作是否正确,表格是否规整;
3. 思考以下问题:
当软件退出时,所有客户信息便丢失了!运用什么手段可以将这些信息长久保存,以便在下一次运行软件时继续使用?

 

import java.util.Scanner;
//package com.atguigu02.project;
public class CustomerView {private CustomerList customers=new CustomerList(10);public CustomerView() {Customer cust = new Customer("张三", '男', 30, "13843255423","abc@126.com");customers.addCustomer(cust);}public void jianmie(){boolean flag = true;do {System.out.println("----------拼电商客户管理系统----------\n");System.out.println("            1添加客户");System.out.println("            2修改客户");System.out.println("            3删除客户");System.out.println("            4客户列表");System.out.println("            5退   出\n");System.out.print("            请选择(1-5):_");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();switch (choice) {case 1:addcustomer();break;case 2:xiugaiCustomer();break;case 3:shanchuCustomer();break;case 4:customerlist();break;case 5:flag=false;}}while (flag);}private void addcustomer(){System.out.println("------------添加客户------------");System.out.print("姓名:");Scanner sc = new Scanner(System.in);String name = sc.nextLine();System.out.print("性别:");char gender = sc.next().charAt(0);System.out.print("年龄:");int age = sc.nextInt();sc.nextLine();System.out.print("电话:");String phone = sc.nextLine();System.out.print("邮箱:");String email = sc.nextLine();Customer cust = new Customer(name,gender,age,phone,email);boolean flag = customers.addCustomer(cust);;if(flag){System.out.println("----------添加完成-----------");}else{System.out.println("-----------记录已满,无法添加-------");}}public void xiugaiCustomer(){int index = 0;Customer cust = null;for(;;){System.out.println("---------修改客户----------");System.out.println("请选择待修改客户编号(-1退出):");Scanner sc = new Scanner(System.in);index = sc.nextInt();if (index == -1) {return;}cust = customers.getCustomer(index - 1);if (cust == null) {System.out.println("无法找到指定客户!");} elsebreak;}System.out.print("姓名(" + cust.getName() + "):");Scanner sc = new Scanner(System.in);String name = sc.nextLine();String oldname=cust.getName();if(name!=oldname){oldname=name;}System.out.print("性别(" + cust.getGender() + "):");char gender = sc.next().charAt(0);char oldgender=cust.getGender();if(gender!=oldgender){oldgender=gender;}System.out.print("年龄(" + cust.getAge() + "):");int age =sc.nextInt();int oldage=cust.getAge();if(age!=oldage){oldage=age;}sc.nextLine();System.out.print("电话(" + cust.getPhone() + "):");String phone=sc.nextLine();String oldphone = cust.getPhone();if(phone!=oldphone) {oldphone = phone;}System.out.print("邮箱(" + cust.getEmail() + "):");String email=sc.nextLine();String oldemail = cust.getEmail();if(email!=oldemail){oldemail=email;}cust = new Customer(oldname, oldgender, oldage, oldphone, oldemail);boolean flag = customers.replaceCustomer(index-1, cust);if (flag) {System.out.println("---------------------修改完成---------------------");} else {System.out.println("----------无法找到指定客户,修改失败--------------");}}public void shanchuCustomer() {Customer cust = null;int num = 0;for (; ; ) {System.out.println("-------------删除客户-------------");System.out.println("请选择待删除客户编号(-1退出):");Scanner sc = new Scanner(System.in);num = sc.nextInt();if (num == -1) {return;}cust = customers.getCustomer(num - 1);if (cust == null) {System.out.println("未找到目标用户");} elsebreak;}System.out.println("确认是否删除(Y/N):");Scanner sc = new Scanner(System.in);String choice = sc.nextLine();if(choice=="N"){return;}boolean flag = customers.deleteCustomer(num - 1);if (flag) {System.out.println("-----------删除完成------------");}else {System.out.println("-------无法找到指定客户,删除失败------");}}public void customerlist(){System.out.println("---------------客户列表-----------------");Customer[] custs = customers.getAllCustomers();if(custs.length==0){System.out.println("目前列表中暂无客户");}else{System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t\t邮箱");for (int i = 0; i < custs.length; i++) {System.out.println((i+1) + "\t" + custs[i].getDetails());
//                    System.out.println(System.out.println(i+ 1 + "\t" + custs[i].getName() + "\t" + custs[i].getGender() + "\t" + custs[i].getAge() + "\t\t" + custs[i].getPhone() + "\t" + custs[i].getEmail());}System.out.println("-----------客户列表完成------------");}}public static void main(String[] args) {CustomerView cView = new CustomerView();cView.jianmie();}
}

相关文章:

拼电商客户管理系统

内容来自&#xff1a;尚硅谷 难度&#xff1a;easy 目 标 l 模拟实现一个基于文本界面的 《 拼电商客户管理系统 》 l 进一步掌握编程技巧和调试技巧&#xff0c;熟悉面向对象编程 l 主要涉及以下知识点&#xff1a; 类结构的使用&#xff1a;属性、方法及构造器 对象的创建与…...

华为:Wireshark的OSPF抓包分析过程

一、OSPF 的5包7状态 5个数据包 1.Hello&#xff1a;发现、建立邻居&#xff08;邻接&#xff09;关系、维持、周期保活&#xff1b;存在全网唯一的RID&#xff0c;使用IP地址表示 2.DBD&#xff1a;本地的数据库的目录&#xff08;摘要&#xff09;&#xff0c;LSDB的目录&…...

Android项目优化同步速度

最近项目需要使用ffmpeg&#xff0c;需要gradle配置引入ffmpeg库&#xff0c;发现原来通过google官方的代码仓&#xff0c;下载太慢了&#xff0c;每秒KB级别的速度。&#xff08;之前下gradle/gradle plugin都不至于这么慢&#xff09;&#xff0c;于是想到配置国内镜像源来提…...

在线教育网站项目第二步 :学习roncoo-education,服务器为ubuntu22.04.05

一、说明 前端技术体系&#xff1a;Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系&#xff1a;Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统&#xff1a;roncoo-education&#xff08;核心框架&#xff1a;S…...

STM32-GPIO详解

目录 一&#xff1a;GPIO基本概念 ​编辑 二&#xff1a;GPIO的实际应用 三&#xff1a;功能描述 四&#xff1a;GPIO库函数 五&#xff1a;寄存器 GPIO相关寄存器功能 一&#xff1a;GPIO基本概念 GPIO是英文General Purpose Input/Output的缩写&#xff0c;中文翻译为…...

【Framework系列之Client】UIManager和UIPanel模块介绍

今天来介绍一下UIManager和UIPanel模块&#xff0c;话不多说直接开始。 UIManager 功能介绍 UIManager是管理UIPanel的唯一模块&#xff0c;UIManager的主要功能包括&#xff1a; 提供打开、隐藏、关闭UIPanel的相关接口。负责UIPanel对象的创建以及初始化。负责储存UIPanel对…...

阿里云操作系统控制台——ECS操作与性能优化

引言&#xff1a;在数字化时代&#xff0c;云服务器作为强大的计算资源承载平台&#xff0c;为企业和开发者提供了灵活且高效的服务。本文将详细介绍如何一步步操作云服务器 ECS&#xff0c;从开通到组件安装&#xff0c;再到内存全景诊断&#xff0c;帮助快速上手&#xff0c;…...

【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)

背景&#xff1a; 已经用这个脚本的记得设置Wifi时候&#xff0c;关闭“自动登录” 前几天实在忍受不了CHD-WIFI动不动就断开&#xff0c;一天要重新连接&#xff0c;点登陆好几次。试了下在网上搜有没有CHD-WIFI的自动连接WIFI自动认证脚本&#xff0c;那样我就可以解放双手&…...

第51天:Web开发-JavaEE应用SpringBoot栈身份验证JWT令牌Security鉴权安全绕过

#知识点 1、安全开发-JavaEE-身份验证-JWT&Security 2、安全开发-JavaEE-安全问题-不安全写法&版本漏洞 #开发框架-SpringBoot 参考&#xff1a;Spring Boot 中文文档 一、身份验证的常见技术&#xff1a; 1、JWT 2、Shiro 3、Spring Security 4、OAuth 2.0 5、SSO 6、…...

中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)

OceanBase《DB 大咖说》第 15 期&#xff0c;我们邀请到了中原银行金融科技部数据团队负责人&#xff0c;吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家&#xff0c;从传统制造企业、IT企业、甲骨文公司到中原银行&#xff0c;他在数据库技术与运维管理…...

Java面试第八山!《Spring框架》

一、Spring框架概述 Spring是Java企业级应用开发的核心框架&#xff0c;通过控制反转&#xff08;IoC&#xff09;和 面向切面编程&#xff08;AOP&#xff09;实现模块解耦&#xff0c;简化开发流程。其核心优势包括依赖注入、声明式事务管理、集成主流ORM框架&#xff08;如…...

LangChain教程 - Agent - 支持 9 种 ReAct 交互

引言 LangChain 总结了 9 种经典的复杂模型交互模式&#xff0c;每种都针对特定任务设计&#xff0c;兼具独特优势与适用场景&#xff0c;内容涵盖&#xff1a; ReAct、Function Call、知识库、搜索等&#xff0c;使用这些模式可以大大简化这些场景开发难度。这些模式可以使用…...

蓝桥杯备赛日记【day1】(c++赛道)

一、裁纸刀问题&#xff08;2022、规律、思维、省赛&#xff09; 解法思路&#xff1a; 参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现&#xff0c;我们的行的裁剪次数为&#xff08;m-1&#xff09; 次&#xff0c;而每行都需要裁剪列数…...

【大模型基础_毛玉仁】1.4 语言模型的采样方法

【大模型基础_毛玉仁】1.4 语言模型的采样方法 1.4 语言模型的采样方法1.4.1 概率最大化方法1&#xff09;贪心搜索&#xff08;GreedySearch&#xff09;2&#xff09;波束搜索&#xff08;BeamSearch&#xff09; 1.4.2 随机采样方法1&#xff09;Top-K 采样2&#xff09;Top…...

[内网安全] Windows 本地认证 — NTLM 哈希和 LM 哈希

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;SAM 文件 & Windows 本地认证流程 0x0101&#xff1a;SAM 文件简介 Windows 本地账户的登录密码是存储在系统本地的 SAM 文件中的&#xff0c;在登录 Windows 的时候&am…...

基于SNR估计的自适应码率LDPC编译码算法matlab性能仿真,对比固定码率LDPC的系统传输性能

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 基于序列的SNR估计 2.2 基于SNR估计值进行码率切换 2.3 根据数据量进行码率切换 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&…...

opencv 模板匹配方法汇总

在OpenCV中&#xff0c;模板匹配是一种在较大图像中查找特定模板图像位置的技术。OpenCV提供了多种模板匹配方法&#xff0c;通过cv2.matchTemplate函数实现&#xff0c;该函数支持的匹配方式主要有以下6种&#xff0c;下面详细介绍每种方法的原理、特点和适用场景。 1. cv2.T…...

Embedding技术:DeepWalkNode2vec

引言 在推荐系统中&#xff0c;Graph Embedding技术已经成为一种强大的工具&#xff0c;用于捕捉用户和物品之间的复杂关系。本文将介绍Graph Embedding的基本概念、原理及其在推荐系统中的应用。 什么是Graph Embedding&#xff1f; Graph Embedding是一种将图中的节点映射…...

微信小程序注册组件

在微信小程序中注册组件分为自定义组件的创建和全局/局部注册&#xff0c;下面为你详细介绍具体步骤和示例。 自定义组件的创建 自定义组件由四个文件组成&#xff0c;分别是 .js&#xff08;脚本文件&#xff09;、.json&#xff08;配置文件&#xff09;、.wxml&#xff08…...

【docker】安装mysql,修改端口号并重启,root改密

我的docker笔记 【centOS】安装docker环境&#xff0c;替换国内镜像 1. 配置镜像源 使用阿里云镜像加速器&#xff0c;编辑/etc/docker/daemon.json sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https:/…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...