jbase打印完善

上一篇实现了粗略的打印元素绘制协议,并且写了打印示例和导出示例,趁着空隙时间完善一下打印。

首先元素构造函数默认初始化每个字段值

package LIS.Core.Dto;

/**
 * 打印约定元素
 */
public class PrintElement {
    /**
     * 元素类型
     */
    public String PrintType;

    /**
     * X
     */
    public String PrintX;

    /**
     * Y
     */
    public String PrintY;

    /**
     * 字体
     */
    public String PrintFont;

    /**
     * 字体大小
     */
    public String PrintFontSize;

    /**
     * 字体样式
     */
    public String PrintFontStyle;

    /**
     * 长度
     */
    public String PrintLength;

    /**
     * 宽度
     */
    public String PrintWidth;

    /**
     * 高度
     */
    public String PrintHeight;

    /**
     * 文本
     */
    public String PrintText;

    /**
     * 数据字段
     */
    public String DataField;

    /**
     * 特殊标志
     */
    public String PrintFlag;

    /**
     * 停靠
     */
    public String PrintAlignment;

    /**
     * 图片
     */
    public String PrintImageFile;

    /**
     * 颜色
     */
    public String PrintColor;

    /**
     * 旋转角度
     */
    public String Angle;

    /**
     * 垂直显示
     */
    public String IsVShow;

    /**
     * 业务ID
     */
    public String BllID;

    /**
     * 构造
     */
    public PrintElement()
    {
        PrintType="";
        PrintX="10";
        PrintY="10";
        PrintFont="宋体";
        PrintFontSize="10";
        PrintFontStyle="";
        PrintLength="10";
        PrintWidth="20";
        PrintHeight="20";
        PrintText="";
        DataField="";
        PrintFlag="";
        PrintAlignment="";
        PrintImageFile="";
        PrintColor="";
        Angle="0";
        IsVShow="";
        BllID="";
    }
}

加强绘制元素的类型约束和检查,把换页,打印机控制等都实现

package LIS.Core.Util;

import LIS.Core.Dto.PrintElement;

import java.awt.*;
import java.util.List;

/**
 * 打印元素绘制协议实现,先提供各种元素的初级api,参数类型限制比较松散,后面再包限制严格的api,避免参数错误导致的画图问题
 */
public class PrintDrawProtocol {

    /**
     * 打印纸张方向 Landscape:旋转 Portrait:正常
     */
    public enum PrintLayout {
        Landscape, Portrait
    }

    /**
     * 打印文本的停靠方向
     */
    public enum PrintAlignment {
        Left, Center, Right
    }

