机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

news2024/11/22 23:40:19

到目前为止,我们已经了解了RPA是什么,并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前,让我们学习如何控制从一个到另一个的活动流。

在本章中,我们将学习如何有序地安排活动以及如何控制流程。这些是任何编程的基础。我们将学习如何将活动放入序列、流程图和循环中。我们还将使用if-else来研究逻辑控制。

为了训练机器人处理一种类型的事务,有条理的流程中的指令是非常重要的。大多数情况下,这些指令是按顺序执行的。让我们详细了解这一点。

本章将涵盖以下主题:

  • 顺序工作流
  • 活动
  • 流程图是什么以及何时使用
  • 控制流、各种类型的循环和决策
  • 使用序列和流程图的示例

顺序工作流

UiPath提供了四种类型的项目:

  • 序列
  • 流程图
  • 用户事件
  • 状态机

这些都是用来设计一个基于类型和方便的项目。这四种类型的项目在处理不同类型的过程时非常有用。流程图和序列主要用于简单的自动化。用户事件有利于实现前台机器人,而状态机则用于处理复杂的业务流程。

什么是序列?

序列是一组逻辑步骤。每一步都代表一个动作或一件工作。序列用于线性连续发生的过程,即一个接一个的过程。UiPath中的三种类型的项目中,Sequences是最小的。下一节介绍了如何在UiPath Studio中构建序列。

在下面的例子中,我们将制作一个简单的项目,询问用户的姓名,然后显示他或她的回答:

  1. 打开UiPath Studio并单击“空白”以启动新项目。给它取一个有意义的名字。从左侧“活动”面板中拖放流程图活动。
  2. 在Activities(活动)面板中搜索序列,然后将其拖放到流程图中,如以下屏幕截图所示:
  3. 双击序列。我们现在必须添加我们想要执行的步骤。将每一步都视为一项行动。
  4. 我们可以在序列中添加许多步骤。为了简单起见,我们将添加两个步骤:
    1. 在输入对话框中询问用户名
    2. 在消息框中显示用户名
  5. “活动”面板的“搜索”面板中的搜索“输入”对话框。在序列中拖放输入对话框活动(输入对话框活动是一个显示消息或问题的对话框,要求用户在回复中填写):

    在“输入”对话框的“标签”上写下相应的消息,询问用户名。在我们的案例中,我们写入“what's your name?”。
  6. 将消息框活动拖放到序列中。(顾名思义,消息框显示给定的文本。在这种情况下,我们将使用它来显示用户在被问及姓名时在“输入”对话框中给出的文本/回复。)
  7. 接下来,创建一个变量并为其指定所需的名称。此变量将接收用户在“输入”对话框中输入的文本,以回答我们的问题,即用户名:
  8. 现在,我们必须指定“输入”对话框的“结果”属性(在“属性”面板中)。在那里指定变量名后,它将接收用户输入的文本。单击显示在Result属性右侧的虚线图标。现在,指定变量名:
  9. 指定我们在消息框的文本区域中创建的变量名称(消息框的“文本”区域用于输入将在消息框中显示的文本)。我们只需要将序列连接到开始图标。这可以通过右键单击“序列”活动并选择“设置为开始节点”选项来完成。
  10. 点击Run(运行)按钮,查看结果。

活动

在UiPath Studio中,一个活动表示一个操作单元。每个活动都执行一些操作。当这些活动结合在一起时,就变成了一个过程。

每个活动都位于设计器主面板的“活动”面板上。您可以搜索特定的活动并将其用于您的项目中。例如,当我们搜索浏览器时,所有浏览器活动都将显示在“活动”面板中,如以下屏幕截图所示:

将活动与工作流一起使用

我们已经了解了如何轻松地搜索特定的活动。现在,让我们看看如何在工作流中使用它们:

  1. 以与我们在“活动”面板搜索栏中搜索浏览器活动相同的方式搜索“流程图”。将流程图活动拖放到“设计器”面板内。
  2. 流程图显示在“设计器”面板中,并且我们有一个给定的“开始”节点。“开始”节点指定执行的开始位置。
  3. 我们准备在流程图中使用不同的活动。您可以使用流程图中的任何活动。为了简单起见,让我们只使用Write Line活动。
  4. 在流程图中拖放“Write Line”活动。通过提供字符串值来设置其文本属性。通过右键单击“Write Line”活动并选择“设置为起始节点”,将此Write Line活动与“开始”节点连接起来。

