精华内容
下载资源
问答
  • java画工作流流程图java生成流程图

              阿里云低价服务器1折特惠,优惠爽翻天,点我立即低价购买

    /*
     * Copyright 2015 iminasha.com All right reserved. This software is the confidential and proprietary information of
     * iminasha.com ("Confidential Information"). You shall not disclose such Confidential Information and shall use it only
     * in accordance with the terms of the license agreement you entered into with iminasha.com.
     */
    package com.imiansha.wms.controller.workflow;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletOutputStream;
    
    import com.jfinal.kit.PathKit;
    import com.jfinal.render.Render;
    
    /**
     * 类DrawFlowChart.java的实现描述:根据审批人画流程图
     * 
     * @author leon 2015年7月14日 上午9:37:56
     */
    public class DrawFlowChart extends Render {
    
        private int                width;
        private final int          intervalOfX = 100;// 每个元素之间的x轴间距
        private List<List<String>> approvalers;//审批人组集合
    
        /**
         * @param width
         * @param approvalers
         */
        public DrawFlowChart(int width, List<List<String>> approvalers){
            super();
            this.width = width;
            this.approvalers = approvalers;
        }
    
        /**
         * @return the width
         */
        public int getWidth() {
            return width;
        }
    
        /**
         * @param width the width to set
         */
        public void setWidth(int width) {
            this.width = width;
        }
    
        /**
         * @return the approvalers
         */
        public List<List<String>> getApprovalers() {
            return approvalers;
        }
    
        /**
         * @param approvalers the approvalers to set
         */
        public void setApprovalers(List<List<String>> approvalers) {
            this.approvalers = approvalers;
        }
    
        @Override
        public void render() {
            BufferedImage image = drawFlowChartImg();
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");
    
            ServletOutputStream sos = null;
            try {
                sos = response.getOutputStream();
                ImageIO.write(image, "jpeg", sos);
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                if (sos != null) try {
                    sos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 画流程图
         * 
         * @return
         */
        private BufferedImage drawFlowChartImg() {
            // 获取箭头图标文件
            File srcFile = new File(PathKit.getRootClassPath() + File.separator + "arrow.png");
            Image srcImg = null;
            try {
                srcImg = ImageIO.read(srcFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
            // 计算画布的高度
            // 画布高度=每组审批人的总高度+箭头高度
            // 获取最多审批人的组
            // 每组中的每个审批人y坐标间隔20
            int every_approvaler_distance = 20;
            int maxApprovalCount = this.getMaxListSize(approvalers);
            // 计算画布的最高高度
            int height = maxApprovalCount * every_approvaler_distance + srcImg.getHeight(null);
    
            // 绘制宽=width,长=hight的图板
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            // 获取图形上下文,graphics想象成一个画笔
            Graphics2D graphics = (Graphics2D) image.getGraphics();
    
            // 对指定的矩形区域填充颜色
            graphics.setColor(Color.WHITE); // GREEN:绿色; 红色:RED; 灰色:GRAY
            graphics.fillRect(0, 0, width, height);
            // 箭头数量
            int arrowCount = 1;
            // 设置文字颜色
            graphics.setColor(Color.BLACK);
            graphics.setFont(new Font("宋体", Font.BOLD, 14));
            int lastGroupElementX = 0;// 最后一组元素的X坐标
            int arrowY = height / 2 - srcImg.getHeight(null);// 箭头的y坐标
            if (approvalers != null && approvalers.size() > 0) {
                for (List<String> approvalerList : approvalers) {
                    int i = 1;
                    int maxWidthOfGroup = 0;// 每组最大宽度
                    int compareTmp = 0;// 比较宽度的变量
                    lastGroupElementX += intervalOfX;// 最后一组的x坐标
                    int approvalerListSize = approvalerList.size();// 每组审批人数量
                    // 计算每个组的第一个元素的y坐标
                    int everyGruopFirstElementY = 0;
                    if (approvalerListSize % 2 == 0) {
                        everyGruopFirstElementY = maxApprovalCount * every_approvaler_distance / 2
                                                  - every_approvaler_distance
                                                  - (approvalerListSize / 2 - 1) * every_approvaler_distance;
                    } else {
                        everyGruopFirstElementY = maxApprovalCount * every_approvaler_distance / 2
                                                  - (approvalerListSize / 2 + 1) * every_approvaler_distance;
                    }
    
                    // 将审批人画在图片上
                    for (String elementStr : approvalerList) {
                        int strWidth = graphics.getFontMetrics().stringWidth(elementStr);
                        if (approvalerListSize < maxApprovalCount) {
                            graphics.drawString(elementStr, lastGroupElementX,
                                                everyGruopFirstElementY + i * every_approvaler_distance);
                        } else {
                            graphics.drawString(elementStr, lastGroupElementX, i * every_approvaler_distance);
    
                        }
                        // 计算最大的审批人字符串宽度
                        maxWidthOfGroup = strWidth;
                        if (maxWidthOfGroup < compareTmp) {
                            maxWidthOfGroup = compareTmp;
                        } else {
                            compareTmp = strWidth;
                        }
                        i++;
                    }
                    lastGroupElementX += maxWidthOfGroup;// 重新计算最后一个元素的y坐标
                    // 将箭头画在图片上
                    if (arrowCount < approvalers.size()) {
                        graphics.drawImage(srcImg, lastGroupElementX + srcImg.getWidth(null), arrowY, null);
                        lastGroupElementX += srcImg.getWidth(null);
                    }
                    arrowCount++;
                }
    
            }
    
            graphics.dispose();// 释放此图形的上下文并释放它所使用的所有系统资源
            return image;
    
        }
    
        /**
         * 获取list集合中最大的list size
         * 
         * @param list
         * @return
         */
        private int getMaxListSize(List<List<String>> list) {
    
            if (list == null || list.size() == 0) {
                return 0;
            }
            int maxSize = list.get(0).size();
            int compareTmp = maxSize;
    
            for (List<String> listTmp : list) {
    
                maxSize = listTmp.size();
                if (maxSize < compareTmp) {
                    maxSize = compareTmp;
                } else {
                    compareTmp = listTmp.size();
                }
            }
    
            return maxSize;
        }
    
    }
    
    展开全文
  • Java流程图

    千次阅读 2015-06-16 20:42:59
    今天是2015.6.16第一天正式开课,老师教了怎么做流程图,以下是一些今天的理解:  首先认识流程图的组成框架有:起止框、输入框、判断框、处理框、流程线、连接点。  算法的基本特征:  1.有穷性:一个算法必须...

            今天是2015.6.16第一天正式开课,老师教了怎么做流程图,以下是一些今天的理解:

            首先认识流程图的组成框架有:起止框、输入框、判断框、处理框、流程线、连接点。

             算法的基本特征:

             1.有穷性:一个算法必须在执行有限个操作步骤后终止。

             2.确定性:算法中每一步的含义必须是确切的,不可出现任何二义性。

             3.有限性:算法中的每一步操作都应该能有效执行,一个不可执行的操作是无效的,例如.一个数被0除的操作就是无效的.应当避免这种操作。

             4.有零个或多个输入:这里的输入是指在算法开始之前所需要的初始数据,这些输入的多少取决于特定的问题。

             5.有一个或多个输出:所谓输出是指与输入有某种特定关系的量,在一个完整的算法中至少会有一个输出,例如.要计算从1累加到100.如果这个程序没有输出结果,那么他将变得毫无意义。

           以上是对流程图的一些特征,对于我自己来说,只要懂得了他的原理,其实挺简单的!
    展开全文
  • java流程图【思路】

    千次阅读 2017-10-23 10:48:00
    画的第一张流程图 把脑子里的东西能清晰的表现出来 学编程必备将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的...

    java计算整数输入 <样例

    画的第一张流程图

    把脑子里的东西能清晰的表现出来 

    学编程必备

    将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
    展开全文
  • 一、流程图简单介绍 流程图 (Flow Chart )是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务的管理过程。...

    一、流程图简单介绍

    流程图 (Flow Chart )是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务的管理过程。流程图是揭示和掌握封闭系统运动状况的有效方式。作为诊断工具,它能够辅助决策制定,让管理者清楚地知道,问题可能出在什么地方,从而确定出可供选择的行动方案。(摘自MBA智库·百科)相比于时序图而言,流程图不需要过多考虑时间的维度,它能更加一目了然地描述各种分支情况的走向。针对不同的用户群,流程图有很多种类划分,我习惯将流程图分为这两种:

    • 业务流程图(按照人与系统的维度)
    • 数据流程图(按照数据流转的维度)

    二、有哪些组成元素

    1、几个重要且最常用的符号,需要牢记

     

    2、流程图的三大结构

    • 顺序结构:一般指主流程,跟着箭头方向走

    • 条件结构:类似代码里的 if 或 switch,判定框可以有两个或多个箭头出去,经常遇到需要处理 “ 是或否” 的选择。一般结果为 “是” 时,建议放在主线上。

    • 循环结构:类似代码里的 for 或 while 等循环控制,在一定的条件下,反复执行某一操作。常见图一和图二这两种表现形式,图三的区别在于否的箭头位置,建议参考图二的画法

    3、绘制时需要注意的点

    我遇到过很多五花八门的流程图的画法,没有绝对的好与不好,我们最终目的都是为了方便读者阅读和理解我们设计的整个处理流程,以下有几条前人总结的经验:

    3.1 确定绘制的对象和范围

    • 整个流程的起始点是什么?整个流程的终结点是什么?
    • 在整个流程中,涉及到的角色都是谁?(避免不同类型的流程图混杂在一起 )
    • 在整个流程中,都需要做什么事情?(确定主线)

    3.2 适当拆解,分别绘制

    • 往往一个大的需求中包含多个任务流程图,这种情况可以按照不同的任务绘制。比如一个App包含“登录注册、购买支付、身份验证等功能”,其中每个功能都对应一个或多个任务流程图。

    3.3 从上往下,从左往右

    • 绘制流程图一般遵循从上往下,从左往右的结构,从整体的主流程到局部的分支流程

    3.4 有始有终,形成闭环

    • 流程图的路径走向不能存在某个步骤中断找不到解决办法的情况,每个流程处理节点都应该只有一入一出

    3.5 灵活使用子流程

    • 某些子流程可能被频繁复用,如果每次都把子流程展现出来,一方面增加绘制时间成本,另一方面使流程图变得冗余,降低了可阅读性。尽可能整合一些冗余的逻辑,使得看起来有主次,思路清晰

    3.6 以重叠线等形式减少线路的数量,尽量避免出现交叉

    • 流程图中的连接线交叉会降低可阅读性,可以使用不同颜色、线条类型、线条宽度来区分,一些软件会在交叉线相交时会形成一个弯曲弓形

    三、找个样例来看看

    • 总体上看,与我们之前说的那些要点比较契合,流程很清晰,连接线没有交叉
    • 从开始到结束,中轴有一条主线,根据不同的条件判断结果进入不同的分支处理
    • 在右边的「账户余额足够支付」的判断中,缺少「余额不足够」时的处理流程
    • 「是否缴费」右边的处理过程有两个入口,建议一个处理过程只有一个入口

     

    • 泳道图,一种UML活动图,有点像是时序图 + 流程图的结合体,其结构样式很像泳道
    • 有纵向和横向的摆放方式,通过泳道划分明确各个处理节点由哪个角色处理,让数据更加清晰
    • 泳道图一般用来绘制业务处理过程,在绘制前需要确认清楚每个泳道的职能角色

    四、我们也来动动手

    • 场景:用户去「存取款机」存钱 (虚构的流程别太当真 )
    • 绘制步骤可简单总结如下
    • 1、划清边界,识别交互的语境 - 界定好要画的内容、起始、终点,是业务场景、数据流转还是代码执行过程
    • 2、梳理流程节点和条件 - 先绘制主流程,再考虑各个分支条件和子流程的情况
    • 3、添加描述 - 适当的文字描述有助于读者理解,应该避免长篇大论

    • 上图用了子流程、条件、循环、多分支等结构,左边是主流程,右边是其中一个分支流程
    • 作图的应该尽量简单清晰明了,有主线,从上到下,从左到右,不要七扭八歪的
    • 如果流程图过长或者复杂,适当使用「子流程」和「页面内引用、跨页面引用其他流程」进行拆分
    展开全文
  • Java Web Servlet 开发流程图
  • 关于学习java后台的流程图

    千次阅读 2017-05-18 13:43:44
    最近打算学一下java后台,在此记录一下自己学习java后台的流程图还有mark; 最近几天把java基础复习了一下,对于java基础应用于开发后台还是没有问题的; 学习javaEE 首先要学习数据库,我学的数据库是 很简单 ...
  • Java程序员必备的一些流程图(拿走不谢)

    万次阅读 多人点赞 2019-07-08 15:09:35
    整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习。 (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!) 1.spring的生命周期 Spring作为当前Java最流行、最...
  •   软件工程中应用到的图全部有:系统流程图数据流图、数据字典、ER图、状态转换图、层次方框图、Warnier图、IPO图、层次图、HIPO图、结构图、程序流程图、盒图、PAD图、判定表、判定树、过程设计语言、jackson图...
  • 五:系统逻辑简析(含数据流图、流程图等) 六:Java代码 七:核心思想简析 一:系统功能 (1)管理员登录 (2)图书借阅信息管理(如“归还图书”等) (3)图书信息管理(如对图书进行“增删改查”等) (4)管理...
  • RocketMQ消息存储流程图数据结构图

    千次阅读 2018-03-17 20:34:31
    RocketMQ消息存储流程及涉及的数据结构
  • activiti7的流程图、模板图及子流程图展示 流程图需展示流程完成情况,模板图根据key找到最新模板展示。子流程需从主流程中找到CallActiviti的节点,找到对应的子流程id(已启动)或模板key(未启动),再进行对应的流程...
  • 微信小程序Java登录流程

    万次阅读 多人点赞 2018-05-10 15:05:04
    一、登录流程图二、微信小程序端doLogin:function(callback = () =&gt;{}){ let that = this; wx.login({ success:function(loginRes){ if(loginRes){ //获取用户信息 wx.getUserInfo({ withCredentials:...
  • javaGC流程

    万次阅读 2018-02-05 10:08:13
    Java垃圾回收概况  Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C...
  • 采用递归方式展现流程图
  • java数据结构与算法之栈(Stack)设计与实现

    万次阅读 多人点赞 2016-11-28 12:27:43
    【版权申明】转载请注明出处(请尊重原创,博主...关联文章:java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedL
  • 流程图描述算法

    万次阅读 多人点赞 2018-07-18 08:41:11
    流程图就是一种描述算法的图形化描述,用流程图可以清晰地描述出算法的思路和过程。通过本篇的学习,你将了解到如何用流程图来描述算法。】   流程图是算法的图形化描述。俗话说:一张图胜过千言万语,用流程图...
  • java详细学习路线及路线

    万次阅读 多人点赞 2018-05-20 16:15:02
    java详细路线: 原文出自点击打开链接 本文将告诉你学习Java需要达到的30个目标,学习过程中可能遇到的问题,及学习路线。希望能够对你的学习有所帮助。对比一下自己,你已经掌握了这30条中的多少条了呢? ...
  • mxGraph是一套前端流程图控件库,通过它,你可以表示出清晰的流程图界面,可以更好地展示数据之间的相关性mxGraph后台存储数据的时候用的是xml,虽然在上期我也说了,xml数据可以直接由mxGraph系统解析并加载出来,...
  • JAVA 数据权限设计

    万次阅读 2014-07-17 09:34:18
    虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构、信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础。数据权限的控制不同于一般的功能权限的...
  • python流程图-python如何画流程图

    千次阅读 2020-11-01 12:48:40
    程序流程图简称流程图,是一种传统的算法表示法,流程图用统一规定的标准符号描述程序运行具体步骤,毫不夸张的讲,画流程图已经是程序员必须掌握的一个技能。1. 为什么要画程序流程图学编程还需要画流程图?不要...
  • 前言针对Java代码中实现对HDFS文件的读取(FSDataInputStream)与写入(FSDataOutputStream)在工作项目中经常使用;下边就读写流程做一下详细介绍。环境准备1.集群配置文件如,一般对文件的读取,会将core-site....
  • Java学习路线(如何快速学Java

    万次阅读 多人点赞 2018-11-21 15:12:30
    不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议。可能总结的不是很详细,但给出了一个大概的学习路线。希望对大家有帮助哈~ 如何快速学Java 这里我以Java EE(Jakarta EE)/...
  • Java学习路线

    万次阅读 多人点赞 2017-03-25 20:34:16
    一、Java学习路线       二、Java学习路线——视频篇   六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码  第一阶段 Java基础 ...
  • Java对象创建的流程

    千次阅读 2019-05-07 22:05:39
    文章目录Java对象创建的流程1.Java普通对象的创建1.1new指令1.2分配内存1.3初始化1.4对象的初始设置1.5\方法2.Java对象内存布局2.1对象头2.2实例数据2.3对齐填充 1.Java普通对象的创建 这里讨论的仅仅是普通Java...
  • 从零开始java数据权限篇:数据权限

    千次阅读 2019-09-09 11:59:05
    1.数据对应的层级 2.用户数据查询 3.用户流程管理 4.部门-岗位-公司查询拓扑 三.说明 一:数据权限的产生 在一个后管系统中,由2个最重要的权限划分。第一个访问权限,通过控制访问路径、请求来控制访问...
  • Java 图形界面开发--图文并茂建立学生管理系统

    万次阅读 多人点赞 2016-03-19 19:52:28
    运行界面如所示:   本静态界面的实现,使用了网格布局,3行1列,在每一行中放入了一个JPanel面板,每个面板上又分别放入所需的组件,整体构成了一个静态的登录界面。   步骤二:添加监听,并且进行...
  • 大数据流程图

    万次阅读 2018-12-06 10:10:24
     1、大数据流程图      2、大数据各个环节主要技术    2.1、数据处理主要技术  Sqoop:(发音:skup)作为一款开源的离线数据传输工具,主要用于Hadoop(Hive) 与传统数据库(MyS...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 332,165
精华内容 132,866
关键字:

java数据流程图

java 订阅