    /**
     * 控制打印机,在第一个输出的元素就会按输出控制打印机
     *
     * @param paper       A4或A5等
     * @param paperLayout Landscape或Portrait
     * @param printerName 打印机名称,tiaoma等
     * @param paperSource 送纸来源,1,2等
     * @param paperWidth  纸张宽度
     * @param paperHeight 纸张高度
     * @return
     */
    public static PrintElement ControlPrinter(String paper, PrintLayout paperLayout, String printerName, String paperSource, int paperWidth, int paperHeight) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PRINTER";
        ret.DataField = paper;
        ret.PrintAlignment = paperLayout.toString();
        ret.PrintFlag = printerName;
        ret.PrintFont = paperSource;
        ret.PrintWidth = String.valueOf(paperWidth);
        ret.PrintHeight = String.valueOf(paperHeight);
        return ret;
    }

    /**
     * 控制打印机,在第一个输出的元素就会按输出控制打印机,只会按名称选择打印机,不会控制纸张等
     *
     * @param printerName 打印机名称,tiaoma等
     * @return
     */
    public static PrintElement ControlPrinterName(String printerName) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PRINTERONLY";
        ret.PrintFlag = printerName;
        return ret;
    }

    /**
     * 输出此元素通知打印换页
     *
     * @return
     */
    public static PrintElement ChangePage() {
        PrintElement ret = new PrintElement();
        ret.PrintType = "PAGE";
        return ret;
    }

    /**
     * 让用户选择打印机并且按唯一键缓存
     *
     * @param uniqueFlag
     * @return
     */
    public static PrintElement SelectPrinter(String uniqueFlag) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "SELECTPRINTER";
        ret.PrintFlag = uniqueFlag;
        return ret;
    }

    /**
     * 绘图输出第一个元素为ImageInfo类型的元素讲按照以上属性创建位图,其他后续元素的画笔操作都在该位图上执行。
     *
     * @param width  图的宽度
     * @param height 图的高度
     * @param color  颜色
     * @return
     */
    public static PrintElement CreateImage(int width, int height, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintType = "ImageInfo";
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintColor = color;
        return ret;
    }

    /**
     * 画标签
     *
     * @param x         x坐标(*必填)
     * @param y         y坐标(*必填)
     * @param drawStr   要绘制的文本(*必填)
     * @param font      字体
     * @param fontSize  字体大小
     * @param fontStyle 字体样式
     * @param alignment 字体靠齐方向  Center:居中  Right:靠右  Justified或者空:靠左
     * @param color     颜色,html颜色 red  #ffffff这种
     * @param angle     旋转角度,角度数字
     * @return
     */
    public static PrintElement DrawLabel(int x, int y, String drawStr, String font, Integer fontSize, String fontStyle, PrintAlignment alignment, String color, String angle) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = drawStr;
        ret.PrintFont = font;
        if (fontSize == null) {
            fontSize = 9;
        }
        ret.PrintFontSize = String.valueOf(fontSize);
        ret.PrintFontStyle = fontStyle;
        if(alignment!=null)
        {
            ret.PrintAlignment = alignment.toString();
        }

        ret.Angle = String.valueOf(angle);
        ret.PrintType = "Label";
        return ret;
    }


    /**
     * 画线
     *
     * @param x         起点x坐标(*必填)
     * @param y         起点y坐标(*必填)
     * @param x1        终点x坐标(*必填)
     * @param y1        终点y坐标(*必填)
     * @param size      线宽度 默认1
     * @param dashStyle 线样式,0、1、2、3、4
     * @param color     颜色 html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawLine(int x, int y, int x1, int y1, Integer size, String dashStyle, String color) {
        if (size == null) {
            size = 1;
        }
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintWidth = String.valueOf(x1);
        ret.PrintHeight = String.valueOf(y1);
        ret.PrintLength = String.valueOf(size);
        ret.PrintFlag = dashStyle;
        ret.PrintColor = color;
        ret.PrintType = "ILineN";
        return ret;
    }

    /**
     * 画条码
     *
     * @param x          x坐标(*必填)
     * @param y          y坐标(*必填)
     * @param barStr     要绘制的文本(*必填)
     * @param isDrawText 是否绘制条码文本 false:不画条码文本  true:画条码文本
     * @param width      宽度 小于10认为使用条码本身宽度不做缩放
     * @param height     高度
     * @param barType    条码码制,空默认,可为A、B、C
     * @param font       字体
     * @param fontSize   字体大小
     * @param fontStyle  字体样式
     * @param alignment  字体靠齐方向  Center:居中  Right:靠右  Justified或者空:靠左
     * @param color      颜色,html颜色 red  #ffffff这种
     * @param angle      旋转角度,角度数字
     */

    public static PrintElement DrawBarCode(int x, int y, String barStr, boolean isDrawText, int width, int height, String barType, String font, Integer fontSize, String fontStyle, PrintAlignment alignment, String color, String angle) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = barStr;
        ret.PrintFont = font;
        if (fontSize == null) {
            fontSize = 9;
        }
        ret.PrintFontSize = String.valueOf(fontSize);
        ret.PrintFontStyle = fontStyle;
        if(alignment!=null) {
            ret.PrintAlignment = alignment.toString();
        }
        ret.Angle = String.valueOf(angle);
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Data";
        String Flag = "";
        if (isDrawText == false) {
            Flag = "N";
        }
        String PrintFlag = "BarCode" + Flag + barType;
        ret.PrintFlag = PrintFlag;
        return ret;
    }

    /**
     * 画二维吗
     *
     * @param x      x坐标(*必填)
     * @param y      y坐标(*必填)
     * @param barStr 要绘制的文本(*必填)
     * @param width  宽度
     * @param height 高度
     * @return
     */
    public static PrintElement DrawQRCode(int x, int y, String barStr, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintText = barStr;
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Data";
        String PrintFlag = "QRCode";
        ret.PrintFlag = PrintFlag;
        return ret;

    }


    /**
     * 画点
     *
     * @param x      x坐标(*必填)
     * @param y      y坐标(*必填)
     * @param width  宽度
     * @param height 高度
     * @param type   点类型o  []  <>或者空串
     * @param color  颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoint(int x, int y, int width, int height, String type, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Point";
        ret.PrintFlag = type;
        ret.PrintColor = color;
        return ret;
    }

    /**
     * 画多边形
     *
     * @param pointList 点集合描述串多个点用^分割,一个点的xy用@分割  如:10@10^29@20^100@15(*必填)
     * @param color     颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoly(List<Point> pointList, String color) {
        String polyStr = "";
        if (pointList != null || pointList.size() > 0) {
            for (Point p : pointList) {
                if (polyStr.isEmpty()) {
                    polyStr = p.x + "@" + p.y;
                } else {
                    polyStr += "^" + p.x + "@" + p.y;
                }
            }
        }
        PrintElement ret = new PrintElement();
        ret.PrintText = polyStr;
        ret.PrintType = "Poly";
        ret.PrintColor = color;
        return ret;

    }


    /**
     * 画多边形
     *
     * @param points 点集合描述串多个点用^分割,一个点的xy用@分割  如:10@10^29@20^100@15(*必填)
     * @param color  颜色,html颜色 red  #ffffff这种
     * @return
     */
    public static PrintElement DrawPoly(String points, String color) {
        PrintElement ret = new PrintElement();
        ret.PrintText = points;
        ret.PrintType = "Poly";
        ret.PrintColor = color;
        return ret;

    }

    /**
     * 画图片
     *
     * @param x         x坐标(*必填)
     * @param y         y坐标(*必填)
     * @param width     宽度(*必填)
     * @param height    高度(*必填)
     * @param dataField :数据,签名图片就传base64位串,否则传ftp全路径地址(*必填)
     * @param isSign    是否是签名图片 默认不是
     * @return
     */
    public static PrintElement DrawGraph(int x, int y, int width, int height, String dataField, boolean isSign) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        ret.DataField = dataField;
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Graph";
        if (isSign == true) {
            ret.PrintFlag = "D";
        }
        return ret;
    }


    /**
     * 画复选框
     *
     * @param x       x坐标(*必填)
     * @param y       y坐标(*必填)
     * @param checked 是否选择  0:不选,1:选中
     * @param width   宽度
     * @param height  高度
     * @return
     */
    public static PrintElement DrawCheckBox(int x, int y, boolean checked, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        if (checked == true) {
            ret.PrintText = "是";
        }
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "CheckBox";
        return ret;
    }

    /**
     * 画单选框
     *
     * @param x       x坐标(*必填)
     * @param y       y坐标(*必填)
     * @param checked 是否选择  0:不选,1:选中
     * @param width   宽度
     * @param height  高度
     * @return
     */

    public static PrintElement DrawRadio(int x, int y, boolean checked, int width, int height) {
        PrintElement ret = new PrintElement();
        ret.PrintX = String.valueOf(x);
        ret.PrintY = String.valueOf(y);
        if (checked == true) {
            ret.PrintText = "是";
        }
        ret.PrintWidth = String.valueOf(width);
        ret.PrintHeight = String.valueOf(height);
        ret.PrintType = "Radio";
        return ret;
    }

    /**
     * PDF文件的ftp或http全路径。用英文逗号分隔两个A5PDF路径打印会自动合并为一个A4。一个A5路径后跟个英文逗号,会把PDF转A4纸打印
     *
     * @param httpOrFtpPath pdf文件的下载路径
     * @return
     */
    public static PrintElement DrawFile(String httpOrFtpPath) {
        PrintElement ret = new PrintElement();
        ret.DataField = httpOrFtpPath;
        ret.PrintType = "FILE";
        return ret;
    }

}

