精华内容
下载资源
问答
  • Problem J: 学生成绩统计表

    千次阅读 2014-11-16 10:23:58
    Problem J: 学生成绩统计表 Time Limit: 1 Sec Memory Limit: 16 MB Submit: 902 Solved: 416 [Submit][Status][Web Board] Description 在学校里经常见到的成绩表,表的每行是一个学生的成绩,每列...

    Problem J: 学生成绩统计表

    Time Limit: 1 Sec  Memory Limit: 16 MB
    Submit: 902  Solved: 416
    [Submit][Status][Web Board]

    Description

    在学校里经常见到的成绩表,表的每行是一个学生的成绩,每列是各个科目的成绩。如下表所示。

    你的任务是:输入这样的成绩表,统计出每个学生的总成绩和各个科目的平均成绩。如下表所示。

    Input

    第一行为两个整数m,n,0<m<=50、0<n<=10,表示有m个学生和n个成绩。

    后面有m+1行n+1列的一个表,表的第1行和第1列都是不含空白符的字符串,表的各列用若干空格分隔,表的各行用一个回车分隔。第1行的2~n+1列是各个科目的名字。第2~m+1行1列为学生姓名。第2行2列开始到第m+1行、n+1列为各学生的各科目成绩(浮点数)。

    Output

    输出为一张表,表的大小为m+2行、n+2列,其中前m+1行n+1列的数据与输入相同。

    表的最右侧一列为学生各科目成绩的总和,该列第1行的标题是“sum”。

    表的最下面一行为各科目的所有学生平均成绩,该行的第1列标题是“average”。

    表的第1列输出为8个字符左对齐,后面每列为5个字符右对齐,两列之间有2个空格。表的所有数据项(除第1行和第1列外)都输出为保留1位小数。表的每行用一个回车分隔,表的最右边一列的数据项后没有空格。

    请注意:表的最右下角那项没有定义,不输出!最后1行的输出至最右一个科目的平均分结束,该行最后有回车。

    Sample Input

    10 6name SCI TECH COM CS106 SE309 CS101Tom 88 77 66 55 44 33Jerry 50 100 60 100 50 100Zhang3 90 95.5 60 75 82 18Li4 38 45 62 29 74 85Wang5 88 75 63 36 99 33.3Zhao6 99 99 99.5 97.5 42 100Liu7 80 80 80.5 81.5 82.5 83Wang8 7 6 5 4 3 2Song9 10 20 30 40 50 60Ma10 74 79.5 73 71 70 77

    Sample Output

    name SCI TECH COM CS106 SE309 CS101 sumTom 88.0 77.0 66.0 55.0 44.0 33.0 363.0Jerry 50.0 100.0 60.0 100.0 50.0 100.0 460.0Zhang3 90.0 95.5 60.0 75.0 82.0 18.0 420.5Li4 38.0 45.0 62.0 29.0 74.0 85.0 333.0Wang5 88.0 75.0 63.0 36.0 99.0 33.3 394.3Zhao6 99.0 99.0 99.5 97.5 42.0 100.0 537.0Liu7 80.0 80.0 80.5 81.5 82.5 83.0 487.5Wang8 7.0 6.0 5.0 4.0 3.0 2.0 27.0Song9 10.0 20.0 30.0 40.0 50.0 60.0 210.0Ma10 74.0 79.5 73.0 71.0 70.0 77.0 444.5average 62.4 67.7 59.9 58.9 59.6 59.1

    [这道题目的坑爹之处很多,首先输入可能是不规则的,即两列之间的空格不一定是几个,所以不能直接输入输出,第二个是第一行的输出,尤其是name的输出需要注意,其他的部分要做好细节处理,比如每行的name,用二维数组时候要注意是double类型,同时注意输出格式第一列和其他列是不一样的。好了,上代码:]
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        int rr,cc;
        char top[1000],temp[100];
        int i,k;
        char name[20];
        double a[100][100],sum = 0;
        scanf("%d%d",&rr,&cc);
        getchar();
        //printf("r = %d,c = %d\n",rr,cc);
    
        for(i = 0; i <= cc; i++)
        {
            memset(temp,0,sizeof(temp));
            scanf("%s",temp);
            if(i != 0)
                printf("%5s  ",temp);
            else
                printf("name      ");
    
        }
        printf("  sum\n");
        //printf("r = %d,c = %d\n",rr,cc);
        for(k = 0; k < rr; k++)
        {
            //------------------------------- save name
            memset(name,0,sizeof(name));
            scanf("%s",name);
            //------------------------------- save && plus the grade
            sum = 0;
            for(i = 0; i < cc; i++)
            {
                scanf("%lf",&a[k][i]);
                sum += a[k][i];
            }
            //------------------------------- out name
            printf("%-8s  ",name);//-8 !
    
            //------------------------------- out the grade
            for(i = 0; i < cc; i++)
                printf("%5.1lf  ",a[k][i]);// +5!
            printf("%5.1lf\n",sum);
        }
        printf("average   ");
        for(i = 0; i < cc-1; i++)
        {
            sum = 0;
            for(k = 0; k < rr; k++)
                sum += a[k][i];
            printf("%5.1lf  ",(double)sum/rr);
        }
        sum = 0;
        for(k = 0; k < rr; k++)
            sum += a[k][cc-1];
        printf("%5.1lf\n",(double)sum/rr);
    
        return 0;
    }
    


    展开全文
  • 学生成绩统计分析

    千次阅读 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;
        }
    
    }
    


    展开全文
  • 题目:定义一个学生信息结构,包括姓名、学号、和总成绩。从键盘上输若干学生信息,学生个数未知,当输入姓名为“#####”时表示输入结束。学生的总成绩为整数,范围是0~1600,不会出现非法输入。分别统计出1200以下...

        题目:定义一个学生信息结构,包括姓名、学号、和总成绩。从键盘上输若干学生信息,学生个数未知,当输入姓名为“#####”时表示输入结束。学生的总成绩为整数,范围是0~1600,不会出现非法输入。分别统计出1200以下,1200~1399,1400~1600各分数段学生人数。学生姓名中只能包含大小写字母与空格字符,不会超过20个;学号不超过20个字符,只包含数字字符。完成以下任务:

    1,创建单链表,存储学生信息;

    2,设计一个函数,函数名为Createlist(),用于建立链表;

    3,函数Addlist(),用于向链表为追加结点;

    4,函数Deallist(),统计各分数段学生人数;

    5,函数Freelist(),释放链表结点,程序结束。

    程序:

    首先创建用于链表的结构

    typedef struct student{
    	char name[30];
    	char number[30];
    	int score;
    	struct student* next;
    }Stu;
    typedef Stu* stu;

    函数Createlist():

    //创建链表 
    stu Createlist()
    {
    	stu head=NULL;//创建头指针,并初始化为0
    	char ch[7]="#####";//用于判断输入结束
    	char ah[30];//存储学生姓名
    	do {
    		gets(ah);
    		if (strcmp(ah,ch)){//判断输入是否为“######”,此处为对字符串的处理,不能简单使用“==”判断,注意:调用strcmp函数需要头文件<string.h>
    			head=Addlist(head,ah);//添加链表结点
    		}
    	}while (strcmp(ah,ch));
    	return head;//返回头指针的地址于主函数
    }

    关于这个函数,也可以调用头指针的地址,此时函数类型可为void,不需要返回值。

    函数Addlist()

    //添加列表结点 
    stu Addlist(stu head , char* ah)//因为姓名在Greatelist()中用来判别结束,所以直接传入,不需在次函数中再次输入
    {
    	stu last=head;
    	stu p=(stu)malloc(sizeof(Stu));
    	strcpy(p->name,ah);//初始化构建的链表
    	gets(p->number);
    	scanf ("%d",&p->score);
    	getchar();//用于吸收回车符
    	p->next=NULL;
    	if (last){//找到链表此时的尾结点
    		while (last->next){
    			last=last->next;
    		}
    		last->next=p;//将新建的p连接在最后一位 
    	}
    	else{//如果p为第一个结点,只需将头指针指向p
    		head=p;
    	}
    	return head;、//返回头指针	
    }

    函数Deallist()

    void Dealist (stu head,int* count)//传入数组count的地址,用于记录学生人数
    {
    	stu p;
    	for (p=head ; p ;p=p->next){
    		if ((p->score)<1200)
    			count[0]++;
    		if (1200<=(p->score)&&(p->score)<=1399)
    			count[1]++;
    		if (1400<=(p->score)&&(p->score)<=1600)
    			count[2]++;
    	}
    } 
    函数 Freelist():
    void Freelist (stu head)
    {
    	stu p,q;//此处需要新建 q ,因为 p 被清除后将没有 p->next 
    	for (p=head;p;p=q){
    		q=p->next;
    		free(p);
    	}
    } 

    总体程序为:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct student{
    	char name[30];
    	char number[30];
    	int score;
    	struct student* next;
    }Stu;
    typedef Stu* stu;
    
    stu Createlist();//创建链表
    
    stu Addlist (stu head,char* ah);//向链表尾追加结点
    
    void Dealist (stu head,int* count);//统计各分数段学生
    
    void print (int* count);//打印列表 
    
    void Freelist (stu head);//释放列表 
    
    int main(void)
    {
    	stu head=NULL;
    	int count[3]={0,0,0,};
    	head = Createlist();
    	Dealist (head,count);
    	print (count);
    	Freelist (head);
    	return 0; 
    } 
    //创建链表 
    stu Createlist()
    {
    	stu head=NULL;
    	char ch[7]="#####";
    	char ah[30];
    	do {
    		gets(ah);
    		if (strcmp(ah,ch)){
    			head=Addlist(head,ah);
    		}
    	}while (strcmp(ah,ch));
    	return head;
    }
    //添加列表结点 
    stu Addlist(stu head , char* ah)
    {
    	stu last=head;
    	stu p=(stu)malloc(sizeof(Stu));
    	strcpy(p->name,ah);
    	gets(p->number);
    	scanf ("%d",&p->score);
    	getchar();
    	p->next=NULL;
    	if (last){
    		while (last->next){
    			last=last->next;
    		}
    		last->next=p;//将p连接在最后一位 
    	}
    	else{
    		head=p;
    	}
    	return head;	
    }
    //处理链表数据 
    void Dealist (stu head,int* count)
    {
    	stu p;
    	for (p=head ; p ;p=p->next){
    		if ((p->score)<1200)
    			count[0]++;
    		if (1200<=(p->score)&&(p->score)<=1399)
    			count[1]++;
    		if (1400<=(p->score)&&(p->score)<=1600)
    			count[2]++;
    	}
    } 
    //打印链表
    void print (int* count)
    {
    	printf ("The statistics result is:\n");
    	printf ("There are %d students below 1200.\n",count[0]);
    	printf ("There are %d students between 1200 and 1399.\n",count[1]);
    	printf ("There are %d students between 1400 and 1600.\n",count[2]);
    } 
    //释放链表
    void Freelist (stu head)
    {
    	stu p,q;//此处需要新建 q ,因为 p 被清除后将没有 p->next 
    	for (p=head;p;p=q){
    		q=p->next;
    		free(p);
    	}
    } 

    展开全文
  • JAVA数组实现学生成绩统计

    千次阅读 2019-09-28 17:29:36
    数组实现学生成绩统计 二、项目描述 1.项目简介: 由用户输入学生人数与名字,并定义当前学期课程数与课程名,并分别录入每位学生每门课程成绩,系统显示输入每位学生每门课程成绩,并显示学生的总分与平均分。 2....

    一、项目名称
    数组实现学生成绩统计
    二、项目描述
    1.项目简介:
    由用户输入学生人数与名字,并定义当前学期课程数与课程名,并分别录入每位学生每门课程成绩,系统显示输入每位学生每门课程成绩,并显示学生的总分与平均分。
    2.程序要求:
    1)程序运行时,显示欢迎信息,并提示输入班级学生人数,如图1。
    图1

    2)用户输入班级人数后,系统提示用户输入本学期课程数,如图2。图2

    3)输入学期课程数后,系统提示用户定义每门课程名, 如图3、图4、图5。图3

    图4

    图5

    4)所有课程名都定义完成后,系统提示输入学生姓名。如图6。图6
    5)录入一个学生姓名后,提示录入本学期每门课程的成绩。当一个学生所有课程录入完成后,提示录入下一个学生姓名,及本学期每门课程成绩。如图7,如图8,如图9。
    图7
    图8
    图9
    6)所有学生姓名与对应的每个学生本学期每门课程成绩录入完成后,系统显示打印输入录入成绩,并统计输入每位学生的课程总分与平均分。如图10。图10
    三、说明
    本程序不涉及文件数据库操作,仅利用java数组实现。

    代码实现:

    package cn.jpi.demo;
    
    import java.util.Scanner;
    
    import org.junit.Test;
    
    public class StudentsScoreStatistics {
    //	定义全局变量
    	
    //	班级学生名字(数组)
    	static String[] studentName;
    //	学期课程名(数组)
    	static String[] courseName;
    //	学生成绩(二维数组)
    	static int[][] studentScore;
    //	学生总分
    	static int[] studentScoreSum;
    //	学生平均分
    	static double[] studentScoreAvg;
    	
    //	定义Object二维数组来装矩形
    	static Object[][] table;
    	
    //	声明Scanner对象
    	static Scanner sc = new Scanner(System.in);
    	
    	public static void main(String[] args) {
    //		1.欢迎使用
    		welcome();
    //		2.输入班级人数,课程数,课程名以及每位同学的各门课的成绩
    		print();
    //		3.打印结果
    		end();
    	}
    
    //	4.定义输出总结果方法
    	private static void end() {
    //		输出表头
    		System.out.print("学生"+"\t");
    //		遍历课程名数组
    		for(String s:courseName) {
    			System.out.print(s+"\t");
    		}
    		System.out.println("总分"+"\t"+"平均分");
    //		二维数组的遍历
    		for(int i = 0;i<table.length;i++) {
    			for(int j = 0;j<table[i].length;j++) {
    				System.out.print(table[i][j]+"\t");
    			}
    			System.out.println();
    		}
    	}
    	
    //	2.定义输入班级人数,课程数,课程名以及录入每位同学的各门课的成绩方法
    	private static void print() {
    //		输入班级人数(确定学生数组的长度)
    		System.out.println("请输入班级学生人数:");
    		int i  = sc.nextInt();
    		studentName = new String[i];
    		
    //		确定学生总分数组长度
    		studentScoreSum = new int[i];
    		
    //		确定学生平均分数组长度
    		studentScoreAvg = new double[i];
    		
    //		输入学生课程数(确定课程数组的长度)
    		System.out.println("请输入学期课程数:");
    		int j  = sc.nextInt();
    		courseName = new String[j];
    		
    //		确定学生成绩数组长度
    		studentScore = new int[i][j];
    		
    //		确定矩阵大小
    		table = new Object[i][j+3];
    		
    //		输入课程名字(循环)
    		for(int k = 0;k<courseName.length;k++) {
    			System.out.println("请定义第"+(k+1)+"门课的名字:");
    			courseName[k] = sc.next();
    		}
    //		输入学生的姓名,并录入他的每门课的成绩(循环嵌套)
    //		声明总分变量
    		int sum = 0;
    //		声明平均分变量
    //		double avg = 0;
    		for(int l = 0;l<studentName.length;l++) {
    			System.out.println("请输入第"+(l+1)+"个学生的姓名:");
    			studentName[l] = sc.next();
    			
    			for(int m = 0;m<courseName.length;m++) {
    				System.out.println("请输入"+studentName[l]+"同学"+courseName[m]+"的成绩:");
    				studentScore[l][m] = sc.nextInt();
    				sum = sum + studentScore[l][m];
    //				avg = sum/courseName.length;
    			}
    			studentScoreSum[l] = sum;
    			studentScoreAvg[l] = sum/courseName.length;
    //			sum归0,重新计算
    			sum = 0;
    //			System.out.println(sum+"....."+avg);
    		}
    //		为 表格填入数据
    		for(int n = 0;n<studentName.length;n++) {
    			for(int o = 0;o<courseName.length+3;o++) {
    				if(o>=1 && o<=courseName.length) {
    					table[n][o] = studentScore[n][o-1];
    				}else if(o==0) {
    					table[n][o] = studentName[n];
    				}else if(o==courseName.length+1){
    					table[n][o] = studentScoreSum[n];
    				}else {
    					table[n][o] = studentScoreAvg[n];
    				}
    			}
    		}
    	}
    	
    //	1.定义打印表头方法
    	private static void welcome() {
    		System.out.println("欢迎使用简单不简约成绩统计系统^_^");
    	}
    	@Test
    	public void test() {
    
    		}
    	}
    }
    

    代码就不细分了(反正也是给我以后自己看的,嘻嘻)
    主要讲讲做这题的过程中遇到的问题吧
    我有在两个地方卡住:

    一个是在给table赋值的时候,我原本想把赋值放在输入学生成绩的那个循环里面,但是要么是索引越界异常,要么是后面的值赋不上去,为null值,此时我就想到它循环的次数和我要给table赋值的长度是不一样的。
    为解决这一问题,我到外面单独写一个循环去给table赋值(这个故事告诉我,不该省的代码还是老老实实的写)

    另外一个是二维数组的问题,我看到题目要求的结果我就很清楚这里是个二维数组,我也是这么做的,但是!我在前面定义的学生成绩的数组它是一维的,而且我是在循环里面给他赋值,也就是说我对一个学生的成绩赋值完成,给下一个学生的成绩赋值,它就会把第一个学生成绩的值给覆盖掉,导致无论我输出的结果都与最后一个同学的成绩一样。
    为解决这一问题,我把学生成绩改为二维数组,再将相应的地方改掉就OK了

    在测的时候要把(学生数>课程数,学生数=课程数,学生数<课程数)这几种情况都测一测,因为有一些细节不注意,它可能会存在索引不存在或者索引越界的问题。

    还有一个小作业就不写上来了,很容易。

    最后:面向对象面向君,不负代码不负卿。各位加油

    展开全文
  • C语言开发简单的学生成绩管理系统(附源码)

    万次阅读 多人点赞 2019-04-15 21:08:22
    学生成绩管理系统 开发语言:C语言 开发工具:Visual Studio 2019 开发时间:2019.4.14 开发者:summer @、系统使用展示 @二、系统功能 @三、菜单 @四、录入学生信息 @五、打印学生信息 @六、保存学生信息 @七、...
  • c++学生成绩统计

    千次阅读 2016-09-16 13:25:09
    3-5 学生成绩统计 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。 设计一个学生...
  • 学生成绩统计

    千次阅读 2012-12-12 11:51:57
    /*  * 程序的版权和版本声明部分:  ...* 文件名称:学生成绩统计.cpp  * 作 者:毛通  * 完成日期:2012 年 12月 11日  * 版 本 号:v1.0  * 对任务及求解方法的描述部分: 要求  (1)定义二维数组来存放各
  • 线性表的练习--学生成绩统计

    千次阅读 2019-09-27 04:50:32
    线性表的练习--学生成绩统计 问题描述:建立一个简单的学生成绩,要求能够完成学生成绩的录入,总成绩的计算,学生成绩的查询,学生成绩的排序 算法分析:  创建一个线性表来储存学生成绩,每个...
  • 3-5 学生成绩统计

    千次阅读 2014-09-20 16:52:47
    3-5 学生成绩统计 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。 设计一个学生类Student 它具有私有的数据成员:...
  • html学生成绩信息

    千次阅读 2018-08-18 20:58:08
    <h3>2016级计算机科学成绩信息 学号 姓名 专业 成绩 基本操作 <td>201601 张三 计算机科学 <td>85 删除 <td>201601 张三 计算机科学 <td>85 删除 <td>201601 张三 计算机科学 ...
  • 查询学生成绩表中大于60分的每一个成绩的人数 这个要用到SQL语句: 按照成绩来分组,再用聚合函数 select count(*) from student_grade group by grade having grade &gt;=60; ...
  • mapreduce 班级学生成绩统计

    千次阅读 2019-04-02 10:38:37
    这个是最近的一个实验,其中这个实验老师的要求是 1 统计每个班成绩的最大值 最小值 并且输出姓名 如果有多个那么要都要输出 ,然后输出每个班的平均值 再者就是每个班的成绩分布,优秀良好,及格不及格的个数 2 ...
  • C语言 编程统计全班学生成绩

    千次阅读 2019-02-14 19:22:56
    编程统计全班学生成绩。要求每次用键盘输入一个学生的2门分数,计算输出每个学生平均分,如果平均分大于等于85,为优秀,60~85为通过。统计出成绩优秀的学生和及格的学生人数。 算法分析: 统计人数,用count计数器...
  • --查询每名学生的学号、选修课程数目、总成绩、并将查询结果存放到生成的’学生选课统计表‘中 use teaching go if exists (select * from sys.objects where name='学生选课统计表') drop table 学生选课统计表 ...
  • 结构体~学生成绩统计

    千次阅读 2014-03-04 14:55:07
    *烟台大学计算机学院学生 *All rights reserved. *文件名称:结构体~学生成绩统计 *作者:杨飞
  •  编写一个程序,建立了一条单向链表,每个结点包含姓名、学号、英语成绩、数学成绩和C++成绩,并通过链表操作平均最高的学生和平均分最低的学生并且输出。 输入格式  输入n+1行,第一行输入一个正整数n,表示学生...
  • python统计学生成绩

    千次阅读 2020-04-07 11:49:29
    假设一个团队里有5名学员,成绩如下所示。你可以用NumPy统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。然后把这些人的总成绩排序,得出名次进行成绩输出。 姓名 语文 ...
  • C语言:统计学生成绩并输出

    万次阅读 多人点赞 2018-10-26 19:51:14
    统计学生成绩并输出最高分 题目要求:有50名学生,每学生的数据包括学号,姓名,3门课的成绩,从键盘输入50名学生数据,要求打印出每门课的平均成绩,以及三门课总分最高的学生数据(包括学号,姓名,3门课的成绩...
  • 学生表 成绩表 课程 教师

    千次阅读 2020-09-11 16:26:17
    建立数据库、建表和插入数据 题目:思路、关键函数、解题语句、结果...-- 学生表 -- Student(s_id,s_name,s_birth,s_sex) -- 学生编号,学生姓名, 出生年月,学生性别 CREATE TABLE `Student`( `s_id` VARCHAR(20),
  • C语言数据结构学生成绩 顺序

    千次阅读 多人点赞 2019-04-10 22:37:37
    一个简单的顺序实现一组学生信息增,删,查,取功能。其中文件导入部分的处理花费了较多时间 代码如下: 在这里插入代码片 ```#include<stdio.h> #include<stdlib.h> #include<string.h> #...
  • sdut 3-5 学生成绩统计

    千次阅读 2014-10-09 20:01:53
    3-5 学生成绩统计 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目练习可以掌握对象数组的用法,主要是对象数组中数据的输入输出操作。 设计一个学生类Student 它具有私有的数据成员:学号、...
  • cout请输入第"个学生的信息:"; cin>>student1[i].num >>student1[i].name >>student1[i].score[0]>>student1[i].score[1]>>student1[i].score[2]; } double sum=0; for(i=0;i;i++) { for(j=0;j;j+...
  • 《java》学生成绩统计从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: .学生成绩统计 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当...
  • Java统计学生成绩

    千次阅读 2019-04-14 11:05:53
    编写程序统计班级学员的考试成绩,并将成绩按照从大到小的顺序排序,还需计算出班级的平均分及班级总分,统计成绩在80分以上的人数。 public static void main(String[] args) { Scanner input = new Scanner...
  • 二,学生成绩统计并排名。三,展示一个表格,增加一列,展示每一个学生低于60分就算不及格的,高于60算及格。 具体题目忘记了,从网上找了个相似的练习下。工作上用的比较多的是查询,其它的毕竟好几年没复习了,...
  • 用c++模拟实现一个学生成绩管理系统

    万次阅读 多人点赞 2016-11-29 15:39:25
    题目:用c++模拟实现一个学生成绩的信息管理系统,要求能添加、删除、修改、查看和保存学生的信息等功能 源代码如下: #define _CRT_SECURE_NO_WARNINGS #include using namespace std; #include #include class ...
  • 用C语言链表编写学生成绩管理系统

    万次阅读 多人点赞 2018-09-06 20:04:12
    、设计题目:学生成绩管理系统 二、目的与要求 每位学生记录包含有学号、姓名、性别、出生日期、三门功课的成绩(高等数学、大学英语、C语言)、总分和平均分 系统菜单: (1)录入学生记录 (2)添加学生...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,860
精华内容 13,944
关键字:

如何做一个学生成绩统计表