产品查找库存出货问题?

guarentianxia11 2016-11-03 09:28:17
先说一下需求
去仓库查找某产品的剩余量,按照从小到大的顺序出货,
比如卖出产品5吨,仓库1有2吨,仓库2有1.2吨,仓库3有7吨,把三个仓库从小到大排序,那么先取出仓库2的1.2吨,再去仓库1的2吨,再取仓库3里面7吨的3.8吨
数据库返回查找结果是

[
{
'warehouse': u'仓库03 - IL',
'ac_qty': 12.0
},
{
'warehouse': u'仓库01 - IL',
'ac_qty': 14.0
},
{
'warehouse': u'仓库02 - IL',
'ac_qty': 18.0
}
]

逻辑处理该怎么些呢?新手求教!
...全文
341 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
leo_cuiyiming 2016-12-02
  • 打赏
  • 举报
回复
再学习一下吧usp
leo_cuiyiming 2016-12-02
  • 打赏
  • 举报
回复
貌似还是看的不太懂usys
guarentianxia11 2016-11-03
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
你看看这样行吗
public static void Main()
        {
            //测试数据
            List<Stock> sl = new List<Stock>(){
                new Stock(){id=1,total=1.3},
                new Stock(){id=2,total=1.7},
                new Stock(){id=3,total=13},
            };

            //出货量
            double r = double.Parse(Console.ReadLine());
            //计数器
            double currentTotal=0;
            List<Stock> rl = new List<Stock>();
            for (int i = 0; i < sl.Count; i++)
            {
                if (r <= 0)
                    break;
                r = r - sl[i].total;
                currentTotal=r>=0?sl[i].total:(sl[i].total+r);
                rl.Add(new Stock() { id = sl[i].id, total = currentTotal });
            }

            //打印结果
            foreach (var item in rl)
            {
                Console.WriteLine("仓库编号:"+item.id+"-----仓库出货量:"+item.total);
            }

            Console.ReadLine();
        }

        public class Stock
        {
            public int id { get; set; }
            public double total { get; set; }
        }
感谢版主,这样是可以的,一个三目就能解决的问题愣是让我扯出了一大堆,逻辑思路有待提高啊, 另外,版主可以推荐一两部关于加强逻辑思维的书不?厚着脸求教
正怒月神 版主 2016-11-03
  • 打赏
  • 举报
回复
你看看这样行吗
public static void Main()
        {
            //测试数据
            List<Stock> sl = new List<Stock>(){
                new Stock(){id=1,total=1.3},
                new Stock(){id=2,total=1.7},
                new Stock(){id=3,total=13},
            };

            //出货量
            double r = double.Parse(Console.ReadLine());
            //计数器
            double currentTotal=0;
            List<Stock> rl = new List<Stock>();
            for (int i = 0; i < sl.Count; i++)
            {
                if (r <= 0)
                    break;
                r = r - sl[i].total;
                currentTotal=r>=0?sl[i].total:(sl[i].total+r);
                rl.Add(new Stock() { id = sl[i].id, total = currentTotal });
            }

            //打印结果
            foreach (var item in rl)
            {
                Console.WriteLine("仓库编号:"+item.id+"-----仓库出货量:"+item.total);
            }

            Console.ReadLine();
        }

        public class Stock
        {
            public int id { get; set; }
            public double total { get; set; }
        }
guarentianxia11 2016-11-03
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
如果你认为这仅仅是“数据库返回查找结果”的话,那么就不用发在这个论坛,应该发到数据库论坛去问了。 用你的实际编程能力实现,那么你的逻辑本身就是很简单的编程逻辑。数据库当作通用的数据存储、数据查询工具,先不要考虑什么数据库存储过程概念。
感谢大神回答,我这不设计存储过程,顶楼的json已经是sql查询过返回的信息了,就是想做一个聪明点的逻辑处理,比如3楼写的大量的if else,代码有点傻
guarentianxia11 2016-11-03
  • 打赏
  • 举报
回复
我写了个比较笨的处理方式,能改进下吗?

function getQty_ByBetchNo(batch_no,qty){
	//到数据库查找仓库剩余量
	qty_list = [{'warehouse':u'仓库03 - IL','ac_qty':12.0},{'warehouse':u'仓库01 - IL','ac_qty':14.0},{'warehouse':u'仓库02 - IL','ac_qty':18.0}];
	qty_two = [];
	sum_qty = 0.000;
	for (var x = 0; x < qty_list.length;x++) {
		warehouse_qty = {}
		if (sum_qty == qty){
			break;
		}
		else if (sum_qty == 0.000){
			if (qty <= qty_list[x]['ac_qty']){//库1可以满足出库量
				warehouse_qty['warehouse'] = qty_list[x]['warehouse'];
				warehouse_qty['actual_qty'] = qty;
				sum_qty = qty;
				qty_two.append(warehouse_qty);
			}else{//库1不满足出库量
				warehouse_qty['warehouse'] = qty_list[x]['warehouse'];
				warehouse_qty['actual_qty'] = qty_list[x]['ac_qty'];
				sum_qty = sum_qty + qty_list[x]['ac_qty'];
				qty_two.append(warehouse_qty);
			}
		}
		else if (sum_qty > 0.000){
			sy_qty = qty - sum_qty;
			if (qty_list[x]['ac_qty'] >= sy_qty){//本库满足剩余的发货量
				warehouse_qty['warehouse'] = qty_list[x]['warehouse'];
				warehouse_qty['actual_qty'] = sy_qty;
				sum_qty = sum_qty + sy_qty;
				qty_two.append(warehouse_qty);
			}
			else{//本库不满足剩余的发货量
				warehouse_qty['warehouse'] = qty_list[x]['warehouse'];
				warehouse_qty['actual_qty'] = qty_list[x]['ac_qty'];
				sum_qty = sum_qty + qty_list[x]['ac_qty'];
				qty_two.append(warehouse_qty);
			}
		}
	}
	return qty_two;
}
  • 打赏
  • 举报
回复
如果你认为这仅仅是“数据库返回查找结果”的话,那么就不用发在这个论坛,应该发到数据库论坛去问了。 用你的实际编程能力实现,那么你的逻辑本身就是很简单的编程逻辑。数据库当作通用的数据存储、数据查询工具,先不要考虑什么数据库存储过程概念。
yang1216 2016-11-03
  • 打赏
  • 举报
回复
按大小排序 然后从小库存的仓库A开始出库 如果A仓库的库存够使,那就没有后面啥事了 如果A库存不够,A全出。 然后再轮到B 。。。。。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