程序员的素养

这个题目很大,我用一个我最近遇到的问题来说这个问题吧。


大家看下图


看简单的一张表
就是学生经常看到的成绩单


现在有这么个需求,就是每个学生的成绩单横着打印在一张a4纸上
而且 一张纸只能打印一个学生的成绩单
而且一个学生的成绩单 也只能占据一张纸
这个需求很简单 要求一点也不高


我先说说我是怎么做的
在所有的成绩单最后,加上一个按钮
<input type="button" value="打印" οnclick="printpage()">

<script type="text/javascript">


function printpage() { 
	document.title="";
	PageSetup_Null() ;
	bdhtml=window.document.body.innerHTML; 
	sprnstr="<!--begin-->"; 
	eprnstr="<!--end-->"; 
	prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17); 
	prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); 
	window.document.body.innerHTML=prnhtml; 
	window.print(); 
} 


/*----------------去除页眉页脚--------*/
var HKEY_Root,HKEY_Path,HKEY_Key; 
HKEY_Root="HKEY_CURRENT_USER"; 
HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; 
//设置网页打印的页眉页脚为空 
function PageSetup_Null() { 
	try {	
		if(window.ActiveXObject){
			var Wsh=new ActiveXObject("WScript.Shell"); 
			HKEY_Key="header"; 
			Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); 
			HKEY_Key="footer"; 
			Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); 
		}
	} catch(e) {} 
} 


在jsp的body里用
<!--begin-->

<!--end-->
把我需要打印的内容框起来
例如
<!--begin-->
<table></table>
<table></table>
<!--end-->
页面就能打印了


但问题是,如何保证一个成绩单只占用一页呢?
跟朋友讨论的时候,朋友说,你每次打印一张成绩单,就输出几个<br>呗
我一想,OK呀。
这方法不错
我就先得知道学生前四个学期中,单个学期内课程最多时,到底有几节课。
还有5个学期之后,也就是第二行最多有几门课。
然后根据这个两个数字,来计算打印一张成绩单后,下面得空几行。
然后呢,我就写了这样一个方法:


//max2 是第一列最多的课程数
//max3 是第二列最多的课程数
     private void pareEND(int max2, int max3, PrintWriter out) {
		 int countTR=20;
		 //可以用数组法
	       if (max2 == 5) {
				if (max3 == 2) {
					countTR = 15;
				}
				if (max3 == 3) {
					countTR = 13;
				}
				if (max3 == 4) {
					countTR = 12;
				}
				if (max3 == 5) {
					countTR = 11;
				}
				if (max3 == 6) {
					countTR = 1;
				}
	       }


			if (max2 == 6) {
				if (max3 == -1) {
					countTR = 19;
				}
				if (max3 == 1) {
					countTR = 15;  
				}
				if (max3 == 2) {
					countTR = 14;
				}
				if (max3 == 3) {
					countTR = 12;
				} 
				if (max3 == 4) {
					countTR = 12;
				}
				if (max3 == 8) {
					countTR = 10;
				}
				if (max3 == 9) {
					countTR = 9;
				}
				if (max3 == 10) {
					countTR = 7;
				}
			}
	       
	       if (max2 == 7) {
				if (max3 == -1) {
					countTR = 19;
				}
				if (max3 == 2) {
					countTR = 14;
				}


				if (max3 == 3) {
					countTR = 13;
				}
				if (max3 == 4) {
					countTR = 12;
				}
				if (max3 == 5) {
					countTR = 11;
				}
				
				if (max3 == 6) {
					countTR = 11;
				}
				if (max3 == 7) {
					countTR = 10;
				}
				if (max3 == 8) {
					countTR = 9;
				}


			} 
	       
	       if (max2 == 8) {
				if (max3 == -1) {
					countTR = 18;
				}
				if (max3 == 2) {
					countTR = 14;
				}
				if (max3 == 3) {
					countTR = 13;
				}
				if (max3 == 4) {
					countTR = 12;
				}
				if (max3 == 6) {
					countTR = 10;
				}
				
				if (max3 == 7) {
					countTR = 9;
				}
				if (max3 == 8) {
					countTR = 8;
				}
				


			}
	       
	       if (max2 == 9) {
				if (max3 == -1) {
					countTR = 17;
				}
				if (max3 == 5) {
					countTR = 17;
				}
				if (max3 == 6) {
					countTR = 17;
				}
				if (max3 == 7) {
					countTR = 17;
				}
	       }
	       if (max2 == 10) {
				if (max3 == -1) {
					countTR = 17;
				}
				if (max3 == 5) {
					countTR = 10;
				}


				if (max3 == 6) {
					countTR = 9;
				}
				if (max3 == 7) {
					countTR = 8;
				}


				if (max3 == 8) {
					countTR = 7;
				}




			}
	       
	       if (max2 == 11) {
				if (max3 == 8) {
					countTR = 7;
				}


			}
	       
	       if (max2 == 13) {
				if (max3 == -1) {
					countTR = 16;
				}


			}
	       
	       
	       countTR+=8;
			for (int j = 0; j < countTR; j++) {
				out.write(max2 + " " + max3 + " " + j + " aaaa<br>");
			}			
	
}


我得不断的试验,上面有几门课,下面有几门课的时候 到底应该空几行 才不会影响下一张的打印。


可就是这样还不行,因为有的课程名字太长,会占用两行..........
至此,我已经花了快3个小时了
特别的头疼
感觉都没有爱了。


晚上睡觉的时候,脑子里,灵光一闪
就想到,能不能再每个成绩单打印完毕后,直接输出一个分页符呢。
然后在百度了3分钟后发现了:
<br style='page-break-before:always'>
然后我在代码里写下了这样的话:


师弟,师妹呀
人蠢不能怨社会
当你发现自己现在干的事情很无聊 很琐碎的时候
当你发现自己现在干的活 是一种纯粹工作量的时候 
那么请 一定要暂时先思考一些 这么做 方向是否正确
请一定记得 写代码是一项艺术 那是一个脑力活
所以 别急着敲代码  多想想
但是总有那么一些蹩脚的程序员 把脑力活 干成了体力活
那些干体力活的程序员 我们俗称码农
而那些 能在大方向上 给码农指示方向的程序员我们称之为 架构师

by dlf 2016-01-16
qq:460795365
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值