`
JAVA天地
  • 浏览: 657753 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

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

阅读更多

以表格的形式显示设备的子元件构成及数量
(最简使用方式:
跳过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通过条件生成的对应ID的数量
*result将所有元件的ID及数量都放到TreeMap
*注:这里要采用递归的方法
*/
privatevoid pubAllComponetAndNumIntoHashMap(int id, boolean check,
int generatedIDNum) {
String componsedIDs = getComponsedID(id);
//System.out.println("componsedIDs:"+componsedIDs);
if (check == true) {
if (componsedIDs == null)
return;
}
String[] IDAndNum = componsedIDs.split("\\|");
for (int i = 0; i < IDAndNum.length; i++) {

相关推荐

Global site tag (gtag.js) - Google Analytics