你可能想知道工作流的作用是什么。假设你有一个由数百个活动组成的大项目。您将如何调试它?处理这样的情况是开发人员的噩梦。在这里,工作流程开始发挥作用。要构建这样一个大项目,开发人员只需将其划分为较小的模块,并将其提取为工作流。现在,每个工作流都可以单独测试。因此,很容易发现bug和错误。创建不同的工作流并将它们组合成一个逻辑序列将提高我们的代码质量、可维护性、可靠性和可读性

我们制作了一个较小的模块,现在是时候将其提取为工作流了。右键单击“设计器”主面板,然后选择“提取为工作流”:

会弹出一个窗口询问姓名。给它一个有意义的名称,然后单击“创建”。这将是您的工作流名称:

我们刚刚使用了活动,并在工作流中提取了它们。如果检查设计主面板,它看起来像下面的屏幕截图:

它会自动生成“调用工作流”活动。现在,当我们运行程序时,它将调用我们提取的工作流(双击“调用工作流”活动,查看它将调用哪个工作流以及它在哪里生成)。

流程图是什么以及何时使用

流程图通常用于复杂的业务流程。它提供决策便利,可用于小型和大型项目。在这里,我们可以通过不同的方式添加活动:

流程图提供了多个分支逻辑运算符来进行决策。流程图可以反向运行。此外,它也可以在序列中使用。流程图有助于不同项目的可重用性。一旦我们创建了它用于项目,它就可以用于不同但相似的项目。

流程图的分支默认设置为true/false。但是,可以从“属性”面板手动更改其名称。

例如,输入两个数字并检查它们的总和是否小于20。

执行以下步骤:

  1. 首先,将“活动”面板中的流程图添加到“设计器”面板中。
  2. 在流程图中添加序列活动。
  3. 在“序列”活动中执行两个“输入”对话框活动(用于输入要添加的数字)。
  4. 创建变量x和y以保存值。
  5. 接下来,添加一个消息框活动以执行数学运算。在我们的例子中,这两个数字之和小于20:
    int.Parse(X)+int.Parse(Y)<20
  6. 现在,添加一个Flow Decision活动来检查数学运算。
  7. 如果为true,则Flow Decision将流向true分支。否则,它将流向假分支。


控制流、各种类型的循环和决策

控制流是指在自动化中执行操作的顺序或特定方式。UiPath为执行决策过程提供了许多活动。“活动”面板中的这些活动使用双击方法或拖放方法放入工作流中。

不同类型的控制流活动如下:

  • 分配活动
  • Delay活动
  • 中断活动
  • 先条件循环活动
  • 后条件循环活动
  • 遍历循环
  • if 活动
  • 切换活动

分配活动(Assign)

Assign活动用于为变量指定一个值。Assign活动可以用于不同的目的,例如增加循环中变量的值,或者使用变量的和、差、乘或除的结果并将其分配给另一个变量。

Delay活动

顾名思义,Delay活动用于通过将自动化暂停一段定义的时间来延迟或减缓自动化。工作流在指定的时间段后继续。它采用hh:mm:ss格式。当我们在自动化过程中需要一段等待期时,这个活动发挥着重要作用,比如说,打开特定应用程序所需的等待期。

示例

为了更好地理解Delay活动是如何工作的,让我们看一个自动化的例子,它向Output面板写入两条延迟50秒的消息。

执行以下步骤:

  1. 首先,创建一个新的流程图。
  2. 从Activities(活动)面板添加Write line(写入行)活动,并将其连接到Start(开始)节点。
  3. 选择写入行活动。现在,在文本框中键入以下文本:“Hey,What's your name?”。
  4. 接下来,添加一个Delay活动,并将其连接到Write line活动。
  5. 选择Delay活动,然后转到属性面板。在“持续时间”字段中,设置00:00:50。这是两条记录消息之间的50秒延迟。
  6. 采取另一个写入行活动,并将其连接到延迟活动。在文本字段中,写入My Name is Andrew Ng.。
  7. 单击Run(运行)按钮后,Output(输出)面板会显示一条消息,将其延迟50秒:

中断活动(Break)

