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

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

1:Jfreechart报表

属于工厂模式:提供ChartFactory类,由ChartFactory类创建各种图形
day57_电力项目_图形报表&项目分析_第1张图片

(1)柱状图:

原理:
day57_电力项目_图形报表&项目分析_第2张图片

代码:

    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)线状图

原理:
day57_电力项目_图形报表&项目分析_第3张图片

代码:

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)饼图

原理:
day57_电力项目_图形报表&项目分析_第4张图片

代码:

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
项目中使用,能否在指定盘的文件夹下生成图片,在页面中使用标签加载图片

例如:在D盘生成一张图片,在页面上使用

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

整合项目的操作步骤:

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

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

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

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

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

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

public List 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 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 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中加载:
day57_电力项目_图形报表&项目分析_第5张图片

3:FCF报表(FusionChartsFree报表)

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

原理day57_电力项目_图形报表&项目分析_第6张图片:生成各种图形,主要靠XML格式的数据。

生成图形的XML数据:
day57_电力项目_图形报表&项目分析_第7张图片

所有开发FCF报表,就是组织xml数据。
Xml类型格day57_电力项目_图形报表&项目分析_第8张图片式的数据中的参数:详情请见

Xml数据的参数支持的类型:
day57_电力项目_图形报表&项目分析_第9张图片

4:项目实施流程说明书

合同控制
day57_电力项目_图形报表&项目分析_第10张图片

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

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

需求开发过程(前期)
day57_电力项目_图形报表&项目分析_第11张图片

项目计划过程(同步需求)
day57_电力项目_图形报表&项目分析_第12张图片

项目设计过程(软件的核心)
day57_电力项目_图形报表&项目分析_第13张图片

项目实现过程(编码实现)
day57_电力项目_图形报表&项目分析_第14张图片

项目测试过程(软件的成败)
day57_电力项目_图形报表&项目分析_第15张图片

软件发布
这里写图片描述

项目实施过程
day57_电力项目_图形报表&项目分析_第16张图片

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

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

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

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》进行配置

你可能感兴趣的:(黑马培训班)