zoukankan      html  css  js  c++  java
  • A-Webkit第六章:成绩图表

    上一章记录了添加学生成绩,这一章就剩最后一个功能了,实现学生成绩报表。这里我使用报表控件是highchart.js。所以首先要下载好相关的js文件。

    1.修改score.js

    首先修改score.js文件,添加两个方法,一个是读取所有学生的成绩,一个是读取所有有成绩的学生,代码如下:

     1 /**
     2  * 查询所有学生成绩
     3  * Callback:
     4  * - err, 数据库错误
     5  * @param {Function} callback 回调函数
     6  */
     7 Score.getScore = function(callback){
     8 
     9     //从连接池中获取一个连接
    10     db.getConnection(function(err, connection) {
    11 
    12       var sql = "select s.score, c.name as clas, u.name from score s, class c, users u where s.cid = c.id and s.uid = u.id";
    13 
    14       //查询
    15       connection.query(sql, function(err, scores) {
    16         if (err){
    17           callback(err, null);
    18         }
    19 
    20         callback(null, scores);
    21 
    22         connection.release();
    23       });
    24     });
    25 };
    26 
    27 /**
    28  * 查询有哪些学生有成绩
    29  * Callback:
    30  * - err, 数据库错误
    31  * @param {Function} callback 回调函数
    32  */
    33 Score.getUsers = function(callback){
    34 
    35     //从连接池中获取一个连接
    36     db.getConnection(function(err, connection) {
    37 
    38       var sql = "select u.name from score s, users u where s.uid=u.id group by s.uid";
    39 
    40       //查询
    41       connection.query(sql, function(err, users) {
    42         if (err){
    43           callback(err, null);
    44         }
    45 
    46         callback(null, users);
    47 
    48         connection.release();
    49       });
    50     });
    51 };

    2.添加新的js文件

    因为要用图表显示数据,所以要添加相关js。这里使用的是highchart.js文件。highchart.js使用很方便,这里我添加一个highchart.js文件,一个是样式文件grey.js文件。项目目录如下:

    这是整个项目的目录结构。

    3.修改main.html

    因为要加入了新的js文件,所以要修改main.html文件,添加新的js文,highchart是需要jquery支持的。完整的main.html文件如下:

     1 <!DOCTYPE html>
     2 <html>
     3   <head>
     4     <title>a-webkit demo</title>
     5     <meta charset="UTF-8" />
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <link rel="stylesheet" href="../public/css/bootstrap.min.css" />
     8     <link rel="stylesheet" href="../public/css/main.css" />
     9     <script src="../public/js/jquery-1.9.1.min.js"></script>
    10     <script src="../public/js/bootstrap.min.js"></script>
    11     <script src="../public/js/angular/angular.min.js"></script>
    12     <script src="../public/js/angular/angular-route.min.js"></script>
    13     <script src="../public/js/highchart/highcharts.js"></script>
    14     <script src="../public/js/highchart/gray.js"></script>
    15     <script src="../routes/controller.js"></script>
    16   </head>
    17   <body>
    18 
    19     <div class="main_cont" ng-app='wapp'>
    20       <div class="well">
    21         <ul class="nav nav-pills nav-stacked">
    22           <li><a href="#/stu">添加学生</a></li>
    23           <li><a href="#/sco">添加成绩</a></li>
    24           <li><a href="#/rep">成绩图表</a></li>
    25         </ul>
    26       </div>
    27 
    28       <div class="main_cont_right" ng-view>
    29         
    30       </div>
    31     </div>
    32 
    33   </body>
    34 </html>

    4.修改rep.html

    highchart.js是通过canvas画出来的,所以需要提前制定好在哪个div中画图。代码如下:

    1   <div ng-controller="RepCtrl">
    2     <div id="container" style="min-90%;height:400px"></div>
    3   </div>

    5.修改controller.js文件中的RepCtrl

    要修改repctrl控制器中的方法,先读取哪些学生有成绩,然后在读取所有成绩,然后把成绩组合成highchart.js需要的数据格式,最后把相关的数据传给highchart.js就行了。完整代码如下:

     1 var users = [];
     2     var scores = [{name: '语文', data:[]}, {name: '数学', data:[]}, {name: '英语', data:[]}];
     3 
     4     Score.getUsers(function(err, info){
     5         for(var i=0;i<info.length;i++){
     6             users[users.length] = info[i].name;
     7         }
     8 
     9         Score.getScore(function(err, info){
    10             //循环有成绩的学生
    11             for(var j=0;j<users.length;j++){
    12                 
    13                 //获取有成绩学生的成绩
    14                 for(var i=0;i<info.length;i++){
    15                     
    16                     //每次只获取外围循环学生的成绩
    17                     if(info[i].name == users[j]){
    18                         switch(info[i].clas){
    19                             case '语文':
    20                                 scores[0].data[scores[0].data.length] = info[i].score;
    21                                 break;
    22                             case '数学':
    23                                 scores[1].data[scores[1].data.length] = info[i].score;
    24                                 break;
    25                             default:
    26                                 scores[2].data[scores[2].data.length] = info[i].score;
    27                                 break;
    28                         };
    29 
    30                     }
    31                 }
    32 
    33                 //判断某个学生那个科目没有分数
    34                 if(scores[0].data.length > scores[1].data.length){
    35                     scores[1].data[scores[1].data.length] = 0;
    36                 }else if(scores[0].data.length < scores[1].data.length){
    37                     scores[0].data[scores[0].data.length] = 0;
    38                 }
    39 
    40                 //判断过0和1之后,如果1还有问题就说明0和1都有问题
    41                 if(scores[1].data.length > scores[2].data.length){
    42                     scores[2].data[scores[2].data.length] = 0;
    43                 }else if(scores[1].data.length < scores[2].data.length){
    44                     scores[1].data[scores[1].data.length] = 0;
    45                     scores[0].data[scores[0].data.length] = 0;
    46                 }
    47             }
    48 
    49             $('#container').highcharts({                   //图表展示容器,与div的id保持一致
    50                 chart: {
    51                     type: 'column'                         //指定图表的类型,默认是折线图(line)
    52                 },
    53                 title: {
    54                     text: '学生成绩单'      //指定图表标题
    55                 },
    56                 xAxis: {
    57                     categories: users  //指定x轴分组
    58                 },
    59                 yAxis: {
    60                     title: {
    61                         text: '分数'                  //指定y轴的标题
    62                     }
    63                 },
    64                 tooltip: {
    65                     formatter: function() {  
    66                         return '<b>'+ this.series.name +'</b><br/>'+  
    67                         this.x +': '+ this.y +'¥';  
    68                     }
    69                 },
    70                 plotOptions: {
    71                     column: {
    72                         dataLabels: {
    73                             enabled: true
    74                         },
    75                         enableMouseTracking: true
    76                     }
    77                 },
    78                 series: scores
    79             });
    80 
    81             $scope.$apply();
    82         });
    83     });

    到这里基本上所有的代码也就完成了,

    运行下项目,登录看下效果,效果如下:

    到这里算是完成了整个项目了,下一章会完善下整个项目。

  • 相关阅读:
    windows下安装mysql教程
    python生成器实现杨辉三角
    python默认参数问题
    python中判断素数的函数
    extract()和extact_first()的区别
    硬连接和软连接的区别
    du与df的区别
    命题逻辑
    关于 better-scroll 设置了以后无法滚动或不生效的问题
    Maven *IDEA*
  • 原文地址:https://www.cnblogs.com/Dn9x/p/3584617.html
Copyright © 2011-2022 走看看