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

ASP.NET信息安全研究所设备管理系统的设计与实现

摘  要

以研究所的设备管理系统为背景,以研究所设备管理模式为研究对象,开发了设备管理系统。设备管理系统是设备管理与计算机技术相结合的产物,根据系统的功能需求分析与定义的数据模式,分析了应用程序的主要功能和系统实现的主要技术。系统主要包括后台数据库的开发和前端应用程序的开发两个方面。考虑了当前设备管理的相关问题,探讨了系统实现的主要相关技术:如数据库技术、C#等。该系统考虑了实际开发的设备管理系统的开发环境、系统流程,主要完成设备类型管理、设备查询、设备档案管理、用户类型管理、用户档案管理,设备征订,设备借用,设备罚款,设备归还以及相应的数据修改,添加,修改等功能。

关键词:管理系统;设备流通;设备管理;用户管理

2.1  系统功能需求

设备管理系统的功能只在具体实现上与研究所的设备管理模式密切相关,总体目标主要是管理设备的各种基本属性数据和设备生命周期中的各种技术档案,改变目前设备资料的管理方式,系统完成日常的查询,统计等各种工作,实现资料电子化管理,把技术人员从大量复杂的统计,汇总等各种工作中解脱出来,实时、准确地为管理人员提供各种数据支持,为决策提供依据,减少决策的盲目性,减少失误。具体地,本文主要体现在以下几个方面:

1.设备的管理:包括设备的类型、设备的借用时间、设备是否在库、设备的修改、删除及查询的处理等;

2.用户的管理:包括用户的姓名,证件,借用日期和归还日期,用户借用设备的权限(这一部分有些功能是预留的待开发功能模块)等操作;

3.设备的流通管理:包括设备征订,设备借用,设备归还,逾期清单,设备罚款等操作。

3.1  系统结构设计

根据对系统要求完成的功能,将系统的功能模块设计为如图1所示。

图1 系统总体功能模块结构图

5.1  主界面

此界面的主要功能是提供所有其他界面的激活功能,界面如图3所示:

在这个界面,可以通过连接进入到其他各个功能模块,具体实现如下:

//----------------------查询MDI子窗体是否存在--------------------------

private bool checkChildFrmExist(string childFrmName)

{   foreach(Form childFrm in this.MdiChildren){

        if(childFrm.Name == childFrmName) {//用Name判断,如果存在则将他激活

            if(childFrm.WindowState == FormWindowState.Minimized)

                 childFrm.WindowState = FormWindowState.Normal;

            childFrm.Activate();

图3  信息安全研究所设备管理系统主界面

            return true;} }

     return false;   }

private void menuItem2_Click(object sender, System.EventArgs e)

   {//通过窗体名称查询该窗体是否已经存在,如存在则显示,否则就新创建一个

            if (this.checkChildFrmExist("ReaderClassify")==true)

            { return; }

            ReaderClassify newFrm = new ReaderClassify();

            newFrm.MdiParent = this;

            newFrm.Show(); }

在调用其他界面之前,首先要连接数据库。原程序如下:

tringstrConn=@"DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|libbook.mdf; Integrated Security=True;Connect Timeout=30;User Instance=True";

SqlConnection cn = new SqlConnection(strConn);

cn.Open();

SqlCommand cmd = cn.CreateCommand();

对于数据库来说,Connection对象是唯一与外界沟通的管道,负责应用程序与数据库服务器实际的链接操作,所以所有对数据库做处理的操作,例如Command数据库之间的沟通都必须依赖与Connection对象。

Cn的含义是定义了一个变量,用来存放数据库连接所创建的对象。

Cn.open()则真正实现了数据库的连接。

在对数据库操作完后,一定要用Close方法关闭Connection对象与数据库的链接,使用该方法时会切断Connection对象与数据库之间的传送通道,并且所有依赖该Connection对象的Command对象都会立即被切断关联;在使用Close方法切断Connection对象与数据库之间的链接之后,可以调用Open方法再次打开该对象;如果Connection对象与数据库正在进行事物处理,那么调用Close方法会造成执行上的错误且所有未完全更新的数据将会丢失,同时Command对象也会自动关闭且丢失相关未更新数据。

5.2  用户管理

  1. 用户类别设置:

用户类别设置包括了用户的不同类型,用户类型查询,显示全部用户类型,添加新的用户类型,删除用户类型,用户借设备的各种限制。添加用户类型时,为了减少数据的复杂,如果所添类型在数据库中已有,则不在数据库中重复记录。当然在数据库中如果没有该用户类型就记录该类型到数据库中。添加类型信息包括:用户类型,可借设备数,可借特殊设备数,续借次数,借用范围,如图4所示。具体实现如下:

