day57_电力项目_图形报表&项目分析

项目第十天(图形报表+项目开发流程)

1:Jfreechart报表

属于工厂模式:提供ChartFactory类,由ChartFactory类创建各种图形
这里写图片描述

(1)柱状图:

原理:
这里写图片描述

代码:

    public static void main(String[] args) {
        //图形的数据集合
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(12, "所属单位", "北京");
        dataset.addValue(6, "所属单位", "上海");
        dataset.addValue(2, "所属单位", "深圳");
        //工厂模式
        JFreeChart chart = ChartFactory.createBarChart3D(
                "用户统计报表(所属单位)",     //图形的主标题 
                "所属单位名称",               //X轴外的标签名称 
                "数量",                       //Y轴外的标签名称 
                dataset,                    //图形的数据集合
                PlotOrientation.VERTICAL,   //图表的显示形式(水平/垂直) 
                true,                       //是否显示子标题 
                true,                       //是否在图形上生成提示工具 
                true                        //是否点击生成URL
        );
        //处理主标题的乱码
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        //处理子标题的乱码
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
        //获取图表区域对象
        /**
         * 图表区域对象:
         *  (1)使用断点:
         *  (2)使用System.out.println(chart.getPlot())
         *  (3)使用API文档
         */
        CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
        //获取X轴对象
        CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
        //获取Y轴对象
        NumberAxis3D numberAxis3D = (NumberAxis3D) categoryPlot.getRangeAxis();
        //X轴外的乱码
        categoryAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //X轴上的乱码
        categoryAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴外的乱码
        numberAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴上的乱码
        numberAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //设置Y轴上的刻度以1为单位
        numberAxis3D.setAutoTickUnitSelection(false);
        NumberTickUnit unit = new NumberTickUnit(1);
        numberAxis3D.setTickUnit(unit);

        //获取绘图区域对象
        BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
        //让图形变得苗条点
        barRenderer3D.setMaximumBarWidth(0.08);

        //让在图形上生成数字
        barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        barRenderer3D.setBaseItemLabelsVisible(true);
        barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));


        //使用Frame生成图形
        ChartFrame frame = new ChartFrame("xyz",chart);
        frame.setVisible(true);
        frame.pack();//显示图形
    }

(2)线状图

原理:
这里写图片描述

代码:

public class LineDemo {

    public static void main(String[] args) {
        //图形的数据集合
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(12, "中国", "北京");
        dataset.addValue(6, "中国", "上海");
        dataset.addValue(2, "中国", "深圳");

        dataset.addValue(10, "美国", "华盛顿");
        dataset.addValue(5, "美国", "洛杉矶");
        dataset.addValue(1, "美国", "纽约");

        //工厂模式
        JFreeChart chart = ChartFactory.createLineChart(
                "用户统计报表(所属单位)",     //图形的主标题 
                "所属单位名称",               //X轴外的标签名称 
                "数量",                       //Y轴外的标签名称 
                dataset,                    //图形的数据集合
                PlotOrientation.VERTICAL,   //图表的显示形式(水平/垂直) 
                true,                       //是否显示子标题 
                true,                       //是否在图形上生成提示工具 
                true                        //是否点击生成URL
            );
        //处理主标题的乱码
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        //处理子标题的乱码
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
        //获取图表区域对象
        /**
         * 图表区域对象:
         *  (1)使用断点:
         *  (2)使用System.out.println(chart.getPlot())
         *  (3)使用API文档
         */
        CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
        //获取X轴对象
        CategoryAxis categoryAxis = (CategoryAxis)categoryPlot.getDomainAxis();
        //获取Y轴对象
        NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
        //X轴外的乱码
        categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //X轴上的乱码
        categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴外的乱码
        numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴上的乱码
        numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //设置Y轴上的刻度以1为单位
        numberAxis.setAutoTickUnitSelection(false);
        NumberTickUnit unit = new NumberTickUnit(1);
        numberAxis.setTickUnit(unit);

        //获取绘图区域对象
        LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer)categoryPlot.getRenderer();