中断活动用于在特定点中断/停止循环,然后根据要求继续进行下一个活动。它不能用于除对于遍历循环的任何其他活动。当我们想要打破循环以继续到对于遍历循环活动中的下一个活动时,这很有用。

示例

在本例中,我们将使用中断活动只执行一次迭代。

执行以下步骤:

  1. 将序列活动添加到设计器面板中。
  2. 下一步,在序列中添加遍历循环活动(如前一节所述,要使用Break活动,我们需要遍历循环):
  3. 创建两个变量;名为item的整数变量和名为X的数组整数变量。然后,将它们设置为文本字段。
  4. 在循环正文中添加中断活动。
  5. 在遍历循环活动下,添加一个Write line活动。
  6. 在Write Line活动中,在文本字段中键入item.ToString()。
  7. 当我们单击Run按钮时,它将显示一个元素,如下面的屏幕截图所示。这是由于Break活动,该活动在第一次迭代后已停止执行:

在进行其他控制流活动之前,我们将了解循环,这是自动化的一个重要方面。自动化最常被提及的优点之一是它能够执行重复的功能,并且能够毫无错误地执行这些功能。循环正是用于此类函数的。比方说,一个人想要针对不同的情况或当满足某个标准时重复工作流程的某个部分。在这种情况下,循环非常方便。可以简单地通过将工作流的末端连接到我们希望工作流恢复的点来创建循环。

在进行这样的循环时,需要记住的一件事是确保也有一个出口点。否则,循环将无限继续!

在各种控制流活动中提到的While先条件循环、Do While后条件循环和For each遍历循环活动就是循环的示例。现在让我们看看它们在哪里使用以及它们是如何工作的。

先条件循环活动(while)

While活动在自动化中用于根据特定条件执行语句或流程。如果结果为true,则执行循环;即重复执行该处理。只有当条件不成立时,项目才会退出循环。在遍历元素数组时,此活动非常有用。

示例

在下面的例子中,我们将看到一个整数变量如何以5为增量从5增加到50。

执行以下步骤:

  1. 在Blank项目中,添加Sequence活动(默认)。
  2. 现在,创建一个整数类型的变量X。将其默认值设置为5。
  3. 接下来,将先条件循环While活动添加到序列中。
  4. 在条件字段中,设置x<50。
  5. 将Assign活动添加到While循环的Body部分。
  6. 现在,转到Assign活动的Properties面板,在文本字段integer variable中键入value字段integer x+5
  7. 拖放Write line活动并指定变量名称X并应用ToString方法:
  8. 现在,单击Run(运行)按钮。输出将显示在输出面板中,如以下屏幕截图所示:

Do while后条件循环活动

Do while活动用于自动化中,当需要根据特定条件的满足执行语句时。它与While活动的不同之处在于,它执行一条语句,然后检查条件是否满足。如果条件未满足,则退出循环。

示例

让我们举一个例子来了解Do while活动在自动化中是如何工作的。取一个整数变量。从这个变量开始,我们将生成2的所有倍数,小于20。

执行以下步骤:

  1. 将Sequence(默认)添加到设计器面板。
  2. 从Activities面板添加Do while活动。
  3. 在Do while活动的正文部分中,添加一个Assign(分配)活动。
  4. 现在,选择分配活动。转到“属性”面板,创建一个整数变量Y。将其默认值设置为2。
  5. 在Assign活动的value部分设置Y+2,以每次将结果递增,直到执行循环为止。
  6. 在Assign活动中添加WriteLine活动。
  7. 在WriteLine活动的文本字段中,键入Y.ToString()。
  8. 在条件部分中,设置条件Y<209。循环将继续,直到条件成立:
  9. 单击Run(运行)按钮后,显示的输出如下:

For each遍历循环活动

For each活动的工作方式是一次迭代项集合或元素列表中的每个元素。在这个过程中,它将执行身体内部可用的所有操作。因此,它遍历数据并分别处理每条信息。

示例

在下面的示例中,我们将使用For each活动来遍历偶数集合,并一次显示一个元素。

