现在的位置: 首页 > 综合 > 正文

以表格的形式显示设备的子元件构成及数量

2013年10月23日 ⁄ 综合 ⁄ 共 9517字 ⁄ 字号 评论关闭

 

以表格的形式显示设备的子元件构成及数量
(最简使用方式:
       跳过1,2,3步,直接从第四步开始,以任何一种方式传参数如“12EQU1AND5EQU1”,并在处理的JSP页面里得到,实现在JSP页面里,只需要写几条语句就可以了。不过,再强调:“12EQU1AND5EQU1”表示该成品编号为12的产品1台,成品编号为5的产品1台。你可以再加或者只查看一台也可以。还有你的元件组成表一定要似下图表中的数据显示的一样,以“#”分开同一ID的不同属性,以“|”分开不同的ID
1、介绍:
在日常生活中,我们可以用一些存在了的东西,构成其它的一些新东西,如我们可以用小零件构成一台机器等等,但是我们在用电脑表述的时候,通常都是以这样的方式来实现。
上面表格中,如:125#2#20表示的是编号为125的子元件在构成该部件的时候需要两个,位置在图纸上为20的地方。用|来分开不同的子元件,这样就可以以这种方式将一台复杂的机器设备模拟出来了。
但是作为一名非计算机人员,没有人会想看到模拟的计算机是由这些东西组成的,他们也不懂,这样也让计算有多少元件变得非常的烦杂。我们做为程序员的,就是为了解决这些问题布存在的,下面我对这个问题的解决方案:
2、实现图例:
1)、先看下面这张数据表图:
2)、这张是实现流程图:
3)、这样处理后,需要多少元件就以表格的形式显示出来,如下示例图:
4)、调用页面如图所示:
3、JSP页面源码
这样点击“查看汇总”后就会传递如下字符串给处理页面:12EQU1AND5EQU1
解释:表示该成品编号为12的产品1台,成品编号为5的产品1台。
三个按钮的代码如下:
<input type=button value=全选 onclick=checkAll();>
<input type=button value=取消 onclick=clearAll();>
<input type=button value=查看汇总 onclick=showResult();>
这里复选框的命名规则是:“ch”加该记录对应的ID号,文本框的命名规则是:“num”加上该记录对应的ID
实现该三个按钮的JS函数是:
///////////CHECKBOX的全选与取消全选,以及得到选中的CHECKBOX对应数量及ID///////
//在处理JSP页面中显示结果
function showResult()
{
    var str='';
    var el=document.getElementsByTagName('input');
    var len = el.length;
    var numName;
    for(var i=0;i<len;i++)
    {     
        numName='num';
        if(el[i].type=="checkbox")
        {
            if(el[i].checked)
            {
                numName+=getId(el[i].name,'ch');
                if(document.getElementById(numName).value)
                {                   
                    str+=getId(el[i].name,'ch')+"EQU"+document.getElementById(numName).value+"AND";
                }              
            }
        }
    }
    str=str.substr(0,str.length-3);
    window.open('disNeededComponentFromChoosedProductWithNum.jsp?str='+str);
    //alert(str);
}
function getId(str1,str2)//取出序号ID
{
    //str1=ch1,str2=ch,result=1
    str1=str1.replace(str2,"");
    return str1;
}
//全选
function checkAll()
{
    var el = document.getElementsByTagName('input');
    var len = el.length;
    for(var i=0; i<len; i++)
        {
        if(el[i].type=="checkbox")
        {
            el[i].checked = true;
        }
    }
}
//取消全选
function clearAll()
{
    var el = document.getElementsByTagName('input');
    var len = el.length;
    for(var i=0; i<len; i++)
    {
        if(el[i].type=="checkbox")
        {
                el[i].checked = false;
        }
    }
}
4、在JSP页面的操作方式如下:
<%
    String str=request.getParameter("str").trim();
    if(str!=null && str!="" && !str.equals(""))
{
    GetComponentDetailListDependByID g=new GetComponentDetailListDependByID();
    str = c.generateStardardStrFromGetStrByChoosedProduct(str);
    System.out.println(c.getResultStrWithTableFormat(str));
}
%>
5、JAVA源码如下:
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
 
