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

拼电商客户管理系统

内容来自:尚硅谷

难度: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;属性、方法及构造器 对象的创建与…...

Electron、Tauri及其它跨平台方案终极对比

Electron、Tauri及跨平台方案终极对比&#xff08;2025版&#xff09; 一、核心框架深度解析 1.1 Electron&#xff1a;Web技术的桌面霸主 技术架构 基于Chromium&#xff08;浏览器内核&#xff09; Node.js&#xff08;后端运行时&#xff09;的双进程架构&#xff0c;支持…...

WireGuard搭建网络,供整个公司使用

一、清理现有配置&#xff08;如已有失败尝试&#xff09; # 停止并删除现有 WireGuard 接口 sudo wg-quick down wg0 sudo rm -rf /etc/wireguard/wg0.conf# 验证接口已删除 (执行后应该看不到 wg0) ifconfig二、服务器端完整配置流程 1. 安装 WireGuard sudo apt update &…...

项目准备(flask+pyhon+MachineLearning)- 1

目录 这是一篇学习笔记 1. 搭建项目 2.前期准备工作 3.创建用户(user)模板 这是一篇学习笔记 目的&#xff1a;用flask快速实现发布有关机器学习的项目&#xff0c;掌握flask框架&#xff0c;机器学习模型的存储和调用。 1. 搭建项目 使用pycharm创建项目&#xff0c;fl…...

1.2.2 使用Maven方式构建Spring Boot项目

本次实战通过Maven方式构建了一个Spring Boot项目&#xff0c;实现了简单的Web应用。首先&#xff0c;创建了Maven项目并设置好项目名称、位置、构建系统和JDK等。接着&#xff0c;添加了Spring Boot的父项目依赖和web、thymeleaf起步依赖。然后&#xff0c;创建了项目启动类He…...

C++中函数的调用

************* C topic&#xff1a;call functions ************* 1、为什么要用函数 In every codes, functions are the crucial parts. There are many advantages of the functions. But I introduce two of them. The first usage of the functions is reuse. And th…...

【入门Web安全之前端学习的侧重点和针对性的建议】

入门Web安全之前端学习的侧重点和针对性的建议 一、HTML&#xff1a;理解攻击载荷的载体二、CSS&#xff1a;次要但需警惕点击劫持三、JavaScript&#xff1a;渗透测试的核心重点四、浏览器工具&#xff1a;渗透测试的实战武器五、学习建议与资源六、总结&#xff1a;渗透测试者…...

【Linux】之【Bug】VMware 虚拟机开机 一直卡在黑屏左上角下划线闪烁界面

解决 参考&#xff1a; 解决Ubuntu20.04 开机黑屏光标闪烁进不去系统 Centos根目录100%解决思路 当前界面 ctrlaltf3-f6 暂时进入终端界面 df -h 查看发现根目录 磁盘空间已满 执行命令 查看当前目录占用内存明细 sudo du -h -x --max-depth1清理无用的大内存文件 或者安装…...

RT-DETR融合YOLOv12中的R-ELAN结构

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《YOLOv12: Attention-Centric Real-Time Object Detectors》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2502.12524 代码链接&#xff1a;https://gitcode.com…...

【前端基础】Day 8 H5C3提高

目录 1. HTML5新特性 1.1 新增语义化标签 1.2 新增多媒体标签 1.3 新增input类型 1.4 新增表单属性 2. CSS3的新特性 2.1 新增选择器 2.1.1 属性选择器 2.1.2 结构伪类选择器 2.1.3 伪元素选择器&#xff08;重点&#xff09; 2.2 CSS3盒子模型 2.3 CSS3其他特性&a…...

NL2SQL-基于Dify+阿里通义千问大模型,实现自然语音自动生产SQL语句