执行以下步骤:

  1. 从UiPath中的空白项目开始。
  2. 将Sequence活动添加到设计器面板中。
  3. 接下来,在Sequence中添加For each活动,并创建一个整数类型的数组变量X。
  4. 在变量的默认值中,放入new int[]{2,4,6,8,10,12,14,16,18,20}
  5. 将“WriteLine”活动添加到设计器面板(此活动用于显示结果)。
  6. 在“WriteLine”活动的“文本”字段中,键入currentItem.ToString()
  7. 现在,运行程序。您将看到,由于使用了For each活动,数组中的每个数字都会逐一显示:

控制流还促进决策机制,有助于对特定活动的步骤做出决策。例如,假设我们使用的是一个循环,并且我们只想显示一个所需的值,那么我们可以通过实现If活动来过滤掉所有的所需值,并根据If活动的结果做出决定,即true或false。在执行所需元素后,决策过程将需要一些时间来中断操作。接下来是休息活动,这将发挥重要作用。如果要从任务中选择执行,则需要切换活动才能做出这样的决定。

If活动和Switch活动是控制流的决策活动。

If活动

If活动由一个具有两个条件的语句组成:true或false。如果该语句为true,则执行第一个条件;如果不是,则执行第二条件。当我们必须根据陈述作出决定时,这是有用的。

为了更好地理解If活动是如何工作的,让我们看一个检查任意两个数字之和是否小于6的示例。

执行以下步骤:

  1. 从“活动”面板添加流程图。
  2. 添加两个“输入”对话框活动。创建两个整数变量x和y。
  3. 在“属性”面板中,更改“输入”对话框活动的标签名称和标题名称。
  4. 现在,在两个“输入”对话框活动的“结果”属性中指定这两个变量的名称。
  5. 现在将If活动添加到Designer面板:

  6. 单击Run(运行)按钮以检查输出。如果条件成立,那么它将显示真实值;否则,它将显示false值,如第二个屏幕截图所示(在我们的情况下,我们将x和y的值分别作为和,从而得到13的和,该和不小于;因此,输出将其显示为false值):

(切换)活动

切换活动可用于进行选择。当我们有各种可用的选项并且想要执行一个选项时,我们经常使用Switch活动。

默认情况下,Switch活动接受一个整数参数。如果我们想要获取所需的参数,那么我们可以从属性面板的类型参数列表中对其进行更改。Switch活动在根据自己的选择对数据进行分类时非常有用。

示例

让我们看一个例子,我们必须检查给定的数字是奇数还是偶数。

我们知道,所有奇数除以2,都会留下1的余数。另一方面,偶数除以2后,余数为0。因此,我们将有两个情况得到1或0的余数。

执行以下步骤:

  1. 添加Sequence活动。
  2. 在Sequence中添加输入对话框活动。
  3. 现在,创建一个整数类型的变量k。
  4. 在“属性”面板内的“结果”属性中指定新创建的变量的名称。
  5. 在“输入”对话框活动下添加“切换”活动。
  6. 在表达式字段中,设置 C# k %2, VB k mod 2, 以检查数字是否可被2整除。
  7. 将“WriteLine”活动添加到“默认”部分,然后键入K.ToString()+" is an even number"在文本字段中。
  8. 现在,创建Case 1,向其中添加另一个Write行活动,然后键入K.ToString()+" is an odd number"

使用Sequence和流程图的示例

Sequence和流程图是相似的概念。它们都用于包含逻辑步骤或操作。每个人都应该知道何时使用它们。它们的不同之处在于,序列通常用于包含执行一个操作的多个步骤。另一方面,流程图适用于特定任务。当我们有很多类似的步骤时,我们将它们包含在序列中。可能有不同的序列在执行它们的工作。我们可以很容易地将类似的序列放入工作流中;每个工作流代表一个任务。单独测试单独的工作流非常容易。让我们通过一个例子来更好地理解它们。

如何使用Sequence

可能有不同的序列在执行它们的工作。我们可以很容易地将类似的序列放入工作流中;每个工作流代表一个任务。单独测试单独的工作流非常容易。让我们通过一个例子来更好地理解它们。

执行以下步骤:

  1. 将流程图拖放到“设计器”面板上。拖放序列活动。将“序列”活动与“Start”节点连接。
  2. 双击序列活动。拖放“输入”对话框活动和“消息框”活动。在“输入”对话框活动的标签属性中指定消息。

点击Run(运行)按钮或按F5键查看结果。