        //让在图形上生成数字
        lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        lineAndShapeRenderer.setBaseItemLabelsVisible(true);
        lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));

        //设置以矩形作为转折点
        Shape shape = new Rectangle(10,10);
        //设置图形,参数一:表示第几条线,0表示第一条,参数二:图形
        lineAndShapeRenderer.setSeriesShape(0, shape);
        lineAndShapeRenderer.setSeriesShapesVisible(0, true);

        lineAndShapeRenderer.setSeriesShape(1, shape);
        lineAndShapeRenderer.setSeriesShapesVisible(1, true);


        //使用Frame生成图形
        ChartFrame frame = new ChartFrame("xyz",chart);
        frame.setVisible(true);
        frame.pack();//显示图形
    }
}

(3)饼图

原理:
这里写图片描述

代码:

public class PieDemo {

    public static void main(String[] args) {
        //图形的数据集合
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("北京", 12);
        dataset.setValue("上海", 6);
        dataset.setValue("深圳", 2);
        //工厂模式
        JFreeChart chart = ChartFactory.createPieChart3D(
                "用户统计报表(所属单位)",     //图形的主标题 
                dataset,                    //图形的数据集合
                true,                       //是否显示子标题 
                true,                       //是否在图形上生成提示工具 
                true                        //是否点击生成URL
            );
        //处理主标题的乱码
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        //处理子标题的乱码
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
        //获取图表区域对象
        /**
         * 图表区域对象:
         *  (1)使用断点:
         *  (2)使用System.out.println(chart.getPlot())
         *  (3)使用API文档
         */
        PiePlot3D piePlot3D = (PiePlot3D) chart.getPlot();
        piePlot3D.setLabelFont(new Font("宋体", Font.BOLD, 15));

        //在图形上显示数值:格式:北京 12 (60%)
        String labelFormat = "{0} {1} ({2})";
        piePlot3D.setLabelGenerator(new StandardPieSectionLabelGenerator(labelFormat));

        //使用Frame生成图形
        ChartFrame frame = new ChartFrame("xyz",chart);
        frame.setVisible(true);
        frame.pack();//显示图形
    }
}

2:使用Jfreechart完成整合国家电力系统

目前:jfreechart使用:

//使用Frame生成图形
ChartFrame frame = new ChartFrame("xyz",chart);
frame.setVisible(true);
frame.pack();//显示图形

此时整合项目,不使用ChartFrame
项目中使用,能否在指定盘的文件夹下生成图片,在页面中使用<img src=””>标签加载图片

例如:在D盘生成一张图片,在页面上使用<img src=”D:/chart.png”>

//在D盘生成图片
File file = new File("D:/chart.png");
try {
    ChartUtilities.saveChartAsPNG(file, chart, 600, 500);
} catch (IOException e) {
    e.printStackTrace();
}

整合项目的操作步骤:

第一步:导入jar包
这里写图片描述

第二步:导入一个jap的文件,userReport.jsp,跳转到页面后传递生成图片的文件名,用来加载图片:

<img src="${pageContext.request.contextPath}/chart/${filename}" border="0">

第三步:
在userIndex.jsp中定义:

<input style="font-size:12px; color:black; height=20;width=80" id="BT_Add" type="button" value="人员统计(所属单位)" name="BT_Add"    onclick="openWindow('${pageContext.request.contextPath }/system/elecUserAction_chartUser.do','700','400')">&nbsp;&nbsp;
在Action中定义:
public String chartUser(){
        List<Object []> list = elecUserService.chartUser("所属单位","jctID");
        //使用Jfreechart生成图片,将图片生成到chart的文件夹下,将图片的名称放置到request的对象中,名称filename
        String filename = ChartUtils.createBarChart(list);//返回文件名
        request.setAttribute("filename", filename);
        return "chartUser";
    }

第四步:
在Dao中定义:使用聚合函数进行分组统计。

public List<Object[]> chartUser(String zName, String eName) {
        final String sql = "SELECT a.keyword,a.ddlName,COUNT(a.ddlCode) FROM elec_systemddl a " +
                     " INNER JOIN elec_user b ON a.ddlCode = b."+eName+" AND a.keyword='"+zName+"' " +
                     " WHERE b.isDuty = '1' " +
                     " GROUP BY a.keyword,a.ddlName " +
                     " ORDER BY a.ddlCode ASC";
        List<Object[]> list = this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session session)
                    throws HibernateException, SQLException {
                SQLQuery query = session.createSQLQuery(sql)
                        .addScalar("keyword", Hibernate.STRING)
                        .addScalar("ddlName", Hibernate.STRING)
                        .addScalar("COUNT(a.ddlCode)", Hibernate.INTEGER);
                //标量查询(如果使用sql语句,如果用连接查询,有可能2张表的字段出现冲突,就要使用投影查询)
                return query.list();
            }

        });
        return list;
    }