测试

import LIS.Core.Dto.OutParam;
import LIS.Core.Dto.PrintElement;
import LIS.Core.Util.PrintDrawProtocol;
import appcode.BaseHttpHandlerNoSession;
import appcode.Helper;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 输出符合打印元素绘制协议的打印元素数据,来供打印执行层打印
 */
public class PrintBarCodeTest extends BaseHttpHandlerNoSession {
    /**
     * 按传入的RowID输出符合打印元素绘制协议的数据来实现打印控制
     * @param RowID 业务主键
     * @param P1
     * @param P2
     * @param P3
     * @param P4
     * @param P5
     * @param P6
     * @param P7
     * @param P8
     * @param P9
     * @param P10
     * @param P11
     * @param P12
     * @param P13
     * @param Session
     * @param Output
     * @return
     */
    public String GetData(String RowID, String P1, String P2, String P3, String P4, String P5, String P6, String P7, String P8, String P9, String P10, String P11, String P12, String P13, OutParam Session, OutParam Output) {
        List<PrintElement> retList=new ArrayList<>();
        //画一个文本
        retList.add(PrintDrawProtocol.DrawLabel(10,10,"zhanglianzhu","宋体",12,"", null,"","0"));
        //画一个条码
        retList.add(PrintDrawProtocol.DrawBarCode(10,50,"0947809",true,5,30,"","宋体",12,"",null,"","0"));
        //换一根横线
        retList.add(PrintDrawProtocol.DrawLine(10,70,70,70,1,"",""));
        //换一根竖线
        retList.add(PrintDrawProtocol.DrawLine(50,10,50,470,1,"",""));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawQRCode(10,90,"jbase",90,90));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,210,"jbase打印支持","宋体",12,"",null,"","0"));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,230,"20231118 22:49","宋体",12,"",null,"","0"));
        //画一个点
        retList.add(PrintDrawProtocol.DrawPoint(10,270,10,10,"o",""));
        retList.add(PrintDrawProtocol.DrawPoint(100,270,10,10,"[]",""));
        retList.add(PrintDrawProtocol.DrawPoint(200,270,10,10,"<>",""));
        //画多边形
        List<Point> pointList=new ArrayList<>();
        Point p1=new Point();
        p1.x=10;
        p1.y=300;
        pointList.add(p1);
        Point p2=new Point();
        p2.x=100;
        p2.y=310;
        pointList.add(p2);
        Point p3=new Point();
        p3.x=50;
        p3.y=360;
        pointList.add(p3);
        retList.add(PrintDrawProtocol.DrawPoly(pointList,""));
        //画复选框
        retList.add(PrintDrawProtocol.DrawCheckBox(10,400,true,30,30));
        //画单选框
        retList.add(PrintDrawProtocol.DrawRadio(10,400,true,30,30));

        //换页
        retList.add(PrintDrawProtocol.ChangePage());

        //画一个文本
        retList.add(PrintDrawProtocol.DrawLabel(10,10,"这是打印的第二页","宋体",12,"", null,"","0"));
        //画一个条码
        retList.add(PrintDrawProtocol.DrawBarCode(10,50,"0947809",true,5,30,"","宋体",12,"",null,"","0"));
        //换一根横线
        retList.add(PrintDrawProtocol.DrawLine(10,70,70,70,1,"",""));
        //换一根竖线
        retList.add(PrintDrawProtocol.DrawLine(50,10,50,470,1,"",""));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawQRCode(10,90,"jbase",90,90));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,210,"jbase打印支持","宋体",12,"",null,"","0"));
        //绘制一个条码
        retList.add(PrintDrawProtocol.DrawLabel(10,230,"20231119","宋体",12,"",null,"","0"));
        //先包一个打印元素绘制协议数据生成的工具类来解决元素约束问题,工具类实现了调用工具类得到标签,条码,文本等
        return Helper.Object2Json(retList);
    }
}

