do-and-want

致力于企业信息化开发
随笔 - 13, 文章 - 0, 评论 - 34, 引用 - 0
数据加载中……

2008年10月13日

IE和FireFox 对动态FORM enctype属性的认识问题

 IE和FireFox 对FORM enctype属性的认识存在差异,一般来说对于动态创建的form,如果因为要上传文件的原因很自然的会使用类似如下的代码:  

Code

 

这段代码表面上看没有什么问题,但在IE中却还是无法改变FORM的编码格式,

也就是说传到服务端的ContentType仍然是:"application/x-www-form-urlencoded”.

但在FireFox中却能正确识别,也就能正常上传文件。

那如何才能使IE和FireFox都能正确按照我们的要求编码FORM 数据呢?找了N久终于找到了解决方案,就是直接指定encoding就行了,且看如下正确的代码:

Code

 

希望对遇到类似问题的朋友有所帮助! (注:代码中滤去了上下文代码。)

 

posted @ 2008-10-13 00:23 畅想自由 阅读(76) | 评论 (0)编辑

2008年8月7日

不再技术崇拜,精神开始焕发

       最近想明白了许多事情,每次与客户的接触,都让我感慨良多。特别在MIS软件行业,客户绝对不会为你是否使用了新技术买单。客户要的是最终的产品,他不管你内部是如何实现的,软件行业说到底是服务行业,新技术的使用如果无法真正的降低开发成本,或者是无法提供可维护性,那么对于商业环境来说绝对是鸡肋。也就是说它是学术性的,只适合呆在象牙塔里,供圣徒顶礼膜拜,去消耗那些热血青年的激情。我们每天都会看见很多新技术,这些东西让我们应接不暇,为了跟上技术发展的潮流,我们几乎牺牲了所有的时间在新技术的学习上,我们熬夜看书,熬夜写博客,都是为了更好地学习它,更多地与人交流,深化它。如果你是做.NET开发的,这种问题就更为严重,别说第三方机构开发的组件,即使是微软自己推出的技术应用,就多得吓死人。每每听到有人在滔滔不绝地谈论某项新技术时,我都在想,这人又开始朝圣了,我们真的需要这些所谓的新技术么?如果手写SQL的可扩展性和可优化性要更好,那为什么还要使用Nhibernate呢?难道就因为Nhibernate比较出名?实践证明,手写SQL的模式甚至在培训成本方面都要比NHibernate来的低。一个普通的程序员,要真正的掌握Nhibernnate ,熟练地使用HQL,没有一个月是不得行的;但要让去写SQL,他立马就会。特别在微软越来越强调,程序员只需要关注业务的今天,微软的很多产品,已经简化到了只需要一个简单的DEMO就可以熟悉的地步。因此在MIS行业,已经到了拒绝技术崇拜的时候,让我们抬起头,四处瞧瞧,对自己所处的业务行业加深了解,只有对业务了解透了,我们才会有更多的机会,才会在职场中游刃有余。

posted @ 2008-08-07 23:12 畅想自由 阅读(961) | 评论 (21)编辑

2007年8月9日