第五步:封装ChartUtils的工具类,生成各种图形

public class ChartUtils {

    /**生成柱状图,返回文件名(格式,日期时分秒)*/
    public static String createBarChart(List<Object[]> list) {
        //图形的数据集合
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        if(list!=null && list.size()>0){
            for(Object[] o:list){
                //a.keyword,a.ddlName,COUNT(a.ddlCode)
                dataset.addValue(Double.parseDouble(o[2].toString()), o[0].toString(), o[1].toString());
            }
        }
        //工厂模式
        JFreeChart chart = ChartFactory.createBarChart3D(
                "用户统计报表(所属单位)",     //图形的主标题 
                "所属单位名称",               //X轴外的标签名称 
                "数量",                       //Y轴外的标签名称 
                dataset,                    //图形的数据集合
                PlotOrientation.VERTICAL,   //图表的显示形式(水平/垂直) 
                true,                       //是否显示子标题 
                true,                       //是否在图形上生成提示工具 
                true                        //是否点击生成URL
            );
        //处理主标题的乱码
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        //处理子标题的乱码
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
        //获取图表区域对象
        /**
         * 图表区域对象:
         *  (1)使用断点:
         *  (2)使用System.out.println(chart.getPlot())
         *  (3)使用API文档
         */
        CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
        //获取X轴对象
        CategoryAxis3D categoryAxis3D = (CategoryAxis3D)categoryPlot.getDomainAxis();
        //获取Y轴对象
        NumberAxis3D numberAxis3D = (NumberAxis3D) categoryPlot.getRangeAxis();
        //X轴外的乱码
        categoryAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //X轴上的乱码
        categoryAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴外的乱码
        numberAxis3D.setLabelFont(new Font("宋体", Font.BOLD, 15));
        //Y轴上的乱码
        numberAxis3D.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
        //设置Y轴上的刻度以1为单位
        numberAxis3D.setAutoTickUnitSelection(false);
        NumberTickUnit unit = new NumberTickUnit(1);
        numberAxis3D.setTickUnit(unit);

        //获取绘图区域对象
        BarRenderer3D barRenderer3D = (BarRenderer3D)categoryPlot.getRenderer();
        //让图形变得苗条点
        barRenderer3D.setMaximumBarWidth(0.08);

        //让在图形上生成数字
        barRenderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        barRenderer3D.setBaseItemLabelsVisible(true);
        barRenderer3D.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));

        //在项目中的chart的文件夹下生成图片
        //获取chart的文件夹
        String basePath = ServletActionContext.getServletContext().getRealPath("/chart");
        //文件名(日期)
        String filename = DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")+".png";
        File file = new File(basePath+"/"+filename);
        try {
            ChartUtilities.saveChartAsPNG(file, chart, 600, 500);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return filename;
    }

}

第六步:在userReport.jsp中加载:
这里写图片描述

3:FCF报表(FusionChartsFree报表)

整合过程,请见【技术资料\jfreechart\炫】中的《JFusionChart使用帮助手册.doc》

原理这里写图片描述:生成各种图形,主要靠XML格式的数据。

生成图形的XML数据:
这里写图片描述

所有开发FCF报表,就是组织xml数据。
Xml类型格这里写图片描述式的数据中的参数:详情请见

Xml数据的参数支持的类型:
这里写图片描述

4:项目实施流程说明书

合同控制
这里写图片描述

(以下步骤是客户方要进行的步骤!不作为开发方的研究范畴)

内部审核控制
不合格产品控制
纠正和预防措施控制
信息系统硬件集成控制
采购控制
第三方软件测试控制

需求开发过程(前期)
这里写图片描述

项目计划过程(同步需求)
这里写图片描述

项目设计过程(软件的核心)
这里写图片描述

项目实现过程(编码实现)
这里写图片描述

项目测试过程(软件的成败)
这里写图片描述

软件发布
这里写图片描述

