`
JAVA天地
  • 浏览: 674329 次
  • 性别: 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++) {

相关推荐

    IT通讯类电子器件行业磁性元件领域分析报告(研究报告).pdf

    数据图表以文字叙述加表格和饼状图的形式呈现。 行业薪酬水平分析部分,报告按照总经理层、总监层、经理层、主管层、专业人员层、普通员工层和基础操作层等不同层级,对薪酬水平进行了全面分析。其中,针对不同学历...

    my电气识图方法.doc

    设备元件表是把成套装置、设备和装置中各组成部分和相应数据列成的表格,其用途表示各组成部分的名称、型号、规格和数量等。 端子功能图是表示功能单元全部外接端子,并用功能图、表图或文字表示其部功能的一种简图...

    教你如何看懂电气图纸.doc

    电气图纸是理解和操作电气系统的关键,它以图形符号和注释的形式展示电气设备或系统的组成部分、相互关系和连接方式。本文将深入解析电气图纸的基本概念、分类、特点以及图形符号的使用。 首先,电气图定义涵盖了...

    《小学教师信息技术》串讲经典笔记.doc

    16开纸张常用于正式文件,数码相机的分辨率取决于CCD芯片上的光敏元件数量,字长是衡量计算机运算能力的重要指标。在Windows中,可以通过组策略设置提高系统的安全性。 在Word 2003中,"文件"菜单下会显示最近打开...

    电气图纸制图标准及看图方法.doc

    - **设备元件表**:列出设备的部件、规格和数量等信息。 - **端子功能图**:显示功能单元的外部端子和内部功能。 - **接线图或接线表**:提供连接信息,用于安装和检查,包括单元接线图、互连接线图、端子接线图...

    电气图纸制图规范及电气图纸的识读方法

    8. **设备元件表**:设备元件表是一种表格形式的电气图,列出成套装置、设备及其组成部分的名称、型号、规格和数量等信息。 9. **端子功能图**:端子功能图展示了功能单元的所有外接端子,并用功能图、表图或文字...

    《小学教师信息技术》串讲经典笔记.docx

    9. 数码相机的图像质量与CCD芯片上的光敏元件数量(决定分辨率)和字长(影响计算机处理数据的能力)有关。16开纸张是常见的正式文件用纸。 10. 在Word 2003中,可以通过“文件”菜单访问最近使用的文档(默认显示4...

    2015年计算机应用基础统考题库网考计算机应用基础真题10.pdf

    1. 计算机的第二代主要元件:第二代电子计算机的主要元件是晶体管,相较于第一代的电子管,晶体管具有体积小、功耗低、可靠性高的优点,大大推动了计算机的发展。 2. 计算机的特点:计算机具有运算速度快、精度高和...

    巧用真值表法编写PLC时序控制程序.pdf

    真值表编程方法的优点在于它能够将复杂的时序逻辑转换为可视化的表格形式,使设计者能够直观地分析和理解程序的逻辑流程,从而提高设计效率和准确性。对于中高职学生及初中级电工自学者而言,这种方法既易于学习也...

    Hi313XSUB.zip

    5. **HI313XSUB_VER.A 硬件版本升级说明.xls**:这个文件可能是关于HI313XSUB硬件的版本A的升级指南,以Excel表格形式呈现。它可能包含更改细节、原因、步骤以及对设计的影响。 6. **HI313XSUB_VER.A 参考版SCH**:...

    《计算机应用基础》测试题(一).pdf

    17. 计算机信息存储:计算机内部以二进制形式存储所有信息。 18. 文件存取:Windows系统中文件按文件名存取。 19. 鼠标图标:鼠标呈漏斗开表示机器正忙。 20. 通配符:通配符如星号(*)和问号(?)用于匹配多个...

    信息与工程学院.pptx

    此外,还涉及计算机代的划分,按照构成元件的不同,计算机经历了由电子管、晶体管、集成电路到大规模集成电路的四个时代。 通过对这些知识点的复习,学生不仅能了解计算机的发展历程,还能掌握考试的重点和难点,为...

    plc控制系统设计的一般步骤.doc

    制定详细的输入输出点分配计划,可以是通过表格形式列出所有I/O点及其对应的功能,或者是绘制出I/O端子的接线图。这一步为后续的编程工作奠定基础。 #### 五、编写梯形图程序 根据控制要求和工作流程图,编写PLC的...

    计算机专业英语复习题.doc

    10. **关系数据库(Relational Database)**:基于关系模型的数据存储系统,数据以表格形式组织,通过键值进行关联。 11. **菜单栏(Menu Bar)**:在图形用户界面上显示各种菜单的水平条,提供程序功能的访问路径...

    计算机英语

    - **Circuit (电路)**:由电子元件构成的闭合路径,电流在其内流动。 - **To Clear (清除)**:从内存或显示设备中删除数据的操作。 - **Clock (时钟)**:用于同步计算机操作的脉冲信号源。 - **Code (代码)**:编程...

    电网络分析理论:第五章动态电路的时域方程小结.ppt

    状态变量分析是一种有效的方法,它将电路的复杂动态行为简化为一组微分方程,以描述电路内部的能量存储元件(如电容和电感)的状态。 首先,状态变量是用于描述电路储能状态的物理量,通常选取独立电容的电压或电荷...

Global site tag (gtag.js) - Google Analytics