作者 内容
 redguardtoo  给一个小企业做的web办公自动化系统
 

给电力设备公司做的一个系统,还没有完成。
我不知道国内的小企业是否有共性,就针对这个企业的要求谈一点经验教训。

最关键的是给钱太少太少,然而工作量太大太大,有25到30个报表,每个报表
有150到200个字段,而且这些报表都是奇形怪状的(有excel模板可以参考)。

我试作了一个报表,需要花6到7小时,而且错误百出。

我想尽一切办法提高效率,最后终于能够在15分钟内完成一个报表(而且基本正确)。

首先,我说服了由该公司的信息部门的人来做界面(htm),并且该界面就是由
原来该公司使用的excel报表另存为htm。

系统的原型,我说服他使用交大的BBS作为参考(当然没有任何图片和flash),
这样节省了大量设计时间。

接下来的工作量就是要为每个报表设计数据库,设计输入输出界面。

设计数据库的表是一个非常耗时的工作,我想出了一个办法,可以将时间控制在
2到3分钟内,关键是充分利用原来的excel旧报表,先开发出一个excel的宏,
可以从报表种自动读出每个单元格的位置(address),以位置作为数据库中
表的字段名(我认为字段名只是为了唯一标示一段数据),将这些位置输入数据库当然也不能靠人手工来做,我使用一个鼠标键盘宏软件(EZMacro)。

在设计数据库和页面时,我大量使用的技巧就是编数组,将各种具体的字符串
编成数组,集中放在一个页面中,然后使用for 循环,这样代码中没有出现任何具体的报表的名字。

输入输出界面当然也重用一个页面,并且数据的输出使用的是客户端的脚本,而不是给出具体的控件和变量名。
客户端的脚本通常看起来象这样
for each element in document.elements
select case element.type
case "checkbox"
'...
case "text"
'...
case else
end select
next
注意这段脚本中是通用脚本,没有出现任何控件的名字。

总之,在实际编码时尽可能抽象的编码而不是使用具体赋值语句

 02/10/28 01:45 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 快活鱼  回复: 给一个小企业做的web办公自动化系统
 

“尽可能抽象”从可维护性的角度来看,简直是一团糟,还有这样写代码是不是有些累呀。

你还不如用我的方法,先用标准的变量命名规则来写程序。完成后用什么a1,b2,c3之类的替换所有的变量名。这样子你的客户端代码别人也读不懂。修改的时候替换回来再改,改完再替换成a1,b2,c3。