在这里插入图片描述

打印基础就更稳定了,业务只需要按要求控制输出数据就行了,可以结合设计器的保存数据和业务数据组装

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DeepStream--测试resnet50分类模型

ResNet50是一种深度残差网络&#xff0c;50表示包含50层深度。该模型可以用于图像分类&#xff0c;物体检测等。 现在用DeepStream测试ResNet50分类模型。 1 资源 模型地址&#xff1a;https://github.com/onnx/models/blob/main/vision/classification/resnet/model/resnet…

高性能音乐流媒体服务Diosic

什么是 Diosic ? Diosic 是一个开源的基于网络的音乐收集服务器和流媒体。主要适合需要部署在硬件规格不高的服务器上的用户。Diosic 是使用 Rust 开发的&#xff0c;具有低内存使用率和高性能以及用于流媒体音乐的非常干净的界面。 安装 在群晖上以 Docker 方式安装。 在注…

【Android】Android Framework系列--CarUsbHandler源码分析

Android Framework系列–CarUsbHandler源码分析 本文基于Android12源码。 CarUsbHandler是Android Car提供的服务之一&#xff0c;其用车载USB连接的场景。 车载USB有其特殊应用场景&#xff0c;比如AndroidAuto、CarLife等。而Android的做法是在其原有的USB服务上&#xff0…

