`
shlei
  • 浏览: 288631 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

仿IBM-BPM Editor实现的WorkFlowEditor

阅读更多
    在网上搜了一些例子,找了一大队资料,终于把workFlowEditor做得差不多了,这是一个类似IBM-BPM Editor的工作流编辑器,现还有一些功能没实现,现将部分代码贴在此,有需要的朋友可以交流,拍砖,哈哈。

上图:


节点间的连线重绘:
package com
{
	import flash.geom.Point;
	
	public class RefreshLine
	{
		/** 和节点相关的线条的数组 **/
		public var lineList:Array = [];
		
		public var width:Number;
		public var height:Number;
		public var lineFlag:LineLag;
		public var line:Line;
		public var node:Nodes;
		private var isFromNode:Boolean=false;
		private var num1:int=0;		//开始节点,箭头右方向,连线数累加
		private var num2:int=0;		//开始节点,箭头左方向,连线数累加
		private var num3:int=0;		//开始节点,箭头上方向,连线数累加
		private var num4:int=0;		//开始节点,箭头下方向,连线数累加
		private var numA:int=0;		//结束节点,箭头右方向,连线数累加
		private var numB:int=0;		//结束节点,箭头左方向,连线数累加
		private var numC:int=0;		//结束节点,箭头上方向,连线数累加
		private var numD:int=0;		//结束节点,箭头下方向,连线数累加
		private var startX:int;
		private var startY:int;
		private var endX:int;
		private var endY:int;
		
		
		public function RefreshLine(node:Nodes)
		{
			this.node=node;
			lineList=node.lineList;
		}
		
		/**
		 * 重绘节点上的连线
		 * */
		public function getAspectArr():void{
			for(var j:int = 0; j < lineList.length; j++){
				lineFlag = lineList[j];
				line = lineFlag.line;
				
				switch(line.aspect){
					case 1:
						if(line.fromNode==node)
							num1++;
						else
							numA++;
						break;
					case 2:
						if(line.fromNode==node)
							num2++;
						else
							numB++;
						break;
					case 3:
						if(line.fromNode==node)
							num3++;
						else
							numC++;
						break;
					case 4:
						if(line.fromNode==node)
							num4++;
						else
							numD++;
						break;
				}
			}
		}
		
		public function refreshLine():void{
			var isHead:Boolean;
			var startNO:int=0;	//指向开始节点的连线的条数
			var endNO:int=0;	//指向结束节点的连线的条数
			
			width=node.width;
			height=node.height;
			getAspectArr();
			
			for(var i:int = 0; i < lineList.length; i++){
				startX = node.x;
				startY = node.y;
				endX = node.x;
				endY = node.y;
				lineFlag = lineList[i];
				line = lineFlag.line;
				isHead = lineFlag.isHead;
				
				if(line.fromNode==node){
					isFromNode=true;
					startNO++;
				}else{
					endNO++;
				}
				
				switch(node.type){
					case Nodes.NODE:
					case Nodes.EMAIL:
					case Nodes.CLOCK:
					case Nodes.ENDNODE:
						circleNodePosition(startNO,endNO);
						break;
					case Nodes.RECT:
						rectNodePosition(startNO,endNO);
						break;
					case Nodes.BRECT:
						rectNodePosition(startNO,endNO);
						break;
					case Nodes.DIAMOND:
						diamondNodePosition(startNO,endNO);
						break;
				}
				/**
				 * 如果是连线箭头所指的,则重设线条开始位置
				 * 如果不是,则重设连线结束
				 **/ 
				if(isHead)
					line.startPoint = new Point(startX,startY);
				else
					line.endPoint = new Point(endX,endY); 
				
				line.drawLine(line.aspect);
			}
			num1=0;
			num2=0;
			num3=0;
			num4=0;
			numA=0;
			numB=0;
			numC=0;
			numD=0;
		}
		
		private function circleNodePosition(startNO:int,endNO:int):void{
			switch(line.aspect){
				case 1:
					//箭头向右
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.y<line.toNode.y){
								startY+=Nodes.CIRCLE_RADIUS*2+1;
							}else{
								startY-=1;
							}
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=13;
							startY+=Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO);
							break;
						default:
							startX+=width-15;
							startY+=Nodes.CIRCLE_RADIUS*2/(num1+1)*(startNO);
							break;
					}
					endX+=15;
					endY+=Nodes.CIRCLE_RADIUS*2/(numA+1)*(endNO);
					break;
				case 2:
					//箭头向左
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.y<line.toNode.y){
								startY+=Nodes.CIRCLE_RADIUS*2+1;
							}else{
								startY-=1;
							}
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width-15;
							startY+=Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO);
							break;
						default:
							startX+=13;
							startY+=Nodes.CIRCLE_RADIUS*2/(num2+1)*(startNO);
							break;
					}
					endX+=width-13;
					endY+=Nodes.CIRCLE_RADIUS*2/(numB+1)*(endNO);
					break;
				case 3:
					//箭头向上
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.x<line.toNode.x){
								startX+=width-15;
							}else{
								startX+=13;
							}
							startY+=Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO);
							startY+=Nodes.CIRCLE_RADIUS*2+1;
							break;
						default:
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num3+1)*(startNO);
							startY-=1;
							break;
					}
					endX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(numC+1)*(endNO);
					endY+=Nodes.CIRCLE_RADIUS*2+3;
					break;
				case 4:
					//箭头向下
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.x<line.toNode.x){
								startX+=width-15;
							}else{
								startX+=13;
							}
							startY+=Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO);
							startY-=1;
							break;
						default:
							startX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(num4+1)*(startNO);
							startY+=Nodes.CIRCLE_RADIUS*2+1;
							break;
					}
					endX+=width/2-Nodes.CIRCLE_RADIUS+Nodes.CIRCLE_RADIUS*2/(numD+1)*(endNO);
					endY-=2;
					break;
			}
		}
		
		private function rectNodePosition(startNO:int,endNO:int):void{
			switch(line.aspect){
				case 1:
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.y<line.toNode.y){
								startY+=height+2;
							}else{
								startY-=0;
							}
							startX+=width/(num1+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX-=0;
							startY+=height/(num1+1)*(startNO);
							break;
						default:
							startX+=width;
							startY+=height/(num1+1)*(startNO);
							break;
					}
					endX-=2;
					endY+=height/(numA+1)*(endNO);
					break;
				case 2:
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.y<line.toNode.y){
								startY+=height+2;
							}else{
								startY-=0;
							}
							startX+=width/(num2+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width;
							startY+=height/(num2+1)*(startNO);
							break;
						default:
							startX-=0;
							startY+=height/(num2+1)*(startNO);
							break;
					}
					endX+=width+2;
					endY+=height/(numB+1)*(endNO);
					break;
				case 3:
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.x<line.toNode.x){
								startX+=width;
							}else{
								startX-=0;
							}
							startY+=height/(num3+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width/(num3+1)*(startNO);
							startY+=height+2;
							break;
						default:
							startX+=width/(num3+1)*(startNO);
							startY-=0;
							break;
					}
					endX+=width/(numC+1)*(endNO);
					endY+=height+3;
					break;
				case 4:
					switch(line.lineStyle){
						case line.lineStyleArr[1]:
							if(line.fromNode.x<line.toNode.x){
								startX+=width;
							}else{
								startX-=0;
							}
							startY+=height/(num4+1)*(startNO);
							break;
						case line.lineStyleArr[2]:
							startX+=width/(num4+1)*(startNO);
							startY-=0;
							break;
						default:
							startX+=width/(num4+1)*(startNO);
							startY+=height+2;
							break;
					}
					endX+=width/(numD+1)*(endNO);
					endY-=1;
					break;
			}
		}
		
		private function diamondNodePosition(startNO:int,endNO:int):void{
			switch(line.aspect){
				case 1:
					if((num1<=1 && line.fromNode==node) || (numA<=1 && line.toNode==node)){
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.y<line.toNode.y){
									startY+=Nodes.DIAMOND_BORDER;
								}else{
									startY-=0;
								}
								startX+=width/2;
								break;
							case line.lineStyleArr[2]:
								startX+=4;
								startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO);
								break;
							default:
								startX+=Nodes.DIAMOND_BORDER+6;
								startY+=Nodes.DIAMOND_BORDER/2;
								break;
						}
						endX+=3;
						endY+=Nodes.DIAMOND_BORDER/2;
					}else{
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.y<line.toNode.y){
									startY+=Nodes.DIAMOND_BORDER-13;
								}else{
									startY+=13;
								}
								startX+=width/(num1+1)*(startNO);
								break;
							case line.lineStyleArr[2]:
								startX+=(width-Nodes.DIAMOND_BORDER)/2+10;
								startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO);
								break;
							default:
								startX+=Nodes.DIAMOND_BORDER-6;
								startY+=Nodes.DIAMOND_BORDER/(num1+1)*(startNO);
								break;
						}
						endY+=Nodes.DIAMOND_BORDER/(numA+1)*(endNO);
						
						if((num1==3 && startNO==2) || (numA==3 && endNO==2)){
							endX+=3;
						}else{
							endX+=15;
						}
					}
					break;
				case 2:
					if((num2<=1 && line.fromNode==node) || (numB<=1 && line.toNode==node)){
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.y<line.toNode.y){
									startY+=Nodes.DIAMOND_BORDER;
								}else{
									startY-=0;
								}
								startX+=width/2;
								break;
							case line.lineStyleArr[2]:
								startX+=Nodes.DIAMOND_BORDER+6;
								startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO);
								break;
							default:
								startX+=4;
								startY+=Nodes.DIAMOND_BORDER/2;
								break;
						}
						endX+=Nodes.DIAMOND_BORDER+6;
						endY+=Nodes.DIAMOND_BORDER/2;
					}else{
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.y<line.toNode.y){
									startY+=Nodes.DIAMOND_BORDER-13;
								}else{
									startY+=13;
								}
								startX+=width/(num2+1)*(startNO);
								break;
							case line.lineStyleArr[2]:
								startX+=Nodes.DIAMOND_BORDER-6;
								startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO);
								break;
							default:
								startX+=(width-Nodes.DIAMOND_BORDER)/2+13;
								startY+=Nodes.DIAMOND_BORDER/(num2+1)*(startNO);
								break;
						}
						endY+=Nodes.DIAMOND_BORDER/(numB+1)*(endNO);
						
						if((num2==3 && startNO==2) || (numB==3 && endNO==2)){
							endX+=Nodes.DIAMOND_BORDER+7;
						}else{
							endX+=Nodes.DIAMOND_BORDER-4;
						}
					}
					break;
				case 3:
					if((num3<=1 && line.fromNode==node) || (numC<=1 && line.toNode==node)){
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.x<line.toNode.x){
									startX+=Nodes.DIAMOND_BORDER+6;
								}else{
									startX+=4;
								}
								startY+=Nodes.DIAMOND_BORDER/2;
								break;
							case line.lineStyleArr[2]:
								startX+=width/(num3+1)*(startNO);
								startY+=Nodes.DIAMOND_BORDER;
								break;
							default:
								startX+=width/2;
								startY-=0;
								break;
						}
						endX+=width/2;
						endY+=Nodes.DIAMOND_BORDER+2;
					}else{
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.x<line.toNode.x){
									startX+=Nodes.DIAMOND_BORDER-13;
								}else{
									startX+=15;
								}
								startY+=Nodes.DIAMOND_BORDER/(num3+1)*(startNO);
								break;
							case line.lineStyleArr[2]:
								startX+=width/(num3+1)*(startNO);
								startY+=Nodes.DIAMOND_BORDER-13;
								break;
							default:
								startX+=width/(num3+1)*(startNO);
								startY+=13;
								break;
						}
						endX+=width/(numC+1)*(endNO);
						if((num3==3 && startNO==2) || (numC==3 && endNO==2)){
							endY+=Nodes.DIAMOND_BORDER+2;
						}else{
							endY+=Nodes.DIAMOND_BORDER-11;
						}
					}
					break;
				case 4:
					if((num4<=1 && line.fromNode==node) || (numD<=1 && line.toNode==node)){
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.x<line.toNode.x){
									startX+=Nodes.DIAMOND_BORDER+6;
								}else{
									startX+=4;
								}
								startY+=Nodes.DIAMOND_BORDER/2;
								break;
							case line.lineStyleArr[2]:
								startX+=width/(num4+1)*(startNO);
								startY-=0;
								break;
							default:
								startX+=width/2;
								startY+=Nodes.DIAMOND_BORDER;
								break;
						}
						endX+=width/2;
						endY-=1;
					}else{
						switch(line.lineStyle){
							case line.lineStyleArr[1]:
								if(line.fromNode.x<line.toNode.x){
									startX+=Nodes.DIAMOND_BORDER-13;
								}else{
									startX+=15;
								}
								startY+=Nodes.DIAMOND_BORDER/(num4+1)*(startNO);
								break;
							case line.lineStyleArr[2]:
								startX+=width/(num4+1)*(startNO);
								startY+=13;
								break;
							default:
								startX+=width/(num4+1)*(startNO);
								startY+=Nodes.DIAMOND_BORDER-13;
								break;
						}
						endX+=width/(numD+1)*(endNO);
						if((num4==3 && startNO==2) || (numD==3 && endNO==2)){
							endY-=1;
						}else{
							endY+=11;
						}
					}
					break;
			}
		}
		
	}
}


键盘事件类:
package com
{
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	
	import mx.core.UITextField;
	
	import net.L4cd.iTrace;
	
	public class WFKeyboard
	{
		private var node:Nodes;
		private var line:Line;
		private var workFlow:CusWorkFlow;
		private var o:Object;
		/** CusWorkFlow对象的放大/缩小参数 **/
		private var scaleNO:Number=.2;
		/** 封装连线的对象 **/
		private var lineLag1:LineLag;
		
		public var trace:Function = iTrace.init;
		
		public function WFKeyboard()
		{
			
		}
		
		/** 选择键盘按键ASCII值 **/
		public function chooseKey(e:KeyboardEvent,mouseE:MouseEvent):void {
			o=getObjects(mouseE);
			node=o.node as Nodes;
			line=o.line as Line;
			workFlow=o.workFlow as CusWorkFlow;
			switch(e.keyCode){
				case 8:
				case 46:
					deleteNode(node,line,workFlow);
					break;
				case 65:
					if(!e.ctrlKey)return;
					
					break;
				case 107:
					if(!e.ctrlKey)return;
					workFlow.scaleX+=scaleNO;//放大CusWorkFlow对象
					workFlow.scaleY+=scaleNO;
					break;
				case 109:
					if(!e.ctrlKey)return;
					workFlow.scaleX-=scaleNO;//缩小CusWorkFlow对象
					workFlow.scaleY-=scaleNO;
					break;
			}
		}
		
		/** 删除节点或连线 **/
		private function deleteNode(node:Nodes,line:Line,workFlow:CusWorkFlow):void {
			if(!workFlow)return;
			
			if(node){
				var num:int=node.lineList.length;
				for(var i:int=0;i<num;i++){
					var lineLag:LineLag=node.lineList[i];
					workFlow.removeChild(lineLag.line);
					
					if(node==lineLag.line.fromNode){
						for(var j:int=0;j<lineLag.line.toNode.lineList.length;j++){
							lineLag1=lineLag.line.toNode.lineList[j] as LineLag;
							if(node==lineLag1.line.fromNode){
								lineLag.line.toNode.lineList.splice(j,1);
							}
						}
					}else{
						for(var k:int=0;k<lineLag.line.fromNode.lineList.length;k++){
							lineLag1=lineLag.line.fromNode.lineList[k] as LineLag;
							if(node==lineLag1.line.toNode){
								lineLag.line.fromNode.lineList.splice(k,1);
							}
						}
					}
				}
				
				workFlow.removeChild(node);
			}else if(line){
				for(var m:int=0;m<line.toNode.lineList.length;m++){
					lineLag1=line.toNode.lineList[m] as LineLag;
					if(line==lineLag1.line){
						line.toNode.lineList.splice(m,1);
						break;
					}
				}
				
				for(var n:int=0;n<line.fromNode.lineList.length;n++){
					lineLag1=line.fromNode.lineList[n] as LineLag;
					if(line==lineLag1.line){
						line.fromNode.lineList.splice(n,1);
					}
				}
				workFlow.removeChild(line);
			}
		}
		
		/** 重画节点边框,表示选中或非选中 **/
		public function reDrawNode(map:Nodes):void{
			switch(map.type){
				case Nodes.NODE:
					map.drawNode();
					break;
				case Nodes.DOC:
					map.drawDoc();
					break;
				case Nodes.EMAIL:
					map.drawEmail();
					break;
				case Nodes.RECT:
					map.drawRect();
					break;
				case Nodes.BRECT:
					map.drawBRect();
					break;
				case Nodes.DIAMOND:
					map.drawDiamond();
					break;
				case Nodes.CLOCK:
					map.drawClock();
					break;
				case Nodes.ENDNODE:
					map.drawEndNode();
					break;
				case Nodes.LEFTDASHED:
					map.drawDashed();
					break;
				case Nodes.RIGHTDASHED:
					map.drawDashed2();
					break;
			}
		}
		
		/** 返回鼠标选中的对象 **/
		private function getObjects(e:MouseEvent):Object{
			o=new Object();
			if(e.target is UITextField){
				o.node=e.target.parent.parent as Nodes;
				o.workFlow=e.target.parent.parent.parent as CusWorkFlow;
			}else if(e.target is Nodes){
				o.node=e.target as Nodes;
				o.workFlow=e.target.parent as CusWorkFlow;
			}else if(e.target is CusWorkFlow){
				o.workFlow=e.target as CusWorkFlow;
			}else if(e.target is Line){
				o.line=e.target as Line;
				o.workFlow=e.target.parent as CusWorkFlow;
			}
			return o;
		}
	}
}


  • 大小: 88 KB
6
0
分享到:
评论
13 楼 jcl860 2012-09-14  
兄台:左边面板是图片,还是用mxml画出来的图形?
12 楼 jcl860 2012-09-05  
兄弟,能把mxml代码贴上看看不,主要是画不出界面啊。
11 楼 shlei 2012-08-31  
jcl860 写道
兄弟,你有联系方式没有,请给发一下。我的邮箱:317902593@qq.com。

这里有,自己下载吧,http://www.ibm.com/developerworks/cn/downloads/ws/elixir/
10 楼 jcl860 2012-08-31  
兄弟,你有联系方式没有,请给发一下。我的邮箱:317902593@qq.com。
9 楼 shlei 2012-08-30  
jcl860 写道
兄弟, import com.ibm.ilog.elixir.diagram.Graph;缺这些东西啊,这些东西报错了,咋整呢?

你这个是用的ilog组件,需要导入ilog的swc库文件,
8 楼 jcl860 2012-08-30  
兄弟, import com.ibm.ilog.elixir.diagram.Graph;缺这些东西啊,这些东西报错了,咋整呢?
7 楼 421081646 2012-08-08  
挺好的,学习了
6 楼 shlei 2011-11-11  
a0409028 写道
连线是怎么实现的有弧度,据天代码是那块?,感谢 了。

二次贝塞尔曲线,查资料吧,
5 楼 a0409028 2011-11-11  
连线是怎么实现的有弧度,据天代码是那块?,感谢 了。
4 楼 shlei 2011-10-19  
a0409028 写道
能不能共享一下,页面源码

抱歉,这已经是商业产品了,
3 楼 a0409028 2011-10-19  
能不能共享一下,页面源码
2 楼 debbykindom 2011-09-16  
,强大,希望有机会再和兄台深入交流。
1 楼 tree_161219 2011-03-29  
写的很不错呢!

相关推荐

    仿IBM-BPM Monitor实现的demo

    【标题】:“仿IBM-BPM Monitor实现的demo” 在IT领域,流程管理(Business Process Management,BPM)是企业信息化建设中的重要组成部分,它帮助企业优化业务流程,提高工作效率。IBM BPM是一款强大的流程管理工具...

    ibm-pc汇编语言程序设计教程参考答案

    ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考答案ibm-pc汇编语言程序设计教程参考...

    ibm-java-sdk-8.0-5.11-x86_64-archive.bin

    ibm-java-sdk-8.0-5.11-x86_64-archive.bin ibm的jdk 8.0版本

    ibm-java-ppc64-sdk-7.0-10.50

    1. **下载与准备**:首先,你需要从IBM官方网站或者其他可信赖的来源下载`ibm-java-ppc64-sdk-7.0-10.50.bin`这个二进制文件。这个文件是安装程序的载体,包含了所有必要的组件。 2. **赋予执行权限**:由于AIX系统...

    在spring boot中使用jms集成IBM-MQ和TLQ,包含普通队列和主题订阅两种模式,并实现按需加载

    1) 本工程主要演示在SPRING BOOT工程中怎样使用JMS集成IBM-MQ及TLQ两种消息中间件产品 2) 使用SPRING BOOT Conditional机制实现了两种产品按需加载,工程会根据配置文件开关动态加载 3) 实现了普通队列消息发送与...

    ibm-java-x86_64-sdk-8.0-5.16.bin

    linux 64位IBM JDK1.8 linux 64位

    IBM-WWPMM方法论

    IBM-WWPMM方法论 IBM-WWPMM方法论 基本概念 项目计划 项目授权书 组建项目团队 构建项目管理主计划框架 完成工作分解(WBS) 进行风险识别、制定风险管理计划 修订WBS并估算每一项任务的成本(时间) 确定任务间的...

    因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-attrition-dataset.zip

    因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-attrition-dataset.zip因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-attrition-dataset.zip因素与员工离职和绩效有关(数据集)-ibm-hr-analytics-...

    IBM-PC汇编语言程序设计(第五版)

    - 本书可能会介绍如何通过中断服务程序(ISR)或者系统调用来实现对操作系统服务的调用,这对于开发能够在IBM-PC上运行的应用程序来说非常重要。 5. **调试与优化** - 编写高质量的汇编语言程序往往需要经过多次...

    IBM-Full官方Visio形状

    【IBM-Full官方Visio形状】是一套专为IBM产品设计的Visio形状库,它包含了大量的图形元素,用于在Microsoft Visio中绘制IBM相关的系统架构、网络拓扑、流程图和其他技术图表。这些形状可以帮助IT专业人员更直观地...

    ibm-java-jre-6.0-16.30-linux-i386.bin

    ibm-java-jre-6.0-16.30-linux-i386.binibm-java-jre-6.0-16.30-linux-i386.bin

    ibm-semeru-open-jdk_x64_mac_11.0.16_8_openj9-0.33.0.tar.gz

    ibm open j9的虚拟机包(mac os x64)

    IBM-PC汇编语言程序设计实验报告1

    根据提供的文件信息,本篇将围绕“IBM-PC汇编语言程序设计实验报告1”进行深入探讨,重点解析四个子程序的功能实现以及如何通过主程序完成一个简单的乐曲程序。 ### 一、实验背景 在计算机科学领域,汇编语言是一...

    IBM-PC汇编语言实验报告

    在IBM-PC汇编语言中,这通常通过定义数据段(datarea segment)并存储字符序列来实现。例如,定义两个字符串string1和string2,并使用db指令分配存储空间并赋值。字符的显示则通过调用DOS中断服务,如INT 21H的AH=09...

    64位linux上的ibm-java2-x86_64-jre-5.0-13.1.x86_64

    ibm-java2-x86_64-jre-5.0-13.1.x86_64.rpm

    IBM-PC汇编语言程序设计例题习题集(非常清晰)

    ( 清华大学 《IBM-PC 汇编语言程序设计(第二版)》 沈美明 温冬婵 编著)。 PS1:本人还上传了配套的PPT课件。 绝对的物有所值! PS2:本系列资源上传一共有3个:  1\汇编语言教程. 2\配套习题集. 3\PPT...

    IBM-PC汇编语言程序设计实验教程与习题集

    IBM-PC汇编语言程序设计实验教程与习题集;IBM-PC汇编语言程序设计实验教程与习题集;IBM-PC汇编语言程序设计实验教程与习题集;IBM-PC汇编语言程序设计实验教程与习题集;IBM-PC汇编语言程序设计实验教程与习题集;

    IBM-Full官方Visio模具

    IBM-Workstations.vss IBM-UPS-PDU.vss IBM-TotalStorage-Disk.vss IBM-Server.vss IBM-Racks.vss IBM-IO-Cards.vss

    计算机接口与通信课程设计 IBM-PC 8253/8255音乐演奏器的设计

    IBM-PC 8253/8255音乐演奏器的设计 2、设计目的 熟悉并掌握IBM-PC中定时器8253及并行接口芯片8255驱动扬声器发出声音的方法,熟悉并掌握接口控制程序的一般结构。 3、设计内容与要求 (1)电子琴功能,编写程序,...

Global site tag (gtag.js) - Google Analytics