AS3实现队列,先进先出。

本文介绍了一种在ActionScript 3 (AS3) 中实现固定大小队列的方法,通过具体实例展示了如何创建一个循环队列,并封装成类供重复使用。

聊天系统中,我们会使用Array来保存聊天信息。但如果Array不限制大小,无限保存,对于用户的系统是个非常大的压力。这时我们就需要一个有固定大小的队列,将超过10条/50条的数据删除,保留新的数据。

 

 

点击5次后打印结果为:

 

 

数组的长度始终不变,为10,且数据的最老(最先加入的)就被新的替换掉,且数组的下标不会固定不变。

 

 

 

将思想封装为一个类:

 

 

测试

 

 

打印结果:

 

在仓储管理系统(WMS, Warehouse Management System)中,**先进先出**(FIFO, First In, First Out)是一种常见的库存管理策略,尤其适用于有保质期要求的商品(如食品、药品、化学品等)。实现 FIFO 的核心是:**优先出库最早入库的批次库存**。 下面我将详细介绍如何在 WMS 系统中通过数据库设计和业务逻辑来实现 FIFO 出库功能,并提供一个 Python + SQL 示例代码。 --- ### ✅ 实现思路 1. **库存按批次管理**:每一批次(Batch)记录入库时间、数量、过期时间等。 2. **出库时按入库时间排序**:优先选择最早入库的批次进行出库。 3. **动态更新库存**:出库后减少对应批次的数量,若为0则移除。 4. **支持部分出库**:如果最早批次数量不足,继续从次早批次补足。 --- ### 🛠️ 数据库设计(简化版) ```sql -- 商品表 CREATE TABLE products ( product_id INT PRIMARY KEY, name VARCHAR(100) ); -- 批次库存表 CREATE TABLE inventory_batches ( batch_id INT PRIMARY KEY AUTO_INCREMENT, product_id INT, quantity INT NOT NULL, -- 当前库存数量 inbound_time DATETIME NOT NULL, -- 入库时间(关键字段) expiry_date DATE, -- 过期时间(可选) created_at DATETIME DEFAULT NOW(), FOREIGN KEY (product_id) REFERENCES products(product_id) ); ``` --- ### 💡 核心逻辑:FIFO 出库函数(Python + MySQL 示例) ```python import mysql.connector from datetime import datetime def fifo_pick(conn, product_id: int, required_qty: int): """ 使用 FIFO 策略从库存中拣选出库。 参数: conn: 数据库连接 product_id: 商品ID required_qty: 需要出库的数量 返回: 成功出库的数量,以及使用的批次列表 """ cursor = conn.cursor(dictionary=True) # 获取该商品所有库存批次,按入库时间升序排列(FIFO) query = """ SELECT batch_id, quantity, inbound_time FROM inventory_batches WHERE product_id = %s AND quantity > 0 ORDER BY inbound_time ASC """ cursor.execute(query, (product_id,)) batches = cursor.fetchall() if not batches: raise Exception(f"Product {product_id} out of stock.") total_picked = 0 picked_details = [] for batch in batches: batch_id = batch[&#39;batch_id&#39;] available = batch[&#39;quantity&#39;] to_pick = min(available, required_qty - total_picked) # 更新批次库存 update_query = """ UPDATE inventory_batches SET quantity = quantity - %s WHERE batch_id = %s """ cursor.execute(update_query, (to_pick, batch_id)) total_picked += to_pick picked_details.append({ &#39;batch_id&#39;: batch_id, &#39;picked_qty&#39;: to_pick }) if total_picked >= required_qty: break conn.commit() cursor.close() if total_picked < required_qty: raise Exception(f"Not enough stock. Only {total_picked}/{required_qty} picked.") return total_picked, picked_details ``` --- ### 🔍 使用示例 ```python # 初始化数据库连接(示例) conn = mysql.connector.connect( host="localhost", user="root", password="password", database="wms_db" ) # 模拟出库:商品ID=1001,需要出库50件 try: picked, details = fifo_pick(conn, product_id=1001, required_qty=50) print(f"FIFO出库成功,共出库: {picked}") for detail in details: print(f" 批次 {detail[&#39;batch_id&#39;]} 出库 {detail[&#39;picked_qty&#39;]} 件") except Exception as e: print("出库失败:", str(e)) finally: conn.close() ``` --- ### 📌 关键点说明 - `ORDER BY inbound_time ASC` 是实现 FIFO 的核心。 - 使用事务确保出库过程的原子性(建议开启事务)。 - 可扩展支持:批次过期预警、仓库/库位过滤、并行订单冲突控制等。 --- ### ✅ 增强建议 1. **添加事务支持**:避免并发出库导致超卖。 2. **引入消息队列**:高并发下排队处理出库请求。 3. **前端展示 FIFO 推荐批次**:辅助人工或自动拣货。 4. **与条码/RFID 系统集成**:扫描批次完成实际出库。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值