我们可以清楚地看到,我们在序列中使用了两个逻辑相关的活动(一个用于输入名称,另一个用于弹出名称)。在这里,序列包含两个活动。当然,您可以在序列中放置任意数量的活动;它将根据您定义它的顺序执行。

如何使用流程图

之前,我们已经了解了如何使用序列和活动。我们现在将学习如何使用流程图。流程图是一个容器。它可以包含其中的活动。

我要使用电子邮件活动,例如,请安装UiPath.Mail.activities。您可以通过单击管理程序包图标或按Ctrl+P找到它,然后在所有程序包中搜索邮件。您将在第六章中了解有关软件包的更多信息。

让我们在流程图中拖放一个消息框活动。双击消息框,在要引用文本的区域键入)“Hello world"。按F5键查看结果):

因此,当程序只有几个步骤时,我们可以直接在流程图中使用活动。然而,当我们有大量的步骤时,它会变得更加复杂。这就是为什么有必要将相关活动安排到序列中,然后将序列分组到流程图中。

让我们举一个例子来看看如何在流程图中使用序列。

我们不会实现发送电子邮件的实际代码。稍后将详细介绍。本案例的目的是清楚地了解我们在何处以及如何使用工作流和序列。

执行以下步骤:

  1. 在主流程图上拖放两个流程图活动。并且重命名为Send Email 和Message。
  2. 我们有两种不同的工作流程。“Send Email”工作流会将邮件发送到电子邮件地址。邮件工作流具有该电子邮件的邮件正文,并将要求用户输入姓名、邮件、发件人和收件人。
  3. 我们必须在两个工作流程中实施所需的步骤。
    为此,我们在流程图中使用序列。双击流程图。在两个流程图中拖放一个序列活动。通过右键单击“序列”并选择“设置为开始节点”选项,将“序列”连接到“开始”节点。
  4. 双击Message流程图中的序列。拖放名称、消息、发送者和接收者的四个输入对话框活动(在此序列中,我们不设置消息框的任何属性,因为本课程的目的是清楚地了解我们在何处以及如何使用工作流和序列):
  5. 双击“Send Email流程图”。双击序列。您可以在此处拖放电子邮件活动。(我们不会拖动任何邮件活动,尽管您可以自由拖动。那是另一章节的内容)。
  6. 就是这样。现在,转到主流程图。将Message流程图连接到“开始”节点。此外,请将“发送邮件”活动连接到“Send Email流程图”:

使用序列和控制流的示例

在本节中,我们将通过一个示例讨论控制流。我们将看到如何在序列中使用控制流。如前所述,存在各种控制流活动。

考虑一个名称数组。假设我们必须找出其中有多少名字以字母a开头。然后我们将创建一个自动化系统,计算以a开头的名字的数量,并显示结果。

执行以下步骤:

  1. 从活动面板中拖放流程图活动。
  2. 在流程图中拖放序列活动。通过右键单击“序列”活动并选择“设置为开始节点”选项,将“序列”连接到“开始”节点。
  3. 双击序列活动。创建一个变量,给它一个名称(在我们的例子中,我们将创建一个类型字符串的数组,并将变量命名为names)。将变量类型设置为[T]的数组。当询问数组的类型时,请选择字符串。
    此外,在变量的Default部分中,通过给数组一个默认值来初始化数组。例如,
    new string[]{"John","sam","Andrew","Anita"}

  4. 创建整型的变量Count以存储结果。将变量类型设置为Int32:
  5. 在序列中拖放Foreach活动。此外,在Foreach活动的表达式框中指定数组名称。Foreach活动用于对数组进行迭代。它每次都会从数组中提取一个名称,直到到达末尾:
  6. 从Activities(活动)面板拖放If(如果)活动,并将其放置在For each(对于每个活动)中提到drop activity here(将活动拖到此处)的位置。在If活动的表达式框中指定条件。If活动用于检查特定条件/表达式。如果满足该表达式,则将执行Then块。否则,Else块将被执行。
    我们已将表达式指定为currentItem.ToString().StartsWith('a'), 此表达式指定项变量中以字母开头的名称为a, For each活动在数组上迭代,一次获取一个名称,并将其存储为变量currentItem。
  7. 现在,我们将使用Count变量,并在每次数组中的名称以字母B开头时将其递增。为此,我们必须使用a+B Assign活动。将A+B Assign活动拖放到If活动中。将A+B Assign活动的To属性设置为Count(变量名),将Value属性设置为Count+1(以增加其值):
  8. 只需将“消息框”活动拖放到“序列”活动中即可。在“消息框”活动的表达式框中指定计数变量。但请记住,我们创建的变量的类型是Int32,因此,如果不将其转换为字符串,就无法将其用于Message box活动。为了将其转换为字符串,我们在UiPathStudio中提供了ToString方法。只需将其应用于变量并选择Count.ToString():