Js中clientX/Y、offsetX/Y和screenX/Y之间区别

Js中client、offset和screen的区别 前言图文解说实例代码解说 前言 本文主要讲解JavaScript中clientX、clientY、offsetX、offsetY、screenX、screenY之间的区别。 图文解说 在上图中&#xff0c;有三个框&#xff0c;第一个为屏幕&#xff0c;第二个为浏览器大小&#xff0c…

ChatGPT最强?文心一言与ChatGPT对比

对于同一个问题我们分别对文心一言3.5和ChatGPT3.5输出回答&#xff0c;结果如下图&#xff0c;可以看到文心一言的回答更好&#xff0c;文心一言是由百度开发的人工智能语言模型&#xff0c;它的中文理解能力主要是基于百度强大的搜索引擎和自然语言处理技术。文心一言更加注重…

Linux下快速确定目标服务器支持哪些协议和密码套件

实现原理是利用TLS协议的特点和握手过程来进行测试和解析响应来确定目标服务器支持哪些TLS协议和密码套件。 在TLS握手过程中&#xff0c;客户端和服务器会协商并使用相同的TLS协议版本和密码套件来进行通信。通过发送特定的握手请求并分析响应&#xff0c;可以确定目标服务器…

图解API设计风格,看一眼就忘不了了!

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

轻松掌控财务,分析账户花销,明细记录支出情况

随着科技的发展&#xff0c;我们的生活变得越来越智能化。然而&#xff0c;对于许多忙碌的现代人来说&#xff0c;管理财务可能是一件令人头疼的事情。复杂的账单、花销、收入&#xff0c;这些可能会让你感到无从下手。但现在&#xff0c;我们有一个全新的解决方案——一款全新…

马斯克的SpaceX星舰又炸了!发射不久后失联自毁

就在几小时前&#xff0c;马斯克旗下SpaceX 发射了有史以来最强大的星舰&#xff0c;但在发射后不久发生爆炸。 在这次发射尝试中&#xff0c;星舰一二级成功进行了分离&#xff0c;但二级助推器和星舰都发生了快速意料之外的解体。在发射半小时后&#xff0c;SpaceX 宣布二级自…

