在最近正在开发的MES系统中经常要处理一个过账动作,需要根据用户输入的良品数,不良品数或者待检数抑或者是检验样板数量自动去结存表中加减工单结存数量。下面以一个实例说明:

首先定义一个实体属性QtyTest类:

1     public class QtyTest
2     {
3         public int goodQty { get; set; }//良品数
4         public int reworkQty { get; set; }//返工数
5         public int scrapQty { get; set; }//报废数
6     }

主要代码实现如下:

  1  class Program
  2     {
  3         private static List<int> qtyList = new List<int>();
  4         private static int GoodQty;
  5         private static int ReworkQty;
  6         private static int ScrapQty;
  7         private static void Main(string[] args)
  8         {
  9             Console.Write("请输入良品数:");
 10             GoodQty = Convert.ToInt32(Console.ReadLine());
 11             Console.Write("请输入返工数:");
 12             ReworkQty = Convert.ToInt32(Console.ReadLine());
 13             Console.Write("请输入报废数:");
 14             ScrapQty = Convert.ToInt32(Console.ReadLine());
 15
 16             List<QtyTest> list = new List<QtyTest>();
 17             //模拟工单数据集,实际以工单下达实际早晚顺序加减库存
 18             DataTable DT = new DataTable();
 19             DT.Columns.Add("WJudgeQty", typeof(Int32));
 20             DataRow dr = DT.NewRow();
 21             dr["WJudgeQty"] = 100;
 22             DT.Rows.Add(dr);
 23             DataRow dr1 = DT.NewRow();
 24             dr1["WJudgeQty"] = 80;
 25             DT.Rows.Add(dr1);
 26             DataRow dr2 = DT.NewRow();
 27             dr2["WJudgeQty"] = 60;
 28             DT.Rows.Add(dr2);
 29
 30             Fun(0, DT);
 31
 32             //如果只需要输入两个数,则/2即可,以此类推
 33             for (int i = 0; i < qtyList.Count / 3; i++)
 34             {
 35                 int temp = qtyList.Count / 3;
 36                 QtyTest qtyTest = new QtyTest();
 37                 qtyTest.goodQty = qtyList[i];
 38                 qtyTest.reworkQty = qtyList[i + temp];
 39                 qtyTest.scrapQty = qtyList[i + 2 * temp];
 40                 list.Add(qtyTest);
 41             }
 42             foreach (QtyTest qty in list)
 43             {
 44                 Console.WriteLine("良品数:" + qty.goodQty + " 返工数:" + qty.reworkQty + " 报废数:" + qty.scrapQty);
 45             }
 46         }
 47
 48         private static void OutputQty(List<int> listQty)
 49         {
 50             foreach (int qty in listQty)
 51             {
 52                 qtyList.Add(qty);
 53             }
 54         }
 55
 56         private static void Fun(int temp, DataTable DT)
 57         {
 58             DataTable DTTemp = new DataTable();
 59             DTTemp.Columns.Add("WJudgeQty", typeof(Int32));
 60             int qty = 0;
 61             if (temp == 3)
 62                 return;
 63             else
 64             {
 65                 switch (temp)
 66                 {
 67                     case 0:
 68                         qty = GoodQty;
 69                         break;
 70                     case 1:
 71                         qty = ReworkQty;
 72                         break;
 73                     case 2:
 74                         qty = ScrapQty;
 75                         break;
 76                 }
 77                 List<int> goodQty = new List<int>();
 78                 int sumJudgeQty = 0;
 79                 int tempGoodQty = qty;
 80                 //依照先扣良品数再扣返工数最后扣报废数的扣数逻辑进行判断
 81                 for (int i = 0; i < DT.Rows.Count; i++)
 82                 {
 83                     int WJudgeQty = Convert.ToInt32(DT.Rows[i]["WJudgeQty"]);
 84                     if (qty >= WJudgeQty)
 85                     {
 86                         goodQty.Add(WJudgeQty);
 87                         DataRow dr = DTTemp.NewRow();
 88                         dr["WJudgeQty"] = 0;
 89                         DTTemp.Rows.Add(dr);
 90                         sumJudgeQty += WJudgeQty;
 91                         qty = qty - WJudgeQty;
 92                     }
 93                     else if (qty < WJudgeQty && qty > 0)
 94                     {
 95                         goodQty.Add(qty);
 96                         DataRow dr = DTTemp.NewRow();
 97                         dr["WJudgeQty"] = WJudgeQty - qty;
 98                         DTTemp.Rows.Add(dr);
 99                         sumJudgeQty += qty;
100                         qty = qty - WJudgeQty;
101                     }
102                     else if (qty == 0 || sumJudgeQty == tempGoodQty)
103                     {
104                         goodQty.Add(0);
105                         DataRow dr = DTTemp.NewRow();
106                         dr["WJudgeQty"] = WJudgeQty;
107                         DTTemp.Rows.Add(dr);
108                     }
109                 }
110                 temp++;
111                 OutputQty(goodQty);
112                 Fun(temp, DTTemp);
113             }
114         }
115
116     }

View Code

测试效果如下:

可灵活根据用户输入的数量有序的自动加减工单结存。如有更好的解决方案,不吝赐教。

转载于:https://www.cnblogs.com/gcr1314/p/4304835.html

自动加减工单结存算法实现相关推荐

  1. Android订票系统订票功能实现(特效点击按钮实现票数自动加减1)

    要实现的效果是点击加按钮就购买分数自动加一,同时计算合计的总计 先共享一份colors.xml的数据,比较全面,可以根据需要添加 <?xml version="1.0" en ...

  2. 工单自动分配算法实现

    工单自动平均分配给工号 最近一个需求,需要上游分配的工单平均分配给所有工号,每个人相差1-2张工单. 算法实现思路:参考了负载均衡轮询的思想.但是发现这个算法并不符合要求,所以将此算法改造一下,让其符 ...

  3. 怎样提升工单管理效率?

    对于一个制造业来说,工单是生产过程中必不可少的重要单据,什么是工单?工单是一种生产命令,是依据销售订单的生产指示,用于指导产线从领料.生产到入库的各环节,确保产线不会领错料.领少料.领多料,也不会多生 ...

  4. 客服工单系统的工单管理功能

    客服工单系统是常见的企业信息应用软件,促进企业降低运营成本.有效提升客户留存,企业管理中占据举足轻重的作用.今天小编主要来介绍一下客服工单系统的工单管理功能. 工单管理功能: 首先为大家展示工单系统界 ...

  5. 【MM小贴士】副产品 工单核算

    [业务背景]主要是联产品和副产品的攻略是一起写的,所以联产品请参考: [MM小贴士]联产品 产品主数据设置及工单核算_竹大的博客-CSDN博客https://yanshoushuai.blog.csd ...

  6. 加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

    在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结 个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版<计算机组成原理> ...

  7. Go 学习笔记(48)— Go 标准库之 time (获取时/分/秒的单位值、标准时间和Unix时间转换、字符串时间和Time类型转换、时区转换、时间的加减/休眠)

    1. 概要说明 import "time" time 包提供了时间的显示和测量用的函数.日历的计算采用的是公历. Go 提供以下几种时间类型: 时间点 Time 时间段 Durat ...

  8. SAP PP 为工单确认时自动做收货的设置

    SAP PP 为工单确认时自动做收货的设置 TCode: OP67 Micro Message: JINYULIN_SH_

  9. iframe 自动登录_安阳联通利用python实现三集中未反馈工单自动提取

    安阳联通讯(云网运营中心:刘红民.徐路法)安阳联通逻辑团队自主研发的<三集中未反馈工单自动提取>项目经过三个多月的上线运行取得了成效,三集中考核指标"销障及时率"安阳已 ...

  10. ITSM常见问题之:自动指派工单给对应的技术员的三种简单方法

    假设在某个月末,发工资的员工无法登录到工资支付应用程序,为了解决这个问题,他向IT帮助台发送了一封电子邮件,即创建了一个工单.不巧的是,这时服务台协调员并不在公司,于是工单一直处于未指派状态,直到服务 ...

最新文章

  1. java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口
  2. Python里面None True False之间的区别
  3. linux如何生成javacore文件,如何产生javacore和heapdump文件》
  4. 《Android应用开发》——1.3节配置Eclipse
  5. Docker源码分析(六):Docker Daemon网络
  6. Find a way——BFS
  7. python求最大值最小值_Python求可变参数的最大值最小值以及参数个数
  8. 用vscode创建一个c项目_Visual Studio Code创建C#项目
  9. 产业互联网的“神”在哪里?
  10. 电脑的基础知识_电脑的基础知识大全,你确定都知道?
  11. tomcat+路由器+oray
  12. SSH开发的物流管理系统
  13. 摄像头和机械臂的手眼标定
  14. [OfficeExcel] OfficeExcel2010 第23讲 Excel饼图美化与PPT图表
  15. springboot springsecurity报错 **.LoginUser cannot be cast to **.LoginUser
  16. 撸羊毛之殇系列——之抖音极速版
  17. MATLAB 调用cplex解二次规划,【Cplex for MATLAB】安装问题以及二次规划的源码解释问题...
  18. c++【吃鸡坑人版8.0】免费复制
  19. [mybatis] sql语句无错误,但是执行多条sql语句时,抛出java.sql.SQLSyntaxErrorException
  20. 计算机慢怎么解决6,解决电脑运行慢卡顿问题的六种方法

热门文章

  1. 【华人学者风采】蔡达成 新加坡国立大学
  2. fox邮箱新建的服务器,foxmail新建账户创建其他邮箱的操作步骤
  3. 一行R代码画出人口金字塔图
  4. 【Python 实战基础】如何绘制关系网格图展示8个节点间的关系
  5. ycl-django网站搭建(持续更新中)
  6. 地铁bas服务器系统,地铁BAS系统构成及工作原理
  7. python语言中的转义字符_怎么使用Python转义字符
  8. 高性能核心板IDO-SOM3908-V1:接口丰富,性能更强,速度更快!
  9. 美资软件公司JAVA工程师电话面试题目
  10. 小米手机miui12系统下拉通知栏有通知但是看不到通知内容