精华内容
下载资源
问答
  • 学生成绩分析表 EXCEL 模板学生成绩分析表 EXCEL 模板
  • Excel公司绩效考核专项模板-学生成绩表(分析表
  • 中小学生期末考试成绩系统Excel模板中小学生期末考试成绩系统Excel模板中小学生期末考试成绩系统Excel模板中小学生期末考试成绩系统Excel模板中小学生期末考试成绩系统Excel模板中小学生期末考试成绩系统Excel模板中...
  • excel成绩分析模板

    2010-04-30 10:21:26
    好用的excel用于成绩分析模板,通过它可以对班级中学生成绩进行分析
  • Excel财务行政专项模板--学生成绩表
  • Excel公司绩效考核专项模板-学生成绩表
  • 学生成绩统计与分析,利用Excel制作,使用了数据透视
  • 自动统计人数、计算总分(平时成绩30%+期末成绩70%),按分数段统计各段人数及百分比,计算总平均分。
  • 只需要输入每个学生成绩和班级,就能自动计算平均分,每个分数段人数,及格人数,优生人数,还可以进行质量评估。
  • 在运行之前必须有两个电子,一个是学生成绩表,一个是班级情况,具体格式和源程序中的两个表格一致就行了, 班级数各科目数是可以更改的,但班级名称必须是从1开始不能间断(如701,702....),每一次可生成三个表格
  • Excel公司绩效考核专项模板-学生成绩报告单表格
  • 在进行数据分析之前,会有许多...而原始的学生成绩表如下:(excel文件,扩展名为xls,且不带宏,免得后期处理麻烦)  将各个成绩的xls文件,加到这个原始中,且要将成绩为0的行删掉,这样的目的是减少无效数...

        在进行数据分析之前,会有许多的成绩表,格式也颇为混乱,为了研究方便,可以将学生成绩统一到一张表上。我们用的学生各个时期的数据表格式如下图:

    且有许多的这样的表格,以便分析:

        

    而原始的学生成绩表如下:(excel文件,扩展名为xls,且不带宏,免得后期处理麻烦)

          将各个成绩的xls文件,加到这个原始表中,且要将成绩为0的行删掉,这样的目的是减少无效数据的干扰,另一种处理方式是取平均值,这里因为主要是针对个体数据进行分析,所以还是删掉。需要用到的库:numpy,pandas,xlwt,xlrd等。代码及解释如下:

    # -*- coding: utf-8 -*-
    import os
    import pandas as pd
    excelPath = '15李蕾成绩'   #构建所有文件路径,所有原始成绩文件均在这里
    theTablePath = '成绩测试李蕾15入学.xls'        #数据总表模板文件,所有数据都往这里添加
    name = '姓名'                     #以姓名为唯一标识(索引),这里其实最好是用学号,因为学号唯一,姓名可能不唯一
    
    def toAll(bigPath,smallPath,name):
    
        aTable = pd.DataFrame(pd.read_excel(bigPath))   #将数据总表模板 加载
        bTable = pd.DataFrame(pd.read_excel(smallPath,sheet_name=0)) #将要加入的小表格加载
        if name in bTable.columns:    #如果存在姓名列,再加入,因为mac下有可能有.DS文件
            print('存在列 姓名')
            result = pd.merge(aTable, bTable, on=[name], how='left')   #按着姓名对应的方式 将小表 加入 总表,但以总表为准
            result.dropna(axis=0, how='any', inplace=True) #值为0则删除行 axis=1则是删除列,any是只要有空值就删除,而all则是全部为空再删除,True是在原数据集上操作,False是返回新的数据集
            result.to_excel(theTablePath)      #将新的pandas数据集,返回为待分析的Excel文件
            print(aTable.shape)    #用于监控是否正常加入
            print(result.shape)
    
        return
    
    for filename in os.listdir(excelPath): #读取文件名称
        targetPath = excelPath + '/'+ filename #构造文件夹内每一个文件的绝对路径,mac下是/,win下注意是\
        print(targetPath)
        toAll(theTablePath,targetPath,name) #执行合并命令
    
    
    

            执行命令之后,最终得到的数据集,如下图所示:

            


            接下来,首先要明确现在主流的成绩分析方法,并归纳总结。然后指出其不科学或不实用不合理的地方,并加以分析。最后发表改进的分析方法,并阐明原理,和分析结果。将两种分析方法进行对比(表格),并阐明新的分析方法的合理性,最终得出翻转课堂对于学生成绩影响的结论。

    展开全文
  • 中小学学生成绩统计模板excel-vba
  • 学生成绩统计分析表

    千次阅读 2018-05-10 17:28:22
    <title> 学生单科成绩统计分析表 , initial-scale=1.0" name="viewport" /> <!-- BEGIN GLOBAL MANDATORY STYLES --> body { background: #fff !important; padding: 5px; ...


    <!DOCTYPE html>
    <!--[if IE 8]> <html lang="en" class="ie8 no-js"> <![endif]-->
    <!--[if IE 9]> <html lang="en" class="ie9 no-js"> <![endif]-->
    <!--[if !IE]><!-->
    <html lang="en" class="no-js">
        <!--<![endif]-->
        <!-- BEGIN HEAD -->
    
        <head>
            <meta charset="utf-8" />
            <title> 学生单科成绩统计分析表</title>
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta content="width=device-width, initial-scale=1.0" name="viewport" />
            <meta content="" name="description" />
            <meta content="" name="author" />
            <meta name="MobileOptimized" content="320">
    
            <!-- BEGIN GLOBAL MANDATORY STYLES -->
            <link rel="stylesheet" type="text/css" href="../../../assets/plugins/font-awesome/css/font-awesome.min.css" />
            <link rel="stylesheet" type="text/css" href="../../../assets/plugins/bootstrap/css/bootstrap.min.css" />
            <link rel="stylesheet" type="text/css" href="../../../assets/plugins/data-tables/dataTables.bootstrap.css" />
            <link rel="stylesheet" type="text/css" href="../../../assets/plugins/data-tables/css/fixedHeader.bootstrap.min.css" />
    
            <link rel="stylesheet" type="text/css" href="../../../assets/css/report.css" />
            <link rel="stylesheet" type="text/css" href="../../../assets/css/report_udr.css" />
        </head>
        <style>
            body {
                background: #fff !important;
                padding: 5px;
                overflow-x: hidden;
            }
    
            .search input{
                width:50px;
            }
            .search2 input{
                width:70px;
            }         
            .red{
                color:red;
            }  
            .green{
                color:green;
            }
            .table{
                text-align: center;
            }
            .search{
                margin-bottom: 20px;
            }
            .wrong{
                position: absolute;
                top:226px;
                left:360px;
                display: none;
            }
            .form-control{
                width:120px;
                display: inline-block;
            }
            th{
                white-space: nowrap;
                vertical-align: middle !important;
            }   
            .btn{
                margin-left: 20px;
            }      
             
    
        </style>
    
        <body>
            <div class="rpt_header">
                <h4 class="rpt_title"></h4>
                <h4 class="rpt_title_ext"></h4>
            </div>           
            <div class="page-container">
                <div class="search">
                    <p class="range" style="text-align:center;font-size:18px;padding-top:10px;"></p>
                         请选择学科 : 
                    <select class="select form-control">
                        <option selected value="1">语文</option>
                        <option value="2">数学</option>
                        <option value="3">英语</option>
                        <option value="4">物理</option>
                        <option value="5">化学</option>
                        <option value="6">历史</option>
                        <option value="7">地理</option>
                        <option value="8">政治</option>
                        <option value="9">生物</option>
                    </select> 
                          请选择试卷类别 : 
                      <select class="select1 form-control">
                        <option selected value="0">全卷</option>
                        <option value="1">A卷</option>
                        <option value="2">B卷</option>
                    </select>                    
                    <div class="wrong"><span style="padding:20px;color:#999;font-size:30px;">没有检索到数据.</span></div>
                </div>
                <div class="search2" style="margin-top: 10px;">
                   	     高线 : <input type="text" class="high form-control"/>
                   	   中线 : <input type="text" class="mid form-control"/>
                    <button type="button" class="btn btn-primary" style="margin-left: 30px">查询</button>
                </div>
              
                <div class="page-content" style="margin-left: 0px;">
                    <div class="rpt_chart" id="rptChart"></div>
                    <table class="table table-striped table-bordered table-hover rpt_table" align='center'>
                    </table>
                </div>
            </div>
            <script type="text/javascript" src="../../../assets/lib/jquery-3.0.0.min.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/backbone/underscore.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/backbone/backbone.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/jquery.cookie.min.js"></script>
    
            <script type="text/javascript" src="../../../assets/plugins/data-tables/jquery.dataTables.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/data-tables/dataTables.bootstrap.min.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/data-tables/dataTables.fixedHeader.min.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/bootstrap/js/bootstrap.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/purl.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/pace/pace.min.js"></script>
            <script type="text/javascript" src="../../../assets/plugins/echart/echarts-all.js"></script>
    
            <script type="text/javascript" src="../../../assets/lib/zxt.js"></script>
            <script type="text/javascript" src="../../../assets/scripts/app.js"></script>
    		<script type="text/javascript" src="../../../assets/scripts/app_udr.js"></script>
            <script id="rpt_table" type="text/template">
                <thead>
                    <tr>
                        <th rowspan="2">学校</th>
                        <th rowspan="2">参考人数</th>
                        <th rowspan="1" colspan="2" style="text-align:center">优秀(80%)</th>
                        <th rowspan="1" colspan="2" style="text-align:center">及格(60%)</th> 
    					<th rowspan="1" colspan="2" style="text-align:center">学困(40%)</th> 
    					<th rowspan="1" colspan="2" style="text-align:center">高线(<%=data[0].highScore%>)</th> 
    					<th rowspan="1" colspan="2" style="text-align:center">中线(<%=data[0].midScore%>)</th> 
                    </tr>
    				<tr>
    					<th>人数</th>
    					<th>比例</th>
    					<th>人数</th>
    					<th>比例</th>
    					<th>人数</th>
    					<th>比例</th>
    					<th>人数</th>
    					<th>比例</th>
    					<th>人数</th>
    					<th>比例</th
    				</tr>
                </thead>
                <tbody>
                    <%_.each(data[0].data, function(d){%>
                    <tr>
                        <%for(var i=0;i<d.length;i++){%>
                            <%if(i==0){%>
                                <th><%=d[i]%></th>
                            <%}else{%>
    							<% if(i > 1 && i % 2 == 1 && d[i] != ""){%>
    								<th style="text-align:right;"><%=(d[i]*100).toFixed(2) + '%'%></th>
    							<%}else{%>
                               	 	<th style="text-align:right;"><%=d[i]%></th>
    							<%}%>
                            <%}%>
                        <%}%>
                    </tr>
                    <%})%>
                </tbody>
            </script>
    
            <script>
                jQuery(document).ready(function() {
                    var xkId = $('body', window.parent.document).attr('xkId');
                    if( xkId != undefined && xkId != null && xkId.length!=0){
                        $(".select").attr('disabled','true');
                        $(".select option[value='"+xkId+"']").attr('selected',true);
                    }
                    var exam = appUtils.getExamInfo(); 
                    var totalScore;
                    function getTotalScore(){
                        ZX.getDataByAjax(
                            "../../../rpt/single/rpt2008/tbl/"+exam.uid+"/"+exam.examId+"/"+$(".select").val(),
                            'json',
                            function(res){
                                $('.wrong').css('display','none');
                                $(".btn").removeAttr('disabled');
                                totalScore = res[0].paperScore;
                                $(".range").html('').html('自定义分数档 /分 (0 - '+totalScore+'): ');
                                
                            },
                            function(){
                                //判断dom节点是否被datatable了
                                if ($.fn.DataTable.isDataTable($('.rpt_table'))) { 
                                    //构建datatable的dom对象进行销毁
                                    $('.rpt_table').DataTable().destroy(true); 
                                    //销毁后 dom也会一并销毁,此处需要还原dom节点
                                    $('.page-content').append('<table class="table table-striped table-bordered table-hover rpt_table" align="center"></table>'); 
                                }                                 
                                $('.wrong').css('display','block');
                                $(".range").html('未查到该考试的分数信息');
                                $(".btn").attr('disabled',true);
                                $.zxtloading.close();
                            }
                        ); 
                    }   
                    getTotalScore(); 
    
                    
    
                    var url = "";
                    var xkId = $(".select").val();
                    $(".select").change(function(){
                    	var high = $(".high").val().trim(); 
                    	var mid = $(".mid").val().trim();
                    	if (high == '' || mid == ''){
                    		alert("不能有空值!");
                    	}else{
                            if(isNaN(high)){
                                alert("高线请输入数字!");
                            }else if(isNaN(mid)){
                            	alert("中线请输入数字!");
                            }
                            else if(parseFloat(high)<0 || parseFloat(high)>totalScore){
                                alert("高线超出分数范围!");
                            }else if(parseFloat(mid)<0 || parseFloat(mid)>totalScore){
                            	alert("中线超出分数范围!");
                            }
                            else{
                                high = parseFloat(parseFloat($(".high").val().trim()).toFixed(2));
                                $(".high").val(high);
                                mid = parseFloat(parseFloat($(".mid").val().trim()).toFixed(2));
                                $(".mid").val(mid);
                                var xkId = $(".select").val();
                                var section = $(".select1").val();
                                url = "../../../rpt/single/rpt2039/tbl/"+exam.uid+"/"+exam.examId+"/"+xkId+"/"+high+"/"+mid+"/"+section;
                                RptController.renderRptTable();
                                getTotalScore(); 
                            }
                   		 }   
                    });
                    
                    $(".select1").change(function(){
                    	var high = $(".high").val().trim(); 
                    	var mid = $(".mid").val().trim();
                    	if (high == '' || mid == ''){
                    		alert("不能有空值!");
                    	}else{
                            if(isNaN(high)){
                                alert("高线请输入数字!");
                            }else if(isNaN(mid)){
                            	alert("中线请输入数字!");
                            }
                            else if(parseFloat(high)<0 || parseFloat(high)>totalScore){
                                alert("高线超出分数范围!");
                            }else if(parseFloat(mid)<0 || parseFloat(mid)>totalScore){
                            	alert("中线超出分数范围!");
                            }
                            else{
                                high = parseFloat(parseFloat($(".high").val().trim()).toFixed(2));
                                $(".high").val(high);
                                mid = parseFloat(parseFloat($(".mid").val().trim()).toFixed(2));
                                $(".mid").val(mid);
                                var xkId = $(".select").val();
                                var section = $(".select1").val();
                                url = "../../../rpt/single/rpt2039/tbl/"+exam.uid+"/"+exam.examId+"/"+xkId+"/"+high+"/"+mid+"/"+section;
                                RptController.renderRptTable();
                                getTotalScore(); 
                            }
                   		 }  
                    });
                    
                    $(".btn").click(function(){
                                var high = $(".high").val().trim(); 
                            	var mid = $(".mid").val().trim();
                            	if (high == '' || mid == ''){
                            		alert("不能有空值!");
                            	}else{
                                    if(isNaN(high)){
                                        alert("高线请输入数字!");
                                    }else if(isNaN(mid)){
                                    	alert("中线请输入数字!");
                                    }
                                    else if(parseFloat(high)<0 || parseFloat(high)>totalScore){
                                        alert("高线超出分数范围!");
                                    }else if(parseFloat(mid)<0 || parseFloat(mid)>totalScore){
                                    	alert("中线超出分数范围!");
                                    }
                                    else{
                                        high = parseFloat(parseFloat($(".high").val().trim()).toFixed(2));
                                        $(".high").val(high);
                                        mid = parseFloat(parseFloat($(".mid").val().trim()).toFixed(2));
                                        $(".mid").val(mid);
    		                            var xkId = $(".select").val();
    		                            var section = $(".select1").val();
    		                            url = "../../../rpt/single/rpt2039/tbl/"+exam.uid+"/"+exam.examId+"/"+xkId+"/"+high+"/"+mid+"/"+section;
    		                            RptController.renderRptTable();
    		                            getTotalScore(); 
                                    }
                            }  
                    });                
                    var RptController = function() {
    
                        var renderRptTable = function() { 
                            //获取数据
                            $('.wrong').css('display','none');       
                            ZX.getDataByAjax(
                                url,
                                'json',
                                function(res){
                                    if(res.length==1 && _.isEmpty(res[0]) || res==null || res==undefined || res.length==0){
                                    //判断dom节点是否被datatable了
                                    if ($.fn.DataTable.isDataTable($('.rpt_table'))) { 
                                        //构建datatable的dom对象进行销毁
                                        $('.rpt_table').DataTable().destroy(true); 
                                        //销毁后 dom也会一并销毁,此处需要还原dom节点
                                        $('.page-content').append('<table class="table table-striped table-bordered table-hover rpt_table" align="center"></table>'); 
                                    }
                                    $('.wrong').css('display','block');                                 
                                        $.zxtloading.close();
                                    }else{
                                        var data = {};
                                        data["data"] = res;
                                        var high = $(".high").val().trim(); 
                                    	var mid = $(".mid").val().trim();
                                    	var section = $(".select1").val();
                                        //判断dom节点是否被datatable了
                                        if ($.fn.DataTable.isDataTable($('.rpt_table'))) { 
                                            //构建datatable的dom对象进行销毁
                                            $('.rpt_table').DataTable().destroy(true); 
                                            //销毁后 dom也会一并销毁,此处需要还原dom节点
                                            $('.page-content').append('<table class="table table-striped table-bordered table-hover rpt_table" align="center"></table>'); 
                                        }
                                                                          
                                        var xkId = $(".select").val(); 
                                        $('.rpt_table').zxtable({
                                            //url: url,
                                            data: data,
                                            template: '#rpt_table',
                                            exportURL: '../../../rpt/single/rpt2039/export/'+exam.uid+'/'+exam.examId+'/'+exam.examName+'/'+exam.yearIn+'/'+xkId+'/'+high+'/'+mid+'/'+section,
    
                                            needDataTable: true,
                                            renderTbody:false,
                                            orderby: [[ 0, "asc" ]], 
                                            fixedHeader: true,
    
                                            callBack: function(){
                                                $.zxtloading.close();
                                            }
                                        });                                    
                                    }                                
                                    
                                },
                                function(){
                                    //判断dom节点是否被datatable了
                                    if ($.fn.DataTable.isDataTable($('.rpt_table'))) { 
                                        //构建datatable的dom对象进行销毁
                                        $('.rpt_table').DataTable().destroy(true); 
                                        //销毁后 dom也会一并销毁,此处需要还原dom节点
                                        $('.page-content').append('<table class="table table-striped table-bordered table-hover rpt_table" align="center"></table>'); 
                                    }                                 
                                    $('.wrong').css('display','block');
                                    $.zxtloading.close();
                                }
                            );
                        };
                        return {
                            renderRptTable: function() {
                                renderRptTable();
                            }
                        }
                    }();
                    var initView = function() {
                        return {
                            init: function() {
                                $.cookie.json = true;
                                //启动加载进度条
                                if( exam.uid == undefined){
                                    alert("参数非法.");
                                    $.zxtloading.close();
                                    return false;
                                }
                                if( exam.examId == undefined){
                                    alert("请先选择考试.");
                                    $.zxtloading.close();
                                    return false;
                                }
                                Pace.start();
                            }
                        }
                    }();
                    initView.init();
    
                });
    
            </script>
            <!-- END JAVASCRIPTS -->
        </body>
        <!-- END BODY -->
    
    </html>


    package cn.doofen.udr.controller.single;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import cn.doofen.udr.UDRBaseConst;
    import cn.doofen.udr.bo.single.ISingleBo;
    import cn.doofen.udr.bo.single.impl.Rpt2039Bo;
    import cn.doofen.udr.controller.SingleController;
    import cn.doofen.udr.controller.UDRBaseParam;
    import cn.doofen.udr.utils.Unit2Utils;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * 
     * @Package cn.doofen.udr.controller.multi
     * @ClassName: Rpt2039Controller
     * @Description: 学生单科成绩统计分析表
     * @author fyq
     * @date 2018年05月04日
     * 
     */
    
    @Controller
    @RequestMapping("/rpt/single/rpt2039")
    public class Rpt2039Controller extends SingleController {
    
    	private static ISingleBo bo = new Rpt2039Bo();
    
    	/**
    	 * 
    	 * @Title: rpt2039_tble
    	 * @Description: 获取报表列表数据
    	 * @param uid
    	 * @param examId
    	 * @param yearIn
    	 * @return 参数
    	 * @return JSONObject
    	 * @throws
    	 */
    	@RequestMapping(value = "/tbl/{orgId}/{examId}/{xkId}/{high}/{mid}/{section}", method = RequestMethod.GET)
    	@ResponseBody
    	public JSONObject rpt2035_tble(@PathVariable(value = "orgId") Long orgId,
    			@PathVariable(value = "examId") Long examId,
    			@PathVariable(value = "high") Double high,
    			@PathVariable(value = "mid") Double mid,
    			@PathVariable(value = "section") Integer section,
    			@PathVariable(value = "xkId") Integer xkId) {
    		try {
    			UDRBaseParam param = new UDRBaseParam();
    			param.setExamId(examId);
    			param.setOrgId(orgId);
    			param.setXkId(xkId);
    			param.setHigh(high);
    			param.setMid(mid);
    			param.setSection(section);
    			JSONArray rjarr = loadTblData(param);
    
    			return getSuccessResult(rjarr);
    		} catch (Exception e) {
    			return getErrorResult("");
    		}
    	}
    
    
    
    	/**
    	 * 
    	 * @Title: exportExcel
    	 * @Description: 导出excel
    	 * @param request
    	 * @param response
    	 * @param uid
    	 * @param examName
    	 * @param examId
    	 * @param yearIn
    	 *            参数
    	 * @return void
    	 * @throws
    	 */
    	@RequestMapping(value = "/export/{orgId}/{examId}/{examName}/{yearIn}/{xkId}/{high}/{mid}/{section}", method = RequestMethod.GET)
    	@ResponseBody
    	public void exportExcel(HttpServletRequest request,
    			HttpServletResponse response,
    			@PathVariable(value = "orgId") Long orgId,
    			@PathVariable(value = "examName") String examName,
    			@PathVariable(value = "examId") Long examId,
    			@PathVariable(value = "yearIn") Integer yearIn,
    			@PathVariable(value = "high") Double high,
    			@PathVariable(value = "mid") Double mid,
    			@PathVariable(value = "section") Integer section,
    			@PathVariable(value = "xkId") Integer xkId) {
    
    		try {
    			// 注意协议头有字节数限制,所以fileName不能超长
    			Unit2Utils u2u = new Unit2Utils();
    			String xkName = u2u.excelXKChange(xkId);
    			String secName = "";
    			if(section == 0){
    				secName = "全卷";
    			}else if (section == 1){
    				secName = "A卷";
    			}else if (section == 2){
    				secName = "B卷";
    			}
    			String fileName = getExcelName(request, UDRBaseConst.RPT_2035_NAME+"_"+xkName+"("+secName+")"+"_"+examName);
    
    			response.reset();
    			response.setContentType("application/vnd.ms-excel"); // 改成输出excel文件
    			response.setHeader("Content-disposition", "attachment; filename="
    					+ fileName);
    
    			UDRBaseParam param = new UDRBaseParam();
    			param.setExamId(examId);
    			param.setOrgId(orgId);
    			param.setYearIn(yearIn);
    			param.setXkId(xkId);
    			param.setExamName(examName);
    			param.setXkName(xkName);
    			param.setHigh(high);
    			param.setMid(mid);
    			param.setSection(section);
    			exportExcel(request, response, param);
    
    		} catch (Exception e) {
    			logger.warn(e.getMessage());
    		}
    	}
    
    	/**
    	 * 
    	 * @Title: loadTblData
    	 * @Description: 获取页面table数据
    	 * @param param
    	 *            参数
    	 * @return 参数
    	 * @return JSONObject
    	 * @throws
    	 */
    	protected JSONArray loadTblData(UDRBaseParam param) throws Exception {
    		if (param.getOrgId() != null && param.getExamId() != null
    				&& param.getXkId() != null) {
    			return bo.loadTblData(param);
    		}
    
    		return null;
    	}
    
    	/**
    	 * 
    	 * @Title: loadChartData
    	 * @Description: 获取页面chart的数据
    	 * @param param
    	 * @return 参数
    	 * @return JSONObject
    	 * @throws
    	 */
    	protected JSONArray loadChartData(UDRBaseParam param) throws Exception {
    		if (param.getOrgId() != null && param.getExamId() != null
    				&& param.getXkId() != null) {
    			return bo.loadChartData(param);
    		}
    		return null;
    	}
    
    	/**
    	 * 
    	 * @Title: exportExcel
    	 * @Description: 导出Excel
    	 * @param param
    	 * @return 参数
    	 * @return void
    	 * @throws
    	 */
    	protected void exportExcel(HttpServletRequest request,
    			HttpServletResponse response, UDRBaseParam param) throws Exception {
    		if (param.getOrgId() != null && param.getExamId() != null
    				&& param.getExamName() != null && param.getYearIn() != null
    				&& param.getXkId() != null && param.getXkName()!=null) {
    			bo.exportExcel(request, response, param);
    		}
    
    	}
    }
    


    package cn.doofen.udr.bo.single.impl;
    
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.ss.util.CellRangeAddress;
    
    import cn.doofen.udr.UDRBaseConfig;
    import cn.doofen.udr.UDRBaseConst;
    import cn.doofen.udr.bo.single.ISingleBo;
    import cn.doofen.udr.controller.UDRBaseParam;
    import cn.doofen.udr.utils.Unit2Utils;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.zxt.framework.export.RptExcelDomain;
    import com.zxt.framework.utils.PropertiesConfigUtils;
    
    /**
     * 
     * @Package cn.doofen.udr.bo.multi.impl
     * @ClassName: Rpt2035Bo
     * @Description: rpt2035的业务接口 学校分类的单学科总体分析
     * @author Zed
     * @date 2016年11月29日
     * 
     */
    public class Rpt2039Bo extends SingleBoImpl implements ISingleBo {
    
    	private static final String DSI_EXT_RPT_TBL_2039 = PropertiesConfigUtils
    			.getString("dsi.ext.rpt.tbl.2039");
    
    	
    	private static final String logo = PropertiesConfigUtils
    			.getString("logo");	
    
    	/**
    	 * 
    	 * @Title: loadTblData
    	 * @Description: 获取页面table数据
    	 * @param param
    	 *            参数
    	 * @return 参数
    	 * @return JSONArray
    	 * @throws
    	 */
    	public JSONArray loadTblData(UDRBaseParam param) throws Exception {
    		JSONObject uparam = new JSONObject();
    		uparam.put("xkId", param.getXkId());
    		uparam.put("orgId", param.getOrgId());
    		uparam.put("examId", param.getExamId());
    		uparam.put("high", param.getHigh());
    		uparam.put("mid", param.getMid());
    		uparam.put("section", param.getSection());
    		JSONArray resJarr = null;
    		if (UDRBaseConfig.SYS_DEBUG) {
    			Unit2Utils u2u = new Unit2Utils();
    			resJarr = u2u.getTestJSONArray("TestJSONArray1035.txt");
    
    		} else {
    			String url = getHttpDSIRestUri4Report(DSI_EXT_RPT_TBL_2039);
    			JSONObject rjo = httpRestGet(url, uparam.toString(), null);
    			if (rjo != null && !rjo.isEmpty()
    					&& rjo.getBooleanValue("success") == true) {
    				JSONObject job = rjo.getJSONObject("data");
    				resJarr = new JSONArray();
    				resJarr.add(job);
    			} else if (rjo != null && !rjo.isEmpty()) {
    				throw new Exception("Load chart data failed, beacause : "
    						+ rjo.getString("error"));
    			} else {
    				throw new Exception(
    						"Load chart data failed, beacause dsi response is null.");
    			}
    		}
    		return resJarr;
    	}
    
    	/**
    	 * 
    	 * @Title: loadChartData
    	 * @Description: 获取页面chart的数据
    	 * @param param
    	 * @return 参数
    	 * @return JSONOArray
    	 * @throws
    	 */
    	public JSONArray loadChartData(UDRBaseParam param) throws Exception {
    		return null;
    	}
    
    	/**
    	 * 
    	 * @Title: exportExcel
    	 * @Description: 导出Excel
    	 * @param param
    	 * @return 参数
    	 * @return void
    	 * @throws
    	 */
    	public void exportExcel(HttpServletRequest request,
    			HttpServletResponse response, UDRBaseParam param) throws Exception {
    			//输出表格的头部名称
    				Unit2Utils unit2=new Unit2Utils();
    				String xkName=unit2.excelXKChange(param.getXkId());
    				int sec = param.getSection();
    				String secName = null;
    				if(sec == 0){
    					secName = "全卷";
    				}else if (sec == 1){
    					secName = "A卷";
    				}else if (sec == 2){
    					secName = "B卷";
    				}
    				String title = UDRBaseConst.RPT_2039_NAME ;
    				String logo=PropertiesConfigUtils.getString("logo")+SHEET_TITLE;
    				OutputStream os = null;
    				try{
    				os = response.getOutputStream();
    				//获取数据
    				JSONObject jo =loadTblData(param).getJSONObject(0);
    				RptExcelDomain rptDo = new RptExcelDomain();
    				rptDo.setSheetName( logo+title);
    				rptDo.setSheetTitle( logo+title+","+xkName+"("+secName+")");
    				//所有数据的JSONArray
    				JSONArray ja = new JSONArray();
    				ja.add( jo);
    				rptDo.setSheetData( ja);
    				List<RptExcelDomain> sheets = new ArrayList<RptExcelDomain>();
    				sheets.add( rptDo);
    				setSheets( sheets);
    				//写入数据
    				writeExcel(os,true);
    
    		} catch (Exception e) {
    			throw new Exception("Export Excel failed, beacause"
    					+ e.getMessage());
    		} finally {
    			os.close();
    		}
    	}
    	
    	/**
    	 * 重载excel创建
    	 *
    	 */
    	protected void writeExcelSheetSelf( RptExcelDomain rptDomain){
    		// 创建Excel的工作sheet,对应到一个excel文档的tab
    		HSSFSheet sheet = wb.createSheet( rptDomain.getSheetName());
    		// 设置excel每列宽度
    		sheet.setColumnWidth(0, 6000);
    		sheet.setColumnWidth(1, 2500);
    		// 创建Excel的sheet的一行
    		HSSFRow row =null;
    		String[] titleDefault = {"学校", "参考人数"}; 
    		String[] headers = {"人数", "比例"};
    		/*---------------------------------------
    		 * 创建sheet的数据
    		 *--------------------------------------*/
    		JSONArray datas = rptDomain.getSheetData();
    		Object[] titles = datas.getJSONObject(0).getJSONArray( "head").toArray();
    		Integer xkMerg =  (titles.length-titleDefault.length)*headers.length;
    		JSONArray rowDatas = datas.getJSONObject(0).getJSONArray( "data");
    		//装第一行的表头数据
    		JSONArray ja=new JSONArray();
    		ja.add("学校");
    		ja.add("参考人数");
    		for(int i=titleDefault.length;i<titles.length;i++){
    			String schName=datas.getJSONObject(0).getJSONArray( "head").getJSONObject(i).getString("itemName");
    			ja.add(schName);
    		}
    	    titles=ja.toArray();
    	    //拿出副标题和主标题
    	    String str=rptDomain.getSheetTitle();
    	    String [] strs=new String[2];
    	    strs=str.split(",");
    	    String head1=strs[0];
    	    String head2=strs[1];
    
    		// 创建Excel的sheet的一行
    		row = sheet.createRow(0);
    		row.setHeight((short) rptDomain.getSheetTitleHeight());// 设定行的高度
    		// 创建一个Excel的单元格
    		HSSFCell cell_title = row.createCell(0);
    		// 合并单元格(startRow,endRow,startColumn,endColumn)
    		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, xkMerg+titleDefault.length-1));
    		// 给Excel的单元格设置样式和赋值
    		cell_title.setCellStyle( this.getStyleTitle());
    		cell_title.setCellValue( head1);
    		
    		 
    		//副标题
    		row = sheet.createRow(1);
    		// 创建一个Excel的单元格
    		HSSFCell cell_title1 = row.createCell(0);
    		sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, xkMerg+titleDefault.length-1));
    		//给单元格设置样式和赋值
    		cell_title1.setCellType(HSSFCellStyle.ALIGN_LEFT);
    		
    		cell_title1.setCellValue(head2);
    		//构建表头
    		//第一行
    		HSSFCellStyle headerStyle = this.getStyleHeader();
    		row = sheet.createRow(2);
    		HSSFCell cell_header = null;
    		for( int i = 0; i <titleDefault.length; i++ ){
    			cell_header = row.createCell( i );
    			sheet.addMergedRegion(new CellRangeAddress( 2, 3, i,i));
    			cell_header.setCellStyle( headerStyle);
    			cell_header.setCellValue( titleDefault[i]);
    		}
    		int startHcl = titleDefault.length;
    		for( int i = 2; i < titles.length; i++){
    			cell_header = row.createCell(  startHcl );
    			sheet.addMergedRegion(new CellRangeAddress( 2, 2,  startHcl, startHcl+headers.length-1 ));
    			cell_header.setCellStyle( headerStyle);
    			cell_header.setCellValue((String)titles[i]);
    			startHcl = startHcl + headers.length;
    		}
    		//第二行
    		row = sheet.createRow(3);
    		int startCol = titleDefault.length;
    		for( int i = 2; i < titles.length; i++){
    			for( int j = 0; j < headers.length; j++){
    				cell_header = row.createCell(  startCol );
    				cell_header.setCellStyle( headerStyle);
    				cell_header.setCellValue( (String)headers[j]);
    				startCol = startCol + 1;
    			}
    		}
    		int startRow = 3;
    		//构建独立表的数据
    		for( int d =0; d <rowDatas.size(); d++ ){
    			startRow = startRow + 1;
    			row = sheet.createRow( startRow );
    			JSONArray _cellDatas = rowDatas.getJSONArray(d);
    			HSSFCell cell_Data = null;
    			for(int j = 0; j < _cellDatas.size(); j++){
    				cell_Data = row.createCell(j);
    				if(j > 1 && j % 2 == 1 && !_cellDatas.getString(j).equals("")){
    					cell_Data.setCellValue(String.format("%.2f",_cellDatas.getDouble(j)*100)+"%");
    				}else{
    					cell_Data.setCellValue(_cellDatas.getString(j));
    				}
    			}
    
    		}
    	}
    }
    
    package cn.doofen.dsi.core.bo.org.impl.or;
    
    import cn.doofen.dsi.core.bo.BOException;
    import cn.doofen.dsi.core.bo.DsiBOImpl;
    import cn.doofen.dsi.core.bo.check.BaseCheck;
    import cn.doofen.dsi.core.bo.org.ior.IOrgRpt0028;
    import cn.doofen.dsi.core.ctrl.pub.data.DataErrorCode;
    import cn.doofen.dsi.core.eao.BxoEAO;
    import cn.doofen.dsi.core.eao.BxoEAOImpl;
    import cn.doofen.dsi.core.eao.CicadaEAO;
    import cn.doofen.dsi.core.eao.CicadaEAOImpl;
    import cn.doofen.dsi.core.eao.OrgEAO;
    import cn.doofen.dsi.core.eao.OrgEAOImpl;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.doofen.dict.core.bbo.dto.BBOOrg;
    import com.doofen.dict.core.beo.dto.BEOExam;
    
    /**
     * 
     * @Package cn.doofen.dsi.core.bo.org.impl.or
     * @ClassName: OrgRpt0028Impl
     * @Description: 获取报表单科/全科学校分类分析
     * @author fyq
     * @date 2018年05月03日
     * 
     */
    public class OrgRpt0028Impl extends DsiBOImpl implements IOrgRpt0028 {
    
        @Override
        /**
         * 
         * @Title: get
         * @Description: 获取报表  学校分类单科/全科分析
         * @param orgId
         * @param examId
         * @param xkId
         * @return {"width":11,head:[],data:[[],..]}
         * @throws Exception    参数
         * @return JSONObject
         * @throws
         */
        public JSONObject get(Long orgId, Double high, Double mid, Long examId, Integer xkId, Integer section) throws Exception {
            BaseCheck checkH = new BaseCheck();
            // 获取基础数据
            BBOOrg org = checkH.checkOrg(orgId);
            BEOExam exam = checkH.checkExamOrg(examId, orgId);
            if (xkId == 0) {
    
            } else {
                checkH.checkExamPaper(examId, xkId);
            }
    
            // 获取index
            String index = getOrgIndex(exam.getExamDate());
    
            // 获取数据
            return getData(index, org, exam, xkId, high, mid,section);
        }
    
        /**
         * 
         * @Title: getData
         * @Description: 获取具体数据
         * @param index
         * @param orgId
         * @param exam
         * @param xkId
         * @return {"width":11,"head":[],"data":[..],..}
         * @throws Exception
         *             参数
         * @return JSONObject
         * @throws
         */
        private JSONObject getData(String index, BBOOrg org, BEOExam exam, Integer xkId, Double high, Double mid, Integer section) throws Exception {
            JSONObject jo = new JSONObject();
            OrgEAO eao = new OrgEAOImpl(index);
            Long examId = exam.getExamId();
            Long orgId = org.getOrgId();
            JSONObject Data = new JSONObject();
            if (xkId.intValue() == 0) {
                Data = eao.getStatOrgScoreMix(orgId, examId);
            } else {
                Data = eao.getStatOrgScore(orgId, examId, xkId);
            }
            if ((Data == null) || (Data.isEmpty())) {
                throw new BOException(DataErrorCode.ECODE_DATA_LACK, "考试(" + examId + ")" + "机构分析数据没有找到");
            }
            JSONArray examSches = Data.getJSONArray("examSches");
    
            JSONObject schInfo = getSchIds(examSches);
            JSONArray datas = pre_data(schInfo, xkId, exam, examId, eao, orgId, high, mid, section);
    
            JSONArray head = new JSONArray();
            head.add("学校");
            head.add("参考人数");
          	JSONObject headContent = new JSONObject();
          	headContent.put("itemName", "优秀");
          	headContent.put("subNum", 2);
          	JSONArray subHead = new JSONArray();
          	subHead.add("人数");
          	subHead.add("比例");
          	headContent.put("subHead", subHead);
          	head.add(headContent);
          	headContent = new JSONObject();
          	headContent.put("itemName", "及格");
          	headContent.put("subNum", 2);
          	subHead = new JSONArray();
          	subHead.add("人数");
          	subHead.add("比例");
          	headContent.put("subHead", subHead);
          	head.add(headContent);
          	headContent = new JSONObject();
          	headContent.put("itemName", "学困");
          	headContent.put("subNum", 2);
          	subHead = new JSONArray();
          	subHead.add("人数");
          	subHead.add("比例");
          	headContent.put("subHead", subHead);
          	head.add(headContent);
          	headContent = new JSONObject();
          	headContent.put("itemName", "高线("+high+")");
          	headContent.put("subNum", 2);
          	subHead = new JSONArray();
          	subHead.add("人数");
          	subHead.add("比例");
          	headContent.put("subHead", subHead);
          	head.add(headContent);
          	headContent = new JSONObject();
          	headContent.put("itemName", "中线("+mid+")");
          	headContent.put("subNum", 2);
          	subHead = new JSONArray();
          	subHead.add("人数");
          	subHead.add("比例");
          	headContent.put("subHead", subHead);
          	head.add(headContent);
    
            jo.put("head", head);
            jo.put("data", datas);
            jo.put("highScore", high);
            jo.put("midScore", mid);
            return jo;
        }
    
        /**
         * 
         * @Title: getSchIds
         * @Description:获取参加考试的学校id
         * @param examSches
         * @return 参数
         * @return {schIds:[],shName:[]}
         * @throws
         */
        private JSONObject getSchIds(JSONArray examSches) {
            JSONObject jo = new JSONObject();
            Long[] schIds = new Long[examSches.size()];
            String[] schNames = new String[examSches.size()];
            for (int i = 0; i < examSches.size(); i++) {
                JSONObject sch = examSches.getJSONObject(i);
                schIds[i] = sch.getLong("schId");
                schNames[i] = sch.getString("schName");
            }
            jo.put("schIds", schIds);
            jo.put("schNames", schNames);
            return jo;
        }
    
        /**
         * @throws Exception
         * 
         * @Title: pre_data
         * @Description: 拿每一个学校的数据
         * @param schInfo
         * @return 参数
         * @return JSONArray
         * @throws
         */
        private JSONArray pre_data(JSONObject schInfo, Integer xkId, BEOExam exam, Long examId, OrgEAO eao,  Long orgId, Double high, Double mid, Integer section) throws Exception {
            // TODO Auto-generated method stub
            JSONObject schData = new JSONObject();
            JSONArray datas = new JSONArray();
            if (xkId == 0) {
                schData = eao.getExtStatSchScoreMix(orgId, examId);
            } else {
                schData = eao.getExtStatSchScore(orgId, examId, xkId);
            }
            Long[] schIds = schInfo.getObject("schIds", Long[].class);
            JSONObject OrgBase = new JSONObject();
            JSONArray CicadaEAO = new JSONArray();
            Long highNum = null;
            Long midNum = null;
            Long passNum = null;
            if (xkId == 0) {
                OrgBase = eao.getStatSchScoreMix(orgId, examId);
                for (int i = 0; i < schIds.length; i++) {
                    JSONArray tmp = new JSONArray();
                    JSONObject data = schData.getJSONObject(schIds[i].toString());
                    if (data == null || data.isEmpty()) {
                        continue;
                    }
                    String schName = data.getString("schName");
                    JSONObject schBase = OrgBase.getJSONObject(schIds[i].toString());
                    int schStuNum = schBase.getInteger("schStuNum");
                    double totalScore = data.getDoubleValue("paperScore");
                    double pass = totalScore*0.6;
                    int schEStuNum = schBase.getIntValue("schEStuNum");
                    double schEStuPer = schBase.getDoubleValue("schEStuPer");
                    int schDStuNum = schBase.getIntValue("schDStuNum");
                    double schDStuPer = schBase.getDoubleValue("schDStuPer");
                    highNum = eao.getExtStatStuMixHighNum(orgId, examId, schIds[i], high);
                    double highPer = (double)highNum/schStuNum;
                    midNum = eao.getExtStatStuMixMidNum(orgId, examId, schIds[i], mid);
                    double midPer = (double)midNum/schStuNum;
                    passNum = eao.getExtStatStuPassNum(orgId, examId, schIds[i], pass);
                    double passPer = (double)passNum/schStuNum;
                    tmp.add(schName);
                    tmp.add(schStuNum);
                    tmp.add(schEStuNum);
                    tmp.add(schEStuPer);
                    tmp.add(passNum);
                    tmp.add(passPer);
                    tmp.add(schDStuNum);
                    tmp.add(schDStuPer);
                    tmp.add(highNum);
                    tmp.add(highPer);
                    tmp.add(midNum);
                    tmp.add(midPer);
                    datas.add(tmp);
                }
    
            } else {
                OrgBase = eao.getStatSchScore(orgId, examId, xkId);
               
                for (int i = 0; i < schIds.length; i++) {
                    JSONArray tmp = new JSONArray();
                    JSONObject data = schData.getJSONObject(schIds[i].toString());
                    if (data == null || data.isEmpty()) {
                        continue;
                    }
                    BxoEAO beao = new BxoEAOImpl();
                    String schName = data.getString("schName");
                    
                    JSONObject schBase = OrgBase.getJSONObject(schIds[i].toString());
                    int schStuNum = schBase.getInteger("schStuNum");
                    
                    if(section == 0){ 
                        int schEStuNum = schBase.getIntValue("schEStuNum");
                        double schEStuPer = schBase.getDoubleValue("schEStuPer");
                        int schPassNum = schBase.getIntValue("schPassNum");
                        double schPassPer = schBase.getDoubleValue("schPassPer");
                        int schDStuNum = schBase.getIntValue("schDStuNum");
                        double schDStuPer = schBase.getDoubleValue("schDStuPer");
                        highNum = eao.getExtStatStuHighNum(orgId, examId, schIds[i], high, xkId);
                        double highPer = (double)highNum/schStuNum;
                        midNum = eao.getExtStatStuMidNum(orgId, examId, schIds[i], mid, xkId);
                        double midPer = (double)midNum/schStuNum;
                        tmp.add(schName);
                        tmp.add(schStuNum);
                        tmp.add(schEStuNum);
                        tmp.add(schEStuPer);
                        tmp.add(schPassNum);
                        tmp.add(schPassPer);
                        tmp.add(schDStuNum);
                        tmp.add(schDStuPer);
                        tmp.add(highNum);
                        tmp.add(highPer);
                        tmp.add(midNum);
                        tmp.add(midPer);
                        datas.add(tmp);
                    } else if(section == 1){
                    	long paperId = data.getLongValue("paperId");
                        JSONArray secArr = beao.getSectionScore(paperId);
                        JSONObject secObj = secArr.getJSONObject(0);
                        JSONArray ABscores = secObj.getJSONArray("sectionPaperScores");
                        JSONObject Ascores = ABscores.getJSONObject(0);
                        double Ascore = Ascores.getDoubleValue("disScore");
                        double Escore = Ascore*0.8;
                        double Pscore = Ascore*0.6;
                        double Dscore = Ascore*0.4;
                        int Enum = 0;
                        int Pnum = 0;
                        int Dnum = 0;
                    	String index = getCicadaIndex(exam.getExamDate(), schIds[i]);
                    	CicadaEAO ceao = new CicadaEAOImpl(index);
                    	CicadaEAO = ceao.getStatStuScoreNum(examId, xkId);
                         for(int j = 0; j < CicadaEAO.size(); j++){
                        	 JSONObject stuscores = CicadaEAO.getJSONObject(j);
                        	 JSONArray abscores = stuscores.getJSONArray("stuSections");
                        	 if(abscores != null ){
    	                    	 JSONObject ascores = abscores.getJSONObject(0);
    	                    	 double ascore = ascores.getDoubleValue("disStuScore");
    	                    	 if (ascore >= Escore ){
    	                    		 ++Enum;
    	                    	 }
    	                    	 if (ascore >= Pscore){
    	                    		 ++Pnum;
    	                    	 }
    	                    	 if (ascore < Dscore){
    	                    		 ++Dnum;
    	                    	 }
                        	 }
                        	 
                         }
                         double schEStuPer = (double)Enum/schStuNum;
                         double schPassPer = (double)Pnum/schStuNum;;
                         double schDStuPer = (double)Dnum/schStuNum;;
                         tmp.add(schName);
                         tmp.add(schStuNum);
                         tmp.add(Enum);
                         tmp.add(schEStuPer);
                         tmp.add(Pnum);
                         tmp.add(schPassPer);
                         tmp.add(Dnum);
                         tmp.add(schDStuPer);
                         tmp.add("");
                         tmp.add("");
                         tmp.add("");
                         tmp.add("");
                         datas.add(tmp);
                    	
                    }else if(section == 2){
                    	long paperId = data.getLongValue("paperId");
                        JSONArray secArr = beao.getSectionScore(paperId);
                        JSONObject secObj = secArr.getJSONObject(0);
                        JSONArray ABscores = secObj.getJSONArray("sectionPaperScores");
                        JSONObject Bscores = ABscores.getJSONObject(1);
                        double Bscore = Bscores.getDoubleValue("disScore");
                        double Escore = Bscore*0.8;
                        double Pscore = Bscore*0.6;
                        double Dscore = Bscore*0.4;
                        int Enum = 0;
                        int Pnum = 0;
                        int Dnum = 0;
                    	String index = getCicadaIndex(exam.getExamDate(), schIds[i]);
                    	CicadaEAO ceao = new CicadaEAOImpl(index);
                    	CicadaEAO = ceao.getStatStuScoreNum(examId, xkId);
                         for(int j = 0; j < CicadaEAO.size(); j++){
                        	 JSONObject stuscores = CicadaEAO.getJSONObject(j);
                        	 JSONArray abscores = stuscores.getJSONArray("stuSections");
                        	 if(abscores != null ){
    	                    	 JSONObject bscores = abscores.getJSONObject(1);
    	                    	 double bscore = bscores.getDoubleValue("disStuScore");
    	                    	 if (bscore >= Escore ){
    	                    		 ++Enum;
    	                    	 }
    	                    	 if (bscore >= Pscore){
    	                    		 ++Pnum;
    	                    	 }
    	                    	 if (bscore < Dscore){
    	                    		 ++Dnum;
    	                    	 }
                        	 }
                        	 
                         }
                         double schEStuPer = (double)Enum/schStuNum;
                         double schPassPer = (double)Pnum/schStuNum;;
                         double schDStuPer = (double)Dnum/schStuNum;;
                         tmp.add(schName);
                         tmp.add(schStuNum);
                         tmp.add(Enum);
                         tmp.add(schEStuPer);
                         tmp.add(Pnum);
                         tmp.add(schPassPer);
                         tmp.add(Dnum);
                         tmp.add(schDStuPer);
                         tmp.add("");
                         tmp.add("");
                         tmp.add("");
                         tmp.add("");
                         datas.add(tmp);
                    }
        
                }
            }
         
            return datas;
        }
    
    }
    


    展开全文
  • 学生成绩管理系统(excel版)

    热门讨论 2010-02-01 11:58:46
    1、在原始成绩表中自动按你要求的统计科目生成总分、平均分、班级排名、年级排名等。 2、查询:查询条件多样,可按姓名查询、按班级查询(分班);按某学科(含总分)某分数段查询;按班内名次(年级名次)段查询...
  • 学生考试成绩+评分工作簿模板,其中有三个模板。两个是考试成绩的,一个是评分的。
  • 1、通过本次实习,将理论高度上升到实践高度,更好的实现将本期所学的Excel VAB程序开发理论和实践的结合,更进一步加深对理论知识的理解,了解和掌握实际程序开发中的开发流程、编程原理和规范要求,为今后学习和...
  • 利用Excel制作学生成绩表利用Excel制作学生成绩表制作一个学生成绩自动统计,可以自动统计最高分、最低分、总分、平均分、名次、三率等数据信息,还可以根据自定条件以不同的颜色显示分数。自动统计做好以后还...

    利用Excel制作学生成绩表

    利用Excel制作学生成绩表

    制作一个学生成绩自动统计表,可以自动统计最高分、最低分、总分、平均分、名次、三率等数据信息,还可以根据自定条件以不同的颜色显示分数。自动统计表做好以后还可以保存成模板,以便以后使用。涉及术语:单元格、工作表、工作薄、引用(相对/绝对)、自动填充、排序、条件格式等。涉及函数:AVERAGE、COUNTIF 、MAX、MIN、RANK、SUM任务一:统计最高分、最低分、总分、平均分、名次、三率等数据信息。1、启动Excel,同时选中A1至L1单元格,按“格式”工具条上的“合并及居中”按钮,将其合并成一个单元格,然后输入统计表的标题“高一(1)班期末成绩统计表”(参见图1)。 [img,553,353]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image1.png2、根据统计表的格式,将有关列标题及相关内容输入到相应的单元格中(参见图1)。提示:其中学号的输入可通过“填充柄”快速完成。3、选中K3单元格,输入公式:=SUM(C3:J3),用于计算第一位学生的总分。4、选中L3单元格,输入公式:=RANK(K3,$K$3:$K$12),计算出第一位学生总分成绩的名次(此处,假定共有10位学生)。5、同时选中K3和L3单元格,将鼠标移至L3单元格右下角的成“细十字”状时(通常称这种状态为“填充柄”状态),按住左键向下拖拉至L12单元格,完成其他学生的总分及名次的统计处理工作。6、分别选中C16、C17单元格,输入公式:=MAX(C3:C12)和=MIN(C3:C12),用于统计“语文”学科的最高分和最低分。7、选中C18单元格,输入公式:=AVERAGE(C3:C12),用于统计“语文”学科的平均分。注意:如果成绩表中没有输入成绩时,这一公式将显示出一个错误的值“#DIV/0!”,这个错误代码将在数据输入后消失。8、选中C19单元格,输入公式:=SUM(C3:C12),用于统计“语文”学科的总分。9、选中C20单元格,输入公式:=COUNTIF(C3:C12,">=80")/COUNTIF(C3:C12,">0"),用于统计“语文”学科的优秀率。同样在C21内输入相应公式统计良好率。10、同时选中C16至C21单元格,用“填充柄”将上述公式复制到D16至J21单元格中,完成其它学科及总分的最高分、最低分、平均分、总分、优秀率和良好率的统计工作。至此,一个基本的成绩统计表制作完成,下面我们来进一步处理一下。任务二:根据自定条件以不同的颜色显示分数。(在此例中,让每科分数高于等于平均分的分数显示蓝色,低于的则显示红色)11、选中C3单元格,执行“格式、条件格式”命令,打开“条件格式”对话框(如图2),在中间方框选中“大于或等于”,在右侧的方框中输入公式:=C18 (平均分所在单元格),然后按“格式”按钮,打开“单元格格式”对话框,将字体颜色设置为“蓝色”。再按“添加”按钮,仿照上面的操作,设置小于平均分的分数字体颜色为“红色”(参见图2)。注意:经过这样的设置后,当学生的“语文”成绩大于或等于平均分时,显示蓝色,反之显示红色。[img,539,240]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image2.png12、再次选中C3单元格,按“格式”工具条上的“格式刷”按钮,然后在C3至J12单元格区域上拖拉一遍,将上述条件格式复制到相应的区域中,完成其他学科及总分的条件格式设置工作。把学生的成绩填入到表格中试试看,效果不错吧。任务二:将制作完成的统计表保存为模板。  如果你经常要统计学生的成绩,我们将其保存为模板,方便随时调用。  13、将工作表中的学生成绩等内容删除,执行“文件、保存(另存为)”命令,打开“另存为”对话框(如图4),按“保存类型”右侧的下拉按钮,在随后出现的下拉列表中,选“模板(*.xlt)”选项,然后给定一个名称(如“成绩统计”),按下保存按钮。[img,559,340]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image3.jpg  14、以后需要统计成绩时,启动Excel,执行“文件、新建”命令,展开“新建工作簿”任务窗格(如图5),点击其中的“本机上的模板”选项,打开“模板”对话框,双击“成绩统计”模板,即可新建一份新的成绩统计表。[img,209,235]file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ksohtml/wps_clip_image4.jpg

    展开全文
  • 期末考试结束后,主任要求班主任自已统计...有了EXCEL,我们可用不着躬着身、驼着背、拿着计算器一个一个算着学生成绩了!  我迅速地打开电脑,启动EXCEL2000,录入学生的考试成绩,如图1所示。然后在J2单...
        期末考试结束后,主任要求班主任自已统计本班成绩,尽快上报教导处。流程包括录入各科成绩→计算总分、平均分并排定名次→统计各科分数段人数、及格率、优秀率及综合指数→打印各种统计报表→制作各科统计分析图表等。有了EXCEL,我们可用不着躬着身、驼着背、拿着计算器一个一个算着学生的成绩了!

      我迅速地打开电脑,启动EXCEL2000,录入学生的考试成绩,如图1所示。然后在J2单元格处输入公式"=sum(c2:i2)",然后拖动填充柄向下填充,便得到了每人的总分。接着在k2单元格处输入公式"=average(c2:i2)",然后拖动填充柄向下填充,便得到了每人的平均分。
     

      平均分只需保留一位小数,多了没用。所以选中第k列,用鼠标右键单击,从弹出的快捷菜单中选"设置单元格格式(F)…",如图2所示,在数字标签中选中"数值",小数位数设置为1位。 
      

      下面按总分给学生排出名次。

        在L2单元格处输入公式"RANK(J2,J$2:J$77,0)",然后拖动填充柄向下填充,即可得到每人在班中的名次(请参考图1)。

      说明:此处排名次用到了RANK函数,它的语法为:

        RANK(number,ref,order)

        其中number为需要找到排位的数字。

        Ref为包含一组数字的数组或引用。Ref 中的非数值型参数将被忽略。

        Order为一数字,指明排位的方式。

        ·如果 order 为 0 或省略,Microsoft Excel 将 ref 当作按降序排列的数据清单进行排位。

        ·如果 order 不为零,Microsoft Excel 将 ref 当作按升序排列的数据清单进行排位。

      最后,单击L1单元格,然后在“工具”菜单中选“排序”->“升序”,即可按照名次顺序显示各学生成绩。

        另外,我们还希望把不及格的学科突出显示,最好用红色显示。于是拖拉选择C2:E78(即所有学生语、数、外三科成绩),然后执行"格式"菜单下"条件格式"命令,弹出"条件格式对话框"。我们把条件设为小于72分的用红色显示(因为这三科每科总分为120分),点击"格式"按钮,把颜色设为红色。再按"确定"按钮。然后用同样的方法把理、化、政、历四科小于60分的也用红色显示(因为这四科每科总分为100分)。

      下面我们来统计各科的分数段以及及格率、优生率、综合指数等。

        下面我们来统计各科的分数段以及及格率、优生率、综合指数等。

      (1)60分以下人数:在C78单元格处输入公式"=COUNTIF(C2:C77,"〈60")",拖动填充柄向右填充至I78单元格处;

        (2)60分~69分人数:在C79单元格处输入公式"=COUNTIF(C2:C77,"〉=60")-COUNTIF(C2:C77,"〉=70")",拖动填充柄向右填充;

        (3)70分~79分人数:在C80单元格处输入公式"=COUNTIF(C2:C77,"〉=70")-COUNTIF(C2:C77,"〉=80")",拖动填充柄向右填充;

        (4)80分~89分人数:在C81单元格处输入公式"=COUNTIF(C2:C77,"〉=80")-COUNTIF(C2:C77,"〉=90")",拖动填充柄向右填充;

        (5)90分以上人数:在C82单元格处输入公式"=COUNTIF(C2:C77,"〉=90")",拖动填充柄向右填充;

      (6)平均分:在C83单元格处输入公式"=AVERAGE(C2:C77)",拖动填充柄向右填充至I83;

        (7)最高分:在C84单元格处输入公式"=MAX(C2:C77)",拖动填充柄向右填充至I84;

      (8)低分率:是指各科40分以下人数与总人数的比值。在C85单元格处输入公式"=COUNTIF(C2:C77,"〈=40")/COUNT(C2:C77)*100",拖动填充柄向右填充至I85;

        (9)及格率:语、数、外三科及格分为72分,所以在C86单元格处输入公式"=(COUNTIF(C2:C77,"〉=72")/COUNT(C2:C77))*100",并拖动填充柄向右填充至E86;而理、化、政、历等四科及格分60分,所以在F86单元格处输入公式"=(COUNTIF(F2:F77,"〉=60")/COUNT(F2:F77))*100",并拖动填充柄向右填充至I86;

        (10)优生率:语、数、外三科96分以上为优生,所以在C87单元格处输入公式"=(COUNTIF(C2:C77,"〉=96")/COUNT(C2:C77))*100",拖动填充柄向右填充至E87;理、化、政、历等四科80分以上为优生,所以在F87单元格处输入公式"=(COUNTIF(F2:F77,"〉=80")/COUNT(F2:F77))*100",拖动填充柄向右填充至I87处;如图3所示。

      (11)综合指数:我们学校的综合指数的计算公式为z=[(1+优生率-低分率)/2+及格率+平均分/该科总分]/3。所以在C88单元格处输入公式"=((1+C87/100-C85/100)/2+C86/100+C83/120)/3",拖动填充柄向右填充至E88;在F88单元格处输入公式"=((1+F87/100-F85/100)/2+F86/100+F83/100)/3",拖动填充柄向右填充至I88。如图3所示。 

       对了,为了让别人对各科的分数段有一个较直观的认识,可以考虑采用图表。单击“插入”菜单中“图表”命令,弹出“图表向导”对话框,在“图表类型”列表框中选择一种图型,如“饼图”,单击“下一步”,单击“数据区域”文本框右边的压缩列表框,拖拉选择B78:C82,再次点击该压缩列表框;单击“下一步”,输入图表标题,如“高一(1)班语文成绩分析图”;单击“下一步”,再单击“完成”。如图4所示。其它各科同样处理,但在拖拉选择数据区域时,因为是不连续的区域,所以要按住“Ctrl”键。好!一切OK!

      且慢!为了以后的考试中不再重复上述繁琐的工作,最好把上述工作表另存为一个模板。于是我把上述工作表复制一份到另一工作簿中,然后删掉所有学生的单科成绩(即表中C2:I77部分),执行"文件"菜单中的"另存为"命令,在"保存类型"下拉列表框中选"模板(*.xlt)",把它保存为一个模板文件,这下可以一劳永逸了。

    转载于:https://www.cnblogs.com/raymond19840709/archive/2008/01/05/1026682.html

    展开全文
  • Java学生成绩表系统

    2011-11-27 21:42:54
    Java实现的学生成绩系统,Swing高级组件,登录界面后台是数据库支持,可以查询浏览修改删除,按学号和分数查询,退出。Java学习者很好的参考模板,可以实现同类的系统设计
  • 推荐图书:《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷...=======================功能描述:学生期末考试使用董付国老师编写的“Python小屋刷题神器”(后台发送消...
  • 目标:导出学生成绩表-含学生a 学生b两个sheet 1.//构造sheet中所需数据、sheet名--action中实现 private String templateFileName;//导出用的Excel模板名字,即我们定义的模板Excel名字 private String ...
  • Java里的下载Excel模板上传Excel文件

    千次阅读 2016-03-31 21:52:36
    由于项目的需要做过VB版的上传excel,vb.net,以及c#的上传excel,现在做Java...这篇博客将更深入的分享如何下载excel模板以及上传excel文件。这两天项目催的那个紧以及会议的问题,博客先记录下主题,稍后不上。。。。
  • 推荐图书: 《Python程序设计(第3版)》,...学生期末考试使用董付国老师编写的“Python小屋刷题神器”(后台发送消息“小屋刷题”获取客户端)在线考试,每人答100个客观题,大家题目一样但是答题顺序不一样,得到
  • EXCEL轻松的处理学生成绩(转) 期末考试结束后,主任要求班主任自已统计本班成绩,尽快上报教导处。流程包括录入各科成绩→计算总分、平均分并排定名次→统计各科分数段人数、及格率、优秀率及综合指数→打印各种...
  • 如何用Excel制作学生成绩统计发布者:张敏 所属单位:达川区亭子镇中心小学 发布时间:2016-07-05浏览数:0每一学期结束时,教师都要统计学生的成绩,在电脑逐步普及的今天,我们就把这项繁杂的工作交给Excel去...
  • 今天给大家分享一个学生成绩查询系统的制作方法,也是回答一位小伙伴的问题。我们设计一个简单的模型,同类问题都可以套用这个模型。话不多说,先上个效果图。上图中,通过下拉菜单选中不同的姓名,调取不同的分数,...
  • 每年11月份各学校都要上报体质健康数据,很麻烦,根据网上下的资源结合实际进行了修改为小学可以用的自动测算成绩模板,只要把测试成绩填入测试中,就会自动生成分数和等级,可以根据上报的标准进行相应修改后一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,276
精华内容 510
关键字:

学生成绩分析表excel模板