ASP.NET小型企业办公耗材库存管理软件的设计与实现

摘  要

库存管理系统是将企业的存和转等企业的经营业务有机的结合起来,达到数据共享、降低成本、提高效率。本系统前台采用.NET,后台数据库采用SQL Server 2000,语言采用C#。本系统实现的主要功能有库存查询、进货作业、领料作业、库存盘点、损坏处理等。在系统完成后对工作进行了总结,对系统功能进行了测试,并指出了系统中的问题和需要改进的地方。

关键词B/S,C#,库存管理系统,.NET

2 系统需求分析

本系统目的是让管理者能够对仓库存储进行更有效,更经济,更方便地管理而开发的。

2.1 用户身份级别要求

即根据身份的不同对系统的使用权限有所不同。从权限大小大致可以分为:系统管理员、一般注册用户、未注册用户。系统提供灵活的角色设定和权限的分配功能。

  1. 系统管理员:最高级权限的用户,拥有库存管理系统的所有权限。主要负责对库存数据的添加,修改,删除等操作,对一般注册用户下放权限,对系统进行日常的维护和管理,排除故障。
  2. 一般注册用户:权限被限制用户。只具有访问系统中某些功能的操作(如查询。
  3. 未注册用户:未具有任何权限的用户。只能通过注册才能进入库存管理系统。

2.2 系统功能模块设置

  1. 用户注册:未注册用户需注册后才能进入系统。
  • 操作对象:所有未注册用户。
  • 浏览对象:所有未注册用户。
  • 具体操作:注册用户在需填写用户名和密码才能注册。
  1. 用户管理:对注册用户和管理员的基本信息进行操作。对用户权限进行设置。
  • 操作对象:系统管理员
  • 浏览对象:系统管理员
  1. 库存查询:合法用户可以查看库存的所有信息,可以查询总库存和各分仓库的库存,用户可以根据种类名和货物名查找匹配的物品。
  • 操作对象:注册用户、管理员
  • 浏览对象:注册用户、管理员
  1. 进货作业:管理员通过记录每次进货的物品的详细信息,系统在进货表中产生一条进货记录。
  • 操作对象:管理员
  • 浏览对象:管理员
  • 具体操作:管理员需将物品的货物号,种类号,种类名,货物名,数量,进货价格,仓库号,厂家号依次填入对应的栏目中,最后点击确定即可。
  1. 领料作业:管理员输入每次出货物品的信息,系统在出货单中产生一条出货记录。
  • 操作对象:管理员
  • 浏览对象:管理员
  • 具体操作:管理员在下拉菜单中选择相应的货物种类和货物名,在对应的空白栏中输入出货货物的厂家、数量、单价、领料人的名字,最后单击确定即完成该操作。
  1. 损坏处理:由于功能与领料作业类似,所以属于领料作业的子功能模块。
  • 操作对象:管理员
  • 浏览对象:管理员
  • 具体操作:与领料作业类似。
  1. 库存转库:用于将一个仓库的商品转移到另一个仓库。内容包括编号、源部门、目的部门、数量、货物号、经手人、调货日期等。由于是小型企业,所以同种类的商品都分在同个仓库中,需要调库时需将所有同种类的货物进行转库,不再对同种类不同货物名的商品进行细分。
  • 操作对象:管理员
  • 浏览对象:管理员
  • 具体操作:管理员在下拉菜单中选择该种类货物对应的货物种类、数量和源仓库号,填入目的仓库和经手人即可。
  1. 库存盘点:用于管理企业的库存盘点工作,将实际盘存的商品数量输入计算机,计算机自动与数据库中的库存数量进行核对,并产生盘盈盘亏统计信息。
  • 操作对象:管理员
  • 浏览对象:管理员
  • 具体操作:管理员选择盘点的货物名,输入该货物的厂家和数量,点击确定后即在该页面的下放显示出盘盈盘亏的信息。
  1. 历史查询:用于查询各种转库、盘点、进货、出货的历史数据。
  • 操作对象:注册用户、管理员
  • 浏览对象:注册用户、管理员
  1. 退出登录:让所有合法用户在操作完后顺利的退出系统。
  • 操作对象:所有用户

4  库存管理系统功能模块的具体实现

4.1 系统主要功能模块的实现及部分代码

4.1.1 用户注册和登录界面

在用户注册时首先检测该用户注册的用户名是否可用,即检查数据库该用户名是否已经存在,代码如下:

ConnectionSQL sqlcon1 = new ConnectionSQL();

        string User;

        User = TextBox1.Text.Trim();

   SqlDataReader UserReader = sqlcon1.SqldataReader("select *from ADMIN_LIST where UserId='" + User + "'");

        if (UserReader.Read())

        {

            Label5.Text = "该用户名已经被使用,请重新注册";

        }

        else

        {

            Label5.Text = "该用户名可以使用";

        }

检测完后,再判断注册用户输入的密码是否为空,若为空,则弹出“密码不能为空”的对话框;若不为空,则检测注册用户输入的密码与确认密码是否吻合,代码如下:

            if (Password =="")

            {

                    HttpContext.Current.Response.Write("<script>alert('密码不能为空!');window.location.href='Registration.aspx'</script>");

              

            }

          

            else

            {

                if (Password != Surepassword)

                {

                    HttpContext.Current.Response.Write("<script>alert('确认密码与密码不匹配,请重新输入!');window.location.href='Registration.aspx'</script>");

                }

                else

                {

                    sqlcon.Sqldataset("insert ADMIN_LIST(UserId,Password,Jurisdiction)values('" + User + "','" + Password + "','1')");

                    HttpContext.Current.Response.Write("<script>alert('恭喜,用户注册成功!');window.location.href='Admin.aspx'</script>");

                    // Label4.Text = "恭喜,用户注册成功,请点击返回登录";

                    TextBox1.Text = null;

                }

             }

对于密码过长的限制,在前台使用了RegularExpressionValidator验证控件,通过输入.{0,10}表达式,将密码长度限制在10个字符以下。

在用户登录界面,除了对用户名与密码的合法性验证外,还要将管理员权限的值赋给Session["Right"]这个全局变量,目的是为了以后方便对用户权限的判断。具体代码如下:

User = TextBox1.Text.Trim();

        PassWord = TextBox2.Text.Trim();

        SqlDataReader UserReader = skycon1.SqldataReader("select * from ADMIN_LIST where UserId='" + User + "' and Password='" + PassWord + "'");

        if (UserReader.Read())

        {

            if (UserReader.GetString(2).Trim()=="2")

            {

                Session["Right"]= "2";

            }

            HttpContext.Current.Response.Write("<script>alert('登录成功!');window.location.href='Admin.aspx'</script>");

            UserReader.Close();

        }

        else

        {

            Label3.Text = "你输入的用户名和密码不正确,请重新输入";

            UserReader.Close();

        }

4.1.2 进货作业

进货作业是库存管理系统中最为重要的模块之一,上面的模块设计中已经分析了进货作业中存在的几种情况,除此之外,系统还要判断管理员是否出现输入有误现象。如输入的种类号与种类名不相符时,货物号与货物名不相符合时,系统都应该报错,但这两种出现的几率不是很大,为了减轻服务器负担,并没有把这些判断加入到系统中,只是对管理员输入时进行默认,认为输入的对应的货物种类和名称都是相符合的。当输入的仓库号与货物所属仓库不一致时(同种类的货物都存放在一个仓库中),由于此类错误出现的几率很大,所以在系统中加入了判断,如出现错误,则系统弹出“您输入的仓库号与物品仓库号不符合,请重新输入”的对话框。对与管理员输入的进货数量,进货价的合法性判断都采用了RegularExpressionValidator验证控件进行判断,以减少后台的操作。具体代码如下:

       DataSet dt1 = skycon1.Sqldataset("select *from GOODS_DETAIL where HuoWuId='" + HuoWuId + "' and BusinessId='" + BusinessId + "'");

        if (dt1.Tables[0].Rows.Count != 0)//当该物品在明细表中已经存在时:

        {         

            DataSet dt2 = skycon1.Sqldataset("select *from GOODS_LIST where TypeId='" + TypeId+"'");//GooddataRow["TypeId"].ToString()

            if (dt2.Tables[0].Rows.Count != 0)

            {

                DataRow GooddataRow1 = dt2.Tables[0].Rows[0];           

                //判断仓库号

                if (StoreHouseId != GooddataRow1["StoreHouseId"].ToString().Trim())

                {

                    HttpContext.Current.Response.Write("<script>alert('您输入的仓库号与物品仓库号不符合,请重新输入!');window.location.href='Enter.aspx'</script>");

                }

                else

                {

                    skycon1.SqlExcute("insert JINHUO_LIST(HuoWuId,HuoWuName,TypeId,JinHuoSiQty,EnterPrice,EnterTotalPrice,StoreHouseId,BusinessId,DateTime)values('" + HuoWuId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + "," + EnterTotalprice.ToString() + ",'" + StoreHouseId + "','" + BusinessId + "','" + Datetime + "')");

                    DataRow GooddataRow = dt1.Tables[0].Rows[0];

                    SiQtyG = (int)GooddataRow["SiQty"] + JinhuoSiQty;

                    EnterPriceG = ((decimal)GooddataRow["EnterPrice"] * (int)GooddataRow["SiQty"] + EnterTotalprice) / ((int)GooddataRow["SiQty"] + JinhuoSiQty);

                    skycon1.SqlExcute("update GOODS_DETAIL set SiQty=" + SiQtyG.ToString() +     ",EnterPrice=" + EnterPriceG.ToString() + "where HuoWuId='" + HuoWuId + "' and      BusinessId='" + BusinessId + "'");

                    //更新细表                      

                    int SiQtyG1 = (int)GooddataRow1["SiQty"] + JinhuoSiQty;

                    decimal StorePrice = (decimal)GooddataRow1["StorePrice"] + EnterTotalprice;

                    skycon1.SqlExcute("update GOODS_LIST set SiQty=" + SiQtyG1.ToString() + ",StorePrice=" + StorePrice.ToString() + "where TypeId='" + TypeId + "'");//GooddataRow["TypeId"].ToString()

                    //更新总表

                    HttpContext.Current.Response.Write("<script>alert('恭喜您的操作已成功!');window.location.href='Enter.aspx'</script>");

                }

            }

            else

            {

                HttpContext.Current.Response.Write("<script>alert('您输入的货物种类和和货物不相符,请重新输入!');window.location.href='Enter.aspx'</script>");

            }

        }

        else    

        {

            //如果是同种类不同名字的或不同产家的货物则执行下列步骤;

            DataSet dt4 = skycon1.Sqldataset("select *from GOODS_LIST where TypeId='" + TypeId + "'");

            DataSet dt5 = skycon1.Sqldataset("select *from GOODS_DETAIL where HuoWuId='" + HuoWuId + "'");

            if(dt4.Tables[0].Rows.Count!=0)

            {      

               

                if (dt5.Tables[0].Rows.Count != 0)//同种类同名但没有该厂家的货物

                {

                                      

                    DataRow GooddataRow = dt4.Tables[0].Rows[0];

                    int SiQtyG2 = (int)GooddataRow["SiQty"] + JinhuoSiQty;

                    decimal StorePrice1 = (decimal)GooddataRow["StorePrice"] + EnterTotalprice;

                    if (StoreHouseId != GooddataRow["StoreHouseId"].ToString().Trim())//判断仓库号

                    {

                        HttpContext.Current.Response.Write("<script>alert('您输入的仓库号与物品仓库号不符合,请重新输入!');window.location.href='Enter.aspx'</script>");

                    }

                    else

                    {

                        skycon1.SqlExcute("insert JINHUO_LIST(HuoWuId,HuoWuName,TypeId,JinHuoSiQty,EnterPrice,EnterTotalPrice,StoreHouseId,BusinessId,DateTime)values('" + HuoWuId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + "," + EnterTotalprice.ToString() + ",'" + StoreHouseId + "','" + BusinessId + "','" + Datetime + "')");

                     skycon1.SqlExcute("insert GOODS_DETAIL(HuoWuId,BusinessId,HuoWuName,TypeId,SiQty,EnterPrice)values('" + HuoWuId + "','" + BusinessId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + ")"); 

                        skycon1.SqlExcute("update GOODS_LIST set SiQty=" + SiQtyG2.ToString() + ",StorePrice=" + StorePrice1.ToString() + "where TypeId='" + TypeId + "'");

                        HttpContext.Current.Response.Write("<script>alert('恭喜您的操作已成功!');window.location.href='Enter.aspx'</script>");

                    }

                }

                else//同种类没有该名字的货物

                {

                    DataRow GooddataRow = dt4.Tables[0].Rows[0];

                    int SiQtyG3 = (int)GooddataRow["SiQty"] + JinhuoSiQty;

                    decimal StorePrice1 = (decimal)GooddataRow["StorePrice"] + EnterTotalprice;

                    if (StoreHouseId != GooddataRow["StoreHouseId"].ToString().Trim())//判断仓库号

                    {

                        HttpContext.Current.Response.Write("<script>alert('您输入的仓库号与物品仓库号不符合,请重新输入!');window.location.href='Enter.aspx'</script>");

                    }

                    else

                    {

                        skycon1.SqlExcute("insert JINHUO_LIST(HuoWuId,HuoWuName,TypeId,JinHuoSiQty,EnterPrice,EnterTotalPrice,StoreHouseId,BusinessId,DateTime)values('" + HuoWuId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + "," + EnterTotalprice.ToString() + ",'" + StoreHouseId + "','" + BusinessId + "','" + Datetime + "')");

                        skycon1.SqlExcute("insert GOODS_DETAIL(HuoWuId,BusinessId,HuoWuName,TypeId,SiQty,EnterPrice)values('" + HuoWuId + "','" + BusinessId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + ")");

                        skycon1.SqlExcute("insert GOODSNAME_LIST(HuoWuId,HuoWuName)values('" + HuoWuId + "','" + HuoWuName + "')");

                        skycon1.SqlExcute("update GOODS_LIST set SiQty=" + SiQtyG3.ToString() + ",StorePrice=" + StorePrice1.ToString() + "where TypeId='" + TypeId + "'");

                        HttpContext.Current.Response.Write("<script>alert('恭喜您的操作已成功!');window.location.href='Enter.aspx'</script>");

                   }

                }

            }

            else  //如果是新种类的货物,则执行下列步骤;

            {

                        skycon1.SqlExcute("insert JINHUO_LIST(HuoWuId,HuoWuName,TypeId,JinHuoSiQty,EnterPrice,EnterTotalPrice,StoreHouseId,BusinessId,DateTime)values('" + HuoWuId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + "," + EnterTotalprice.ToString() + ",'" + StoreHouseId + "','" + BusinessId + "','" + Datetime + "')");

                        skycon1.SqlExcute("insert GOODS_LIST(TypeName,TypeId,SiQty,StoreHouseId,StorePrice)values('"+TypeName+"','"+TypeId+"','"+JinhuoSiQty.ToString()+"','"+StoreHouseId+"','"+EnterTotalprice.ToString()+"')");

                         skycon1.SqlExcute("insert GOODS_DETAIL(HuoWuId,BusinessId,HuoWuName,TypeId,SiQty,EnterPrice)values('" + HuoWuId + "','" + BusinessId + "','" + HuoWuName + "','" + TypeId + "'," + JinhuoSiQty.ToString() + "," + EnterPrice.ToString() + ")");

                        skycon1.SqlExcute("insert GOODS_TYPES(TypeId,TypeName)values('" + TypeId + "','" + TypeName + "')");

                        skycon1.SqlExcute("insert GOODSNAME_LIST(HuoWuId,HuoWuName)values('" + HuoWuId + "','" + HuoWuName + "')");

                        HttpContext.Current.Response.Write("<script>alert('恭喜您的操作已成功!');window.location.href='Enter.aspx'</script>");

            }

          }

4.1.3 库存盘点

库存盘点是库存管理中相对较为关键的一环,由于专业知识所限,这个模块功能不是很全面,盘盈和盘亏的计算是通过将实际盘存的货物数量与数据库中的库存数量进行相减,得到正值即为盘盈,负值为盘亏。代码如下:

if (PanDianSiQty >= StoreSiQty)

            {

                PanY = OutPrice * (PanDianSiQty - (int)DataGoodDetail["SiQty"]);

                sqlcon1.SqlExcute("insert PanDian_LIST(HuoWuId,HuoWuName,BusinessId,PanDianSiQty,StoreSiQty,OutPrice,PanY,DateTime)values('" + HuoWuId +

                "','" + HuoWuName + "','" + BusinessId + "'," + PanDianSiQty.ToString() + "," + StoreSiQty.ToString() + "," + OutPrice.ToString() + "," + PanY + ",'" + Datetime + "')");

                TextBox3.Text = PanY.ToString();

                TextBox4.Text = null;

            }

            else

            {

                PanK = OutPrice * ((int)DataGoodDetail["SiQty"] - PanDianSiQty);

                sqlcon1.SqlExcute("insert PanDian_LIST(HuoWuId,HuoWuName,BusinessId,PanDianSiQty,StoreSiQty,OutPrice,PanK,DateTime)values('" + HuoWuId +

               "','" + HuoWuName + "','" + BusinessId + "'," + PanDianSiQty.ToString() + "," + StoreSiQty.ToString() + "," + OutPrice.ToString() + "," + PanK + ",'" + Datetime + "')");

                TextBox4.Text = PanK.ToString();

                TextBox3.Text = null;

            }

4.2系统实现的关键技术

4.2.1 数据库的连接技术

过去,通过ADO的数据存取采用了两层的基于连接的编程模型。随着多层应用的需求不但增加,程序员需要一个无连接的模型。ADO.NET就应运而生了。ADO.NET的Managed Provider就是一个多层结构的无连接的一致的编程模型。Managed Provider提供了DataSet和数据中心(如MS SQL)之间的联系。Managed Provider包含了存取数据中心(数据库)的一系列接口。主要有三个部件:(1)连接对象Connection、命令对象Command、参数对象Parameter提供了数据源和DataSet之间的接口。DataSetCommand接口定义了数据列和表映射,并最终取回一个DataSet。(2)数据流提供了高性能的、前向的数据存取机制。通过IdataReader,你可以轻松而高效地访问数。(3)更底层的对象允许你连接到数据库,然后执行数据库系统一级的特定命令。

过去,数据处理主要依赖于两层结构,并且是基于连接的。连接断开,数据就不能再存取。现在,数据处理被延伸到三层以上的结构,相应地,程序员需要切换到无连接的应用模型。这样,DataSetCommand就在ADO.NET中扮演了极其重要的角色。它可以取回一个DataSet,并维护一个数据源和DataSet之间的“桥”,以便于数据访问和修改、保存。DataSetCommand自动将数据的各种操作变换到数据源相关的合适的SQL语句。从图上可以看出,四个Command对象:SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分别代替了数据库的查询、插入、更新、删除操作。

为了方便系统调用数据库连接,减少后台代码量,提高连接效率。我们把几个常用的方法都封装在ConnectionSQL这个类里面,以下是连接数据库代码:

public class ConnectionSQL:System.IDisposable

{

    private SqlConnection sqlcon1=null;

    public ConnectionSQL()

    {

      sqlcon1=new SqlConnection("server=localhost;uid=sa;pwd=;database=KuCunManage");

        //        // TODO: 在此处添加构造函数逻辑      //

    }

    public int SqlExcute(string s1) // 返回一个BOOL值       //

    {

        try

        {

            int i;

            if(sqlcon1.State==ConnectionState.Closed)

            sqlcon1.Open();

            SqlCommand com1 = new SqlCommand(s1,sqlcon1);

            i=com1.ExecuteNonQuery();

            return i;           

        }

        finally

        {

            sqlcon1.Close();

        }

       

}

    public SqlDataReader SqldataReader(string s1)

    {

        try

        {

            if (sqlcon1.State == ConnectionState.Closed)

            sqlcon1.Open();      

            SqlDataReader read1;

            SqlCommand com1 = new SqlCommand(s1, sqlcon1);

            read1 = com1.ExecuteReader();

            return read1;

        }

        finally

        {   

        }

}

    public DataSet Sqldataset(string s1) // 返回第一张表    //

    {

        try

        {

            if (sqlcon1.State == ConnectionState.Closed)

                sqlcon1.Open();

            SqlDataAdapter Sqlada1 = new SqlDataAdapter(s1, sqlcon1);

            DataSet dt1 = new DataSet();

            Sqlada1.Fill(dt1, "table1");

            return dt1;

        }

        finally

        {

            sqlcon1.Close();

        }

    }

     //销毁对象;

    public virtual void Dispose(bool flag)

    {

        if (flag == true)

        {

            sqlcon1.Close();

        }

        sqlcon1 = null;

    }

    public void Dispose()

    {

        GC.SuppressFinalize(true);

        this.Dispose(true);

    }

 }

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

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

相关文章

00后设计师如何通过咸鱼接单实现副业月入过万?

大家好&#xff0c;我是一个00后&#xff0c;拥有6年设计经验的平面/包装/品牌设计师。在裸辞探索自由职业的过程中&#xff0c;误打误撞地通过咸鱼接单做副业&#xff0c;首月收入竟然超过了万元&#xff01;在这里&#xff0c;我将分享具体的实操经验、心得体会以及一些额外的…

c++游戏小技巧16:实例1(地牢生成算法)

1.前言 (头图) &#xff08;其实最开始是想写恶魔轮盘的&#xff0c;但没想到它竟然更新了&#xff09; &#xff08;等我有时间在更&#xff0c;最近很忙&#xff0c;玩第五玩的&#xff09; 想法来源&#xff1a;房间和迷宫&#xff1a;一个地牢生成算法https://indienova…

【牛客】值周

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分。 因为l<100000000,所以数组开1e8。 唯一需要注意的点就是前面给b[0]单独赋值为1&#xff08;因为如果在循环中给b[0]赋值&…

MIT加州理工等革命性KAN破记录,发现数学定理碾压DeepMind!KAN论文解读

KAN的数学原理 如果f是有界域上的多元连续函数&#xff0c;那么f可以被写成关于单个变量和加法二元操作的连续函数的有限组合。更具体地说&#xff0c;对于光滑函数f&#xff1a;[0, 1]ⁿ → R&#xff0c;有 f ( x ) f ( x 1 , … , x n ) ∑ q 1 2 n 1 Φ q ∑ p 1 n …

解决Pyppeteer下载chromium慢或者失败的问题[INFO] Starting Chromium download.

文章目录 1.进入网址2.选择上面对应自己系统的文件夹进去3. 然后找到自己的python环境中的site-packages中pyppeteer中的chromium_downloader.py文件并打开 在首次使用Pyppeteer时需要下载chromium 1.进入网址 https://registry.npmmirror.com/binary.html?pathchromium-bro…

贪心算法应用例题

最优装载问题 #include <stdio.h> #include <algorithm>//排序int main() {int data[] { 8,20,5,80,3,420,14,330,70 };//物体重量int max 500;//船容最大总重量int count sizeof(data) / sizeof(data[0]);//物体数量std::sort(data, data count);//排序,排完数…

品高虚拟化后端存储的发展演进

在品高虚拟化技术不断发展的过程中&#xff0c;虚拟化的后端存储一直是关注的焦点之一。 本文将从最初的文件存储和NFS开始&#xff0c;追溯到集中式存储SAN&#xff0c;然后选择了Ceph的RBD方式&#xff0c;并最终抵达选择支持vhost协议的后端存储的现状&#xff0c;我们将探…

使用wxPython和pandas模块生成Excel文件

介绍&#xff1a; 在Python编程中&#xff0c;有时我们需要根据特定的数据生成Excel文件。本文将介绍如何使用wxPython和pandas模块来实现这个目标。我们将创建一个简单的GUI应用程序&#xff0c;允许用户选择输出文件夹和输入的Excel文件&#xff0c;并根据Excel文件中每个单…

图像处理技术与应用(四)

图像处理技术与应用入门 颜色空间及其转换 颜色空间是一种用于在数字图像中表达和指定颜色的方法。不同的颜色空间使用不同的方式来定义颜色&#xff0c;每种方式都有其特定的用途和优势。以下是一些常见的颜色空间及其特点&#xff1a; RGB&#xff08;红绿蓝&#xff09;&a…

每日一题(PTAL2):列车调度--贪心+二分

选择去维护一个最小区间 代码1&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;int num;vector <int> v;int res0;for(int i0;i<n;i){cin>>num;int locv.size();int left0;int rightv.size()-1;while(left<…

AIGC技术带给我们什么?基于AIGC原理及其技术更迭的思考

AIGC技术带给我们什么&#xff1f;基于AIGC原理以及技术更迭的思考 前言 AI&#xff0c;这个词在如今人们的视野中出现频率几乎超过了所有一切其他的事物&#xff0c;更有意思的是&#xff0c;出现频率仅次于这个词的&#xff0c;几乎都会加上一个修饰亦或是前缀——AI&#…

快速排序找出第K大的元素

有序数组里第 K 大的元素就是index 为 array.length - k 的元素。 快速排序的思路主要就是选一个基准值p&#xff0c;然后将小于p的值放在p的左右&#xff0c;大于p的值放在p的右边&#xff0c;然后对左右数组进行递归。 利用这个思路&#xff0c;当我们找到这个基准值对应的 i…

【教学类-50-14】20240505“数一数”图片样式12:数一数(12个“人物”图案)

作品展示 背景需求&#xff1a; 前文做了“”材料”图片的数一数学具&#xff0c;效果不错&#xff0c; https://blog.csdn.net/reasonsummer/article/details/138466325https://blog.csdn.net/reasonsummer/article/details/138466325 为了让图案内容更丰富&#xff0c;我又…

Python Dash库:一个Web应用只需几行代码

大家好&#xff0c;在数据科学领域&#xff0c;数据可视化是将数据以图形化形式展示出来&#xff0c;帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash&#xff0c;Dash以其简洁、高效和强大的功能而闻名&#xff0c;它允许开发者快速构建交互式Web应用…

【智能算法】人类进化优化算法(HEOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;J Lian受到人类进化启发&#xff0c;提出了人类进化优化算法&#xff08;Human Evolutionary Optimization Algorithm, HEOA&#xff09;。 2.算法原理 2.1算法思想 …

JavaWEB 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

Springboot项目学习之各组件的用法和逻辑结构

1.Controller层&#xff08;Controller&#xff09;&#xff1a; 也称为前端控制器或请求处理器&#xff0c;它是项目与用户交互的入口。Controller接收HTTP请求&#xff0c;解析请求参数&#xff0c;调用Service层处理业务逻辑&#xff0c;并返回响应给客户端。 Controller通…

IP证书能免费申请吗

IP SSL证书是一种数字证书&#xff0c;用于保护网络服务器和网络浏览器之间的通信。该证书是一种主要保护公网IP地址的专属信任SSL证书。 IP类型的SSL证书对于直接用IP地址传输数据的技术人员来说&#xff0c;十分重要&#xff01;无论是防洪还是防劫持还是数据加密都起到了关…

【C 数据结构-动态内存管理】4. 无用单元收集(垃圾回收机制)

文章目录 【 1. 问题描述与解决方法 】【 2. 中断回收机制 】 【 1. 问题描述与解决方法 】 问题描述 动态存储管理的运行机制可以概括为&#xff1a;当用户发出申请空间的请求后&#xff0c;系统向用户分配内存&#xff1b;用户运行结束释放存储空间后&#xff0c;系统回收内…

【FL常用插件#1】Ozone11臭氧的安装和使用

本文内容收集自互联网&#xff0c;仅供个人学习参考使用&#xff0c;不允许用于商业用途&#xff0c;造成的侵权行为与本文作者无关 安装 VST2、VST3、AAX和NKS是音频技术界常见的几种插件格式&#xff0c;它们在功能和兼容性上有所不同&#xff1a; VST2 (Virtual Studio Tec…
最新文章