Vs2003中Grid绑定强类型的问题

    今年下半年估计VS2008正式版就会发布了,但工作中修改某些程序还是会用到Vs2003,本来用什么开发环境到没有多大关系,因为程序逻辑都是一样的.可能是习惯了.Net2.0下Grid的强类型绑定,所以就会把这种习惯用到.Net1.1的开发环境中去.为什么非的要对Grid绑定强类型集合而不是我们的老朋友DataTable呢?这里要说明一下绑定强类型集合的优点:
     1.可以真正实现全对象的操作,也就是你可以直接操作对象集合,而对象的增减会直接反映到Grid上,并直接刷新UI外观.
  2.如果Grid是可编辑的,此时数据的输入性验证,完全可以在对象属性中进行控制,不符合规则的数据,不会被保存.如果绑定的是DataTable 由于它接受的是Object,所以理论上你可以从界面中输入任何值,此时你就不得不遍历进行判断不符合项,这是非常费劲的,并且容易出错.所以对于Grid是可编辑的情况,绑定强类型几乎是首选.
  3.在保存数据时避免装箱与拆箱操作,.Net2.0下自不必多说,可以使用泛型集合来避免,但.Net1.1下该怎么办呢?幸好微软为我们考虑到了这点,只要你的对象集合实现了IBindingList接口,并继承CollectionBase(建议继承它,这样你可以省去很多事,并可以实现对象集合的功能扩展),你就可以通过操作Grid实现对绑定对象的添加,修改,删除,当然此时你操作的还都是内存对象,当要回写到数据库时,你可以遍历对象结合,将每一个对象抛向业务层去处理.
  到这里为止,好像除了不方便外,.Ne1.1在绑定强类型上和.Net2.0貌似没有太大的区别,但我们往往又是一群不知足的人,问题也就随之而来:Vs2003下Grid绑定强类型时,其绑定顺序和对象属性的顺序并不一致,并且好像没有规律可寻,而Vs2005下Grid会依照属性定义时的顺序来绑定.别小看这个区别,当我们要求列要按一定的顺序出现时,问题就比较严重了,不管如何调整,Vs2003下的Grid就是不听话.如果你编写的是WebForm的程序还好办,你可以预先指定列的顺序,但WinForm下即使预先指定也是不行的,因为Grid绑定时会重新绘制列.不知道该如何解决,算不算Vs2003下Grid的一个bug.欢迎大家提出解决方案.
(最后补充一点,如果使用Linq,就方便多了,可以在语言级别使用Select进行过滤,真正作到想显示那个就显示那个,呵呵.)

posted @ 2007-08-09 22:44 畅想自由 阅读(63) | 评论 (0)编辑

2007年6月22日

青春的岁月我们身不由己,只因着心中燃烧着梦想...

         最近爱听许巍的歌,觉得那歌词写的真是太好了。忙的时候放松一下,感觉很好。每天上下班要走很远的路,晚上回来要做一些受朋友所托的项目,感觉很累,有时候会盯着电脑屏幕老半天也不知道要做些什么,虽然朋友都很够哥们,不是很催我,但自己总希望早点让这些结束,画上句号。虽然时常想这些到底值不值,但那只是一晃而过,因为谁还会和钱过意不去呢?但还是希望闲下来多学点东西,为了那心中的梦。
        最后借用胡适老先生的话来自勉:

        "总得时时寻一两个值得研究的问题!"
        "总得多发展一点非职业的兴趣。"
        "你总得有一点信心。"

posted @ 2007-06-22 21:29 畅想自由 阅读(105) | 评论 (0)编辑

2007年3月1日

