录入数据后的处理工作一向很重要,可怜的安徽考试院院长就是因为高考数据最后漏统(说句实话,这个错还真不容易…)而撤职赋闲。这次公司这里也接到类似的任务,关于中考,只有几个县,每县人口大约3w人。我又在坑坑洼洼中干完了事情,回顾发现自己做的实在不尽如人意。
1、 数据录入,使用的是由深圳一家公司提供给教育部的录入软件。根据传统的责任推推推的精神,高考数据出事后,那家公司的客服电话便人间蒸发了。不过根据以往的经验,不会出任何事情,是要导入报名表 志愿表 报名点代码表 这样录入工作会有条不紊的顺利进行。别人写的程序就是好点,功能全,又稳定,基本不需要费心。
2、 数据录入好后就是处理的问题,打开数据库后发现有一堆表……,所有录入的地方和学科成绩都在一起,还有第一次,第二次,校队后的录入成绩在一起。硕大的一张表绝对让人头痛。幸好是提供的程序里有一个导出数据功能,导出成csv格式,这样可以导入所希望的excel里。做起表来会容易很多。
3、 又以为低估做表要求,以为只要做个简单的表就可以。开始做的是导入出excel表格后按客户加工一下就可以了,不必麻烦什么编程。以后知道无论做什么表,都要从数据库直接生成,而不是生成半成品表格通过excel加工。
4、 需要生成的表有(高低分排序 座位号排序 准考号排序) 简单的三张表 和 成绩分数段 按学校分 按报考志愿分 和 打印做好的成绩单的纸…… 麻烦的是这几个解决方案。有几个是人工分的……好可怕,现在把事后做的方案拿出来。
经验方案:
一、 数据库重新制作sql数据库,录入程序提供的数据库不能有效的直接使用。那个数据库的表做成最终表(不可修改,缘由是后期会有人来要求修改成绩数据……可爱的中国)。成绩表中记得留出各科成绩的[所处分段]指标。很多地区需要的成绩表会有这个学生各科成绩所处在全地区分数排名的位置,首先要sql语句获得人数,按比例获取分数,以这个分数为标准指定等级,这个完成直直接sql语句可以完成,但是执行语句需要花一定的时间。最后是总分,只要相加就可以。不过注意0.5小数问题。这些是不是都用sql语句完成?……没想好
二、 简单表是简单生成的。只要order排序就可以,输出的表自然是漂亮为好,输出成excel文档自然很好,但是编程看上去总是更好些,打印表格有很多控件,最有名的是水晶报表和activereport,这两个控件在网上都有破解版的下载,我用的是国产的Grid++Report 4.5 因为程序小,中文,外加例子多,所以就选择它了。功能虽不多,但也可以满足要求了。直接在表格控件上输入sql语句便可打出表格,看上去很简单,实际很麻烦。因为有些情况又需要做些调整……发现数据少的话还不如直接写到程序表格上,然后表格直接打印所需要的正显示的表格……似乎这样简单好多啊。问题还是会存在,VB所提供糟糕的MSFlexGrid对付1W行以上的表格简直是龟速。于是选择了大家比较常用的VSFlexGrid ,照样龟速……如果是一行行的写数据是不可能了。(如果使用VSFlexGrid 的VirtualData属性可以让一个正打开的rs 高效的显示,但是需要每行做的结果也只有依靠sql语句一起执行了,某些时候真慢啊。)于是回到最初常用的临时表。查询的结果尽量变成临时表,这样最后一句sql从临时表里获得数据,无论是速度还是语句简洁都提高很多(写程序也相应变麻烦了,临时表处理真讨厌,如果不是很必要的情况,是不写存储过程的,天平开摇啊摇)。
三、 复杂表格的倒塌……真是悲观的表格,因为志愿分成好几个,分数的不济,自然会让人滑到下个志愿。最后输出每个高中的名单(刚开始做的时候没有想到要做这种表。像高考录取系统做的多好,网上也没共享的……真的很恨人)。这类表格制作1、用人数比例划定分数线,剩下的人放入临时表,这样这个临时表里就有了所有第一志愿没被录取的人。再在这个表里找第二志愿的人,用SQL-server真的很简单……竟然有一堆人没志愿,或是志愿不对、乱码……,不过也知道了有些学校不要成绩,只要拿着成绩单就可以去上的学校。分数段表自然简单的多,用手工都可以做出来。最后是打印做好的成绩单,成绩单是印刷好的,使用针打打印机,用打印控件连续打印十几张纸后总是对不上,发现最好的办法竟然是……打印txt文档,几乎不要手动调整。多写一个打印的小程序,很简单的程序,数据加入计算好的空格和空行,写到一个文本里。打印用cmd命令 print 不能打印超过65535字节的文件。替换下命令 copy result.txt lpt1 意思是直接复制到打印串口1上。有些地方成绩单连画框都要自己打印。简单的做个样板然后按这样板打印(贴到记事本里就美观多了,字体需选择宋体)。如果发现针式打印机的打印速度很慢,那么最简单的方法是换驱动,用同类型高版本的驱动代替,有意想不到的收获。
#begin
XX区2007年度初中毕业学业考试成绩通知单
第一志愿:<zy1> 毕业院校:<byxx>
┏━━━━━━━┳━━━━━┳━━━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━┳━━━━┳━━┓
┃准考证号 ┃座位号 ┃ 姓名 ┃语文┃数学┃英语┃政治┃历史┃物理┃化学┃体育┃实验┃ 照顾分 ┃总分┃
┣━━━━━━━╋━━━━━╋━━━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━╋━━━━╋━━┫
┃<zkh> ┃<zwh> ┃ <xm> ┃<yw>┃<sx>┃<yy>┃<sp>┃<ls>┃<wl>┃<hx>┃<ty>┃<sy>┃<zg> ┃<zf>┃
┗━━━━━━━┻━━━━━┻━━━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━┻━━━━┻━━┛
-----------------------------------------沿此分割线剪下-----------------------------------------------------------
#end
"┃","━","┗","┃","┃","┏","┣","━","┛","━","┻","┓","┫","┳","╋"
九行
以上的计划,经验和教训,只有等到下次才能实践了。最后说点VB的题外话。VB的IDE是非常好的,但是比起 .net 的工作环境,显得真落后(如果vs2005的打开速度能像VB6.0一样迅捷该多好)。推荐一个插件 CodeSmart 2007 装后让我每天都想写些VB程序。同时也迷上了tab标签,maxthon,VB,现在连系统都因为装了QTTabBar布满了标签。
有些时候这样的东西是不是使用网页操作会更好些,随着硬件水平的提高,javascript虚拟机和 flash性能日趋强大,现在的人都开始逐步习惯了网络上提供的WEB服务,而不是装一大堆软件,装机软件标配也只剩 office、winrar、杀软、播放器和IM(也许会给你装XX输入法和XX证券软件)。如果有工作或专业的需要才会装几个其它的东东(不限软件控和IT行业人士)。在诸如google等邪恶公司(入乡随俗的邪恶)的努力下,跨平台的Web已经成了最主要的工作和交流方式。维护程序简单,更新频繁,浏览器上操作自然可以满足一般大众需要。以后那些需要编译安装的exe程序以后估计都只有变成行业才需要的专业东东了。