点击Run(运行)按钮或按F5键查看结果。

总结

在本章中,我们检查了记录器生成的项目,并看到了对程序流(工作流)结构的解释。我们了解序列的使用和活动的嵌套。我们学习了如何使用工作流、流程图和控制流的构建块(循环和决策)。

在下一章中,我们将学习使用内存和变量的技术,还将学习如何使用数据表在内存中存储和轻松操作数据。下一章还将展示如何使用磁盘文件(CSV、Excel等)来保存数据。

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

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

相关文章

【算法分析与设计】算法概述

目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析&#xff08;一&#xff09;算法时间复杂性分析&#xff08;二&#xff09;算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…

Prometheus+Grafana监控K8S集群(基于K8S环境部署)

文章目录 一、环境信息二、部署前准备工作三、部署Prometheus监控系统四、部署Node_exporter组件五、部署Kube_state_metrics组件六、部署Grafana可视化平台七、Grafana可视化显示Prometheus收集数据八、Grafana添加监控模板九、拓展 一、环境信息 1、服务器及K8S版本信息&…

现代卷积网络实战系列4:PyTorch从零构建VGGNet训练MNIST数据集

&#x1f308;&#x1f308;&#x1f308;现代卷积网络实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、MNIST数据集处理、加载、网络初始化、测试函数 2、训练函数、PyTorch构建LeNet网络 3、PyTorch从零构建AlexNet训练MNIST数据…

【7.Vue 利用Heatmap.js 制作自定义热力图】

1.效果 2.背景 需要根据后端检测的设备的数值显示设备周围的清洁度,用户希望用热力图的方式来显示,于是在网上找了资料,发现可以用Heatmap.js来实现。 Heatmap.js 官网:https://www.patrick-wied.at/static/heatmapjs/ 3.引入组件 安装Heatmap.js npm install Heatmap.…

京东(JD)——利用人工智能实现自动零售

京东(JD)是中国最大的在线零售商之一&#xff0c;也是一家以高科技和人工智能物流而闻名的公司&#xff0c;其人工智能物流系统包括无人机交付系统、自动配送快递车以及机器人自动化配送中心。 京东一直致力于将机器人用于尽可能多地实现零售业务的物理自动化。 1.京东的人工智…

Nginx WEB访问与Linux授权约束

看到所有文件的权限都是没有的&#xff0c;即便所有的权限都没有即使nginx做了配置&#xff0c;这些都是正确的。那么在浏览器真正去访问的时候是不能访问的。 [rootjenkins html]# ls -l total 4 drwxr-xr-x 2 root root 23 Sep 16 17:43 dist ---------- 1 root root 33 Sep …

解决百度网盘登录安全验证显示空白页

百度网盘Windows客户端第一次登陆时会让验证身份 不知道什么BUG&#xff0c;有的系统能直接验证&#xff0c;有的系统不能&#xff0c;对于我这种频繁换环境的是真的难受。 试过网上各种方法&#xff0c;什么重启、重装、在IE设置中添加信任站点、清除IE缓存都不行。 但是这些…

nodejs+vue 医院病历管理系统

系统使用权限分别包括管理员、病人和医生&#xff0c;其中管理员拥有着最大的权限&#xff0c;同时管理员的功能模块也是最多的&#xff0c;管理员可以对系统上所有信息进行管理。用户可以修改个人信息&#xff0c;对医院病历信息进行查询&#xff0c;对住院信息进行添加、修改…

手机资讯:华为Mate60 Pro上手体验三天的使用体验

最近华为Mate60 Pro开售的消息引爆了整个数码科技圈&#xff0c;毕竟还没开发布会就直接开售新机&#xff0c;这放在整个手机界都是绝无仅有的&#xff0c;并且华为也官方放出了华为Mate60系列的所有参数配置&#xff0c;但唯独没有公开芯片型号和网络信号类型&#xff0c;不免…