职业规划是什么?

        最近长常常被问及,关于职业规划的问题,大体是说:你看你也老大不小了,也应该有一个对未来的规划了。

         是啊,都已经是奔3的人了,难道还不知道自己追求什么吗?说来也搞笑,我追求的是什么,到今天我也没搞明白。要在两年前,我的梦想很单纯:就是找一个全职编程的工作。在这个我最大的梦想“意外”地实现之后,是否走的很平坦,自己在不但的进步,工资在逐渐的提高,信心在慢慢的膨胀,激情在渐渐地消退,心境开始变的浮躁。我到底需要的是什么,却越来越来搞不清楚。

        在毕业后的4年中,后两年我做全职写程序的工作,而前两年我在做什么呢?哦,我先进了一家韩国企业做扬声器开发并兼职企业信息化方面的工作。企业是什么,企业是如何运作,我了解了许多,那时编写的代码马上就可以应用到生产的第一线,并且我了解生产,真实地体会到了信息化对于企业的作用。当然平时我还是以开发扬声器为主,闲暇时手工做一些喇叭和几个同事在听音室里欣赏王菲的歌曲,我们一致认为也就只有王菲的歌才是检验喇叭好坏的“唯一标准”。 但好景不长,由于几个要好同事的离去,人心思走,我离开了那个人情味很浓的韩国公司(不要认为所有的韩国公司都不好),去追逐我真正的梦想。

        回到成都,我的性格再次害了我,也是金钱害了我,由于贪图眼前的利益我去了一家不该去的公司鬼混了差不多一年,并且这个公司既不搞程序开发,当然也不生产扬声器(呵呵)。最后就象小说一样,一个偶然的机会,让我步入了“正道”--成为了一名 全职程序员。之后,为了修炼内功,我发疯似的消耗着自己的体力和精力,当我在为我的“成功”转型手舞足蹈的时候,一个声音在问我:海,小子,你的it职业规划是什么?我日,妈的,原来搞it还需要这个 “职业规划”啊。考,我以前怎么就 没听说过呢?我郁闷之极,翻来覆去地思考,头都想疼了,但还是一无所知。

         思考这两年自己的程序生涯,突然发现居然没有以前搞扬声器时快乐了,以前的快乐是:程序让别人快乐,我快乐。现在是程序让客户满意(因为他们是付了钱的,所以他们最多也就是满意),但并不见得我就快乐,快乐的是老板,但他又不让你看到,他给你讲的最多的是今天要更正多少bug,让你觉得你的工作还有许多需要改进。此时你不但没有成就感,反倒觉得愧对了公司。没有了快乐,也就失去了前进的动力,没有了动力,自己需要什么,需要怎么做,就越发不清楚了。

         问题出在那里呢?我觉得就出在,只有你的工作让别人解放了,轻松了,快乐了,你才会感到快乐。也就是只有你快乐,我才会快乐。这和工作性质没有关系 ,所有的工作都一样。如何做到这一点,我觉得这就是职业规划要解决的问题,而职业规划最终的目的,应该就是要使一个人工作快乐,快乐地工作。

posted @ 2007-03-01 01:47 畅想自由 阅读(407) | 评论 (5)编辑

2006年6月15日

