嵌入式软件--C语言项目 客户信息管理系统

news2025/2/25 5:10:04

考虑到目前C语言的学习是以为嵌入式做基础而进行的,项目所使用到的语法和结构都是嵌入式常用到的,这是较为特殊和针对性的项目,不与其他同名项目作比较。若有参考着谨慎借鉴。

实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。

1.需求说明

(1)主菜单

进入系统,展示主菜单,输入各功能对应的数字编号选择要进行的操作,如下图:

(2)添加客户

输入1,进入“添加客户”界面,需要填写姓名、性别、年龄、电话、邮箱这些信息,如下图:

(3)显示客户列表

输入4,进入“客户列表”,显示客户列表信息,如下图:

(4)修改客户

输入 2,进入“修改客户”,首先要输入要修改客户的编号,然后填写信息,如下图:

(5)删除客户

输入 3,进入“删除客户”,输入要删除客户的编号,再确认是否删除,如下图:

(6)退出

输出5,经过确认后退出系统,如下图:

2.过程分析:

(1)先打印主菜单

#include <stdio.h>

int main()
{
    printf("\n----------客户信息管理软件------------");
    printf("\n          1.添 加 客 户");
    printf("\n          2.修 改 客 户");
    printf("\n          3.删 除 客 户");
    printf("\n          4.客 户 列 表");
    printf("\n          5.退       出");
    printf("\n          请选择(1-5):");
    return 0;
}

(2)再附加不停选择的功能

#include <stdio.h>

int main()
{
while(1)//死循环
{
    printf("\n----------客户信息管理软件------------");
    printf("\n          1.添 加 客 户");
    printf("\n          2.修 改 客 户");
    printf("\n          3.删 除 客 户");
    printf("\n          4.客 户 列 表");
    printf("\n          5.退       出");
    printf("\n          请选择(1-5):");
    int n;
    scanf("%d",&n);
    switch(n)
    {
        case 1:
        printf("请添加客户。");
        break;
        case 2:
        printf("请修改客户。");
        break;
        case 3:
        printf("请删除客户。");
        break;
        case 4:
        printf("显示客户列表。");
        break;
        case 5:
        printf("退出!");
        break;
        default:
        printf("请输入正确的数字!");
    }
}
    return 0;
}

(3)实现条件退出的功能

需要做到,输入字符‘N’能返回选择菜单,输入“Y”能够退出,输入其他字符,重新进行退出确认!

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
   int limit_length=100;
  