ICCV 2023|Occ2Net,一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法...

本文为大家介绍一篇入选ICCV 2023的论文&#xff0c;《Occ2Net: Robust Image Matching Based on 3D Occupancy Estimation for Occluded Regions》&#xff0c; 一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法。 论文链接&#xff1a;https://arxiv.org/abs/23…

SQLyog安装教程

安装完MySQL数据库之后&#xff0c;为了便于我们对数据库的操作&#xff0c;所以安装一个用于数据库可视化的软件SQLyog。以下是安装步骤&#xff1a; 1. 解压之后安装。 选择SQLyog.exe或者SQLyog-11.2.4-0.X86。打开安装包之后&#xff0c;需要改安装路径的该安装路径&…

智慧公厕数字技术实现城市公共厕所智能升级

随着城市化进程的不断加快&#xff0c;城市公共厕所作为一个重要的基础设施&#xff0c;扮演着不可忽视的角色。然而&#xff0c;在现实中&#xff0c;很多城市公共厕所的设施陈旧、管理不善&#xff0c;给人们的生活带来了许多不便。为了解决这一问题&#xff0c;智慧公厕数字…

节省草稿纸的方法

问题描述&#xff1a;平时需要写一些简单的算法&#xff0c;手边没有草稿纸怎么办&#xff1f; 问题解决&#xff1a;可以使用一个QQ截图或者其他截图&#xff0c;然后使用画笔在截图上进行简单写画。在进行网上授课时&#xff0c;也可以常用这种方法。 如下图所示&#xff1…

PriorityQueue如何确定构建的是大根堆还是小根堆

PriorityQueue可以自定义传入的Comparator来比较内部元素的大小&#xff0c;Comparator比较时的返回如下&#xff1a; 如果o1 o2 ,返回0 如果o1 < o2 ,即 o1-o2 < 0 ,则返回负数 如果o1 > o2 ,即 o1-o2 > 0 ,则返回正数 如下是PriorityQueue类中新放入元素时执行的…

数据一致性:核心概念与实现策略

在当今的信息时代&#xff0c;数据已经成为了企业的核心资产之一。然而&#xff0c;随着数据量的不断增长和应用场景的不断扩大&#xff0c;如何保证数据的一致性成为了一个重要的挑战。数据一致性不仅关系到系统的正确性和可靠性&#xff0c;也直接影响到用户的体验和企业的业…

nrf52840 DK接口

外部接口 Arduino接口 按键和LED接口 Debugout接口&#xff08;P20&#xff09; Debugout接口&#xff08;P19)

rm误删文件恢复

rm误删文件恢复 问题描述安装extundeleteyum安装extundelete编译安装extundelete 常用参数动作(action)&#xff1a; 尝试数据恢复前置条件卸载磁盘分区查看被删除数据信息 恢复文件恢复指定inode号文件恢复指定文件名恢复指定目录恢复所有可恢复文件恢复指定时间的文件恢复指定…

图像绘制-线段、矩形、圆形、椭圆等

在实际运用中&#xff0c;我们会在图片上添加一些图形&#xff0c;比如目标检测时在物体周围画个矩形框&#xff0c;人脸识别中将人脸的关键点用点&#xff08;圆形&#xff09;标出来。 OpenCV常用的形状绘制方法&#xff1a; 线段的绘制 线段的绘制是使用cv2.line(img, pt…

【数据结构】二叉树的销毁 二叉树系列所有源代码(终章)

目录 一&#xff0c;二叉树的销毁 二&#xff0c;二叉树系列所有源代码 BTee.h BTee.c Queue.h Queue.c 一&#xff0c;二叉树的销毁 二叉树建好了&#xff0c;利用完了&#xff0c;也该把申请的动态内存空间给释放了&#xff0c;那要如何释放呢&#xff1f; 我们还是以…

更适合程序员体质的PPT制作工具——Slidev

Slidev简介 Slidev是什么 Slidev是一款基于Vue.js的现代化幻灯片制作工具&#xff0c;它可以帮助用户快速、高效地制作出美观、专业的幻灯片。 目前市面上有很多功能丰富的、通用的、所见即所得的幻灯片制作工具&#xff0c;例如 微软 PowerPoint 或 苹果 Keynote. 它们在制…