大差法:流水步距计算工期

8 篇文章 0 订阅
6 篇文章 1 订阅

大差法:流水步距计算工期

纯前端 + javascript,实现大差法

异节奏流水施工:异节奏流水施工就是每个施工过程的流水步距都不相等,且每个施工段上的流水节拍也不相等。

大差法公式:T=T1+(n-1)K。
式中T为施工总工期;T1为一个施工段或一个单位工程的工期;n为施工段或单位工程的数目;K为流水步距。

即“累加数列、错位相减、取大差”。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一步:累加
在这里插入图片描述
第二步:错位相减、取大差
在这里插入图片描述
第三步:计算工期
在这里插入图片描述

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <base href="<%=basePath%>">

    <title>test</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

    <style type="text/css">
        .right {
            margin: 0% 10%;
            width: 600px;
        }

        .right table {
            background: white;
            width: 100%;
            border: 1px solid #499B33;
        }

        .right td {
            background: blue;
            text-align: center;
            padding: 2px;
            border: 1px solid #499B33;
        }

        .right td {
            background: #8FBC8F;
        }

        .item {
            text-align: center;
            width: 100px;
        }

        .assigned {
            border: 1px solid #BC2A4D;
        }
    </style>
    <script>
        // 全局变量
        var tList = [];
        var hljList = [];
        var maxList = [];
        //
        function table() {
            if (document.getElementById("Col").value == "" || document.getElementById("Col").value.search("^[0-9]*$") ==
                -1) {
                document.getElementById("errmsg1").style.display = "block"; //判断payNum是否为空或不是数字    提示错误
                document.getElementById("errmsg1").innerHTML = "提示信息:列数数为空或不是数字!";
                return;
            }
            if (document.getElementById("Num").value == "" || document.getElementById("Num").value.search("^[0-9]*$") ==
                -1) {
                document.getElementById("errmsg1").style.display = "block"; //判断payNum是否为空或不是数字    提示错误
                document.getElementById("errmsg1").innerHTML = "提示信息:行数为空或不是数字!";
                return;
            } else {
                document.getElementById("errmsg1").style.display = "none"; //隐藏提示信息
                var Col = parseInt(document.getElementById("Col").value); //获取列数
                var Num = parseInt(document.getElementById("Num").value); //获取行数
                var flag = true;
                var data = "";
                data += " <table >";
                data += " <tr>";
                for (var j = 0; j <= Col; j++) {
                    if (j == 0) {
                        data += "<td >分项</td>";
                    } else {
                        data += "<td >数据" + j + "</td>";
                    }

                }
                data += "</tr>";
                // 
                for (var i = 1; i <= Num; i++) {
                    data += "<tr >";
                    for (var j = 0; j <= Col; j++) {
                        if (j == 0) {
                            data += "<td>分类" + i + "</td>";
                        } else {
                            data += "<td><input id='rc_" + i + "_" + j + "' type='text' class='dataInput'></td>";
                        }
                    }
                    data += "</tr>";
                }

                data += "</table>";
                document.getElementById("div1").style.display = "block";
                document.getElementById("table1").innerHTML = data;
            }
        }

        function cumulativeSummation() {
            // var pElement = document.getElementById("div1");
            // var childList = getElementsByClassName(pElement, "dataInput");
            //
            var Col = parseInt(document.getElementById("Col").value); //获取列数
            var Num = parseInt(document.getElementById("Num").value); //获取行数
            tList = [];
            for (var i = 1; i <= Num; i++) {
                var tArray = [];
                for (var j = 1; j <= Col; j++) {
                    var tValue = Number(document.getElementById('rc_' + i + "_" + j).value);
                    tArray.push(tValue);
                }
                tList.push(tArray);
            }
            //
            hljList = [];
            for (var i = 0; i < tList.length; i++) {
                var hljArray = [];
                for (var j = 0; j < tList[i].length; j++) {
                    var tijList = tList[i].slice(0, j + 1);
                    var hangleijia = arraySum(tijList);
                    hljArray.push(hangleijia);
                }
                hljList.push(hljArray);
            }
            //
            var divHtml = "";
            for (var i = 0; i < hljList.length; i++) {
                divHtml += "<div>";
                divHtml += "<span>分类" + (i + 1) + ":(累加求和)</span>";
                for (var j = 0; j < hljList[i].length; j++) {
                    divHtml += "<span style='padding-left:10px;'>" + hljList[i][j] + "</span>";
                }
                divHtml += "</div>";
            }
            document.getElementById("div2").innerHTML = divHtml;
        }

        function dislocationSubtraction() {
            var hljList_new_str = JSON.stringify(hljList);
            var hljList_new = JSON.parse(hljList_new_str);
            // 
            var divHtml = "";
            for (var i = 0; i < hljList_new.length - 1; i++) {
                //
                var maxArray = [];
                //
                hljList_new[i].push(0);
                hljList_new[i + 1].unshift(0);
                divHtml += "<div>";
                divHtml += "<span>分类" + (i + 1) + " - 分类" + (i + 2) + ":</span>";
                for (var j = 0; j < hljList_new[i].length; j++) {
                    var j_j = hljList_new[i][j] - hljList_new[i + 1][j]
                    maxArray.push(j_j);
                    divHtml += "<span style='padding-left:10px;'>" + j_j + "</span>";
                }
                var max_j_j = Math.max.apply(null, maxArray);
                maxList.push(max_j_j);
                divHtml += "<span style='padding-left:30px;'>最大值:" + max_j_j + "</span>";
                divHtml += "</div>";
                //
                if (i == hljList_new.length - 2) {
                    //
                } else {
                    hljList_new[i + 1].splice(0, 1);
                }
            }
            document.getElementById("div3").innerHTML = divHtml;
        }

        function calculateConstructionPeriod() {
            var divHtml = "";
            divHtml += "(";
            for (let i = 0; i < maxList.length; i++) {
                if(i == maxList.length - 1){
                    divHtml += "<span>" + maxList[i] + "</span>";
                } else {
                    divHtml += "<span>" + maxList[i] + " + " + "</span>";
                }
            }
            divHtml += ")+";
            //
            divHtml += "(";
            for (let i = 0; i < tList[tList.length - 1].length; i++) {
                if(i == tList[tList.length - 1].length - 1){
                    divHtml += "<span>" + tList[tList.length - 1][i] + "</span>";
                } else {
                    divHtml += "<span>" + tList[tList.length - 1][i] + " + " + "</span>";
                }
            }
            divHtml += ")";
            divHtml += "<span>" + " = " + "</span>";
            // 
            var max1 = arraySum(maxList);
            var max2 = arraySum(tList[tList.length - 1]);
            var max3 = max1 + max2;
            //
            divHtml += "<span>" + max3 + "</span>";
            document.getElementById("div4").innerHTML = divHtml;
        }

        function getElementsByClassName(node, classname) {
            if (node.getElementsByClassName) {
                return node.getElementsByClassName(classname);
            } else {
                var results = new Array();
                var elems = node.getElementsByTag("*");
                for (var i = 0; i < elems.length; i++) {
                    if (elems[i].className.indexOf(classname) != -1) {
                        results[elems.length] = elems[i];
                    }
                }
                return results;
            }
        }

        function arraySum(arr) {
            var s = 0;
            for (var i = arr.length - 1; i >= 0; i--) {
                s += arr[i];
            }
            return s;
        }
    </script>