尽可能抽象的编码而不是使用具体赋值语句?你可以不用“赋值语句”而能完成一个Web程序,厉害!

 02/10/28 09:27 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 redguardtoo  我指的是不要对一个控件具体赋值,而是在客户端的脚本中写一般的赋值语句,为第一个报表写脚本,调试的时候,速度很慢,但是第二第三个报表就很快了,考虑到有25-30个报表,这样做还是很快的。因为报表都是类似的,没有什么很复杂的关系(例如这个单元格和那个单元格之间要满
 

一般化的脚本语句调试比较累,看起来也不直观。
但是考虑到报表的数量之大,报表本身又很简单(我指的是没有复杂的逻辑关系),所以这样做还是很有利的。。

 02/10/28 09:36 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 快活鱼  如果象你说的你的数据库字段名全是A1,C1,D1之类的东东。过了半年,你还看得懂你的程序吗?
 

就算你厉害,你懂。你走了,别人看得懂这个数据库吗?你根本就没有建模、数据库设计的过程,更不用说数据库文档、程序文档了。看样子你程序中也是没有注释的,因为写注释太费时间,效率太低了!
就这样,又一个垃圾系统诞生了!也没关系!反正在中国,这样的垃圾系统太多了,多这一个不多,少这一个不少。
Sorry,我绝无贬低你的意思。我觉得你写程序还是很厉害的。只不过这里是一个软件工程论坛。
 

 02/10/28 09:55 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 redguardtoo  我倒是以为自己做的完全符合软件工程的要求呢
 

可不要过早下结论

 02/10/28 13:29 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 redguardtoo  asp界面,告诉我你打算如何见模
 


xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">









  





<%
'here, we must connect to database at first, then global variable "conn" will be used
call sub_connect_db()
'now we comes to the report header
call sub_report_header(request("action"),request("report_table"),request("id"))
%>
 


 



 
style='border-collapse:collapse;table-layout:fixed;width:692' height="1012">
 

 

 
受控号:JDS/R7.5.1-16(A/0)

 

 

 
上海久隆电气设备试验有限公司

 

 

 
class=font729632>  class=font829632>全 style='mso-spacerun:yes'>  class=font729632>  class=font829632>具 style='mso-spacerun:yes'>  class=font729632>  class=font829632>验 style='mso-spacerun:yes'>  class=font729632>  class=font829632>告

 

 

 
单位 class=font929632>:

 


 
变配电站名称:

 


 
使用班组:

 


 

 

 
试验理由 class=font929632>:

 


 
交接

 


 
检修

 


 
证明性

 


 
预防性

 


 
故障后

 


 


 


 


 

 

 
试验设备 class=font929632>:

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 
设 备
名 称

 
style='mso-spacerun:yes'>    class=font629632>名

 
style='mso-spacerun:yes'>    class=font629632>号

 
额定电压

(千伏)

 
style='mso-spacerun:yes'>  流 
耐  压

 
style='mso-spacerun:yes'>  流 
泄  漏

 
发光电压 class=font929632>

(
千伏)

 
class=font929632> style='mso-spacerun:yes'>         

 

 

 
电  压

(千伏)

 
style='mso-spacerun:yes'> 

( 分 )

 
style='mso-spacerun:yes'> 

(千伏)

 
style='mso-spacerun:yes'> 

(毫安)

 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 


 


 


 


 


 


 


 


 


 


 

 

 
 说

class=font929632>  class=font629632>明


 


 

 

 


 

 

 


 

 

 


 

 

 


 

 

 
试验日期 class=font929632>:

 


 
气候:

 


 
相对湿度:

 


 
环境温度:

 


 

 

 
class=font929632>  class=font629632>核:

 


 
试验:

 


 


 



 









 

 02/10/28 13:31 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 redguardtoo  这是一段模块的代码,我想注释应该够多吧。
 


<%
'-----------------------------------------------------------------------
' 这个模块从数据库中读出数据,然后给予几个全局变量,这样客户端地script就可以读这些值
' 客户端地脚本应该紧跟着这段脚本,否则无法意识到服务器端全局变量地存在
'-----------------------------------------------------------------------
report_table=request("report_table")
action=request("action")
id=request("id")

'连接数据库
call sub_connect_db()
'将查询内容放入两个数组,一个数组放置名字,另一个放置值,如果是null,值就是""
dim arr_value '数组,保存值,以'符号分割
dim arr_name '数组,保存变量名,以'符号分割
dim l_arr_count '数组长度

'initialize
l_arr_count=0
arr_name=""
arr_value=""

strSql="select * from "&report_table&" where id="&id
set rs=conn.execute(strSql)
if rs.eof or rs.bof then
l_arr_count=0
rs.close
set rs=nothing
else
'读入数据
for each myelem in rs.fields
'response.write myelem.name+" " 'debug
arr_name=arr_name+myelem.name+"'"
'response.write cstr(myelem.value)+" " 'debug
if isnull(myelem.value) then
arr_value=arr_value+"'"
else
arr_value=arr_value+cstr(myelem.value)+"'"
end if
next

l_arr_count=rs.fields.count

''去掉最左边地'符号
'arr_name=right(arr_name,len(arr_name)-1)
'arr_value=right(arr_value,len(arr_value)-1)
'response.write " arr_value="&arr_value 'debug
'response.write " arr_name="&arr_name 'debug
end if

'set rs=nothing
'断开数据库
call sub_disconnect_db()

%>