精华内容
下载资源
问答
  • 一篇几年前数据仓库与商务智能的课程大作业,主要涵盖使用SQL Server BI进行数据仓库的设计和装载、多维分析。...原始数据:数据为浙江省温州市鹿城区2011年11月1日到20日公共自行车借还数据记录表,包括字段...

    一篇几年前数据仓库与商务智能的课程大作业,主要涵盖使用SQL Server BI进行数据仓库的设计和装载、多维分析。

    另一作者:Katherine

    分析工具:SQL Server BI 2008、Excel

    关于数据仓库的理论和SQL Server BI 的使用推荐慕课网 西南财经大学李瑾坤副教授的商务智能

    原始数据:数据为浙江省温州市鹿城区2011年11月1日到20日公共自行车借还数据记录表,包括字段如下:

    字段 示例数据
    No.1
    车号WZB000036
    车号SN36
    借出车站区政府西
    借出车站号17
    借车锁桩号1
    借车时刻2012/11/1 5:59:38
    归还车站县前头
    还车车站号64
    还车锁桩号20
    还车时刻2012/11/1 6:03:42
    用车时间4
    用车方式 会员卡借车
    卡类型 普通会员卡
    借车卡SN324408

    1. 分析目标

        (1)每个站点在不同时间段的借出次数、还入次数;

        (2)每个时间段人们的用车频率,以小时、时段、天、月为单位;

        (3)每辆车在一定时间段内的累计使用时长及总使用时长;

        (4)每个桩在一定时间段内的累计使用频次及总使用次数;

        (5)每个客户的用车偏好性:平均用车时间、高频用车时间点等。

    2. 多维分析模型设计

    设置度量值为用车时间、借车次数和还车次数,其中用车时间直接使用原始数据集中的“用车时间”属性,单位是分钟;借车次数、还车次数应用多维分析模型“事实表计数”功能实现。

    维度包括站点、借车时间、还车时间、借车卡、自行车这5个维度。

    维度 维度层次
    站点站点编号、车桩编号
    借车时间借车时刻、借车小时、借车时段、借车日期、借车月份
    换车时间还车时刻、还车小时、还车时段、还车日期、还车月份
    借车卡卡类型、卡号
    自行车自行车编号

    注:借车时段及还车时段的划分如下:6~9时为上午,10~14时为中午,1~20时为下午,其余为夜晚。

    3. 数据仓库设计

    数据仓库包括一个事实表、四个维度表。

    事实表:


    记录编号仅作主键,不参与多维分析;自行车编号、车桩编号、借车卡号分别对应自行车、车桩、借车卡维度表;用车时间为一个度量值。

    各维度表:


    车桩号指的是某个站点的第几个车桩,如15表示第15号车桩;车桩编号的构成是“站点编号+车桩号”,如“100第10号”表示第100号站点第10号车桩;站点编号对应站点维度表。


    表关系图:


    4. 数据装载

    建立名称为LoadBicycleDM的Integration Service项目,新建两个连接管理器,Localhost.Bicycle和Localhost.BicycleDM,分别对应OLEDB源和OLE DB目标。在控制流面板中插入数据流任务如下:


    装载借车卡表:


    图片太小看不清,OLE DB源中的数据访问模式为SQL命令:select distinct(借车卡SN),卡类型 from [Bicycle].[dbo].[Bicycle] order by 借车卡SN

    装载自行车表:



    SQL命令:select distinct(车号SN),车号 from [Bicycle].[dbo].[Bicycle] order by 车号SN

    装载站点表:


    SQL命令:select 借出车站号,借出车站,COUNT(distinct([借车锁桩号])) as 车桩数 from [Bicycle].[dbo].[Bicycle] group by 借出车站号,借出车站

    装载车桩表:

    OLE DB源:

    OLE DB源1:

    排序:

    排序1:

    合并:

    派生列:

    聚合:

    派生列1:
    数据转换:

    装载事实表:


    OLE DB源:

    派生列:

    数据转换:

    运行数据装载


    5. 多维分析

    建立名称为BicycleAS的Analysis Service项目,新建数据源为已建好的数据仓库,名称为BicycleDM.ds。

    根据数据源建立数据源视图,名称为Bicycle.dsv,并做如下修改:

    (1)将记录编号的逻辑主键删除,设置借车卡号、自行车编号、车桩编号、借车时刻、还车时刻为逻辑主键;

    (2)在事实表中新建命名计算:借车小时、还车小时、借车时段、还车时段、借车日期、还车日期、借车月份、还车月份。代码如下:

    借车小时:

    convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2)))
    还车小时:


    convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2)))
    借车日期:
    substring(借车时刻,6,(charindex('/',借车时刻,6)-6)) + '.' + right('0'+ rtrim(substring(借车时刻,(charindex('/',借车时刻,6)+1),2)),2)
    还车日期:
    substring(还车时刻,6,(charindex('/',还车时刻,6)-6)) + '.' + right('0'+ rtrim(substring(还车时刻,(charindex('/',还车时刻,6)+1),2)),2)
    借车时段:
    case
    when convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2))) between 0 and 5 then '夜晚'
    when convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2))) between 6 and 9 then '上午'
    when convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2))) between 10 and 14 then '中午'
    when convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2))) between 15 and 20 then '下午'
    when convert(int,ltrim(substring(借车时刻,(charindex(':',借车时刻,5)-2),2))) between 21 and 23 then '夜晚'
    else '无'
    end

    还车时段:

    case
    when convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2))) between 0 and 5 then '夜晚'
    when convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2))) between 6 and 9 then '上午'
    when convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2))) between 10 and 14 then '中午'
    when convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2))) between 15 and 20 then '下午'
    when convert(int,ltrim(substring(还车时刻,(charindex(':',还车时刻,5)-2),2))) between 21 and 23 then '夜晚'
    else '无'
    end
    借车月份:
    substring(借车时刻,6,(charindex('/',借车时刻,6)-6)) + '月'
    还车月份:
    substring(还车时刻,6,(charindex('/',还车时刻,6)-6)) + '月'

    构建多维数据源视图:


    使用现有表建立多维数据集,名称为BicycleDM.cube。度量值表选为事实表,度量值选择用车时间和事实表计数,现有维度选择自行车、车桩、借车卡。预览图如下:


    使用现有表新建借车时间维度、还车时间维度。以建立借车时间维度为例,主表选择事实表,键列选择借车时刻,不选择任何相关表,可用属性勾选借车时刻、借车小时、借车时段、借车日期、借车月份,维度名称设置为借车时间。还车时间使用相同方法建立,两者的预览图如下:

      

    各维度属性通用设置如下:

    AttributeHierarchyVisible

    True

    OrderBy

    Name

    站点编号NameColumn

    站点名称

    自行车编号NameColumn

    车牌号

    其余属性NameColumn

    属性自身

    属性之间关系类型

    刚性

    借车时间维度的层次结构和属性关系如下:

      

    还车时间维度的层次结构和属性关系:

      

    借车卡维度的层次结构和属性关系:

      

    车桩维度的层次结构和属性关系:

      

    自行车维度没有特殊设置。

    6. Excel 数据呈现

    处理多维分析模型


    在SQL Server中连接Analysis Service,使用Localhost服务器,在数据库目录下发现存在名为BicycleAS的数据库(如下图),证明操作成功。


    打开EXCEL2016,导入来自Analysis Service的数据,使用Localhost服务器,选择BicycleAS数据库,数据显示方式选择数据透视表。

    7. 结论

    在11月1日到11月20日,各站点用车次数的数据透视图和频数分布图如下:



    从图中可以看出,“五马美食林”“国光大厦”等6个站点用车次数遥遥领先,均在8000以上;“市二医院”“数码广场”等55个站点用车次数在4000到8000之间,处于中等水平;“新城车站”“科技馆”等119个站点用车次数在4000以下。假定在这20天中用车次数在8000以上的为高频站点,4000到6000之间的为中频站点,4000以下的为低频站点,结合温州市鹿城区公共自行车站点分布图,可的得到如下高中低频站点分布图:


    管理部门可根据各站点的分布和用车频次的相对大小,合理分配资源,提高公共自行车网络运行效率,如按实际情况增减站点的车桩个数,高频站点配备较多的车桩,低频站点配备较少的车桩。

    下图为各小时借车频次分布图:


    从图中可以看出,按小时分布的借车频次存在两个峰值,分别位于上午8-9时和下午17-18时,与人们上下班时间相符,交通部门可据此在这两个时段内合理指挥交通,尽量避免自行车和机动车的行驶冲突。此外,晚上21时到次日6时借车次数接近于0,管理部门可利用这个时间段对公共自行车进行检查、维修、更换、调度等工作。

    从11月1日到11月20日,各量自行车用车时间统计图如下:


    从图中可以看出,大部分自行车的累计使用时间在1000到3000分钟之间。高于3000分钟的车辆因为使用时间长,可能面临提前报废的风险,而低于1000分钟的车辆可能是由于自身出现问题,导致骑行功能降低甚至无法骑行。管理部门可以据此识别出这些车辆,并只对这些车辆进行检测和维修,从而有效降低运营成本。


    计算每一趟单车出行的使用时长,统计得出的用车时长频数分布如上图所示。从图中可以看出,大部分单车出行的时长在10分钟到30分钟这个区间内,有少数人骑行超过2小时。共享单车行业主打绿色低碳,在提供设施的同时,配套地推出鼓励使用单车出行的优惠政策,有利于企业提升软实力。根据用车时长,企业经营者可以合理定价,鼓励人们更多地使用单车出行,比如:对于骑行超过1小时的用户,可以减免一定的使用费用,从而达到鼓励人们使用自行车,推广单车共享行业的目的。



    展开全文
  • Windows下的静态和动态

    千次阅读 2017-10-25 14:37:03
    缺少xxx.dll.....”,想必大家都碰见过这样的错误,但是很抱歉,在这里并不会讲具体怎么解决这个错误,只是这个错误引出“动态”(这个xxx.dll就是一个动态),“动态”引出静态的概念。 在使用C/C++...

    “......缺少xxx.dll.....”,想必大家都碰见过这样的错误,但是很抱歉,在这里并不会讲具体怎么解决这个错误,只是借这个错误引出“动态库”(这个xxx.dll就是一个动态库),借“动态库”引出静态库的概念。

    在使用C/C++编程的时候,我们通常使用*.h和*.cpp的方式来书写我们的代码,可这存在一个问题:当我们需要将写好的功能分享给别人时候的时候,如果同时把*.h和*.cpp交给别人势必会造成我们的代码泄漏。

    静态库动态库很好地解决了这个问题,即:可以将写好的功能分享给他人,又可以将关键部分代码隐藏。

     

    静态库

    生成静态库:

    1.创建Win32项目。

    2.选择“静态库”项目,取消勾选“预编译头”。

    3.修改项目属性。

     

    4.选择“MTd”。

    5.写代码。

    6.按F7编译,编译通过后,去相应的文件夹下找到对应的“*.h”和“*.lib”文件,本实例是:“MyMath.h”和“StaticLib.lib”。将这两个文件交给别人来使用就可以了。

    使用静态库:

    新建一个项目,将“MyMath.h”和“StaticLib.lib”复制到项目文件夹中。

    如图:

     ---------------------------------------

    动态库

    生成动态库:

    1.创建Win32项目。

    2.选择“DLL”项目。

     

    3.修改项目属性。

     

    4.不使用预编译头。

    5.选择“MTd”。

    6.写代码。相比静态库,动态库需要写的代码要多出一部分,即:使用__declspec(dllexport)__declspec(imexport)声明动态库的导入导出。通常由作者在头文件中使用条件编译并提供该头文件,使用者直接包含该头文件即可。

    说明:如果动态库需要兼容C语言,请加上externC声明,这将使用C风格编译。

    例:extern “C” class DLL MyMath{...}

    如图:

    7.按F7编译,编译通过后,去相应的文件夹下找到对应的“*.h”、“*.lib”和“*.dll”文件(比静态库多出“*.dll”文件),本实例是:“MyMath.h”、“DynamicLib.lib”和“DynamicLib.dll”。将这三个文件交给别人来使用就可以了。

    使用动态库:

    新建一个项目,将“MyMath.h”、“DynamicLib.lib”和“DynamicLib.dll”复制到项目文件夹中。

    有话说:

    1.“动态库”通常是在Windows下的说法,Linux下通常有另外一个名称“共享库”。

    2.静态库、动态库不仅可以作用于类,也可以作用于函数。本质上应该是“”作用于函数,作用于类时,实际上是作用于类的成员函数。

    展开全文
  • OpenERP仓库

    千次阅读 2014-04-10 15:40:16
    此时通常会指定链提前时间(Chaining Lead Time),该时间表示,货物进入库位后,等待该时间,再进入下一库位。这个概念可以用于建模物流路径结点及其时间。 自动跳移(Automatic No Step Added):系统不...

    一、复式库存(Double-Entry Stock Management)和库存移动(Stock Move)

    OpenERP的库存管理采取了独特的复式库存(Double-Entry Stock Management)。什么是复式库存?就是每一笔库存变动,同时记录库存减少和库存增加。例如卖了10辆自行车给客户,OpenERP会在你的库位(Location,这个概念后面再说)减去10辆自行车,再在客户库位(Customers Location)增加10辆自行车。因此,任何时候,OpenERP的所有库位的库存数量加起来总是为零。

    系统中,复式库存是通过记录库存移动(stock move)来实现的。例如,前面的卖10辆自行车给客户,系统记录的是:

    产品 |数量 | 源库位 | 目标库位

    自行车 | 10 | stock | Partner Locations > Customers

    这条记录的意思是,有10辆自行车从自己的库位(stock)转移到了客户的库位(Partner Locations > Customers)。任何一笔库存变动,系统中都记录了一笔如此形式的库存移动。在OE中,“库存变动”的概念非常广泛,如库存盘点发现盘亏了2辆自行车,系统记录的是:

    产品 |数量 | 源库位 | 目标库位

    自行车 | 2 | stock | Virtual Locations > Inventory Loss

    这条记录的意思是,有2辆自行车从自己的库位(stock)转移到了“盘点库位”(Virtual Locations > Inventory Loss)。反之,盘盈的话,就是从盘点库位转移到了stock。又如生产,生产领料系统记录库存移动:从原料库位转移到生产库位(Produce Location)。成品入库系统记录库存移动:从生产库位(Produce Location)转移到成品库位。

    二、实际库存(Real Stock)和虚拟库存(Virtual Stock or Future Stock)

    系统中不记录各库位的产品库存数量,只记录库存变动,那么,怎么知道某库位中某产品的数量呢?这个其实很容易,例如自行车在库位A中的数量,移入库位A(库存移动的目标库位是库位A)使得自行车数量增加,反之,移出使得自行车数量减少。因此,只要统计自行车的库存移动记录中,目标库位为A的数量,以及源库位为A的数量,两者相减,即得到库位A中自行车的库存数量。

    现实中,库存分实际库存(Real Stock)和虚拟库存(Virtual Stock or Future Stock)。实际库存是库位中实有数量,虚拟库存是库位中的将来数量。例如,采购时候,假设今天下单,采购物资要5天后到达。那么,采购员考虑今天要不要下单,以及采购多少数量时候,他应该参考5天后的库存数量来决定。在未来的5天中,有一部分产品已销售出去,将在5天内出库,还有一部分产品之前已下单(采购单或生产单),将在5天内入库。实际库存,加上未来一段时间将要入库的数量,减去未来一段时间将要出库的数量,就是虚拟库存。注意,虚拟库存的数量和时间相关,例如10天后的虚拟库存显然和5天后的虚拟库存不同。

    系统如何计算实际库存和虚拟库存呢?还是基于库存移动记录来计算,不过,要用到库存移动记录中的更多信息。系统中实际记录的库存移动(Stock Move)记录,还包括移动状态和计划移动日期、实际移动日期等字段。统计实际库存时,统计那些已经实际发生(移动状态为Done)的库存移动记录的数量即得到。计算虚拟库存时,统计那些实际已经发生的、以及将要发生(移动状态为Valid,以及计划移动日期在计算时间段内)但尚未发生(没有实际移动日期)的移动记录数量即得到。

    三、仓库(Warehouse)和库位(Location)

    仓库是我们通常说的实际“仓库”。一个实际仓库中,通常分为若干货区,如成品区、原料区、废品区,货区还分货架、货层等,货区、货架等形成树状层次结构,这个层次结构在OE中可以用库位建模。

    在OE的仓库(Warehouse)设置中,一个仓库分为三个库位(Location):存货库位(Location Stock)、进货库位(Location Input)、出货库位(Location Output)。

    存货库位:仓库中存放货物的货区,下面还可按货架、货层等进一步细分。

    进货库位:仓库中收货的暂存货区,例如存放已收货但尚未验收的临时存放区。简单情况,不需要临时收货区,进货库位可以和存放库位设置成同一个库位。

    出货库位:仓库中发货的暂存货区,例如存放已发货等待装运的临时存放区。简单情况,不需要临时发货区,出货库位可以和存放库位设置成同一个库位。

    库位类似于仓库里面的货区,用于存放产品(注意,OE的产品包括原料、消耗品、成品等一切物资)。库存移动中记录的源库位、目标库位都是库位,不可用仓库。OE的库位概念非常灵活,可以是实际库位(库区),也可以是虚拟库位。虚拟库位是物理上不存在,仅用于复式库存的库存移动记录的需要。例如,盘亏时候的库存移动记录,目标库位是“盘点库位”,该库位就是一种虚拟库位。OE的库存移动概念非常广泛,对应的库位也有多种类型。

    供应商库位(Supplier Location): 用于从供应商处收货时的库存移动的源库位,是一种虚拟库位。

    视图库位(View): 库位树状结构的中间节点,用于组织库位树状结构。该种视图不可在库存移动中使用,但可用于库存统计,即统计其下面的各个库位的总库存。

    内部库位(Internal Location): 仓库中实际存放货物的库位,即库区。

    客户库位(Customer Location): 用于供货给客户时的库存移动的目标库位,是一种虚拟库位。

    盘点库位(Inventory): 用于盘亏时的目标库位,或者盘盈时的源库位。注意,新上OE系统时候也是从该库位中“移动”产品至各库位,以建立期初库存。

    补货库位(Procurement): 产品补货单(Procurement Order,这个概念很重要,后面再讲)引起的库存移动的“临时”源库位或目标库位。当系统初次生成补货单时候,系统不能确定补货的来源(不确定是通过购买还是通过生产补货)。只有当系统运行完补货调度计划(Procurement Scheduler)后,才知道补货来源。默认情况下,系统每天运行一次补货调度计划,当然,你可以在任何时候手动执行补货调度计划。补货库位用于初次生成的补货单中的库存移动。每当运行完补货调度计划后,该库位库存数量应为零。

    生产库位(Production): 生产时候,生产领料或成品入库时候的目标库位或源库位,是一种虚拟库位。

    多公司中间库位(Transit Location for Inter-Companies Transfers): 多公司时候,用于库存移动时候的中间库位。

    四、库位链(Location Chain)

    OE的库位间可以串联起来形成库位链。举个简单例子,你希望收到货物后先进入质检区,经质检人员确认后再入库。要实现这个业务,一个简单办法是利用库位链。设置一个质检库位,该库位链接到你的存货库位,每当货物进入质检库位时候(系统记录到一个目标库位为质检库位的库存移动),系统自动生成一个从质检库位到存货库位的移动单,要求质检人员确认该单子。

    库位链中,从前一库位到下一库位的移动,有三种移动方式:

    手动转移(Manual Operation):系统自动生成一张到下一库位的移动单,要求操作员确认后才实际移动。

    自动转移(Automatic Move):系统自动生成一张到下一库位的移动单,不需要操作员确认,直接移动。此时通常还会指定库链提前时间(Chaining Lead Time),该时间表示,货物进入库位后,等待该时间,再进入下一库位。这个概念可以用于建模物流路径结点及其时间。

    自动跳移(Automatic No Step Added):系统不生成到下一库位的移动单,而是直接修改原库存移动的目标库位为下一库位。

    可以利用OE灵活的库位及库位链的概念建模物流处理过程。如:

    销售发货的多次确认:例如,系统默认的销售发货过程是两次确认,一次是出库前确认待发货产品合格,其次是客户收到货物后联系客户确认收货无误。第一次确认在销售单确认时系统自动产生的装箱单(Packing List,其内容是存货库位Stock到出货库位Output的库存移动)上确认,第二次在第一次确认后产生的运输单(Delivery Order,其内容是从出货库位Output到客户库位Cusomer的库存移动)上确认。如果不需要第二次确认,那么,只要将Output -> Customer设置成自动转移库位链,则第二次将自动移动,无需确认。

    跟踪货物进出口的海运路径:例如,假设某产品从美国公司A进口,A公司发货后2天到达美国西岸港口,1个月后到达上海港口,5天后应到达公司仓库。为了跟踪该物流过程,可以建立库位链:Supplier A -> 西岸港 -> 上海港 -> Input -> Stock,并设置该库位链各环节的库链提前时间,则系统可以自动产生库存移动供用户确认货物是否按时到达各节点。

    管理单个产品的物流路径:安装Location_Path模块后,OE支持为每个产品设置特定的物流路径。

    管理出租产品:例如某设备A出租给某客户A 3个月,可以为设备A设置库位链:Stock -> Output -> Customer A -> Input ->Stock,并将Customer A -> Input环节的库链提前时间设置为3个月。这样,系统将于3个月后自动产生库存移动单供用户确认设备A是否按时归还。

    管理委托产品:委托产品是指,存放于客户或供应商处,但产权属于自己的产品,或者,存放于本公司仓库,但产权不属于本公司的产品。例如,对于产权属于自己,但存放于客户处的产品,可以在自己公司的总存货库位下设置一个“客户库位”,用于记录该类产品库存。

    五、产品补货(Procurement)

    销售缺货时需要及时“补货”,这个补货过程在OE里叫产品补货(Procurement)。OE的补货,是通过手动或自动生成补货单(Procurement Order)来实现。有多种情况会引发补货:

    1)仓管员发现某产品库存太低,他可以手动生成一张补货单(Procurement Order)。在产品画面,右边有个“Make Procurement”链接,当查看库存时发现产品库存太低,可以点击该链接手工填写补货单。

    2)按库存生产(Make to Stock)的产品,当该产品库存低于最低库存(minimum stock rules)时,系统会自动生成补货单。系统有一个批处理Job,该Job会定期执行(默认为一天一次),该Job根据设定的最低库存规则(minimum stock rules),如果库存不够时,自动生成补货单。

    3)按订单生产(Make to Order)的产品,确认销售订单时候,系统会自动生成补货单。

    4)按库存生产(Make to Stock)的产品,根据主生产计划(master production schedule)生成补货单。

    随着补货单的执行,系统会产生一系列的动作。如自动生成采购单(Purchase Order),自动生成制造单(Manufacturing Order),自动生成任务(Task)。具体采取什么动作,取决于产品(Product)的供应方法(Supply Method)、补货方法(Procurement Method)、产品类型(Product Type)三个属性的设置。

    OE支持两种产品补货方法:按库存生产(Make to Stock)、按订单生产(Make to Order)。

    按库存生产(Make to Stock): 表示从仓库取货供给客户的产品,如分销商的情况,或者季节性产品。

    按订单生产(Make to Order): 表示有销售订单时,根据订单去采购或生产的产品,该种产品不会入库。

    OE支持两种产品供应方法:生产(Produce)、购买(Buy)。

    生产(Produce): 表示该产品通过自己生产来供应,或者该服务是通过内部资源来提供。

    购买(Buy): 表示该产品或服务通过购买来供应。

    OE支持三种产品类型:可库存品(Stockable)、消耗品(Cosumable)、服务(Service)

    可库存品(Stockable):需要计量其库存数量的物资,通常的有形产品都是该类型。

    消耗品(Cosumable):不需要计量其库存数量的物资,通常是低值易耗品,如小螺钉等。

    服务(Service):非有形物,OE中将服务也看做产品。如咨询服务、软件开发服务。

    对于可库存产品,补货单(Procurement Order)的后续动作:

    补货方法 | 供应方法(Produce) | 供应方法(Buy)

    MTS | 等待 | 等待

    MTO | 自动生成生产单 | 自动生成采购单

    对于服务产品,补货单(Procurement Order)的后续动作:

    补货方法 | 供应方法(Produce) | 供应方法(Buy)

    MTS | - | -

    MTO | 自动生成项目任务 | 自动生成服务外包合同

    下面举个复杂点的例子说明OE的补货(Procurement)过程:

    1)销售出某MTO的产品A

    2)销售单(SO:Sale Order)确认时候,系统自动生成产品A的补货单(PO:Procurement Order)

    3)该PO导致系统生成产品A的制造单(MO:Manufacturing Order)

    4)随着该MO的执行,系统会根据BOM计算产品零部件的补货单

    5)零部件补货单会导致系统生成库间移动单(INT:Internal Moves,相当于领料单)

    6)如果零部件是MTO的产品,该INT又会触发新的PO及MO,如果该零部件是MTS的,且库存不足领料数量,则系统将处于待料状态(Waiting)

    7)待料状态下,等待一天后,最小库存规则会自动引发该零部件的补货单,该补货单又会产生采购单(PO:Purchase Order)

    8)采购员确认系统生成的采购单,且采购零部件入库后,待料状态结束,生产可以继续进行。

    从上述补货过程可以看出,有多种原因会导致补货过程中断(Procurement Exception),补货单会记录导致异常的原因。设置错误是导致自动补货异常的最常见原因。

    产品未定义BOM(No bill of materials defined for production): 这种情况,需要定义BOM,或者将产品的供应方法改成购买(Buy)。

    找不到采购单的供应商(No supplier available for a purchase): 这中情况是因为没有定义产品的供应商,需要在Product界面的Supplier页定义产品默认供应商。

    找不到供应商的地址(No address defined on the supplier partner):这种情况,需要设置该供应商的地址,系统自动生成采购单时需要该地址。

    库存不足(No quantity available in stock):这种情况需要定义最小库存规则,以使系统能够自动补货,或者手工录入补货单补足库存。

    六、库存价值(stock valuation)

    库存价值计算比较难,财务经理给出的库存价值往往和库管经理给出的库存价值相差很多,所谓库存“两张皮”现象。在OE中,非常巧妙的将“两张皮”统一成了一张皮。OE中统一“两张皮”的办法是,每一笔库存移动都会自动生成会计上的一笔库存移动分录。因为系统自动生成,避免了人为错误,故而会计分录和库存移动能够保持一致,财务经理从会计分录计算的库存价值和库管经理从库存移动计算出的库存价值总是相等的。

    为了统一库存价值的“两张皮”,在OE中需要设置如下一些基础参数:产品(Product)画面的Stock Input Account、Stock Output Account,库位(Location)画面的Stock Input Account、Stock Output Account。

    产品的Stock Input Account:该产品入库时,入库分录的贷方。产品入库时候,借方通常固定是“库存商品”。

    产品的Stock Output Account:该产品出库时,出库分录的借方。产品出库时候,贷方通常固定是“库存商品”。

    库位的Stock Input Account:产品入该库位时,入库分录的借方。该参数通常是“库存商品”下的以库位名命名的二级科目,如“A库”。但如果是“盘点库位”或“生产库位”,不要设置成“库存商品”的二级科目,你可以设置该参数为“盘点库”、“生产库”,或者不设。

    库位的Stock Output Account:产品出该库位时,出库分录的贷方。该参数通常也是“库存商品”下的以库位名命名的二级科目,如“A库”。

    考虑如下例子,

    产品“自行车”的Stock Input Account=“外库”,Stock Output Account=“外库”

    A库位的Stock Input Account=“库存商品 - A库”,Stock Output Account=“库存商品 - A库”

    盘点库位的Stock Input Account=“盘库”,Stock Output Account=“盘库”

    自行车单价200元,期初自行车库存数量为0,依次发生业务:1)采购入库自行车10辆,入A库位;2)销售出库自行车5辆,从A库出;3)月末盘点盘亏1辆自行车。

    当确认上述库存移动时候,系统会自动生成如下会计分录:

    1)采购入库

    产品 |数量 | 源库位 | 目标库位

    自行车 | 10 | Supplier | A库位

    会计分录

    借:库存商品 - A库 2000

    贷:外库 2000

    2)销售出库

    产品 |数量 | 源库位 | 目标库位

    自行车 | 5 | A库位 | Customer

    会计分录

    借:外库 1000

    贷:库存商品 - A库 1000

    3)盘亏

    产品 |数量 | 源库位 | 目标库位

    自行车 | 1 | A库位 | 盘点库位

    会计分录

    借:盘库 200

    贷:库存商品 - A库 200

    从系统的记录中,库管经理很容易得出结论:A库位4辆(10辆-5辆-1辆),盘点库位1辆。

    财务经理很容易得出结论:A库位价值800元(2000元-1000元-200元),盘点库位价值200元。

    盘点库位的价值表示盘亏了200元。

    展开全文
  • c标准总结

    千次阅读 多人点赞 2019-03-14 10:28:54
    作为一个技术人员,无论什么时候都不能忘记自己最擅长的技能,这次一个偶然的契机,翻一翻c标准,希望以后自己在技术上越来越牛。 说明 c++和c包含相同的结构体的定义,其区别主要如下: 每个头文件与c语言...

    c标准库

    前言

    学习c语言十几年了,却从来没有完整的将c标准库看一看,我想在这一点上我是欠缺的。作为一个技术人员,无论什么时候都不能忘记自己最擅长的技能,这次借一个偶然的契机,翻一翻c标准库,希望以后自己在技术上越来越牛。

    说明

    c++库和c库包含相同的结构体的定义,其区别主要如下:

    • 每个头文件与c语言版本具有相同的名称,但是带有“c”前缀,没有扩展文件名。例如:c语言头文件<stdio.h>的c++等价头文件为。
    • 库的每个元素都在std空间中定义。

    本文档的示例中,使用c风格的版本,要使用c++的版本替换成相应的头文件就好。

    在c++版本实现中也有一些特定的区别:

    • wchar_t, char16_t, char32_t 和 bool是c++中的基本类型,因此不会在c版本中出现,这同样适用于<iso646.h>中的宏,因为它们是c++中的关键字。
    • 以下函数的声明中有与其参数常量相关的更改:strchr、strpbrk、strrchr、strstrstr、memchr。
    • 定义在<cstdlib>中的atexit、exit、abort函数在c++中的行为有所增加。
    • 有些函数的重载版本提供了作为参数的附加类型和相同的语义,例如cmath头文件中函数的float和long double版本,或者abs和div的long版本。

    c++98包含c90标准中的库;
    c++11包含c99标准中描述的c库;
    2011 ISO标准的其他介绍与c++不兼容。

    说明:本文主要对c99(即c++11)库进行描述。

    <cassert>&lt;assert.h>

    说明

    该文件中定义了一组宏函数作为标准调试工具。对应的宏函数为assert。

    函数

    函数assert

    void assert(int expression);
    

    如果表达式为0,则会向标准错误设备写入一条消息,并调用abort,终止程序的额执行。
    如果在#include<assert.h>时,已经定义了名为ndebug的宏,则禁用此宏。因此可以在调试时使用断言,但是在生产版本中通过如下行为禁用这些断言调用:

    #define NDEBUG
    

    调用示例:

    #include <stdio.h>      /* printf */
    #include <assert.h>     /* assert */
    
    void print_number(int* myInt) {
           assert (myInt!=NULL);
           printf ("%d\n",*myInt);
    }
    
    int main (){
         int a=10;
         int * b = NULL;
         int * c = NULL;
    
         b=&a;
    
         print_number (b);
         print_number (c);
    
         return 0;
    }
    

    <cctype>/<ctype.h>

    说明

    此头文件声明了一组用于分类和转换单个字符的函数。

    函数

    isalnum

    int isalnum ( int c );
    

    检查c是十进制数字还是大小写字母。如果为假返回0,否则返回其它值。

    isalpha

    int isalpha ( int c );
    

    检查c是否为字母。为假返回0,否则返回其它值。

    isblank

    int isblank ( int c );
    

    检查c是否是空白字符。为假返回0,否则返回其它值。

    iscntrl

    int iscntrl ( int c );
    

    检查c是否是控制字符。为假返回0,否则返回其它值。

    isdigit

    int isdigit ( int c );
    

    检查c是否是十进制字符。为假返回0,否则返回其它值。

    isgraph

    int isgraph ( int c );
    

    检查c是否有图形表示法。带有图形表示法的字符是除了空白字符(比如 ’ ')以外的所有可打印的字符。为假返回0,否则返回其它值。

    islower

    int islower ( int c );
    

    检查c是否是小写字母。为假返回0,否则返回其它值。

    isprint

    int isprint ( int c );
    

    检查c是否是可打印字符。为假返回0,否则返回其它值。

    ispunct

    int ispunct ( int c );
    

    检查c是否是标点符号。为假返回0,否则返回其它值。

    isspace

    int isspace ( int c );
    

    检查c是否是空格。为假返回0,否则返回其它值。

    isupper

    int isupper ( int c );
    

    检查c是否是大写字母。为假返回0,否则返回其它值。

    isxdigit

    int isxdigit ( int c );
    

    检查c是否是十六进制数字。为假返回0,否则返回其它值。

    tolower

    int tolower ( int c );
    

    将c转换成小写字符。

    toupper

    int toupper ( int c );
    

    将c转换成大写字符。

    <cerrno>/<errno.h>

    该文件中主要定义了如下宏:

    • errno 上次的错误号;
    • 该宏可以由程序读和写。

    <cfloat>/&ltfloat.h>

    含了一组与浮点值相关的依赖于平台的常量。

    描述
    FLT_ROUNDS 定义浮点加法的舍入模式,它可以是下列任何一个值: -1 表示无法确定 ; 0 表示趋向于零; 1表示去最近的值; 2趋向于正无穷; 3趋向于负无穷。
    FLT_RADIX 此宏定义了指数表示的基数。基数2表示二进制,基数10表示十进制,基数16表示十六进制。
    FLT_MANT_DIG DBL_MANT_DIG LDBL_MANT_DIG 定义了FLT_RADIX基数中的位数
    FLT_DIG 6 DBL_DIG 10 LDBL_DIG 10 定义了舍入后不会改变表示的十进制数字的最大值。
    FLT_MIN_EXP DBL_MIN_EXP LDBL_MIN_EXP 定义了基数为FLT_RADIX时的指数的最小负整数值。
    FLT_MIN_10_EXP -37 DBL_MIN_10_EXP -37 LDBL_MIN_10_EXP -37 定义基数为10时指数的最小负整数值。
    FLT_MAX_EXP DBL_MAX_EXP LDBL_MAX_EXP 定义基数为FLT_RADIX时指数的最大整数值。
    FLT_MAX_10_EXP +37 DBL_MAX_10_EXP +37 LDBL_MAX_10_EXP +37 定义基数为10时的指数的最大整数值。
    FLT_MAX 1E+37 DBL_MAX 1E+37 LDBL_MAX 1E+37 定义最大的有限浮点数。
    FLT_EPSILON 1E-5 DBL_EPSILON 1E-9 LDBL_EPSILON 1E-9 定义可表示的最小有效数字。
    FLT_MIN 1E-37 DBL_MIN 1E-37 LDBL_MIN 1E-37 定义最小的浮点数。

    <ciso646>/<iso646.h>

    定义运算符相关的宏。

    对应操作符
    and &&
    and_eq &=
    bitand &
    bitor |
    compl ~
    not !
    not_eq !=
    or ||
    or_eq |=
    xor ^
    xor_eq ^=

    在c++中有相应的保留字,因此可以不需要此头文件。

    <climits>/<limits.h>

    该头文件决定了各种变量类型的各种属性。定义在该头文件中的宏限制各种类型的变量。即变量不能存储任何超出这些限制的值。

    描述
    CHAR_BIT char类型中的比特数 8
    SCHAR_MIN 有符号字符的最小值 -127
    SCHAR_MAX 有符号字符的最大值 127
    UCHAR_MAX无符号字符的最大值 255
    CHAR_MIN char类型的最小值 SCHAR_MIN或者0
    CHAR_MAX char类型的最大值 SCHAR_MAX或者UCHAR_MAX
    MB_LEN_MAX 多字节字符中的最大字节数 1
    SHRT_MIN 短整型的最小值 -32767(-2^15+1)
    SHRT_MAX 短整型的最大值 32767(2^15+1)
    USHRT_MAX 无符号短整型的最大值 65535(2^16-1)
    INT_MIN int类型的最小值 -32767(-2^15+1)
    INT_MAX int类型的最大值 32767(2^15+1)
    UINT_MAX 无符号int类型的最大值 65535(2^16-1)
    LONG_MIN 长整型的最小值 -2147483647 (-2^31+1)
    LONG_MAX 长整型的最大值 2147483647 (2^31+1)
    ULONG_MAX 无符号长整型的最大值 4294967295 (2^32-1)
    LLONG_MIN long long int的最小值 -9223372036854775807 (-2^63+1)
    LLONG_MIN long long int的最大值 9223372036854775807 (2^63+1)
    ULLONG_MAX 无符号long long int的最大值 18446744073709551615 (2^64-1)

    <clocale>/<locale.h>

    c语言支持特定于本地化的设置。例如特定于区域性的日期格式或特定于国家的货币符号。
    每个系统和特定的编译器至少要提供两种区域设置选择:

    • "c"区域设置是最小区域设置。
    • 系统的默认区域设置由运行应用程序的环境提供区域设置配置。

    在此头文件中声明了结构提lconv以及函数setlocale和localeconv,以及配合它们使用的一些宏。

    结构体lconv

    此结构体保存写入数值(货币值和非货币值)的格式信息。函数localconv返回此类型的对象。
    该结构体包含的成员如下:
    typedef struct {
    char *decimal_point;//用于非货币值的小数点字符
    char *thousands_sep;//用于非货币值的千位分隔符
    char *grouping;//一个表示非货币量中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组
    char *int_curr_symbol;//国际货币符号使用的字符串。前三个字符是由 ISO 4217:1987 指定的,第四个字符用于分隔货币符号和货币量
    char *currency_symbol;//用于货币的本地符号
    char *mon_decimal_point;//用于货币值的小数点字符
    char *mon_thousands_sep;//用于货币值的千位分隔符
    char *mon_grouping;//一个表示货币值中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组
    char *positive_sign;//用于正货币值的字符
    char *negative_sign;//用于负货币值的字符
    char int_frac_digits;//国际货币值中小数点后要显示的位数
    char frac_digits;//货币值中小数点后要显示的位数
    char p_cs_precedes;//如果等于 1,则 currency_symbol 出现在正货币值之前。如果等于 0,则 currency_symbol 出现在正货币值之后
    char p_sep_by_space;//如果等于 1,则 currency_symbol 和正货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和正货币值之间不使用空格分隔
    char n_cs_precedes;//如果等于 1,则 currency_symbol 出现在负货币值之前。如果等于 0,则 currency_symbol 出现在负货币值之后
    char n_sep_by_space;//如果等于 1,则 currency_symbol 和负货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和负货币值之间不使用空格分隔
    char p_sign_posn;//表示正货币值中正号的位置
    char n_sign_posn;//表示负货币值中负号的位置
    char int_p_cs_precedes;//p_cs_precedes的国际格式
    char int_n_cs_precedes;//n_cs_precedes的国际格式
    char int_p_sep_by_space;//p_sep_by_space的国际格式
    char int_n_sep_by_space;//n_sep_by_space的国际格式
    char int_p_sign_posn;//p_sign_posn的国际格式
    char int_n_sign_posn;//n_sign_posn的国际格式
    } lconv

    函数setlocale

    char* setlocale (int category, const char* locale);
    

    设置或读取地域化的信息。

    函数localeconv

    struct lconv* localeconv (void);
    

    设置或读取地域化信息,会返回一个lconv结构类型的对象。

    <cmath>/<math.h>

    定义了常用的数学操作相关的函数。
    如下:

    • cos
    • sin
    • tan
    • acos
    • asin
    • atan
    • atan2
    • cosh
    • sinh
    • tanh
    • acosh
    • asinh
    • atanh
    • exp
    • frexp
    • ldexp
    • log
    • log10
    • modf
    • exp2
    • expm1
    • ilogb
    • log1p
    • log2
    • logb
    • scalbn
    • scalbln
    • pow
    • sqrt
    • cbrt
    • hypot
    • erf
    • erfc
    • tgamma
    • lgamma
    • ceil
    • floor
    • fmod
    • trunc
    • round
    • lround
    • llround
    • rint
    • lrint
    • nearbyint
    • remainder
    • remquo
    • copysign
    • nan
    • nextafter
    • nexttoward
    • fdim
    • fmax
    • fmin
    • fabs
    • abs
    • fma
    • fpclassify
    • isfinite
    • isinf
    • isnan
    • isnormal
    • signbit
    • isgreater
    • isgreaterequal
    • isless
    • islessequal
    • islessgreater
    • isunordered
    • math_errhandling
    • INFINITY
    • NAN
    • HUGE_VAL
    • HUGE_VALF
    • HUGE_VALL

    <csetjmp>/<setjmp.h>

    定义了宏setjmp、函数longjmp以及变量类型jmp_buf,用来实现远程跳转。

    jmp_buf类型

    用来存储宏setjmp和longjmp之间的环境相关的信息。在调用setjmp时存储,然后在longjmp时恢复

    setjmp

    int setjmp (jmp_buf env);
    

    此宏用来把当前的环境保存在变量enviroment中,以便longjmp调用时使用。

    longjmp

    void longjmp (jmp_buf env, int val);
    

    该函数恢复最近一次调用setjmp宏时保存的环境,就jmp_buf参数的设置是由之前调用的额setjmp生成的。

    <csignal>/<signal.h>

    处理信号的c标准库。包括sig_atomic_t类型,信号处理设置函数signal,信号生成函数raise。

    sig_atomic_t类型

    int类型,信号处理程序中作为变量使用。它是一个对象的整数类型,该对象可以作为一个原子实体访问,即使存在异步信号时,该对象可以作为一个原子实体访问。

    signal

    注册信号处理函数。

    raise

    生成一个信号。

    宏类型

    类型 信号
    int (信号) SIGABRT 程序异常终止
    int (信号) SIGFPE 算术运算出错,如除数为0或者溢出
    int (信号) SIGILL 非法函数映像,如非法指令
    int (信号) SIGINT 中断信号,如ctrl-C
    int (信号) SIGSEGV 非法访问存储器,如访问不存在的内存单元
    int (信号) SIGTERM 发送给本程序的终止请求信号
    函数(handlers) SIG_DFL 默认的信号处理程序
    函数(handlers) SIG_ERR 特殊返回值表示一个信号错误
    函数(handlers) SIG_IGN 忽略信号

    <cstdarg>/<stdarg.h>

    该头文件定义了一个变量类型va_list和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。
    可变参数的函数在参数列表的末尾使用省略号(…)定义。
    例如:

    返回类型 函数名称(参数1, ...)
    

    要访问附加的参数通过宏va_start,va_arg,va_end来实现。

    库变量va_list

    适用于va_start()、va_arg()和va_end()这三个宏存储信息的类型。

    宏库

    描述
    void va_start (va_list ap, last_arg) 此宏初始化ap变量,与va_arg和va_end一起使用。lase_arg是最后一个传递给函数的已知的固定参数,即省略号之前的参数,此参数不应为引用类型。
    type va_arg(va_list ap, type) 此宏检索函数参数列表中类型为type的下一个参数。
    void va_end(va_list ap) 此宏允许使用va_start宏带有的可变参数的函数返回。如果在从函数返回之前没有调用va_end,则结果为未定义。
    void va_copy (va_list dest, va_list src) 拷贝va_list src的内容到dest

    <cstdbool>/&ltstdbool.h>

    定义true和false的宏。

    <cstddef>/<stddef.h>

    该头文件定义各种变量类型和宏。

    类型

    类型 含义
    ptrdiff_t 有符号整数类型,它是两个指针相减的结果
    size_t 无符号整数类型,它是sizeof关键字的结果
    max_align_t 对其类型大小
    nullptr_t 空指针类型

    宏函数

    类型 含义
    offset 返回结一个构体成员的偏移量

    类型 含义
    NULL 空指针

    <cstdint>/<stdint.h>

    此文件是类型支持库的一部分,提供定宽整数类型和部分c数值极限接口。

    类型

    int8_t uint8_t
    int16_t uint16_t
    int32_t uint32_t
    int64_t uint64_t
    分别为宽度恰为 8 、 16 、 32 和 64 位的有/无符号整数类型
    无填充位并对负值使用补码(仅若实现支持该类型才提供)

    int_least8_t uint_least8_t
    int_least16_t uint_least16_t
    int_least32_t uint_least32_t
    int_least64_t uint_least64_t
    分别为宽度至少有 8 、 16 、 32 和 64 位的最小的有/无符号整数类型

    int_fast8_t uint_fast8_t
    int_fast16_t uint_fast16_t
    int_fast32_t uint_fast32_t
    int_fast64_t uint_fast64_t
    分别为宽度至少有 8 、 16 、 32 和 64 位的最快的有/无符号整数类型

    intmax_t uintmax_t 最大宽度的有/无符号整数类型
    intptr_t uintptr_t 足以保有指针的有/无符号整数类型

    对应上述类型的最大值、最小值以及特殊值。

    <cstdio>/<stdio.h>

    输入输出标准库。

    流属性

    大部分属性在使用fopen打开一个文件的时候定义,如下:

    • 读写权限
    • 文本/二进制
    • 缓冲
    • 流的方向

    流标识

    主要有以下三种:

    • 错误标识
    • 文件结束标识
    • 位置标识

    函数

    函数 功能
    remove 删除文件
    rename 重命名文件
    tmpfile 打开一个临时文件
    tmpnam 生成一个临时文件
    fclose 关闭文件
    fflush Flush流
    fopen 打开文件
    freopen 把一个新的文件名与给定的打开流相关联,同时关闭流中的旧文件
    setbuf 设置流的缓冲区
    setvbuf 定义流缓冲的函数
    fprintf 格式化写入流
    fscanf 从流读取格式化输入
    printf 格式化打印到stdout
    scanf 从标准输入取
    snprintf 格式化打印到缓冲中
    sprintf 发送格式化输出到字符串
    sscanf 从字符串读取格式化输入
    vfprintf 使用参数列表发送格式化输出到流中
    vfscanf 从流中执行格式化输入
    vprintf 使用参数列表发送格式化输出到标准输出stdout
    vscanf 字符串格式化输入函数
    vsnprintf 从参数列表格式化输出到buffer
    vsprintf 从参数列表格式化输出到字符串
    vsscanf 从字符串格式输入到参数列表
    fgetc 从流中取一个字符
    fgets 从流中取字符串
    fputc 写入字符到流中
    fputs 写入字符串到流中
    getc 从流中取一个字符
    getchar 从标准输入取一个字符
    gets 从标准输入取一个字符串
    putc 写入字符到流中
    putchar 写字符到标准输出
    puts 写字符串到标准输出
    ungetc 把一个字符推入到指定的流中,以便它是下一个被读取到的字符
    fread 从指定的流中读取数据到所指向的数组中
    fwrite 写数据到指定的流中
    fgetpos 获取流中的当前位置
    fseek 设置流的文件位置给定的偏移
    fsetpos 设置指定位置
    ftell 返回给定流的当前文件位置
    rewind 返回文件位置为给定流的文件的开头
    clearerr 清除给定流的文件结束和错误标识
    feof 是否到文件末尾
    ferror 测试流的错误标识
    perror 打印错误消息

    功能
    BUFSIZ 缓冲尺寸
    EOF 文件结束
    FILENAME_MAX 文件名最大长度
    FOPN_MAX 能同时打开的文件数量
    L_tmpnam 字符数组可以存储的由tmpnam函数创建的临时文件名的最大长度
    NULL 空指针
    TMP_MAX tmpnam函数可生成的独特文件名的最大数量

    类型

    类型 描述
    FILE 适合存储文件流信息的对象类型
    fpos_t 适合存储文件中任何位置的对象类型
    size_t 无符号整数类型,是sizeof关键字的结果

    <cstdlib>/<stdlib.h>

    此文件中定义了一些通用的函数,包括内存动态管理,随机数生成等等。

    函数

    • 字符串转换相关:

      函数 功能
      atof 字符串转换成double类型
      atoi 字符串转换成整型
      atol 字符串转换成长整型
      atoll 字符串转换成长长整型
      strtod 字符串转换成double类型
      strtof 字符串转换成浮点型
      strtol 字符串转换成长整型
      strtold 字符串转换成长double型
      strtoll 字符串转换成长长整型
      strtoul 字符串转换成无符号长整型
      strtoull 字符串转换成无符号长长整型
    • 随机相关

      函数 功能
      rand 生成随机数
      srand 初始化随机数生成器
    • 动态内存管理

      函数 功能
      calloc 分配并且用0初始化数组
      free 释放内存
      malloc 分配内存
      realloc 重新分配内存
    • 环境相关

      函数 功能
      abort 中止当前进程
      atexit 设置执行exit时执行的函数
      at_quick_exit 设置执行quick_exit时执行的函数
      exit 结束调用进程
      getenv 获取环境变量
      quick_exit 快速结束调用进程
      system 执行系统命令
      _Exit 结束调用进程
    • 搜索和排序

      函数 功能
      bsearch 执行二分查找
      qsort 数组排序
    • 整型数相关

      函数 功能
      abs 求绝对值
      div 整数除法
      labs 求长整型绝对值
      ldiv 求长整型除法
      llabs 求长长整型绝对值
      lldiv 求长长整型除法
    • 多字节字符

      函数 功能
      mblen 求多字节字符的长度
      mbtowc 将多字节序列转换成宽字符
      wctomb 宽字符转换成多字节序列
    • 多字节字符串

      函数 功能
      mbstowcs 多字节字符串转换成宽字符字符串
      wcstombs 宽字符字符串转换成多字节字符串
    • 功能
      EXIT_FAILURE 错误结束码
      EXIT_SUCCESS 成功结束码
      MB_CUR_MAX 多字节字符的最大尺寸
      NULL 空指针
      RAND_MAX 能随机出来的最大值
    • 类型

      类型 功能
      div_t div返回的结构体
      ldiv_t ldiv返回的结构体
      lldiv_t lldiv返回的结构体
      size_t 无符号整型

    <cstring>/<string.h>

    该头文件中定义了一些函数来维护c语言中的字符串和数组。

    函数

    • 拷贝相关

      函数 功能
      memcpy 拷贝
      memmove 用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
      strcpy 拷贝字符串
      strncpy 拷贝字符串
    • 级联相关

      函数 功能
      strcat 级联
      strncat 级联
    • 比较

      函数 功能
      memcmp 比较两块内存
      strcmp 比较两个字符串
      strcoll 比较两个字符串,但是结果取决于 LC_COLLATE 的位置设置
      strncmp 比较两个字符串中的字符
      strxfrm 根据程序当前的
    • 搜索

      函数 功能
      memchr 搜索前n个字节中第一次出现字符c的位置
      strchr 搜索字符串中第一次出现的c的位置
      strcspn 检索字符串str1中连续几个字符都不包含字符串str2中的字符
      strpbrk 检测str1中地一个匹配字符串str2中字符的字符,不包含空结束字符
      strrchr 在参数str只想的字符串中搜索最后一次出现字符c的位置
      strspn 检测字符串str1中地一个不在字符串str2中出现的字符下标
      strstr 在一个字符串中查找第一次出现另一个字符串的位置
      strtok 分解字符串为一组字符串,第二个参数为分割符
    • 其它

      函数 功能
      memset 给内存块赋值
      strerror 获取错误字符串的指针
      strlen 获取字符串的长度
    • 功能
      NULL 空指针
    • 类型

      类型 描述
      size_t 无符号整型

    <ctgmath>/<tgmath.h>

    此头文件简单的包含<cmath>和<ccomplex>

    <ctime>/<time.h>

    时间相关的库

    函数

    • 时间相关

      函数 描述
      clock 返回程序执行起,处理器时钟所使用的时间
      difftime 返回两个time之间相差的秒数
      mktime 把tm结构转换成一个依据本地时区的time_t值
      time 计算当前日历时间,并把它编码成time_t格式
    • 转换相关

      函数 描述
      asctime 把tm结构转换成字符串
      ctime 把time_v的值转换成字符串
      gmtime 把time_t转换成UTC时间的tm
      localtime 把time_t转换成本地时间的tm
      strftime 格式化时间为字符串
    • 描述
      CLOCKS_PER_SEC 时钟每秒的滴答数
      NULL 空指针
    • 类型

      描述
      clock_t 时钟类型
      size_t 无符号整型
      time_t 时间类型
      struct time 时间结构体

    <cuchar>/<uchar.h>

    此头文件用来支持UTF-16和UTF-32.

    描述
    STD_UTF_16 如果定义了此值则说明char16_t有UTF-16编码
    STD_UTF_32 如果定义了此值则说明char32_t有UTF-32编码

    函数

    函数 描述
    c16rtomb 将16位字符转换成多字节序列
    c32rtomb 将32位字符转换成多字节序列
    mbrtoc16 将多字节序列转换成16位字符
    mbrtoc32 将多字节序列转换成32位字符

    <cwchar>/<wchar.h>

    此文件主要描述宽字符串相关的内容。

    函数

    • 输入/输出

      函数 功能
      fgetwc 从流中读取宽字符
      fgetws 从流中读取宽字符串
      fputwc 写宽字符到流中
      fputws 写宽字符串到流中
      fwide 检测流方向
      fwprintf 写格式化数据到流
      fwscanf 从流中读格式化数据
      getwc 从流中获取宽字符
      getwchar 从标准输入获取宽字符
      putwc 给流写宽字符
      putwchar 给标准输出写宽字符
      swprintf 写格式化数据到宽字符串
      swscanf 从流中读格式化数据
      ungetwc 回退一个wc到流中
      vfwprintf 从参数列表输出到流中
      vfwscanf 从流中读入到参数列表
      vswprintf 同上
      vswscanf 同上
      vwprintf 同上
      vwscanf 同上
      wprinf 同上
      wscanf 同上
    • 常规

      wcstod
      wcstof
      wcstol
      wcstold
      wcstoll
      wcstoul
      wcstoull

    • 字符和字符串转换

      btowc
      mbrlen
      mbrtowc
      mbsinit
      mbsrtowcs
      wcrtomb
      wctob
      wcsrtombs

    • 字符串

      wcscat
      wcschr
      wcscmp
      wcscoll
      wcscpy
      wcscspn
      wcslen
      wcsncat
      wcsncmp
      wcsncpy
      wcspbrk
      wcsrchr
      wcsspn
      wcsstr
      wcstok
      wcsxfrm
      wmemchr
      wmemcmp
      wmemcpy
      wmemmove
      wmemset

    • 时间

      wcsftime

    • 类型

      mbstate_t
      size_t
      struct tm
      wchar_t
      wint_t

    • NULL
      WCAHR_MAX
      WCHAR_MIN
      WEOF

    <cwctype>/wctype.h>

    宽字符类型相关。

    函数

    iswalnum
    iswalpha
    iswblank
    iswcntrl
    iswdigit
    iswgraph
    iswlower
    iswprint
    iswpunct
    iswspace
    iswupper
    iswxdigit

    towlower
    towupper

    iswctype
    towctrans
    wctrans
    wctype

    类型

    wctrans_t
    wctype_t
    wint_t

    其它

    WEOF

    展开全文
  • 此时通常会指定链提前时间(Chaining Lead Time),该时间表示,货物进入库位后,等待该时间,再进入下一库位。这个概念可以用于建模物流路径结点及其时间。 自动跳移(Automatic No Step Added):系统不生成...
  • NLP语料

    千次阅读 2014-04-24 18:00:50
    英语学习者语料(书面语及口语)中国学习者语料 CLEC(100万)广外、上海交大 大学英语学习者口语语料 COLSEC (5万) 上海交大 香港科技大学学习者语料 HKUST Learner Corpus 香港科技大学 中国英语专业...
  • 漏洞

    千次阅读 2014-04-16 00:52:56
    SQL注入流行很久了,我们找漏洞注入目的无非是想得到数据库内的东西,比如用户名密码等,更进一步的MSSQL数据库可以此获得权限。基于Access的基础来说,如果我们不用注入就可以得到整个数据库,不是更好吗?于是...
  • 软件工程概论题库

    万次阅读 多人点赞 2018-07-09 21:42:16
    一、选择题:1. 开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做(C)。A.软件工程 B.软件周期 C.软件危机 D.软件产生2. 瀑布模型本质上是一种(A )模型。A.线性顺序 B....A....
  • odoo stock库存模块

    千次阅读 2019-09-16 18:49:34
    此时通常会指定链提前时间(Chaining Lead Time),该时间表示,货物进入库位后,等待该时间,再进入下一库位。这个概念可以用于建模物流路径结点及其时间。 自动跳移(Automatic No Step Added):系统不...
  • Linux动态的工作原理详解

    千次阅读 2016-08-12 14:24:19
    直到最近工作中听到一些关于动态加载以及工作原理的一些错误的理论,一方面为了推翻该理论,另一方面,正好此机会彻底弄清楚动态的工作原理。 后面会详细讲解Linux动态的加载原理《Li
  • python:文件整理

    千次阅读 2019-10-29 18:42:20
    python文件 名称 简介 Chardet 字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama 主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable 主要用于在终端或浏览器端构建格式化...
  • python文件简介整理

    千次阅读 2018-12-07 15:19:39
    python文件 名称 简介 Chardet 字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama 主要用来给文本添加各种颜色,并且非常简单易用。 Prettytable 主要用于在终端或浏览器端构建格式化的输出。 ...
  • 因为需要用到STM32h750芯片的原理文件(尽管图中这个没有,正好此介绍下自己摸索出来的安装的方法),在正点原子的网站里有一篇介绍的帖子如下:http://www.openedv.com/posts/list/44271.htm。没有冒犯意思...
  • python opencv 函数说明

    千次阅读 2015-08-14 18:51:17
    为使得OpenCV的整个便于管理和扩充,将整个分成若干子,CxCore是最重要的一个子,从“core"名字可以看出,该提供了所有OpenCV运行时的一些最基本的数据结构,包括矩阵,数组的基本运算,包括出错处理的...
  • 谷歌官方Android应用架构——Room 持久化

    万次阅读 多人点赞 2017-06-11 05:09:57
    谷歌官方Android应用架构——Room 持久化
  • STL简介

    万次阅读 多人点赞 2019-03-29 18:11:23
    STL是c++中的一个标准模板,作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础...
  • 引入 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 ...
  • numpy是Python一个非常强大的拓展,专门用来处理数组和矩阵运算,并且提供数组和矩阵相关的大量内置函数,其运行效率非常高,而专门进行数据分析的pandas也是基于numpy的数据底层。可以说在处理大量数据的场景...
  • 为什么想起来学网络呢前一阵在网上看到这么一段话 select 实在是太慢了. 在这种背景下, IBM 老大哥带领着MS老弟先搞了 IOCP . 然而开源的人有开源的做法, 在 NIH 综合症的影响下, BSD 的人敢为天下所不齿, ...
  • 每日答题-题库

    万次阅读 2020-08-20 08:57:55
    A:错误 Q123:小陈通过微信摇一摇添加了一位头像靓丽的姑娘,两人聊天十分投缘,某天姑娘突然对小陈说,家人得了重病,向他2万元给家人治病,小李此时应该?A:直接拒绝 Q124:信用报告中信贷信息部分能够体现客户3...
  • Python常用 - 【持续整理归档】

    千次阅读 2020-01-06 12:50:10
    Python常用 - 【持续整理归档】,比较多,会逐步慢慢细化分类和扩从python常用。 目录 1、常用 2、Python文件处理 3、Python图像处理 4、Python游戏和多媒体类库 5、大数据与科学计算 6、其功能与...
  • Python - 模块清单

    千次阅读 2019-05-10 23:06:36
    Chardet,字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama,主要用来给文本添加各种颜色,并且非常简单易用。...difflib,Python标准,计算文本差异 Levenshtein,快速计算字符串...
  • CISCN题库

    千次阅读 2020-09-02 14:57:45
    攻击者此精心构造填充数据,导致原有流程的改变,让程序转而执行特殊的代码,最终获取控制权。 31. 下面所列的( A )安全机制不属于信息安全保障体系中的事先保护环节。 A.杀毒软件 B.数字证书认证 C.防火墙 D....
  • UI开源

    千次阅读 2017-07-17 18:55:35
    整理并维护的安卓UI相关开源项目集合。我们会定期同步 OpenDigg 上的项目到这里,也欢迎各位 提交项目 给我们。 如果收录的项目有错误,可以通过 issue 反馈给我们。这里的项目Star数不是实时更新的,一般是一周...
  • python 的random可以产生随机数字,此利用可服务于生活,下面示例可以帮助大家学习random的使用。 ##随机代码 from random import * def mex(a,b,n,z = None): ##a为起始,b为结束,n为抽取个数,以Z为...
  • jQuery表单jquery.form.js

    万次阅读 2019-07-11 18:25:51
    本主题是《云客drupal源码分析》的番外篇,在drupal系统中用于支持AJAX API,由于这是一个独立实用的,因此专门用一个主题介绍 简介: jQuery表单(jquery.form.js)以jQuery为基础,用于处理表单AJAX提交...
  • Git仓库恢复

    千次阅读 2017-04-13 22:35:06
    今天为了更新Gitcafe, 因为Gitcafe没有办法删除网上的远程分支, 只能git的git push origin :master来实现…谁知道一个不小心在github博客上运行了…一上去发现全没了……整个master分支和仓库全没了…….T_T. ...
  • 创建Repo仓库

    千次阅读 2014-06-03 09:05:32
    随着项目的外部越来越多,每次更新代码都要敲一堆的Git命令,手指有点抽筋,着今天下午有空,学习了下Repo的用法,并搭建了一个Repo的客户端,这下感觉舒服了。 Repo是用python实现的,本质上仍然是通过Git来...
  • 简单好看的圆形进度条对话框开源简介本文介绍CircleProgressDialog开源的使用及实现的详细过程,该开源主要实现以下几个功能: - 自定义一个好看的圆形进度条,可直接在布局文件中使用,可设置圆环宽度、...
  • Android最全UI合集

    万次阅读 多人点赞 2019-03-26 17:40:26
    推荐一个GitHub上面超级强的ui android_ui这个几乎涵盖了Android所有优秀的,而且配有gif动图。 Android UI Library 目录索引 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,129
精华内容 21,651
关键字:

借库还库