</head>

<body>
    <br>
    <div style="width:750px;">
        <div class="right">
            <table>
                <tr>
                    <td>动态生成表格</td>
                    <td><input id="Col" type="text" class="input" size="10" name="Col" /></td>
                    <td><input id="Num" type="text" class="input" size="10" name="Num" /></td>
                </tr>
            </table>
            </br>
            <input name="" type="button" value="生成" class="buttton" onclick="table()" /></br>
            </br>
            <div id="div1" style="display: none" mce_style="display: none">
                <div id="table1"></div>
            </div>
            </br>
            <input name="" type="button" value="第一步:累加求和" class="buttton" onclick="cumulativeSummation()" /></br>
            </br>
            <div id="div2"></div>
            </br>
            <input name="" type="button" value="第二步:两两错位相减取最大值" class="buttton"
                onclick="dislocationSubtraction()" /></br>
            </br>
            <div id="div3"></div>
            </br>
            <input name="" type="button" value="第三步:计算工期(第二步的最大值累加 + 最后一行原始数值的累加)" class="buttton"
                onclick="calculateConstructionPeriod()" /></br>
            </br>
            <div id="div4"></div>
            </br>
            <div id="errmsg1" class="formmsg"></div>
        </div>
    </div>
</body>

</html>

源代码:https://download.csdn.net/download/liuliwei09/25635306

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值