做一个专业的IT管理人才必备的十大能力

              做一个专业的IT管理人才必备的十大能力

     (转自CSDN:http://job.csdn.net/n/20060606/91351.html  By: Jeff Relkin )     

  作为IT技术人员,相信没有一个人愿意永远在底层编写程序或做简单的系统维护。经过一段时间的技术和经验的积累,很多人都向往更高层的职位,但如何能成为一个专业的IT管理人才,并不是每一个人都清晰、明了。

  如果你真想成为一名成功、成熟的IT专家,你需要不断地扩展你的技能与知识——有些知识领域可能对你很陌生,本文阐述了可以帮助你提高职业素质的重要能力。作为一名IT专业人士,要想有一个成功的职业生涯并不是很容易的事情。你有可能每一种技术都懂一些,但又都不精通,也有可能是一名专才。无论如何,一旦你想成为IT专家,想在你的游戏地盘里成为楚翘,你需要不断扩展的、跨领域的素质。但是,大部分的素质能力存在于传统IT技能范畴之外,它们可能适用于其他的功能学科。我们与其他人的差异越来越小,这超出了我们的习惯思维,恐怕对很多想迅速成功的IT专业人士也是一个不小的打击。

  理解现有的和新兴的技术

  所有IT专业人士需要的一个最基本的能力便是对他们的基本技术技能进行深度和广度的拓展。如果用马斯洛的需求层次来比喻,那么这种能力应该属于食物和水的层次,你必须有这些才能满足基本的生存。上课、阅读文章、研究产品,参加一个专业性质的组织,你需要掌握你正在使用的技术领域的所有信息,而且你还需要有实践机会去应用这些知识。

  如果你参加一些技术资格或职称的考试,你应该经常提醒自己,你的目标并不单纯是为了在自己的名字后面加上许多的头衔,而是实现你所受教育的价值最大化。

  西方有句谚语,赢得游戏胜利不仅仅需要你将眼睛盯在正在击打的球上,而且也要能预计到下一个球的方向。历史经验已经证明,任何系统的平均生命周期大约为16个月,因此为未来做好规划很有必要。当你充分了解你正在做的事情后,实施的效率会更高。

  设计技术性架构

  任何自己修建的一个系统作为个体的功能都是自以为精妙和可执行的。但如果将它放进一个大一点的系统,它可能就会出现问题,也许你的技能还不是很高妙。无论你是负责全面的应用与网络设计,还是部分营建一个系统部件,支持一个企业架构,你都需要知道什么是良好的、扎实的架构设计法则。

  一套有效率的技术性架构设计将零件拼接在一起,它应该就像一台容易操控、价格合理的机器一样。我已经发现,架构设计如果基于“奥卡姆剃刀原理”(Occam's Razor),那么它往往是最棒的,奥卡姆剃刀原理这个词语源于拉丁语,意为“如无必要,勿增实体”(Entities should not be multiplied unnecessarily),即简单就是最好的。当考虑设计之时,要记住每个组织都有一些独特的程序,大部分的组织性程序都相当的普通,它们能够用可配置的通用解决方案来解决问题。很多架构可以利用购买以及将一些很小数量的部件组合在一起的方式来完成,而不是要重新发明一种结构。通过这种方法,你能够在很短的时间内,利用更少的成本,为你的客户提供一种优质、容易操控的产品。同样理念还适用于个体应用与架构的设计与开发。

  系统集成

  技术为很多的目的服务,最重要的能力便是使程序的自动化。不是使用传统的供应商订单、库存管理以及产品市场推销手段,而是使用供应链程序,流程通过允许供应商和生产者来进行复杂地沟通控制,从而完成原材料进入生产流程到产品抵达消费者手中的整个过程。

  Sarbanes-Oxley和其他监管法则都要求企业达到内部控制的标准,它们在系统设计领域相当常见。随着产品和平台继续地增生扩散,随着企业日渐将自己的系统和其他的系统相连,高质量的协同工作能力是必须的。

  了解企业

  企业实体是复杂的组织,没有哪个企业是与别的企业完全相同的,就像雪花一样,没有两片雪花是完全相同。这种推动特定业务运转的灵活性不太容易被掌握。很多时候,尤其是在大型企业当中,多种文化是并存的——有一个文化是企业层面的,而别的存在于部门层面。当你认为是安全下水的时候,你对企业运行的细微直觉会因为合并或者管理性质的巨变失去灵光,一切都发生了改变。

  当我们认为自己能够在企业文化的风浪当中驾轻就熟,而无需在乎浪潮或者风向之时,我们不可以自鸣得意。同样的,尽管企业灵活性的东西当中,很多是普通的,可以传授的知识,那种认为在一个企业环境当中取得成功的做法同样适用于另外一个企业的想法是愚蠢的。我们必须学习我们身处的每个新环境的特质。

  规划管理项目

  Joe Torre被视为是一位非常优秀的经理。很难想像,如果他没有一套相当周全的比赛规划,这位纽约人能够在10次比赛中9次取得胜利,并且获得6个AL锦标赛以及4个世界性系列比赛的冠军。这种计划不是针对年度比赛的,而是每一场比赛。

  无论你是一位经理或者是一位选手,一名超级明星或者是一位业余玩家,你都要为自己近期和远期的比赛制定规划。你如何为今天进行规划?为这周?为今年?你如何完成这些目标?你应该问自己很多“做什么”以及“如何做”的问题。如果你是一名开发人员或者是一名网络管理员,你现在就需要培养自己的规划能力。如果你无法管理自己,你当然就会在管理别人或者复杂项目之时捉襟见肘。

  注重沟通与倾听

  任何东西都可以平庸,除了一种能力你不能不做到完美:沟通。这是两个最重要能力当中的一种,沟通对IT专业人士尤显重要。良好的沟通是双向性的事情,你来我往同等重要。IT行业是锻炼你雅量的完美地方,因为这一行业需要沟通的时刻太多了。

  无论你怎样看待工作和生活,每个IT专业人士实际上都是一名顾问。作为顾问,你有责任去为你的客户提供最大的价值。这样做意味着你至少了解你客户的业务,客户业务运转的情况,这意味着你要去倾听。你的客户有资格知道他们付给你的钱获得了怎样的回报,这意味着你必须主动的、有规律的让他们知道你正在为他们的利益而奔忙。

  这一点对传统的IT人员来讲很难。我们大部分进入这一行业的人认为自己接触代码和电线的机会大于与人的接触。我们以为最好的方法便是坐在我们的桌子面前,埋头苦干。这些都是致命的错误,尽管沟通做起来很不容易,也或许会和我们的个性背道而驰,但你别无选择,只能培养这些能力。幸好人人都能够学习,经过一定时间的锻炼,沟通将会变得容易一些。

  专注结果

  另外一个绝对重要的能力便是执行的能力。计划再棒,也只是空谈而已。归根结底,你需要用东西来证明你的努力。

  最好的方法是了解你客户的一些重要信息,比如他们是谁,他们想做什么?作为一名IT专业运营顾问,你有责任向你的客户提供建议,这种建议建立在你的知识与经验之上。

  但别忘了,最终是你的老板或同事、团队领导、你工作的最终客户进行决策。有时候,这些决策并不是你推荐的。你需要认真思考其中的缘由,但不要让任何分析将你麻痹,也不要让自己陷入唐吉柯德式的盲动之中。80-20定律在这里起作用:80%的结果能够通过20%的努力来完成,超出这一范畴的多余价值经常不值得耗费成本。

  进行战略性的思考

  这是一个竞争日渐激烈的世界,今天的IT专业人士必须每天去证明,他们能够增加战术与战略价值;他们要在自己组织的任何一次会议上,成为受欢迎的人。在过去十几年的时间里,企业已经开始意识到IT的战略重要性,企业认为IT不仅仅是会计账目上的死水一潭,而是能够给企业带来价值的部门。

  大部分的IT部门是被动式的进行工作,他们等待自己的业务客户。高性能、高度成功的IT部门是积极的,在完成公司总体目标的过程当中,他们以咨询式的态度与自己的业务客户共事。

  影响和说服

  上个世纪50年代那种命令式、军队式的组织管理模式已经让位于更加平行的组织管理模式。直接管理和影响管理已经相辅相成。我们不再命令别人做事情。我们会用说服、协商、沟通等等方式去解决问题。这是你训练沟通能力的好机会。有了沟通能力,其他的能力问题才能迎刃而解,像战略性思维、业绩挂钩等等。能够影响他人的IT专业人士总是代表着高效、富有能力、受人尊敬的人士。不要错误地认为这只是经理们该具备的能力。影响和说服是推动协同性工作环境完成的重要技能。

  有适应能力

  一名技术专业人士意味着具有某个特殊开发环境的专长或者有能力开发、支持一个网络,但是在现在,别以为你仍然能够靠这些东西过好日子,如果你和其他提供某一类IT服务的专家一样,你就是一个没有优势的普通职员。你应该成为一个真正的IT多面手,需要不断地进行技能扩展工作。这样才能在众多的技术人员当中显示出你的优秀。

  有些能力,比如技术技能与知识,相对来说比较容易掌握。但类似业务知识一类的知识,则需要你花更多的时间掌握。个人和团队的管理、领导艺术以及和同事、用户共事的能力,这些能力需要你调整自己的个人态度以及个性才能获得。

  如果你选择在IT行业就业,你也选择了让自己成为变化的适应者。我们的专业变化很快也很深刻,我们必须认真地对待这种变化。无论你喜欢与否,都要尽快适应业务变化。竞争的压力、新手的进入、管理的变革、战略的调整、产品的开发,任何这些因素都会导致变化。现在,几乎没有一个行业没有被IT技术所影响,作为一个可以信赖的专业人士,我们必须让我们的企业适应这种变化。

 


 

posted @ 2006-06-15 17:32 畅想自由 阅读(299) | 评论 (0)编辑

Delphi的类与继承

      既然已经做出了com程序用delphi来开发的决定,那当然就要对delphi进行一些深入的了解。有人说delphi是一个用控件堆砌起来的工具,和vb没什么两样;也有人说dephi实际上是面向过程的,他的面向对象并不彻底。实际生活中持这两种观点的人不在少数,就拿我认识的一个非常好的程序员来说吧,他很早就开始用vb,到后来接触到delphi,并且用delphi也开发了不少程序,但吃惊的是这些程序全都是面向过程的。我并没有贬低这种做法的意思,我想说的是:好的delphi控件+好的编程规范+优秀的vcl 也能造就很多实用的程序。况且他也是位非常好的vb程序员,俗话说仅能使用vb还显得很初级,但用vb编写出非常稳定可靠的企业应用,那就非常优秀。但这样的人很少很少,为什么?因为企业级应用往往要求较高的可靠性和可扩展性,其中可靠性就是vb的弱点,很多时候为了实现一个稍微复杂的应用,vb就需要大量的第三方控件,大量的windows api调用(这些api在后期很难阅读与维护),大量的看似相互独立但无须申明就可以四处调用的模块,再加上一堆的全局变量,最终的局面是程序越大,程序员的脑袋就越大。但有人就说了,那vb不也有类吗?是啊,它是有,但一切面向对象的思想都在这个所谓的类上找不到影子:什么重载,虚函数,重写,继承...等等。而这些delphi都有。当然了,vb毕竟是一个易学易用的语言,从一开始,微软就没说过他是一个全面向对象的语言(这也包括最终的vb6.1)。再有就是可扩展性,用vb开发的程序一般可扩展性都比较低,这是不争的事实,我想就不用多说了,谁身在其中,谁自然最清楚。vb中好的程序员,多半是具有很高的编程技巧,能将vb的弱点降到最低的人,他们往往很早就接触vb,感情释然,积累也很丰富,放不下了。而我呢,又是个木瓜脑袋,是很难达到那些牛人的水平了,所以还是决定彻底放弃vb去选择一个优秀的开发工具,那就是delphi。
    从最初的c语言到vb,又从vb 到delphi,再从delphi到c#,最后又回过头来看delphi。虽说delphi的面向对象特性没有c#那样彻底,但delphi至少实现了80%-90%的oop特性。不废话了,先来看两个delphi下的类实现:

 首先是一个表示人的基类,定义如下:

  1 unit Person_Cls;
  2 
  3 interface
  4 
  5 type
  6    Person=class       //基类
  7    private
  8      name:string;       //私有变量(姓名,性别,身高,体重)
  9      sex:string;
 10      year:integer;
 11      tall:integer;
 12      weight:integer;
 13      function get_name:string;           //声明返回和设置属性的函数
 14      procedure set_name(Value:string);   //以下同
 15      function get_sex:string;
 16      procedure set_sex(Value:string);
 17      function get_year:integer;
 18      procedure set_year(Value:integer);
 19      function get_tall:integer;
 20      procedure set_tall(Value:integer);
 21      function get_weight:integer;
 22      procedure set_weight(Value:integer);
 23 
 24    public
 25      constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
 26      constructor Create(Name:string;Sex:string);overload;    //重载构造函数,注意一定要使用关键字:overload
 27      property _name:string read get_name write set_name;     //为类定义属性,以便在外部可以访问
 28      property _sex:string read get_sex write set_sex;         //其中read表示可读,后面紧跟一个返回该属性值的函数名
 29      property _year:integer read get_year write set_year;     //write 表示可写,后面紧跟一个设置该属性值的函数名
 30      property _tall:integer read get_tall write set_tall;
 31      property _weight:integer read get_weight write set_weight;
 32 
 33 end;
 34 
 35 implementation
 36 //构造函数的实现
 37 constructor Person.Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);
 38 begin
 39     Self.name:=Name ; Self.sex:=Sex ; Self.year:=Year ; Self.tall:=Tall; Self.weight:=Weight ;
 40 
 41 end;
 42 constructor Person.Create(Name:string;Sex:string);
 43 begin
 44    Self.name:=Name ; Self.sex:=Sex ; Self.year:=0 ; Self.tall:=0; Self.weight:=0;
 45 end;
 46 
 47 //类属性的内部实现  请与c#作比较:get{},set{}
 48 function Person.get_name:string;
 49 begin
 50     result:=Self.name ;
 51 end;
 52 procedure Person.set_name(Value:string);
 53 begin
 54     if (Value<>'') then
 55         name :=Value ;
 56 end;
 57 function Person.get_sex :string;
 58 begin
 59    result:=Self.sex;
 60 end;
 61 procedure Person.set_sex(Value:string);
 62 begin
 63    if((Value<>'female') and (Value<>'male')) then
 64       Self.sex :='male'
 65    else
 66       Self.sex :=Value;
 67 
 68 end;
 69 function Person.get_year :integer;
 70 begin
 71     result:=Self.year ;
 72 end;
 73 procedure Person.set_year(Value:integer);
 74 begin
 75     if(Value>200) then
 76       Self.year :=0
 77     else
 78       Self.year :=Value ;
 79 end;
 80 function Person.get_tall  :integer;
 81 begin
 82     result:=Self.tall  ;
 83 end;
 84 procedure Person.set_tall (Value:integer);
 85 begin
 86     if(Value>300) then
 87       Self.tall:=0
 88     else
 89       Self.tall:=Value ;
 90 end;
 91 
 92 function Person.get_weight   :integer;
 93 begin
 94     result:=Self.weight   ;
 95 end;
 96 procedure Person.set_weight(Value:integer);
 97 begin
 98     if(Value>1000) then
 99       Self.weight:=0
100     else
101       Self.weight:=Value ;
102 end;
103 
104 end.

 

其次一个学生类继承了上面的人类,定义如下:

 1 unit Student_Cls;
 2 
 3 interface
 4   uses Person_Cls;
 5   type
 6       Student=Class(Person)
 7       private
 8         stCode:string;  //学号
 9         department:string//学院 (大学),学校名称(其他)
10         classGrade:string//班级
11         function get_stCode:string;
12         function get_department:string;
13         function get_classGrade:string;
14 
15       public
16         //构造函数定义
17         constructor Create(s_name:string;s_sex:string;st_code:string;st_dt:string;st_clg:string);
18         property _stCode:string read get_stCode;              //定义只读属性
19         property _department:string read get_department;
20         property _classGrade:string read get_classGrade;
21 
22   end;
23 
24 implementation
25 constructor Student.Create(s_name:string;s_sex:string;st_code:string;st_dt:string;st_clg:string);
26 begin
27     inherited Create(s_name,s_sex);  //注意在此使用inherited关键字调用基类的构造函数,并向基类person传递
28                                      //参数。在c#中可以使用base指定参数列表,在delphi中要使用inherited显示说明
29     Self.stCode :=st_code; Self.department:=st_dt ; Self.classGrade:=st_clg ;
30 
31 end;
32 //只读属性的内部实现
33 function Student.get_stCode :string ;
34 begin
35     result:=Self.stCode ;
36 end;
37 function Student.get_department :string ;
38 begin
39     result:=Self.classGrade ;
40 end;
41 function Student.get_classGrade :string;
42 begin
43     result:=Self.classGrade ;
44 end;
45 end.

以上就是这两个简单的类定义,很好的说明了delphi中类和派生类的关系。
需要补充的一点就是,delphi中当你为类提供了自定义的构造函数后,系统还是会为你提供默认的构造函数。这一点需要注意。
至于类的使用,和一般面向对象的语言是一样的,用构造函数创建对象,在必要是卸构他就行了。

posted @ 2006-06-15 01:32 畅想自由 阅读(1031) | 评论 (0)编辑

2006年5月18日

Delphi 与 C#

     我做出了决定,以后com程序用delphi,DotNet程序用c#。

posted @ 2006-05-18 18:51 畅想自由 阅读(98) | 评论 (0)编辑

2006年5月11日

关于如何存储便于网上浏览的电子书籍

    最近很忙,心情也很糟糕,做项目怎么也进入不了状态。打开blog居然很久没有写点什么了,索性将以前的一个项目拿来说一说,欢迎批评,指教。
    其实呢,也算不了什么项目,只是远程培训,考试(asp web程序)中的一部分,主要是为员工提供网上电子书籍的查询和浏览。其中网上考试和考试管理是用asp做的,就暂时不说它了;而这个电子书籍的查询和浏览是asp.net+c#的web程序,也没有什么说头,我要说的是如何将客户的书籍转换成电子文档并存储到数据库当中。
    客户的书籍量非常大,有600 多本书,所以把书录入到电脑中这一步不可能由机器来完成,据说有这样的机器,但客户是承担不起的他们宁愿请别的公司来做。
    所以到最后要解决的问题就很简单了:
    1.要求第三方公司将书籍录入到word文档,插入正确的书中附图,最后另存为.html格式文件。
(这点一般公司是做的到的,实践证明他们做的很好,注意对书籍的索引编号可参考:书名id->章名id->节名id->图片id 来考虑)
   2.根据前面的索引编号,依次读取.html文件内容,剔除无用部分(wrod自动生成的vml代码,它的存在可能导致你无法正确读取文件中的图片),然后将内容和图片分别存储到数据库当中。这一步需要注意图片标签的替换问题,因为浏览电子书籍时必须将书中的图片也一并显示,所以必须将图片标签指向一个显示页面,列如:src="showimg.aspx?imgid=001",根据索引编号必须将书,章,节,图片做到一一对应,以免出现张冠李戴的错误。
    以下是一些可以删除的内容(供参考):
   
 1<!--[if !mso]>
 2//可以删除的内容(包括开始和结束标签)
 3<![endif]-->
 4
 5<!--[if gte mso 9]>
 6//可以删除的内容(包括开始和结束标签)
 7<![endif]-->
 8
 9<!--[if gte vml 1]>
10//可以删除的内容(包括开始和结束标签)
11<![endif]-->
12
13<![if !vml]>
14//可以删除的内容(包括开始和结束标签)
15<![endif]-->
16对于一般的书籍浏览而言,删除他们对内容的浏览是没什么影响的。
17

    到这里,就已经完成大部分了,剩下来就是编写程序将html文件导入数据库。读取文件时,先提取文件中的src值,然后根据它来找到图片的存放位置,并依次提取所有图片,替换src值为显示页面,最后存储html内容和图片。
    以上就是存储电子书籍的处理方法,不知道大家还有没有其他好的想法,这个方案的后期问题就是,数据量比较大时,处理速度会比较慢。

 

posted @ 2006-05-11 02:38 畅想自由 阅读(207) | 评论 (0)编辑

2006年2月22日

冒泡排序法(C#版)

     摘要: 最近在复习《数据结构与算法(c语言)》的过程中,索性用C#来实现里面的冒泡排序法。大家都知道冒泡排序法的思想就是每次比较都将最大(或最小)的数沉底以此达到最终按序排列的目的。上班时间紧,不多说了,先贴出代码:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4usingSystem.Windows.Forms;56nam... 阅读全文

posted @ 2006-02-22 09:03 畅想自由 阅读(2813) | 评论 (8)编辑