nginx后端服务器在负载均衡调度中的状态

状态说明 down 状态说明当前的sever暂时不参与负载均衡

腾讯云轻量数据库测评和轻量数据库配置价格表

腾讯云轻量数据库测评&#xff0c;轻量数据库100%兼容MySQL 5.7和8.0&#xff0c;腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库&#xff0c;腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

unordered_map,unordered_set模拟实现

目录 一 . 底层结构--哈希 1.直接定址法 2. 除留余数法 哈希桶 3. 一些定义 二 . 模拟实现哈希表 1.哈希表框架 ​编辑 2.插入 3.查找 4 . 删除 5.解决使用问题 6.完整代码 三 .实现unordered_map, unordered_set 1. 初步实现unordered_map, unordered_set 2.…

【C++】泛型编程 ⑦ ( 模板类常用用法 | 模板类声明 | 模板类调用 | 模板类作为函数参数 )

文章目录 一、类模板基础用法1、类模板声明定义2、类模板使用3、类模板做函数参数 二、完整代码示例1、代码示例2、执行结果 一、类模板基础用法 1、类模板声明定义 上一篇博客中 , 【C】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 ) 讲解了模板类的基础语法 , 模板类声明如…

三菱PLC 模拟量输出模拟量转换功能块S_RTI(内嵌ST)

模拟量输出模拟量转换功能块S_RTI算法原理和公式介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Rea…

实战项目:VB龟兔赛跑游戏+猜数字游戏

文章目录&#xff1a; 一&#xff1a;效果演示 二&#xff1a;实现思路 三&#xff1a;代码实现 form1 效果图 代码 form2 效果图 代码 form3 效果图 代码 一&#xff1a;效果演示 效果图◕‿◕✌✌✌ 代码下载 二&#xff1a;实现思路 窗口1&#xff1a;龟兔赛…

数据结构【DS】特殊二叉树

完全二叉树 叶子结点只能出现在最下层和次下层, 最下层的叶子结点集中在树的左部完全二叉树中, 度为1的节点数 0个或者1个【计算时可以用这个快速计算, 配合&#x1d45b;0&#x1d45b;21】若n为奇数&#xff0c;则分支节点每个都有左右孩子&#xff1b;若n为偶数&#xff0…

Python---return返回值

return返回值 返回值&#xff1a;很多函数在执行完毕后&#xff0c;会通过return关键字返回一个结果给 调用它的位置。 return 英 /rɪˈtɜːn/ n. 回来&#xff0c;返回&#xff1b; 思考&#xff1a;如果一个函数需要两个return (如下所示)&#xff0c;程序如何执行&…

C语言——1.入门须知

文章目录 1.C语言的简要概述1.1.C语言类比自然语言1.2.计算机语言的发展1.3.C语言在当今的地位1.4.C语言的优势和劣势1.4.1.C语言的优势1.4.2.C语言的劣势 2.C语言的应用场景3.C语言的学习路径3.1.学习目的3.2.学习路径3.3.学习资源3.3.1.推荐书籍3.3.2.推荐课程3.3.3.推荐题库…

Nodejs--Express框架使用

目录 一.概念 二.项目目录结构 三.app.js 四.项目需要的中间件 五.Mysql连接 六.日志配置 七.实体模型配置 八.统一结果封装 九.app.js的详细配置 十.自定义登录拦截器 十一.route路由配置 十二.controller处理 十二&#xff1a;静态页面&#xff1a; 十三&#xff…

男子遗失30万天价VERTU唐卡手机,警察2小时“光速”寻回

今天&#xff0c;一则“男子丢失30万元手机女子捡到一位老年机”的新闻迅速冲上热搜第一&#xff0c;引发全网热议。据宿城公安消息&#xff1a;近日&#xff0c;江苏省宿迁市市民王先生在购物时不慎失落了一部价值30万元的全球知名奢侈品VERTU手机&#xff0c;被民警2个多小时…