早晨躺在床上看书的时候,脑子忽的又想起那个问题:我垫钱帮人交四六级报名费,却找不出这位不缴费的同学是谁。心里突然老大不愿意——这可是我半个星期的伙食费呢!于是开始思考对策,务必要找出漏网之鱼。

我们报名四六级的流程是这样的。学生网上报名,教务员将报名学生的信息发给学委,学委按照名单收取报名费。汇总到我这里的时候,总是发现报名的人数和缴费的人数有偏差。因为名单里只有学生专业信息(信工和光信),而学委收取费用是按行政班(5个班)划分的。因此不知道是哪个班的同学没有交齐。

解决问题的关键就是找出缺漏的班级。毕竟让每班学委从几百个人名中挑出自己班的同学工作量太大,而且不能避免再次缺漏的情况。上一次我要求各班学委提供缴费名单给我,我一个一个核对。这一次没有人发给我,因此不能故技重施,得采用新的方法。

首先搜索excel有没有提供某些映射功能。这个功能具体是这样的:表A里学号和班级有对应关系,让表B里的学号根据表A的对应关系自动显示对应的班级。表A即学生信息表,表B即报名表。最后统计出现的各班级的次数,与各班缴费的人数对比得出结果。但是我没有找到可以实现的方法。

既然excel不能提供这样的功能,我只能通过数据库的方法。步骤是这样:将全级学生信息导入数据库,然后将报名表另存为csv文件,通过php的fgetcsv()函数获取报名表信息,递归查询输出各班出现的次数,最后汇总。 关键代码(用了CI框架):

function count(){
        $flag = array();   //班级标志,初始化
        for($i = 0;$i < 5;$i++){ 
        $flag[$i] = 0;
        }
        $file = fopen(base_url('static/english.csv'),'r');
        while ($data = fgetcsv($file)) {  //每次读取CSV里面的一行内容   
            //print($data[0]);
            $this->db->where("num",$data[0]);
            $this->db->select("*");
            $query=$this->db->get("xuewei");
            $str = $query->result_array();
            if (!empty($str)) {
                
                $toflag = $str[0]['class'] - 1;
                $flag[$toflag]++;
            }
            else {
                print("Can not find this gay: ".$data[0]."<br />");
            }
        }
        print_r($flag);
        fclose($file);
    }

从输出就可以知道各班缴费的人数了。然后将这个班的报名同学信息通过类似的方法提取出来,与缴费名单比较,就可以知道是哪位同学没有缴费。