收藏 分销(赏)

基于VC的仓库管理系统.doc

上传人:仙人****88 文档编号:9399150 上传时间:2025-03-24 格式:DOC 页数:52 大小:1.77MB
下载 相关 举报
基于VC的仓库管理系统.doc_第1页
第1页 / 共52页
基于VC的仓库管理系统.doc_第2页
第2页 / 共52页
点击查看更多>>
资源描述
摘 要 仓库管理系统是企业的一个必不可少的重要环节,仓库管理的信息化、计算机化迫在眉捷。开发一个仓库管理系统可以提高管理的现代化过程序,加强管理的信息化手段,提高工作效率,增加企业效益。还可以实时掌握库存最新动态,方便查询。本系统旨在从仓库的普遍特点出发,有针对性地解决仓库的日常管理方面的问题,为此设计一套能够广泛用于各大企业的仓库管理系统。 仓库管理主要包括以下四个部分:基础信息管理,入库管理,库存管理,查询管理。本系统采用SQL SERVER 2000来设计数据库,使用Visual C ++6.0作为开发工具 。 论文首先介绍MFC的结构功能,SQL技术。然后是开发背景,其次分别介绍了所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、技术难点和解决方案。 关键词: 仓库管理系统,SQL SERVER 2000,VisualC++6.0,信息化,MFC ABSTRACT The storage management system is an enterprise's essential important link, the stor- age management informationize, computerize compels in eyebrow. Developping a stor- age management system can enhance the modernize procedure of management, streng- then the the information method of management, enhance the working efficiency and i- ncrease enterprise’s benefit. Also may real-time grasp the newest tendency, facilitates t- he inquiry. This system is starting with the universal characteristic of storage, pertinenc- ily solve the problem of daily management aspact .For this purpose designing a suit of storage management system which can be widely used in many enterprise. The storage management mainly includes four parts as below: the foundation info- rmation management, goes into storage management, the stock management,the inquiry management. This system uses SQL SERVER 2000 to design the database, and use cur- rent outstanding developping tool Visual C ++6.0 as developping tool. The article firstly introduces the structure function of MFC, the SQL technology. Secondly introduces the developping background of this system , next separately intr- oduced the function which must be completed and development process. Putting an emphansis on explanation the key point of system design, design thought, difficulty of technology and solution. Keywords: Storage Management System,SQL SERVER 2000,VisualC++6.0, Informationize,MFC 目 录 摘 要 I ABSTRACT II 第1章 绪论 1 1.1 开发背景 1 1.2 开发内容 1 第2章 技术介绍 2 2.1 MFC介绍 2 2.2 SQL语言技术介绍 3 2.3 本章小结 4 第3章 仓库管理系统开发 5 3.1 系统目标 5 3.2 系统分析 5 3.2.1 系统规划 5 3.2.2 系统结构图 6 3.2.3 业务流程图 8 3.3 数据库设计 8 3.3.1 数据库概念设计 8 3.3.2 数据库逻辑结构设计 10 3.4 处理过程分析 14 3.4.1 商品入库处理过程分析 14 3.4.2 商品入库查询处理过程分析 14 3.5 程序框架设计 15 3.6 菜单设计 16 3.7 工具栏的设计 22 3.8 主窗体设计 26 3.9 程序设计与编码 27 3.9.1 基础信息管理模块程序设计 27 3.9.2 商品入库模块程序设计 31 3.9.3 库存管理模块程序设计 34 3.9.4 查询管理模块程序设计 37 3.10 本章小结 45 第4章 结论 46 致 谢 47 参考文献 48 - 48 - 第1章 绪论 1.1 开发背景 仓库管理系统是一个企事业单位不可缺少的一部分,它的内容对于企业的决策者和管理者来说都是至关重要的,因此,仓库管理系统应该能够为用户提供充足的信息和快捷的查询手段,但一直以来人们使用传统的人工方式管理仓库,这种管理方式存在着许多缺点,诸如效率低,保密性差等,而且时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,计算机科学不断发展,其强大的功能已经被人们深刻认识,它已经进入了人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对产品仓库信息进行管理,具有着人工管理无法比拟的优点,它检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,可减少更多的人力物力,这些都能够极大地提高货品仓库的管理效率,也是企业仓库管理科学化、正规化,与世界接轨的重要条件。因此,开发一个仓库管理系统是很有必要的,具有其特有的技术意义和管理意义。 1.2 开发内容 主要是利用现有的软件以及技术,开发一个具有多重功能的仓库管理系统。包括基础信息的管理,入库信息的管理,库存管理,以及查询管理等一系列的功能。其中基础信息管理的模块包括了操作员信息管理,供应商信息管理,商品信息,库存信息等的管理;入库信息管理包括了商品入库,入库退货管理;库存管理包括库存商品打印,库存盘点,库存调拨,商品出库,库存上下限管理。查询管理包括商品入库查询,入库退货查询;报损报溢查询。这也是仓库管理系统的主要内容和模块的概况。 第2章 技术介绍 2.1 MFC介绍 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。 MFC借助C++的优势为Windows开发开辟了一片新天地,同时也借助Applica- tion Wizzard使开发者摆脱离了那些每次都必写基本代码,借助ClassWizard和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C++的封装功能使开发者摆脱Windows中各种句柄的困扰,只需要面对C++中的对象,这样一来使开发更接近开发语言而远离系统。 正因为MFC是建立在C++的基础上,所以我强调C/C++语言基础对开发的重要性。利用C++的封装性开发者可以更容易理解和操作各种窗口对象;利用C++的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C++本身所具备的超越C语言的特性都可以使开发者编写出更易用,更灵活的代码。 在MFC中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。因此对于开发系统具有一定的优势。 总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。 2.2 SQL语言技术介绍 SQL(Structured Query Language,结构查询语言)是一个功能强大的数据库语言。SQL通常使用于数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。SQL语句通常用于完成一些数据库的操作任务,比如在数据库中更新数据,或者从数据库中检索数据。使用SQL的常见关系数据库管理系统有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。虽然绝大多数的数据库系统使用SQL,但是它们同样有它们自立另外的专有扩展功能用于它们的系统。但是,标准的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成绝大多数数据库的操作。 但是,不像其它的语言,如C、Pascal等,SQL没有循环结构(比如if-then-else、do-while)以及函数定义等等的功能。而且SQL只有一个数据类型的固定设置,换句话说,你不能在使用其它编程语言的时候创建你自己的数据类型。 SQL功能强大,但是概括起来,它可以分成以下几组: DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据; DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象; DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。 DML组可以细分为以下的几个语句: SELECT:用于检索数据。 INSERT:用于增加数据到数据库。 UPDATE:用于从数据库中修改现存的数据 。 DELETE:用于从数据库中删除数据。 DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令: CREATE TABLE 、ALTER TABLE 、DROP TABLE 、CREATE INDEX 、DROP –INDEX。 DCL命令用于创建关系用户访问以及授权的对象。下面是几个DCL命令: ALTER PASSWORD 、GRANT 、REVOKE 、CREATE SYNONYM。 2.3本章小结 本章主要介绍了本系统开发过程中所使用的开发工具平台VC++6.0的框架整和应用程序MFC (Microsoft Foundation Class Library),以及数据库开发的语言SQL(Structured Query Language,结构查询语言)的介绍。 第3章 仓库管理系统开发 3.1 系统目标 通过对企业管理过程的分析和研究,要求仓库管理系统实现 以下功能和目标: 1. 实现商品的入库,入库退货管理。 2. 实现商品的库存盘点管理。 3. 实现商品的入库调拨,出库管理。 4. 实现商品的库存上,下限管理。 5. 实现入库,入库退货,商品出库等查询管理。 3.2 系统分析 3.2.1 系统规划 1.系统目标 利用计算机系统和sql2000数据库以及vc6.0开发工具实现企业商品的库存管理。 2.系统处理范围 (1)基础信息管理。 (2)入库管理。 (3)库存管理。 (4)查询管理。 3.系统功能 (1)基础信息管理。 在基础信息管理中需要实现操作员,商品,供应商,库存信息管理,包括信息的添加,删除,修改,查询。 (2)入库管理 在入库管理中需要实现商品的入库,入库退货管理,记录入库添加。 (3)库存管理 在库存管理中需要实现库存的商品打印,库存盘点,库存调拨,商品出库,库存上下限管理。 (4)查询管理 在查询管理中需要实现入库查询,入库退货查询,报损/报益查询。 3.2.2 系统结构图 仓库管理系统 基础信息管理 库存管理 查询管理 入库管理 仓库管理系统结构如下图3-1所示。 图3-1 仓库管理系统结构图 基础信息模块主要包括操作员信息管理,仓库信息管理,供应商信息管理,商品信息管理四部分如下图3-2所示。 基础信息管理 操作员信息管理 库存信息管理 供应商信息管理 商品信息管理 图3-2 基础信息管理模块组成图 入库管理主要包括入库管理,入库退货管理二部分如下图3-3所示。 入库管理 入库管理 入库退货管理 图3-3 入库管理模块组成图 库存管理主要包括库存上下限管理,库存商品打印,库存盘点,库存调拨,商品出库五部分如下图3-4所示。 库存管理 库存上下限管理 库存商品打印 库存盘点 库存调拨 商品出库 图3-4 库存管理模块组成图 查询管理主要包括入库查询,入库退货查询,报损报溢查询三部分如下图3-5所示。 查询管理 入库查询 入库退货查询 报损报溢查询 图3-5 查询管理模块组成图 3.2.3 业务流程图 仓库管理系统业务流程图如下图3-6所示。 供应商 采购商品 业务员 审核采购商 管理人员 操作员 审核采购商 仓库 图3-6 仓库管理系统业务流程图 3.3 数据库设计 3.3.1 数据库概念设计 仓库管理系统的概念数据模型图如下图3-7所示。 图3-7 概念数据模型图 仓库管理系统的E-R图如下图3-8所示,其中其属性已省略。 仓库 操作员 供应商 入库单 管理 n 1 商品 入库退货单 入库 n 1 提供 n 1 管理 n 1 管理 1 n 管理 1 n 包含 1 n 图3-8 仓库管理系统E-R图 操作员 处理 事物 报表 生成 Level 0 0 仓库管理系统的数据流图如下图3-9到图3-11所示 图3-9 数据流图第一层 Level 1 0 有效性检查 核对处理 更新库存清单 分类 事物 0 有效事物 库存清单 更新 库存清单 生成报表 图3-10 数据流图第二层 确定商品的数量和种类 库存清单 确认商品是否一致 生成报表 报表 Level 2 图 3-11 数据流图第三层 3.3.2 数据库逻辑结构设计 仓库管理系统总共使用了11张数据表,分别为入库退货主表(tb_cancelinstock_main),入库退货明细表(tb_cancelinstock_sub),库存盘点主表(tb_check_main),库存盘点明细表(tb_check_sub),入库明细表(tb_instock_sub),商品入库主表(tb_instore_main),商品信息表(tb_merchandiseinfo),商品库存表(tb_merchandisestorage),操作员信息表(tb_operator), 供应商信息表(tb_providerinfo),库存信息表(tb_storageinfo)下面列出了各数据表的结构。 入库退货主表如下表3-1所示。 表3-1 入库退货主表 (tb_cancelinstock_main) 字段名称 字段类型 主 键 外 键 是否为空 描 述 CancelID varchar(30) 是 退货商号 provider varchar(50) 是 供应商 operator varchar(30) 是 操作员 rebate float(8) 折扣 sumtotal money(8) 总计 paymoney money(8) 应付金额 factmoney money(8) 实付金额 intime datetime(8) 退货时间 入库退货明细表如下表3-2所示。 表3-2 入库退货明细表(tb_cancelinstock_sub) 字段名称 字段类型 主 键 外 键 是否为空 描 述 CancelID varchar(30) 是 退货单号 merchandiseID varchar(30) 是 商品编号 unitPrice money(8) 单价 numbers float(8) 数量 rebate float(8) 折扣 paymoney money(8) 金额 stockname varchar(30) 是 仓库名称 库存盘点主表如下表3-3所示。 表3-3 库存盘点主表(tb_check_main) 字段名称 字段类型 主 键 外 键 是否为空 描 述 checkID varchar(30) 是 盘点单号 storage varchar(30) 仓库名称 principal varchar(30) 负责人 checktime datetime(8) 盘点时间 checkspec smallint(2) 盘点标志 memo varchar(100) 是 备注 库存盘点明细表如下表3-4所示。 表3-4 库存盘点明细表(tb_check_sub) 字段名称 字段类型 主 键 外 键 是否为空 描 述 checkID vrchar(30) 是 盘点单号 merchandiseid vrchar(30) 商品编号 [sum] float(8) 数量 入库明细表如下表3-5所示。 表3-5 入库明细表(tb_instock_sub) 字 段 名 称 字段类型 主 键 外 键 是否为空 描 述 instockid varchar(30) 是 入库单号 merchandiseID varchar(30) 是 商品编号 unitPrice money(30) 单价 numbers float(8) 数量 rebate float(8) 折扣 paymoney money(8) 金额 stockname varchar(30) 是 仓库名称 商品入库主表如下表3-6所示。 表3-6 商品入库主表(tb_instore_main) 字段名称 字段类型 主 键 外 键 是否为空 描 述 ID varchar(30) 是 入库单号 provider varchar(50) 是 供应商 operator varchar(30) 是 操作员 rebate float(8) 折扣 sumtotal money(8) 总计 paymoney money(8) 应付金额 factmoney money(8) 入库时间 商品信息表如下表3-7所示。 表3-7 商品信息表(tb_merchandiseinfo) 字 段 名 称 字段类型 主 键 外 键 是否为空 描 述 ID varchar(30) 是 商品编号 name varchar(50) 商品名称 spec varchar(20) 规格 shortname varchar(10) 简称 defaultprice money(8) 默认价格 manufacturer varchar(30) 厂家 memo varchar(100) 备注 商品库存表如下表3-8所示。 表3-8 商品库存表(tb_merchandisestorage) 字 段 名 称 字段类型 主 键 外 键 是否为空 描 述 merchandiseID varchar(30) 联合主键 商品编号 storagename varchar(30) 联合主键 仓库名称 storagenum float(8) 商品库存 upperlimit float(8) 库存上限 lowerlimit float(8) 库存下限 操作员信息表如下表3-9所示。 表3-9 操作员信息表(tb_operator) 字段名称 字段类型 主 键 外 键 是否为空 描 述 name varchar(30) 是 操作员名称 password varchar(50) 操作员密码 [level] smallint(2) 操作员级别 库存信息表如下表3-10所示。 表3-10 库存信息表(tb_storageinfo) 字 段 名 称 字段类型 主 键 外 键 是否为空 描 述 storagename varchar(30) 是 仓库名称 供应商信息表如下表3-11所示。 表3-11 供应商信息表(tb_providerinfo) 字 段 名 称 字段类型 主 键 外 键 是否为空 描 述 providername varchar(50) 是 供应商名称 artificialperson varchar(30) 法人 principal varchar(10) 负责人 phone varchar(30) 电话 addr varchar(50) 地址 web varchar(50) 网址 e_mail varchar(30) 电子邮箱 3.4 处理过程分析 3.4.1 商品入库处理过程分析 在商品入库时,首先需要录入入库的主要信息,例如:供应商信息、操作员信息、入库时间等,然后录入入库的商品信息,例如:商品的编号、名称、入库价格、数量、折扣等,在录入商品信息时,程序将自动计算总计,并根据折扣计算应付金额,其商品入库的状态图如下图3-12所示。 初始化完成 数据保存成功 通过检查 主要信息录入完成 商品信息录入完成 录入入库主要信息 录入入库商品信息 检查录入的数据是否合法 保存数据 进行提示,返回入库票号 初始化 初始化主要完成加载供应商信息读取当前操作员设置默认入库日期 图3-12 仓库入库处理过程分析图 3.4.2 商品入库查询处理过程分析 在查询商品入库信息时首先要设置查询条件,用户可以根据时间段查询与具体条件查询组合,进行复杂的数据查询,商品入库查询状态图如下图3-13所示。 已设置查询条件 数据返回 通过检查 查询完成 设置查询条件 检查查询条件是否完整 查询数据 检查查询结果 显示查询结果 图3-13 商品入库查询处理过程分析图 3.5 程序框架设计 仓库管理系统采用文档/视图结构进行,程序框架设计步骤如下: (1) 启动桌面上的vc++6.0,单击“File”/“New”菜单项,打开“New”窗口,如下图3-14所示。 图3-14 创建mfc工程图 (2) 在“New”窗口的左方的列表视图中选择“MFC AppWizard(exe)”选项,在“Projectname“编辑框中输入工程名称,在“Location”编辑框中设置工程保存路径。 (3) 单击“OK”按钮,进入“MFCAppwizard-step1”窗口,如下图3-15所示。 图3-15 MFCAppwizard-step1 (4) 选择“Single Document”选项,连续单击“Next”按钮,进入“MFC Appwizard-step6 of 6”窗口,如下图3-16。 图3-16 MFC Appwizard-step6 of 6 3.6 菜单设计 为了设计一个特色的菜单,可以从CMenu类派生了一个类CMyCoolMenu,并改写父类的DrawItem、MesureItem方法,重新绘制菜单,菜单效果如下图3-17所示。 图3-17 菜单效果图 下面介绍CMyCoolMenu的设计步骤: (1) 新建一个普通类CMenuItemContext,用于记录菜单项的信息。 (2) 定义3个成员变量,分别记录菜单项的图标索引、菜单属性、菜单标题。完整代码如下: class CMenuItemContext { public: CMenuItemContext(); virtual ~CMenuItemContext(); public: UINT U_icon; int nMenuID; //-2:顶层菜单条 -1:弹出菜单 0:分隔条 >0:一般的菜单 CString strText; //菜单内容 }; (3) 新建一个类,类名为“CMyCoolMenu”基础类为CMenu。 (4) 定义4个成员变量,如下: CMenuItemContext lpMenu[100];//记录菜单项内容 int index; //临时索引 CUIntArray m_menuIDs; // 存储菜单项ID CImageList m_ImageList; // 存储菜单图表 (5) 改写“MeasureItem(LPMEASUREITEMSTRUCT lpMIS)”方法,根据菜 属性重新设置菜单项大小。 void CMyCoolMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMIS) { lpMIS->itemWidth = 130; lpMIS->itemHeight = 26; UINT nMenuID= ((CMenuItemContext*)(lpMIS->itemData))->nMenuID; switch(nMenuID) { case -2: // -2:顶层菜单条 lpMIS->itemWidth =((CMenuItemContext*)(lpMIS->itemData))->strText.GetLength()*5; break; case -1: //-1:弹出菜单 lpMIS->itemWidth =((CMenuItemContext*)(lpMIS->itemData))->strText.GetLength()*10; break; case 0: //0:分隔条 lpMIS->itemHeight =10; break; default: //>0:一般的菜单 break; } } (6) 添加“AttachMenu“方法,根据菜单句柄加载菜单资源,并确定菜单的属性。 BOOL CMyCoolMenu::AttachMenu(HMENU hMenu,UINT uToolBarID,CSize sz) { Attach(hMenu); ChangeMenuStyle(hMenu, TRUE);// 确定菜单项属性 return TRUE; } (7) 添加“ChangeMenuStyle”方法,从菜单资源中确定菜单项的属性,参数bTop标志菜单项是否为顶层菜单。 BOOL CMyCoolMenu::ChangeMenuStyle(HMENU hMenu, BOOL bTop = FALSE) { CMenu *pMenu = CMenu::FromHandle(hMenu);//从菜单句并中获取菜单指针 if(pMenu != NULL) { for(UINT i = 0; i < pMenu->GetMenuItemCount();i++) //利用循环方式设置菜单项属性 { lpMenu[index].nMenuID = pMenu->GetMenuItemID(i); if(lpMenu[index].nMenuID < 0 && bTop) { lpMenu[index].nMenuID=-2; //顶层菜单 } pMenu->GetMenuString(i,lpMenu[index].strText, MF_BYPOSITION); //读取菜单标题 pMenu->ModifyMenu(i,MF_OWNERDRAW|MF_BYPOSITION |MF_STRING,//MF_BYPOSITION | lpMenu[index].nMenuID,LPCTSTR(&lpMenu[index])); //修改菜单属性 CMenu *pSubMenu = pMenu->GetSubMenu(i); //获取子菜单 if(pSubMenu && lpMenu->nMenuID != -2 && !bTop) //如果不是顶层菜单并且包含了子菜单 //将为滩出式菜单。 { lpMenu[index].nMenuID = -1; } index += 1; if(pSubMenu) { ChangeMenuStyle(pSubMenu->GetSafeHmenu()); } } } return TRUE; } (8) 绘制菜单。由于菜单项有多种状态,例如,鼠标移到菜单项时的状态,菜单项被选种时的状态。因此,要定义多个绘制菜单。 void CMyCoolMenu::DrawBestRect(CDC *pDC, CRect rect, COLORREF cr1,COLORREF cr2, BOOL bHor) { int r1 = GetRValue(cr1);//红色1 int g1 = GetGValue(cr1);//绿色1 int b1 = GetBValue(cr1);//蓝色1 int r2 = GetRValue(cr2);//红色2 int g2 = GetGValue(cr2);//绿色2 int b2 = GetBValue(cr2);//蓝色2 if(bHor) { float dr = ((float)(r2 - r1))/(float)(rect.Width()); float dg = ((float)(g2 - g1))/(float)(rect.Width()); float db = ((float)(b2 - b1))/(float)(rect.Width()); for(int i = rect.left; i < rect.right; i ++) { int r = r1 + (int)(dr*((float)(i - rect.left)));
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服