项目实施过程
这里写图片描述

项目验收过程
这里写图片描述

(以下步骤是客户方要进行的步骤!不作为开发方的研究范畴)

需求管理过程
评审过程
项目监控过程
风险管理过程
配置管理过程
质量保证过程
度量分析过程
决策分析过程
过程改进过程
培训过程

5:技术点总结

基本信息
1:针对自己的基本情况去写
2:工作年限:可以虚拟(结合自己的年龄),上学的过程中可以参加工作了(2年以上)

自我评价
1:需求调研、需求分析、模块设计、系统设计、页面设计、模块开发的能力
2:有极强的团队合作能力和语言表达能力

教育及培训背景(请按时间倒序填写)
1:针对自己的基本情况去写

工作经历(请按时间倒序填写)
1:想好公司在哪,公司都做什么,我在公司担任的职位,都在这个公司做个什么项目,在公司工作的年限(至少1年)

项目经验(请按时间倒序填写)
1:项目功能介绍:

项目背景:
项目描述:简洁(先不要说技术,就说业务)
使用情况:

2:工作职责及技术亮点:

(1)使用了什么技术,在什么模块下,解决了什么问题(需求),增添什么样的效果?
    要求:用到的技术点的相关操作要知道,比如核心对象,比如操作什么功能!
(2)开发模块包括技术设施维护管理、站点管理、图书资料信息管理、审批流转、系统管理5个功能模块
    要求:不要写系统管理(放置最后写),多写项目业务的模块
(3)把学过的技术点灵活应用到每个业务模块下

6:附录:项目【技术资料】说明介绍

1:ajax校验
jquery的ajax相关用法:项目中用到了jquery的ajax以及jquery对象的相关用法
例如:jquery对象ajax的二级联动,jquery对象ajax的数据校验,jquery对象的相关用法

2:FCK文本编辑器
项目中文本编辑器在项目中的用法

3:JBPM
jbpm4.4工作流的相关技术操作
可根据视频进行学习,参考【技术资料\JBPM\视频】中的视频教程
JBPM的资料大全,附录在【技术资料\JBPM\资料】中,可以根据资料进行项目开发和学习
如果想整合项目,大家可以按照【技术资料\JBPM\配置整合】中的《帮助.doc》进行配置

4:jfreechart
jfreechart图形报表(柱状图,饼图,线状图),学习可以参考【技术资料\jfreechart\文档】

5:js浮动框
项目中开发中,右小角的浮动框提示,参考【\技术资料\js浮动框】中的《帮助.doc》

6:jxl导入

7:lucene
全文检索功能,项目中资料图纸管理模块的开发
学习可以参考【技术资料\lucene\视频】
系统可以按照【技术资料\lucene】中的《帮助.doc》进行配置

8:maven附加
使用maven开发项目
【技术资料\maven(附加)\电力项目(整合电力项目)】中的《帮助.doc》整合整个项目的jar包(pom.xml)
【技术资料\maven(附加)\ssh(整合SSH)】中的pom.xml只整合ssh

9:md5密码加密
【技术资料\md5密码加密】存放md5密码加密的java文件

10:poi报表
存放导出/导入excel报表的技术POI
导出文件在【技术资料\poi报表\java】中的ExcelFileGenerator.java
导入文件在【技术资料\poi报表\附加:使用poi报表完成excel文件的导入】中的GenerateSqlFromExcel.java,大家可参考《帮助.doc》的配置
附加iReport技术,在【技术资料\poi报表\ireport详解】中

11:spring企业开发调度器(quartz)
【技术资料\spring企业开发调度器(quartz)】中存放的时候类似定时器的功能,可以定时或者按照周期执行某个任务,可以参考《spring企业开发调度器.ppt》进行配置,
可以查看视频和源码,位置在【技术资料\spring企业开发调度器(quartz)\视频+源码】

12:svn(附加)
svn整合项目,配置可按照【技术资料\svn(附加)】中的《svn.doc》进行配置
学习可按照《svn课堂.doc》进行学习