本文基于Dify阿里通义千问大模型&#xff0c;实现自然语音自动生产SQL语句功能&#xff0c;话不多说直接上效果图 我们可以试着问他几个问题 查询每个部门的员工数量SELECT d.dept_name, COUNT(e.emp_no) AS employee_count FROM employees e JOIN dept_emp de ON e.emp_no d…...

Java 9 到 Java 21 新特性全解析:从语法简化到API增强

一、新特性的概述 纵观Java这几年的版本变化&#xff0c;在Java被收入Oracle之后&#xff0c;Java以小步快跑的迭代方式&#xff0c;在功能更新上迈出了更加轻快的步伐。基于时间发布的版本&#xff0c;可以让Java研发团队及时获得开发人员的反馈&#xff0c;因此可以看到最近…...

蓝桥杯2024年真题java B组 【H.拼十字】

蓝桥杯2024年真题java B组 【H.拼十字】 原题链接&#xff1a;拼十字 思路&#xff1a; 使用树状数组或线段树解决。 先将输入的信息存入到一个n行3列的数组中&#xff0c;将信息排序&#xff0c;按照长度小到大&#xff0c;长相同时&#xff0c;宽度小到大 排序。 建立三个…...

skia的学习与研究

最近再研究skia,特地发一篇文章来记录一下。Skia版本更新非常频繁&#xff0c;大概每四周就会创建一个新版本&#xff0c;此版本持续维护六周左右就会被标记为稳定分支&#xff1b; skia三套渲染&#xff1a; 无gpu硬件如嵌入式设备&#xff0c;使用CPU渲染&#xff0c;使用…...

T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取

目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中&#xff0c;获取数据库对象的元数据信息是至关重要的。元数据提供了…...

网络编程 day01

网络编程 day01 0. 网络编程课程介绍1. 认识网络1.网络发展史2.局域网与广域网局域网&#xff08;LAN&#xff09;广域网&#xff08;Wan&#xff09; 3.光猫4.路由器5.交换机与路由器6.网线 2. IP1. 基本概念2. 网络号/主机号&#xff08;二级划分&#xff09;3. IP地址分类整…...

Tomcat 8 安装包下载

Tomcat 8 安装包下载 【下载地址】Tomcat8安装包下载 本仓库提供了一个包含 Windows 和 Linux 版本的 Tomcat 8 安装包&#xff0c;方便用户快速下载并部署 Tomcat 8 服务器 [这里是图片001] 项目地址: https://gitcode.com/open-source-toolkit/fda7c 简介 本仓库提供了一个…...

java 与 c++在遍历 map 数据结构上的一些差异

在编写动态规划时&#xff0c;发现了一个现象&#xff1a; C 中的 unordered_map 和 map 可以一边遍历一边添加数据Java 中的 HashMap 却不能&#xff0c;Java 只能通过 ConcurrentSkipListMap 实现在遍历中添加数据。 问了 grok&#xff0c;原来是两个编程语言在 map 数据结…...

vscode通过ssh远程连接(linux系统)不能跳转问题

1.问题描述 unbantu中的vscode能够通过函数跳转到函数定义&#xff0c;而windows通过ssh连接unbantu的vscode却无法跳转 2.原因&#xff1a; 主要原因是这里缺少插件&#xff0c;这里是unbantu给主机的服务器&#xff0c;与ubantu本地vscode插件相互独立&#xff0c;能否跳转…...

unity pico开发 五 UI交互

文章目录 添加画布添加交互组件取消传送射线对UI的控制解决按扳机键会传送的冲突按下按键呼出菜单&#xff0c;并让菜单出现在头的前方 添加画布 创建一个新画布&#xff0c;添加一个Button&#xff0c;将画布改为world space&#xff0c;然后缩放改为0.001&#xff0c;调整到…...

软开经验总结

文章目录 软开经验总结一、二次开发时候操作步骤二、logger的作用&#xff01;&#xff01;&#xff01;三、git使用 软开经验总结 一、二次开发时候操作步骤 改 SDK 和 language level改 maven 配置改数据库 注意Mysql 版本 差别是否过大&#xff01;&#xff01;&#xff0…...