图4  用户类别设置界面

if(

e.Button.ToolTipText == "新增") 

{

        cmOrders.AddNew();

        txt2.Text = "用户类别";

        txt3.Text = "1";

        txt4.Text = "1";

        txt5.Text = "1";      

 SetModifyMode(true);}

  if(e.Button.ToolTipText == "修改")

        {SetModifyMode(true);}

  if(e.Button.ToolTipText == "删除")   {

DialogResult result=MessageBox.Show("确认删除?","删除数据", MessageBoxButtons.OKCancel);

     if(result==DialogResult.OK)

       if(cmOrders.Count > 0)  {   //立即从数据集中删除

       cmOrders.RemoveAt(cmOrders.Position);

        da1.Update(dataSet11); }

  1. 用户档案管理:

用户档案管理包括了用户编号,姓名查询,显示全部用户,添加用户信息,删除用户信息。添加一个新的用户信息时,为了减少数据的复杂,如果所添用户信息数据库中已有则不再数据库中重复记录。当然在数据库中如果没有该用户信息则记录该信息到数据库中。添加用户信息包括:编号,姓名,性别,类型,出生日期,有效证件,证件号码,联系方式,登记日期,有限期至,操作员,备注,设备借用次数,特殊设备借用次数,是否挂失,如图5所示:

具体实现如下:

int maxID=1;//计算新编号

object result=cmd.ExecuteScalar();

if(

result!=System.DBNull.Value)      {

maxID=Convert.ToInt32(result)+1;}

int length=maxID.ToString().Length;

switch(length) {

case 1:txt5.Text="000"+maxID.ToString();break;

case 2: txt5.Text="00"+maxID.ToString();break;

case 3: txt5.Text="0"+maxID.ToString();break;

图5  用户档案管理界面

case 4: txt5.Text=maxID.ToString();break;}

cmb2.SelectedIndex=0;//选择默认类型  }

5.3  设备管理

  1. 设备类别设置:

设备类别设置分类按照所属类型进行分类:交换设备,服务器,安全性设备,传输,其他设备。可以进行设备设置,更改设备类型名称,可以借用的天数,类型编号,如图6所示:

图6  设备类别设置界面

具体实现如下:

int maxID = 1;//计算新编号

    object result = cmd.ExecuteScalar();//返回查询中返回的第一行第一列

    if (result != System.DBNull.Value) {

         maxID = Convert.ToInt32(result) + 1; }

     int length = maxID.ToString().Length;//数值转字符

     switch (length) {

         case 1:txt3.Text = "00" + maxID.ToString();break;

         case 2: txt3.Text = "0" + maxID.ToString();break;

         case 3:txt3.Text = maxID.ToString();break; }

      txt4.Text = "1";//设置默认可借天数 }

  1. 设备档案管理:

设备档案管理包括了设备类型,查询设备,显示全部设备,添加设备类型,删除设备分类以及设备信息。添加设备时,为了减少数据的复杂,如果所添加设备在数据库中已有则不再在数据库中重复记录。当然在数据库中如果没有该设备就记录该设备到数据库中。添加设备信息包括:设备编号,设备名,类型,是否在库,公司,批号,加工厂,价格,重量,仓库名称,现存量,库存总量,入库时间,操作员,简介,借出次数,是否注销,如图7所示:

图7  设备档案管理界面

具体实现如下:

      cmOrders = (CurrencyManager)BindingContext[dataSet11, "设备信息"];

       //设置【加工厂】,【仓库名称】,【类型】三个下拉列表框设置下拉列表

        setCombo("select distinct 类型名称from 设备类型", cmb1);

        setCombo("select distinct 加工厂名称from 加工厂", cmb2);

        setCombo("select distinct 仓库名称from 仓库", cmb3);             }

int maxID=1;//计算新编号

object result=cmd.ExecuteScalar();                

 if(result!=System.DBNull.Value) {

  maxID=Convert.ToInt32(result)+1;}

 int length=maxID.ToString().Length;

 switch(length)//生成新的编码{

  case 1:txt5.Text="000000"+maxID.ToString();break;