import java.util.TreeMap;
 
/**
 *将组成元件的所有子元件(最基本的子元件,没有其它元件构成)的数量取出并放在HASHMAP
 *并最后以表格的形式显示
 */
publicclass GetComponsedComponentByTableFormat_General {
    DBMS_Conn conn;
    TreeMap tm;
 
public GetComponsedComponentByTableFormat_General() {
   //请在实际应用中,将该数据库链接补充完整
        conn = new DBMS_Conn(); //建立数据库链接
        tm = new TreeMap(); //初使化TreeMap
    }
    /****************************生成标准字符串****************************/
    /**
     *调用步骤:1,首先调用该方法,生成标准的字符串
     *@paramstr提交的字符串如:1EQU4AND2EQU20
     *@return折分好的标准字符串如:381#10|183#20|629#30|113#40|147#50
     *“#”前后的分别表示编号及数量,即当前编号对应的数量,
     *“|”前后表示的是不同编号的设备及数量,这里表示共有五种编号的设备)
     */
    public String generateStardardStrFromGetStrByChoosedProduct(String str) {
        try {
            str = str.trim();
        } catch (Exception e) {
            str = "";
        }
        if (str.equals(""))
            returnnull;
        String resultStr = "";
        String[] str1 = str.split("AND");
        for (int i = 0; i < str1.length; i++) {
            String[] str2 = str1[i].split("EQU");
            int pid;
            try {
                pid = Integer.parseInt(str2[0]);
            } catch (Exception e) {
                pid = 0;
            }
            int pnum;
            try {
                pnum = Integer.parseInt(str2[1]);
            } catch (Exception e) {
                pnum = 0;
            }
            String pstr = getComponsedID(pid);
            pstr = getFormatedStrByMultiplyProductNum(pstr, pnum);
            if (i < (str1.length - 1))
                pstr += "|";
            resultStr += pstr;
        }
        return resultStr;
    }
    /**
     *
     *@parampstr组成该成品的字符串如:381#10|183#20|629#30|113#40|147#50
     *@parampnum该成品的数量
     *@return把各数量进行相应的数量积后,再生成新的标准字符串返回来
     *返加结果字符串如下:381#50|183#100|629#150|113#200|147#250
     */
    private String getFormatedStrByMultiplyProductNum(String pstr, int pnum) {
        StringBuffer resultStr = new StringBuffer("");
        try {
            pstr = pstr.trim();
        } catch (Exception e) {
            pstr = "";
        }
        if (pstr.equals("")) {
            returnnull;
        }
        String[] pstr1 = pstr.split("//|");
        for (int i = 0; i < pstr1.length; i++) {
            String[] pstr2 = pstr1[i].split("#");
            String pstr20 = pstr2[0];
            int pstr21;
            try {
                pstr21 = Integer.parseInt(pstr2[1]) * pnum;
            } catch (Exception e) {
                pstr21 = 0;
            }
            resultStr.append(pstr20 + "#");
            resultStr.append(pstr21);
            if (i < (pstr1.length - 1))
                resultStr.append("|");
        }
       return String.valueOf(resultStr);
    }
    /****************************生成标准字符串OK****************************/   
    /**
     *调用步骤:2
     *@paramcomposedStr组成该成品的元件字符串,如:12#1
     *最后生成有表格内容的元件清单
     */
    public StringBuffer getResultStrWithTableFormat(String composedStr) {
        String resultStr;
        pubAllComponetAndNumIntoHashMap(composedStr);
        resultStr = getResultStr();
        //System.out.println("resultStr:"+resultStr);
        String[] resultStr_split = resultStr.split(",");
        String sql = "select ID,serialnumber,cname,ename,specification,unit,";
        sql += "weight from components";
        String sql1 = "";
        StringBuffer returnStr = new StringBuffer("");
        returnStr.append("<table border=1>");
        ResultSetMetaData rsmd;
        ResultSet rs = conn.executeSQLReturnResult(sql);
        int ColumnCount;
        int componentID = 0;
        try {
            rsmd = rs.getMetaData();
            ColumnCount = rsmd.getColumnCount();
            returnStr.append("<tr>");
            returnStr.append("<td colspan=" + (ColumnCount + 2) +
                             " align=center>");
            returnStr.append("<font size=6></font>");
            returnStr.append("</td>");
            returnStr.append("</tr>");
 
            //取得列名,列名的顺序下标是从1开始的
            returnStr.append("<tr>");
            for (int j = 1; j <= ColumnCount; j++) {
                returnStr.append("<td align=left>&nbsp;");
                returnStr.append(conn.replaceEnglishHeadWithChinese(rsmd.getColumnName(j)));
                returnStr.append("</td>");
            }
            returnStr.append("<td>");
            returnStr.append("数量");
            returnStr.append("</td>");
            returnStr.append("<td>");
            returnStr.append("</td>");
            returnStr.append("</tr>");
            for (int i = 0; i < resultStr_split.length; i++) {
                String[] resultStr_split_IDValue =
                    resultStr_split[i].split("=");
                sql1 = sql;
                sql1 += " where ID=" + resultStr_split_IDValue[0];
                //System.out.println("sql:"+sql1);
                rs = conn.executeSQLReturnResult(sql1);
                if (rs.next()) {
                    returnStr.append("<tr>");
                    for (int j = 1; j <= ColumnCount; j++) {
                        if (j == 1) {
                            {
                                returnStr.append("<td align=left>&nbsp;");
                                returnStr.append(rs.getInt(j));
                                returnStr.append("</td>");
                                componentID = rs.getInt(j);
                            }
                        } else {
                            returnStr.append("<td align=left>&nbsp;");
                            returnStr.append(rs.getString(j));
                            returnStr.append("</td>");
                        }
                    }
                    returnStr.append("<td>");
                    try {
                        returnStr.append(Integer.parseInt(resultStr_split_IDValue[1]));
                    } catch (Exception e) {
                        returnStr.append(0);
                    }
                    returnStr.append("</td>");
                    returnStr.append("<td>");
                    returnStr.append("<a href=componentView.do?id=" +
                                     componentID +
                                     " target=_blank><font color=green>查看</font></a>");
                    returnStr.append("</td>");
                    returnStr.append("</tr>");
                }
            }
            returnStr.append("</table>");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        conn.closeConnection();
        return returnStr;
 
    }
    /********************以下方法为功能性方法,为上面的步骤二服务********************/
    /**
     *
     *@paramid元件ID
     *@return根据元件的ID返回组成元件的序列集合,如1#2|3#6|5#12,返回null表示没有子元件
     */
    private String getComponsedID(int id) {
        String sql = "select composedBy from components where composedBy";
        sql += " is not null and composedBy<>'' and id=" + id;
        String componsedID = null;
        ResultSet rs = conn.executeSQLReturnResult(sql);
        try {
            if (rs.next()) {
                componsedID = rs.getString(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return componsedID;
    }
    /**
     *
     *@paramid元件ID
     *@paramidNum该元件数量
     *result将对应ID的值放到TreeMap
     */
    privatevoid pubComponetAndNumIntoHashMap(int id, int idNum) {
        if (tm.containsKey(id)) { //如果存在
            idNum += Integer.parseInt(tm.get(id).toString()); //取值
        }
        //System.out.println(id+" "+idNum);
        tm.put(id, idNum); //赋值
    }
    /**
     *
     *@paramid元件ID
     *@paramcheck是否需要检测当前当前ID的组成字符串是否为空
     *@paramgeneratedIDNum

抱歉!评论已关闭.