攻克 FBX 转 STL 难题,迪威模型网搭建通途

在 3D 内容创作与 3D 打印的广袤天地中&#xff0c;不同的文件格式宛如一道道独特的密码&#xff0c;各自守护着特定的 3D 世界。今天&#xff0c;我们聚焦于 FBX 与 STL 这两种格式&#xff0c;以及如何借助迪威模型网实现 FBX 到 STL 的无缝转换。​ FBX 与 STL&#xff1a;…...

QT 中的元对象系统(三):QObject深入理解

目录 1.简介 2.特性 2.1.对象树与内存管理 2.2.信号与槽机制 2.3.事件处理 2.4.属性系统 2.4.1.Q_PROPERTY配置的属性 2.4.2.动态属性 2.4.3.实现原理 2.5.国际化支持 2.6. 定时器支持 3.类设计(q和d指针) 4.总结 1.简介 QObject这个 class 是 QT 对象模型的核心&…...

二、QT和驱动模块实现智能家居-----问题汇总1

1、文件地址改变后必须在QT下更改地址 2、指定了QT内Kits下的Sysroot头文件地址&#xff0c;但是还是找不到头文件&#xff1a; 3、提示无法执行QT程序&#xff1a;先干掉之前的QT程序 ps //查看程序PIDkill -9 PID 4、无法执行QT程序 1&#xff09;未设置环境变量 …...

Golang的数据库分库分表

# Golang的数据库分库分表 什么是数据库分库分表 数据库分库分表是指将单一的数据库拆分成多个库&#xff0c;每个库中包含多张表&#xff0c;以提高数据库的性能和可伸缩性。通常在大型应用中&#xff0c;单一的数据库往往无法满足高并发和海量数据的需求&#xff0c;因此需要…...

Docker + Vue2 热重载:为什么需要 CHOKIDAR_USEPOLLING=true?

在 Docker 中运行 Vue 2 项目时&#xff0c;许多开发者会遇到 代码修改后热重载&#xff08;Hot Reload&#xff09;失效的问题。虽然 Vue 2 默认支持热重载&#xff0c;但由于 Docker 文件监听机制的特殊性&#xff0c;Webpack 的 watch 机制可能无法正常工作。 本文将深入解析…...

NModbus 连接到Modbus服务器(Modbus TCP)

1、在项目中通过NuGet添加NModbus&#xff0c;在界面中添加一个Button。 using NModbus.Device; using NModbus; using System.Net.Sockets; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Docu…...

基于vue3和flask开发的前后端管理系统(一):项目启动准备

准备工作 我们需要准备以下工具 vue3&#xff1a;构建前端 tailwind css&#xff1a;样式库vite&#xff1a;快速构建vue项目pinia &#xff1a;vue3 的事件管理器 flask&#xff1a;后端代码Mysql&#xff1a;数据库 heidisql&#xff1a;数据库图形化界面 vscode&#xff1…...

单例模式(线程案例)

单例模式可以分为两种&#xff1a;1.饿汉模式 2.懒汉模式 一.饿汉模式 //饿汉模式&#x1f447; class MySingleTon{//因为这是一个静态成员变量&#xff0c;在类加载的时候&#xff0c;就创建了private static MySingleTon mySingleTon new MySingleTon();//创建一个静…...

通过多线程分别获取高分辨率和低分辨率的H264码流

目录 一.RV1126 VI采集摄像头数据并同时获取高分辨率码流和低分辨率码流流程 ​编辑 1.1初始化VI模块&#xff1a; 1.2初始化RGA模块&#xff1a; 1.3初始化高分辨率VENC编码器、 低分辨率VENC编码器&#xff1a; 1.4 VI绑定高分辨率VENC编码器&#xff0c;VI绑定RGA模块…...