void ke()
{
    //先判断能不能添加
    if(counter>limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
}

    
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(4)添加客户功能的实现

如果主函数中代码过多,看起来不方便,可以使用函数进行封装。函数的声明放在主函数外部,全局可用。

#include <stdio.h>
void ke()
{
    static int counter = 0; // 计数器
    typedef struct
    {
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
    Hu arr[99];//定义结构体数组,最多100个客户
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
    counter++;//自增,必须的,每一次加一,就有一个用户被存入。
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
           
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
            printf("显示客户列表。");
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(5)显示列表功能,将输入的数据打印。

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
  
void ke()
{
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
}

    
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(6)删除功能的实现

C语言无法对数组进行直接操作,只能通过角标进行。通过让后边的元素数据覆盖前方要删除的数据,在让编号减一,做到删除。

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
   int limit_length=99;
int deletebyld(int id)//返回值1代表成功,0代表失败
{
    if(id<1||id>counter)
    {
        printf("请您输入正确的编号!");
        return 0;
    }
    int index=id-1;//删掉客户的下角标
    for(int i=index;i<counter;i++)
    {
        arr[i]=arr[i+1];//后者覆盖前者
        arr[i].id=arr[i].id-1;
    }
    counter--;
    return 1;
}
void ke()
{
    //先判断能不能添加
    if(counter>limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
} 
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
void delete()
{
        int id;//保存用户输入的编号
        char choose;
        printf("\n--------------删除客户---------------\n");
        printf("请选择待删除客户编号(-1退出):\n");
        scanf("%d",&id);//输入编号
        if(id==-1)//不想退出,就输入-1
        {
            printf("退出!\n");
            return;//不返回,终止
        }
        printf("确认是否删除(Y/N)\n");
        getchar();
        scanf("%c",&choose);//请做选择
        if(choose=='Y')
        {
              if(deletebyld(id))//删除成功与否的函数进行封装,返回值1和0代表着可行与不可行。
              {
                printf("\n--------------------删除成功-------------------\n");
              }else{
                printf("\n--------------------删除失败-------------------\n");
              }
        }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            delete();
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(7)修改功能的实现

这里的功能需要显示原来的数据,输入的数据更新掉原来的数据。在此基础上增设一个功能,如果输入的是回车符号,表示原来的数据不做更改,继续改下一个数据。

#include <stdio.h>
int counter = 0; // 计数器
typedef struct
{
    int id;
    char name[30];
    char sex;
    int age;
    char phone[30];
    char email[30];
} Hu;
Hu arr[99]; // 定义结构体数组,最多100个客户
int limit_length = 99;
int update(int id)
{
    // 判断id是否合法
    if (id < 1 || id > counter)
    {
        printf("请输入正确的编号。");
        return 0;
    }
    int index = id - 1;
    char buffer[20]; // 缓冲区
    printf("\n姓名:(%s)", arr[index].name);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].name);
    }
    getchar();
    printf("\n性别:(%c)", arr[index].sex);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%c", &arr[index].sex);
    }
    printf("\n年龄:(%d)", arr[index].age);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%d", &arr[index].age);
    }
    printf("\n电话:(%s)", arr[index].phone);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].phone);
    }
    printf("\n邮箱:(%s)", arr[index].email);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].email);
    }
    return 1;
}
void updatekehu()
{
    printf("\n-------------------修改客户-----------------------\n");
    printf("请选择输入的客户编号(-1退出):");
    int id;
    scanf("%d", &id);
    if (id == -1)
    {
        printf("退出!");
        return;
    }
    if (update(id))
    {

        printf("\n--------------------修改成功----------------------\n");
    }
    else
    {
        printf("\n---------------------修改失败---------------------\n");
    }
}
int deletebyld(int id) // 返回值1代表成功,0代表失败
{
    if (id < 1 || id > counter)
    {
        printf("请您输入正确的编号!");
        return 0;
    }
    int index = id - 1; // 删掉客户的下角标
    for (int i = index; i < counter; i++)
    {
        arr[i] = arr[i + 1]; // 后者覆盖前者
        arr[i].id = arr[i].id - 1;
    }
    counter--;
    return 1;
}
void ke()
{
    // 先判断能不能添加
    if (counter > limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s", arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c", &arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d", &arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s", arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s", arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
    arr[counter].id = counter + 1;
    counter++; // 自增,必须的,每一次加一,就有一个用户被存入
}
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for (int i = 0; i < counter; i++)
    {
        printf("\n%d\t%s\t%c\t%d\t%s\t%s\t", arr[i].id, arr[i].name, arr[i].sex, arr[i].age, arr[i].phone, arr[i].email);
    }
}
void delete()
{
    int id; // 保存用户输入的编号
    char choose;
    printf("\n--------------删除客户---------------\n");
    printf("请选择待删除客户编号(-1退出):\n");
    scanf("%d", &id); // 输入编号
    if (id == -1)     // 不想退出,就输入-1
    {
        printf("退出!\n");
        return; // 不返回,终止
    }
    printf("确认是否删除(Y/N)\n");
    getchar();
    scanf("%c", &choose); // 请做选择
    if (choose == 'Y')
    {
        if (deletebyld(id)) // 删除成功与否的函数进行封装,返回值1和0代表着可行与不可行。
        {
            printf("\n--------------------删除成功-------------------\n");
        }
        else
        {
            printf("\n--------------------删除失败-------------------\n");
        }
    }
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            // 开始定义修改客户数据的函数
            updatekehu();
            break;
        case 3:
            delete ();
            break;
        case 4:
            looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

至此所有功能实现,客户信息管理系统(C语言)完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTFHUB-web-RCE-远程包含

开启题目 点击下面的 phpinfo 跳转之后发现查看到了 PHP版本&#xff0c;根据源码可以感觉到这里有文件包含&#xff0c;查看之后发现 allow 的配置都开着 抓包之后把 GET 换成 POST&#xff0c;构造 payload 发包&#xff0c;发现根目录有一个 flag 文件 <?php system(ls…

关于FOC学习资料的整理

【自制FOC驱动器】深入浅出讲解FOC控制与SVPWM技术 (qq.com)https://mp.weixin.qq.com/s?__bizMzk0NDQxMTY5OA&mid2247493780&idx1&sn53eacd4fd7e452489fc612bcb2b46a75&source41#wechat_redirect 稚晖君写的文章&#xff0c;涉及面很全&#xff0c;很通俗易…

【机器学习】ImageNet的基本概念以及如何使用ImageNet数据集

引言 ImageNet是一个大型的图像数据库&#xff0c;它根据WordNet的层级结构&#xff08;目前仅限于名词&#xff09;组织&#xff0c;其中每个层级节点都由成百上千张图像来描绘。这个项目对计算机视觉和深度学习研究的发展起到了重要作用 文章目录 引言一、ImageNet的基本概念…

ppt转pdf需要怎么转?6个软件教你快速进行文件格式转换

ppt转pdf需要怎么转&#xff1f;6个软件教你快速进行文件格式转换 将PPT转换为PDF格式是许多办公人员和学生常见的需求&#xff0c;尤其是在分享和发布文档时。以下是六款方便且高效的PPT转PDF软件&#xff0c;帮助你快速进行文件格式转换。 迅捷PDF转换器 这是专业的PDF编辑…

Gartner发布CNAPP云原生应用保护平台市场指南:CNAPP应该具有的4项强制功能和14项通用功能

CNAPP 满足了云原生应用程序和基础设施从开发到生产的全生命周期保护需求。负责云安全策略的安全和风险管理领导者应利用这项研究来分析和评估新兴的 CNAPP 产品。 主要发现 云原生应用和基础设施的攻击面不断扩大&#xff0c;攻击者将攻击重点放在运行时环境&#xff0c;包括网…

Java面试题--JVM大厂篇之全面掌握Parallel GC参数配置:实战指南

目录 引言&#xff1a; 正文&#xff1a; 一、Parallel GC概述 二、Java工程师的痛点 三、Parallel GC参数配置详解 1. 基本参数 2. 新生代参数 3. 老年代参数 4. 调优参数 四、实战案例 案例一&#xff1a;电商网站高并发场景 案例二&#xff1a;金融系统低延迟要…

python 文件打开、读、关闭练习

一、题目要求 二、代码实现 f open("D:\\workspace\\word.txt" , "r", encoding "UTF-8")# 方案一 # content f.read() # count content.count("itheima") # print(f"itmeiha在文件中出现了&#xff1a;{count}次")# 方案…

AI智能助手商业系统软件源码(IMYAI智能助手) AI换脸/智能体GPTs应用/AI视频生成/AI绘画/文档分析/GPT-4o模型支持

人工智能技术的发展日新月异&#xff0c;从深度学习到自然语言处理&#xff0c;再到计算机视觉等领域&#xff0c;不断推动着各行各业的变革。在应用层面&#xff0c;人工智能已深入到内容创作领域&#xff0c;为创作者提供了前所未有的便利和可能性。这些技术的发展潜力巨大&a…

iFC 原理与使用 VoNR 中的 T-ADS

目录 1. iFC 原理与使用 1.01 主要内容 1.02 什么是iFC 1.03 S-CSCF 怎么得到iFC&#xff1f;iFC在哪里定义&#xff1f; 1.04 Cx-User-Data AVP 举例(含iFC) ​编辑 1.05 iFC 具体构成 1.06 iFC 的重要参数&#xff1a;SessionCase 1.07 iFC 实战讲解1&#xff1a;VoN…

【Material-UI】Button 组件中的颜色设置(Color)详解

文章目录 一、基础颜色选项1. Secondary 颜色2. Success 颜色3. Error 颜色 二、定制颜色1. 添加自定义颜色2. 禁用默认颜色 三、高级用法和最佳实践1. 确保对比度2. 语义化颜色3. 考虑用户体验 四、总结 在用户界面设计中&#xff0c;颜色不仅仅是美学的一部分&#xff0c;更是…

【C++ Primer Plus】学习笔记 4

文章目录 前言一、结构类型1.在程序中使用结构2.C11结构初始化3. 结构可以将 string 类作为成员吗4.其他特性5.结构数组 二、共用体三、枚举1.设置枚举量的值2. 枚举的取值范围 前言 该笔记内容为书第四章——复合类型&#xff0c;加油加油 一、结构类型 结构是用户定义的类型…

8.2 生成器函数与表达式:Python 的秘密武器

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

使用jlink高版本调试和烧录立创·地文星CW32F030C8T6开发板

使用jlink高版本调试和烧录立创地文星CW32F030C8T6开发板 CW32F030固件包下载 下载地址&#xff1a;https://www.whxy.com/uploads/files/20240514/CW32F030_StandardPeripheralLib_V2.1.zip 官网资料地址&#xff1a;固件库-武汉芯源半导体官网|专注32位MCU芯片设计 (whxy.…

提升树模型

提升树&#xff08;Boosting Tree&#xff09;是一种集成学习方法&#xff0c;它通过组合多个弱分类器&#xff08;通常是决策树&#xff09;来构建一个强分类器。这种方法在许多统计学习任务中表现出色&#xff0c;被认为是性能最好的方法之一。 提升树模型概述 提升树模型是…

我的世界 java 1.21 版本中 function 命令介绍使用教程

仅限java中的1.21版本 一、函数文件位置二、创建配置和函数文件1.函数名称.mcfunction2.pack.mcmeta【默认文件】 三、加载执行函数1.刷新数据包&#xff0c;重新加载2.查询数据包加载情况3.执行函数 四、特别感谢 特别注意&#xff0c;在1.21版本中function目录名没有s&#x…

Katalon Studio 使用教程(小白快速入门版)

如果你还没有安装&#xff0c;可以点击下方安装教程链接&#xff0c;里面有详细的安装链接与教程&#xff1a; Katalon Studio 保姆级安装教程-CSDN博客 安装好后&#xff0c;应当是这样的界面。本篇从安装好后开始讲。 katalon的使用很简单&#xff0c;三步就能实现一个完整的…

网络原理(2)——封装和分用

1. 数据在网络通信中的整体流程&#xff1a;封装和分用 例子&#xff1a;通过 QQ 发送一个 hello 给另一个人 a) 发送方视角 1. 用户在输入框中输入 “hello” 字符串&#xff0c;点击发送按钮 QQ 这样的程序就会把 hello 这个内容从输入框读取到&#xff0c;并构造成一个“…

关于dubbo3.x端口绑定22222报错问题

目录 1.报错信息如下 2.由于每个dubbo应用注册的时候都当做一个qos-server &#xff0c;有一个固定的端口号&#xff0c;默认是22222&#xff0c; 不同应用需要设置不同的端口号 3.在application.yml&#xff0c;或者在application.properties指定就好了&#xff08;修改qos…

PUMA论文阅读

PUMA: Efficient Continual Graph Learning with Graph Condensation PUMA&#xff1a;通过图压缩进行高效的连续图学习 ABSTRACT 在处理流图时&#xff0c;现有的图表示学习模型会遇到灾难性的遗忘问题&#xff0c;当使用新传入的图进行学习时&#xff0c;先前学习的这些模…

Redis6-秒杀

目录 全局唯一ID 实现优惠券秒杀下单 超卖问题 一人一单 全局唯一ID 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 为了增强ID的安全性&#xff0c;不直接使用Redis自增的数值&#xff0c;而是拼接一…