13:webservice远程技术
webservice可以完成2个独立的系统调用数据,我们使用的技术是axis2
国家电力系统发布数据字典,其他分公司系统调用,可以参考【技术资料\webservice远程技术\axis的jar包】中的《axis发布webservice(使用eclipse的插件生成服务端和客户端.doc》
学习可以参考视频,位置在【技术资料\webservice远程技术\视频】中

14:ztree树型菜单
配置jquery的树型菜单,使用ztree插件

15:二级缓存
配置二级缓存,即查询缓存,解决系统频繁操作数据字典表,性能优化

16:分页
项目中使用ajax完成分页,即2个Form表单的数据交互

17:过滤器(实现粗颗粒权限控制)
过滤器完成粗颗粒的权限控制,可以按照【技术资料\过滤器(实现粗颗粒权限控制)】中的《过滤器实现粗颗粒权限控制  .doc》进行配置
如果项目中使用ajax处理session失效,可以参考【技术资料\过滤器(实现粗颗粒权限控制)\附加文档(ajax处理session失效)】中的《session失效,处理ajax请求.doc》

18:简易代码生成器
项目中可以根据创建的持久化类,自动生成Dao类,Service类,Action类以及类中的响应方法
可以参考【技术资料\简易代码生成器】中的《使用说明.txt》
也可以参考【技术资料\简易代码生成器\程序代码2\test】中的《帮助.txt》
附有视频可做调试【技术资料\简易代码生成器\使用视频】

19:角色(使用hibernate映射多对多的关系)
完全使用hibernate完成系统多对多的关联维护,即用户和角色多对多,角色和权限多对多
可以参考文件《创建表+初始化数据(多对多).txt》
内有源码可以进行调试

20:进度条
项目中实现进度条
【技术资料\进度条\进度条(不添加百分比)】,即进度条没有百分比,完全使用js控制,附有视频,可以按照《帮助.doc》进行调试
【技术资料\进度条\进度条(百分比)】,即进度条添加百分比,使用ajax配合js进行控制,附有视频,可以按照《帮助.doc》进行调试

21:屏蔽火狐等浏览器,限制用户使用IE浏览器,去除修改脚本的插件浏览器(附加)
【技术资料/屏蔽火狐等浏览器,限制用户使用IE浏览器,去除修改脚本的插件浏览器(附加)】中可以按照《帮助.doc》完成屏蔽浏览器的功能,保证系统使用指定的浏览器调试

22:项目如何处理异地登录(附加)
【技术资料/项目如何处理异地登录(附加)】处理的是异地登陆的操作,即一个用户只能在1台机器操作系统,如果再其它机器登录系统,则要踢掉之前的登录,大家可以参考【技术资料\项目如何处理异地登录(附加)】中《异地登录.doc》,附有视频可做参考

23:项目在oracle数据库的框架配置(附加)
项目框架开发,使用ssh+oracle数据库进行开发,附有开发的源码

24:验证码+记住我
【技术资料\验证码+记住我】添加验证码和记住我功能,可以参考《帮助.txt》进行操作

25:运行监控中保存长字符串时截取短字符串进行保存(附加)
解决运行监控使用FCK文本编辑器之后,使用截取字符串的方式存放长文本字段
可以参考【技术资料\运行监控中保存长字符串时截取短字符串进行保存(附加)】中的《帮助.doc》进行配置

26:自定义标签+struts2标签控制访问链接权限
项目中自定义标签的时候,使用权限控制按键和链接的隐藏和显示
可以参考【技术资料\自定义标签+struts2标签控制访问链接权限】中的《自定义标签(帮助).doc》

27:自定义拦截器(实现异常处理+细颗粒权限控制)
struts2的自定义拦截器实现异常处理+日志备份,可以参考【技术资料\自定义拦截器(实现异常处理+细颗粒权限控制)\异常处理】中的《struts2的拦截器实现异常处理.doc》,附有视频大家可以查看
struts2的自定义拦截器实现细颗粒的权限控制,可以参考【技术资料\自定义拦截器(实现异常处理+细颗粒权限控制)\细颗粒度权限控制】中的《struts2的拦截器实现细颗粒度权限控制.doc》

28:技术资料\自定义类型转换
自定义类型转换,增强struts2开发的优势,使用模型驱动的对象获取页面中传递的值,该值不仅可以是String类型,同时也可以是Date类型,Integer类型,Long类型,File类型,但是日期格式如果不符合要求,需要自己处理日期转换,可以参考【技术资料\自定义类型转换】中的《帮助.doc》进行配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值