case 2:txt5.Text="00000"+maxID.ToString();break;

  case 3:txt5.Text="0000"+maxID.ToString();break;

  case 4:txt5.Text="000"+maxID.ToString();break;

  case 5:txt5.Text="00"+maxID.ToString();break;

  case 6:txt5.Text="0"+maxID.ToString();break;}   }

5.4  流通管理

1.设备征订:

设备征订可以对已有的设备进行征订,通过设备编号来进行征订,征订编号从以被征订的编号开始算起,依次往后加一位,实现顺序排列,如图8所示。具体实现如下:

//-----------显示设备编号时同时显示设备名称--------------

   private void txt4_TextChanged(object sender, System.EventArgs e) {

if (txt4.ReadOnly == false || txt4.Text.Trim() == ""){

          return; }

//------------调出设备选择窗体,选择设备-------------

    private void cmb1_DropDown(object sender, System.EventArgs e) {

        cmb1.Text = "";//清空原有设备名

        Selectequip newfrm = new Selectequip();//调出新窗口选择设备

        newfrm.Text = "双击表格选择设备";

        newfrm.ShowDialog();

        txt4.Text = equipID;//读入选择的设备信息

图8  设备征订界面

        cmb1.Text = equipName; }

//-----------调用储存过程,提交设备征订----------

     private void btnSusbribe_Click(object sender, System.EventArgs e) {

SqlCommand cmd = cn.CreateCommand();

        cmd.CommandText = "exec sf_设备征订";

            try

               {cmd.ExecuteNonQuery();

                dataSet11.设备征订.Clear();//刷新数据集

                da1.SelectCommand.Parameters[0].Value = "%";

                da1.SelectCommand.Parameters[1].Value = "%";

                da1.Fill(dataSet11); return; }

在这个征订界面中还有嵌入了另外一个查询选择界面,从这个选择界面里面可以选择要进行征订的设备,如图9所示:

具体实现如下:

//-------------双击选择设备-----------------

     private void dataGrid1_DoubleClick(object sender, System.EventArgs e) {

         int curRow = dataGrid1.CurrentCell.RowNumber;

         equipSubscribe.equipID = dataGrid1[curRow, 0].ToString();

         equipSubscribe.equipName = dataGrid1[curRow, 1].ToString();

         this.Close();}

图9  设备选择界面

2.设备借用:

设备借用模块用户可以借用需要的设备,管理员输入用户号的条形码或编号,然后系统自动调出用户的信息,操作员再输入设备的编号或条形码就可以得到需要借用的设备。点击确定就可以借用该设备。如果点取消借设备则借设备不成功。如果再输入了设备编号而未确定是否借设备就点击退出,系统会提示有设备正在借用,退出无法保存。相同的设备只能借用一次,如果再次输入同样的设备编号系统会提示此设备以借用。如果输入的编号无对应的设备,系统也会提示,如图10所示。具体实现如下:

图10  设备借用界面

 if (rbt1.Checked)//判断根据编号查询用户信息还是根据条形码

 {cmd.CommandText = "select a.姓名,a.类型,b.设备数量,a.编号from 用户信息a,用户类型b" + " where (a.类型=b.类型)and(a.编号='" + txt1.Text.Trim() + "')"; }  else {

cmd.CommandText = "select a.姓名,a.类型,b.设备数量,a.编号from 用户信息a,用户类型b" + " where (a.类型=b.类型)and(a.条形码='" + txt1.Text.Trim() + "')"; }

 SqlDataReader dr = cmd.ExecuteReader();//执行查询,并读入用户数据

  dr.Read(); return; }

  //--------------按回车借设备---------------

private void txt5_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {

if (e.KeyChar == 13 && txt5.Text.Trim() != "")//获取与按下键相同的字符

      {this.borrowequip();//用户借设备   } }

   //------------用户借设备-------------

private void borrowequip(){

   if (this.totalCount >= Convert.ToInt32(txt4.Text.Trim()))//如果借设备达到上限,则不允许再借

      { MessageBox.Show("已经达到最大借设备数量,请先归还设备后再借设备", "借设备数量达到上限", MessageBoxButtons.OK, MessageBoxIcon.Information);

   groupBox2.Enabled = false;  return;  }{

   cmd.CommandText = "select 编号,设备名,加工厂,价格,类型from 设备信息where 编号='" + txt5.Text.Trim() + "'";  }

//计算归还时间

 int days = Convert.ToInt32(cmd.ExecuteScalar());

  DateTime returnTime = System.DateTime.Now.AddDays(days);//获取当前时间

     aRow["应还时间"] = returnTime.ToString();

     tblequips.Rows.Add(aRow);//增加新借设备记录

  totalCount++; }

3.逾期清单:

模块的主要功能是看到哪些用户的设备逾期了,如图11所示:

具体实现如下:

    private void Overdueequip_Load(object sender, System.EventArgs e)

        { da1.SelectCommand.Parameters[0].Value = "%%";

            da1.SelectCommand.Parameters[1].Value = "%%";

            da1.SelectCommand.Parameters[2].Value = "%%";

            da1.Fill(dataSet21);}

图11  逾期清单界面

4.设备归还:

int overDays = 365 * (System.DateTime.Now.Year - rTime.Year) + System.DateTime.Now.DayOfYear - rTime.DayOfYear; //计算过期天数

        //根据过期天数计算罚金,台实例中定为每天.2元

       decimal fee = (decimal)0.2 * overDays;  return (fee); }


图12  设备归还界面

5.设备罚款:

设备罚款模块提供了一个罚款平台,但用户的设备借用逾期时,就会进行相应的罚款,如图13所示。

具体实现如下:

//-----------收取罚款-----------

 private void btnPenalty_Click(object sender, System.EventArgs e) {

    if (txt4.Text.Trim() == "")

       {MessageBox.Show("请输入实收罚款金额", "输入金额", MessageBoxButtons.OK, MessageBoxIcon.Error);

     return;   }

图13  设备罚款界面

     decimal money = Convert.ToDecimal(txt4.Text.Trim());//应收罚款金额

stringpenaltyID=dataGrid1[dataGrid1.CurrentCell.RowNumber,0].ToString().Trim();//罚款记录编号

相关文章:

ASP.NET信息安全研究所设备管理系统的设计与实现

摘 要 以研究所的设备管理系统为背景,以研究所设备管理模式为研究对象,开发了设备管理系统。设备管理系统是设备管理与计算机技术相结合的产物,根据系统的功能需求分析与定义的数据模式,分析了应用程序的主要功能和系统实现的主…...

<网络安全>《81 微课堂<安全产品微简介(1)>》

1 简单的了解复杂的安全产品 产品简要防火墙网络区域边界上部署,主要作用是隔离阻断。安全审计一般包括网络日志的分析、网络流量的监控和用户行为的跟踪等。发现网络中的潜在问题和漏洞。入侵检测IDS实时监控和检测网络中的异常活动和入侵行为。入侵防御IPS防病毒…...

【6D位姿估计】FoundationPose 跑通demo 训练记录

前言 本文记录在FoundationPose中,跑通基于CAD模型为输入的demo,输出位姿信息,可视化结果。 然后分享NeRF物体重建部分的训练,以及RGBD图为输入的demo。 1、搭建环境 方案1:基于docker镜像(推荐&#xf…...

Python 中 “yield“ 的不同行为

在我们使用Python编译过程中,yield 关键字用于定义生成器函数,它的作用是将函数变成一个生成器,可以迭代产生值。yield 的行为在不同的情况下会有不同的效果和用途。 1、问题背景 在 Python 中,“yield” 是一种生成器&#xff0…...

迅睿CMS中实现关键词搜索高亮

在迅睿CMS系统中实现关键词搜索高亮是提升用户体验和搜索效果的重要手段。当用户搜索某个关键词时,将搜索结果中的关键词高亮显示,可以帮助用户更快速地定位到所需信息。 关键词高亮的实现 在迅睿CMS中,你可以使用内置的dr_keyword_highlig…...

晶振的精度与稳定性有什么关系?

晶振的精度和稳定性是电子设备中非常重要的参数,它们受到多种因素的影响,主要包括: 精度的影响因素: 温度变化:晶体的温度系数会使得频率随温度变化而变化,通常在0C到55C的工业标准温度范围内,…...

【C】137 只出现一次的数字

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 解法一 #include <stdio.h>int singleNumber(i…...

51单片机入门:DS1302时钟

51单片机内部含有晶振&#xff0c;可以实现定时/计数功能。但是其缺点有&#xff1a;精度往往不高、不能掉电使用等。 我们可以通过DS1302时钟芯片来解决以上的缺点。 DS1302时钟芯片 功能&#xff1a;DS1302是一种低功耗实时时钟芯片&#xff0c;内部有自动的计时功能&#x…...

Redis-5 分布式锁

一.为什么要使用分布式锁&#xff1f; 传统的互斥锁synchronized只能作用于同一台虚拟机上的线程&#xff0c;在使用服务器集群部署的情况下&#xff0c;互斥锁就会失效&#xff0c;因此要采用分布式锁来处理不同服务器上的线程访问同一资源的情况。 二.redis的分布式锁是如何…...

音转文工具,9.8k star! 【送源码】

我们经常会遇到将音频转为文字的情况&#xff0c;比如在开会时录音的会议纪要、上课时录下的老师讲课内容。虽然网上也有一些在线的工具可以将音频转为文字&#xff0c;但是考虑到数据安全和费用问题&#xff0c;使用起来也不是很方便。 今天了不起给大家介绍一款开源工具——…...

【首次发布】华为 OD 机试 C卷抽中题库清单(真题库),目前华为OD机考以C卷为主,特殊情况会发送D卷

本篇博客为大家整理华为 OD 考友反馈 C 卷抽中题&#xff0c;经过 1 个的考友复盘&#xff0c;目前已经收录 100 题目&#xff0c;预计在有 2 周可以收集完整。 所有题目&#xff0c;都有考友截图反馈&#xff0c;同时欢迎大家机考过后&#xff0c;提供橡皮擦真题&#xff0c;获…...

【进程等待】waitpid的参数pid | status的位图位操作WIFEXITEDWEXITSTATUS宏

目录 waitpid pid status status位图 status按位操作 输入型参数和输入型参数 宏WIFEXITED&WEXITSTATUS options&非阻塞等待 上篇进程等待我们介绍到怎样去进程等待。我们介绍了wait函数&阻塞等待。本篇我们将介绍waitpid函数的参数pid和status。 waitp…...

unity---常用API

1. Vector3&#xff1a;结构体由x、y、z这3个数值组成&#xff0c;表示一个向量 magnitude变量返回该向量的长度normalized变量返回 magnitude 为 1 时的该向量zero静态变量Vector3(0, 0, 0)one静态变量Vector3(1, 1, 1)forward静态变量Vector3(0, 0, 1)back静态变量Vector3(0…...

设计模式: 模板模式

目录 一&#xff0c;模板模式 二&#xff0c;特点 三&#xff0c;组成部分 四&#xff0c;实现步骤 五&#xff0c;案例 一&#xff0c;模板模式 模板模式&#xff08;Template Pattern&#xff09;是一种行为型设计模式&#xff0c;它在超类中定义了一个算法的骨架&#…...

[虚拟机+单机]梦幻契约H5修复版_附GM工具

本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#xff0c;踩过的坑都给你们填上了 视频演示 [虚拟机单…...

头文件相互包含 前向声明

当两个类需要相互访问对方的成员或方法时&#xff0c;通常意味着它们之间存在某种依赖关系。这种依赖关系可能源于类的设计或功能需求。以下是一个简单的例子&#xff0c;展示了当两个类需要相互访问对方成员或方法时&#xff0c;如何使用包含对方头文件的方式来解决循环包含的…...

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统

七款好用的上网行为管理软件推荐 |有没有好用的上网行为管理系统 员工上班刷视频&#xff01; 员工上班炒股&#xff01; 员工上班干副业&#xff01; 碰见这种情况怎么办&#xff1f;当然是用电脑监控软件来监视员工的一举一动了&#xff0c;那么这样的软件有哪些呢&#…...

centos7-bcc 安装

检查 内核信息 确保安装的kernel-dev 和内核版本一致!!! rpm -qa|grep kernel kernel-tools-3.10.0-1160.92.1.el7.x86_64 kernel-devel-3.10.0-1160.92.1.el7.x86_64 kernel-headers-3.10.0-1160.92.1.el7.x86_64 kernel-3.10.0-1160.92.1.el7.x86_64 kernel-tools-libs-3.1…...

5.06号模拟前端面试8问

5.06号模拟前端面试8问 1.promise如何实现then处理 在JavaScript中&#xff0c;Promise 是一个代表异步操作最终完成或失败的对象。它有三种状态&#xff1a;pending&#xff08;等待&#xff09;&#xff0c;fulfilled&#xff08;完成&#xff09;&#xff0c;rejected&…...

解读Inscode AI:开启代码智能化的新时代

导语&#xff1a; 近年来&#xff0c;人工智能技术的迅猛发展已经深刻地影响着各个行业&#xff0c;而在软件开发领域&#xff0c;Inscode AI的出现无疑将给代码智能化带来一场革命。本文将为大家解读Inscode AI的特点和应用&#xff0c;探索其如何改变我们的软件开发方式。 一…...

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

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

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...