作者简介  序言  自序  目录

 
编程的奥秘——.NET软件技术学习与实践 (到货)

出版社:电子工业出版社
作者: 金旭亮 著
定价:65.00

   “这本书的第一批读者是我教的大学一年级新生们,他们没有编程基础,就像璞玉未经雕琢。我每写一章,就给他们看并让他们告诉我哪里看不懂,然后我就修改——如此反复,直到他们完全看懂为止。所以我相信,编程的奥秘,每个人都能掌握。”

——金旭亮

如果您是在校学生,面对中国软件教育的现状,如何应对?
如果您是一个初学者,如何通过自学迈入软件开发的大门?
如果您是一名程序员,如何通过实践不断提高自己的技术水平?
本书作者在多年的软件开发实践中深入思索,告诉您:
◎理论与实践的巨大鸿沟,如何跨越?
◎庞大复杂的软件技术体系,如何把握其脉络?
◎功能强大的应用软件,怎样开发?
面对着日新月异的技术进步,您做好准备了吗?

   本书主要介绍在 .NET 下开发运行于个人计算机上的应用程序所需的全部技术基础,汇集了从实践中总结出来的大量编程技巧与经验之谈,体现了作者对程序设计这一人类智力密集型活动的观点与看法,并力图为读者勾画出一个实用的软件开发学习全景,为读者进一步深入地自学相关的计算机专业课程(如《数据库原理》、《数据结构》、《操作系统》等)打下扎实的基础。

  对于初学者,可以选择此书作为软件开发领域的入门书,一步到位,直接学习主流的面向对象软件技术;对于在校的大学生,学习本书则有助于了解计算机专业课理论如何应用在软件开发中,避免学习上的盲目性;对于已有一定编程经验的程序员,此书可以帮助其迅速地进入 .NET 技术领域,结合其已有技能,开发出具有专业水准的应用软件。

  本书所配光盘包含全书的全部示例源码;按章节组织,方便读者对每一章的深入学习;另外,还配有全书的电子教案及相关实例,方便将本书作为教材的老师授课用。

 
 


作者介绍

  本书作者 金旭亮 于 1989 年与超级解霸的开发者梁肇新同时迈入广西大学的校门,却走了一条与其不同的路。

1994 年起开始自学计算机专业本科课程,并开始编程,从未间断,迄今已逾 10 年,仍对软件痴心不改。

2002 年北京理工大学计算机应用技术专业研究生毕业,后留校任教,主讲程序设计系列课程。

2003 年在 CSDN 论坛发表自传——《一个普通 IT 人的十年回顾》,一石激起千层浪,先后收到近千封国内外邮件,对作者经历与观点见仁见智。

目前,致力于软件技术的理论研究与应用实践,并密切关注中国计算机教育问题。
 

序言

    为响应教育部推出的“国家精品课程建设项目”精神, 2004 年春季,微软亚洲研究院推出了“微软精品课程支持计划”。该计划旨在帮助提高 IT 相关课程教学质量,帮助高校基础性课程与企业的最新技术相结合。  

  该计划自推行以来,受到各高校老师的热烈响应。在微软亚洲研究院的支持下,高校一线教师不断努力创新,完善教学内容,提高教学质量,并将教学成果及时总结、共享。目前,多门经过系统整理、更新的课件资源共享在因特网上,其中的一部分还被吸纳到微软全球课程资源库中,供全球各高校教师交流、共享。在精品课件的基础上,经过几轮课程的教学工作,很多重点院校的教师,将课程进行了更系统的总结,整理成系列的教材及图书。这样,也就有了我们今天看到的这一系列内容上兼备基础性、科学性和前瞻性的丛书。

 

  这套丛书计划覆盖微软相关核心技术,特别是微软最新 .NET 及 WinCE 嵌入式系统技术。其中北京理工大学金旭亮老师所写的《编程的奥秘—— .NET 软件技术学习与实践》是本套丛书的第一本,也是相当优秀的一本。金老师成功地在大学一年级开设了 .NET 课程,并把自己多年的开发经验和感悟与最新的 .NET 新技术融入教学,对学生“授之以渔”,使学生有了一个很好的起点。现在他又将教学成果整理成书,将使更多的开发人员和学生受益。

 

  目前,丛书的其他分册正在编写过程中,在不久的将来会相继出版,在此我代表微软亚洲研究院感谢丛书各个编写小组教师的辛勤工作;感谢电子工业出版社的大力支持;希望本套丛书能够对相关的高校学生、专业工作者有所帮助,对中国软件产业起到很好的促进作用,发挥应有的效果。

 

  今后,微软将一如既往地支持高校教学工作的开展,帮助高校及时了解微软最新技术,促进微软的核心技术与高校课程建设的紧密结合。而在此基础上,微软也将继续支持一线教师写出更多更好的书籍,为中国信息产业的发展尽自己的一份力量。

微软亚洲研究院 院长 沈向泽

              
 

自序

   

  这是一本很实用且独具特色的书。

  这是一本讲技术,更讲学习方法的书。

  这是一本从头至尾贯彻“授人与鱼,不如授人与渔”宗旨的书。

  2003 年暑假,笔者在 CSDN “程序人生”论坛上发表的个人自传 — —《一个普通 IT 人的十年回顾》(已收入本书配套光盘),一石激起千层浪,被许多网站转载,我个人也收到了海内外近千封电子邮件。

  我是一位在没有名师指导的情况下,几乎完全靠自己在黑暗中摸索,在自学之路上艰难地跋涉过来的软件开发者。我不敢自称为“职业程序员”,只敢自称为“软件开发爱好者”。我知道自己的技术水平有限,远远达不到“高手”与“专家”的水平,但我花了 10 年时间去学习计算机技术,其中酸甜苦辣,冷暖自知。我愿意把这期间的所思和所悟,与广大读者分享,并期望能帮助更多的初学者不走或少走我所走过的弯路,迅速地迈入软件开发技术的大门,最终成为远远超过本人水平的软件技术高手。

  若能达此目的,则我在这本书中所花的心血也就值得了。

  我为什么写这本书

  我是在大学毕业后才开始半路出家学电脑的,走了一条艰难曲折的自学之路。在写作本书的时候,刚好满 10 年。 10 年以来,我几乎就没离开过计算机,而编程更是从未间断。写过的代码到底有多少恐怕无法统计了(加起来肯定有几十万行)。出于对软件技术的强烈兴趣,我从对计算机一无所知起步,到后来考上了计算机专业的研究生,毕业之后又走上高校计算机教学岗位,感触颇多。

  在有了 10 年自学计算机技术的经历和近几年在高校讲授程序设计系列课程的经验之后,我一直在思索以下几个问题:

  ? 软件到底是怎样开发出来的?

  ? 编程是难还是易?有没有能让编程功力“暴长 10 年”的“武功秘笈”?

  ? 一个有志于成为优秀软件工程师的人应该怎样学习计算机技术?

  ? 用什么方式才能让许多学生很快地学会特定的计算机技术,而不用重复我和其他人所走过的弯路?

  思索的结果就是大家所看到的这本书。

  在我自己亲身的学习与开发实践中,逐渐形成了这么一个观点:

  编程其实并不难!

  要编程并不需要到大学计算机系里去学很多艰深的理论,经过适当的指导与训练,一个高中生就可以参加到软件项目团队中,并写出具有相当质量水准的程序!

  为什么会有那么多的人把编程视为很高深的东西?

  为什么我国那么多的软件企业深感合格的程序员是如此难找?

  与此同时,又有与之完全对立的情况:每年有大批计算机及相关专业毕业生四处求职,却处处碰壁,找工作成了一件很不轻松的事情……

  一边是真正合格的程序员人数很少,软件企业都在喊急缺人才,而另一边是大量的学生毕业找不着理想的工作。这样一个怪圈为何会形成?

  我想,造成这个怪圈有两个重要的原因。

  一是学生学习方法与态度的问题。由于对软件开发这一工作本身缺乏正确认识,许多学生形成了一种浮躁的功利型学习方法,表现为盲目地跟风学习各种当前流行的新技术,但大都只是三个月热度,由于欠缺毅力和不具备扎实的理论与实践基础,对这些新技术无法深入把握,浅尝辄止,“坐而论道”,讨论时可以“滔滔不绝”,一到动手则“原形毕露”。许多人没有想过:现在流行的“新”技术,难道就会一直“流行”下去?曾经风光一时的 Foxpro 和 PowerBuilder ,国内曾有许多人(包括本人在内)投入大量的时间去学习与掌握,可没过几年,还有几个项目是用这两种技术开发的呢?所以,如果要“追”新技术,也只能去学预计两到三年后社会急需的技术,这就需要学习者有超前的眼光。但软件技术进步实在太快,很少有人能够准确预测出几年之后会流行什么。所以,与其“临渊羡鱼”,不如“退而结网”,选择一项自己喜欢的领域,从理论到技术,扎扎实实地用两到三年时间去学好它,在学习过程中培养出“捕鱼”的本事。有了这种自我学习的基本能力与素质,还担心出海捕不到鱼吗?

  有一些学生投入相当多的时间与金钱去参加种种有着各种动听承诺的电脑培训班,指望别人能够帮助自己成为技术高手,却不知真正的高手大都是“自学成才”!

  更有太多的尤其是非计算机专业的学生,盲目地去考各种认证,不管是国内的还是国外的考试,只要有证,就有大批的人去参加。他们把应用计算机技术的能力简单地等同于一纸证书。当前的计算机等级考试就大有成为高校中第二个“英语四六级”的可能性。 事实上,你向别人展示自己写的一个软件作品,比给别人看一堆各式各样的证书更能说明你的能力!

  造成怪圈的第二个重要原因就是计算机教育问题。目前高校中的计算机教育并不能大批量地培养出合格的软件开发者,学生在四年本科期间计算机理论学了不少,对培养编程能力却重视不够,缺乏实践的结果是理论也掌握不好,学生的计算机水平被煮成了“夹生饭”。

  除了在校的大学生,社会上还有大批的软件开发爱好者,他们由于没有机会系统地学习软件开发技术,就采用自学和自我实践的方式,结合自己的工作来应用学到的计算机技术。虽然他们没有在校生的优越条件,但其中优秀人物的真实开发能力远胜于正规高校计算机专业“科班”出身的本科生甚至是硕士生。这种例子已经很多了。

  “职业选手”不如“业余选手”!

  我自己是走“野路子”出来的,走的是以实践为主导的自学之路,从亲身实践中深切感受到计算机科学本质上是一门实践性非常强的科学,不管是在校学生还是社会上的软件开发爱好者,我的建议是:

  实践就是最好的老师!

  另一个需要强调的是:

  编程是一种技能,就同学习外语一样,绝不可能“速成”!

  我从 2002 年开始接触 .NET 技术,并一直研究使用至今,前前后后看了近百本国内外的 .NET 编程书籍,并写了几万行的 .NET 代码。在对 .NET 有了一定的了解之后,我认为 .NET 技术是初学者学习软件技术非常好的切入点,学习者可以一步到位,直接学习目前主流的面向对象软件开发技术,而不用按部就班,按传统的先结构化编程再面向对象编程的顺序去学习。

  接着我思考的问题是:这本书该怎么写?

  著名物理学家爱因斯坦曾经表达过这样的思想:

  学习时只需要掌握那些能让思维导向深入的东西,而将其他无关的知识全部抛弃。

  软件技术本身有一个庞大而复杂的体系结构,不分巨细地样样都想掌握,那么只能是疲于奔命而终无所得。

  为此,基于我自己的理解,在书中我将认为是最重要和最基础的东西突显出来,这些东西是必须掌握的,一旦理解并掌握它们之后,读者就掌握了“捕鱼”的方法,自己就可以进一步探索某一领域内的其他技术点了。因此在书中不需对每个技术领域的每个技术点都“面面俱到”。

  编程是有规律的,读者能不能迅速成为一名具备相当水平的程序员,关键在于对编程规律与必备知识基础的把握程度。

  读者在阅读本书时,最重要的是要掌握原理。在开发过程中所进行的各项具体活动与工作步骤,其背后都是有道理的,理解清楚了这些道理,在整个软件开发过程中该做什么,不该做什么,先做什么,后做什么,也就心中有数了。

  编了这么多年的程序,我意识到其实学习软件开发技术的过程就是一个学会做事方法的过程。例如,在开发软件时,要“分而治之”、“步步为营”、“先局部后整体”、“合理安排开发次序”、“养成良好的编程习惯”等,这不仅仅是程序设计的技巧,也是做好编程之外许多其他工作所需要的。

  在学习与掌握软件技术这一过程中,可以锻炼一个人的许多基本素质,如思维周密、意志坚强、学习能力、创新精神等。如果一个人能在竞争空前激烈的 IT 业凭借着高素质站稳脚跟,那么,可以很有把握地说,如果他转向其他行业,同样是一个优秀的人才,也会闯出自己的一番天地!

  在本书中,结合我个人的开发经验,精心安排了学习次序,循序渐进地引导读者迈入软件开发的大门。

  在许多计算机技术书籍中,出现了大量的技术术语,对于不熟悉这些术语的读者而言,这无疑加大了阅读的难度。对于这些计算机术语的表述,如果强调其在理论上的科学性与严谨性,则往往不易于理解,这在很大程度上限制了这些知识的传播、普及和应用。因此,本书对这些术语大都采用了一种通俗易懂的方式来表达,甚至使用了不少比喻手法来阐明其内涵。这种表达方式虽易于理解,但不免在科学性和严谨性上有所不足,读者如果需要科学而精确的定义,请自行查阅相关的科技文献。强调一下,本书是一本志在普及软件开发技术的专业书籍,与传统的工程技术专著和计算机科学理论教材不同,阅读时不要像中学学习数学一样,每个字都不放过,而应将重点放在形成对软件开发过程的直观理解和感性认识上。

  对于一个具体的软件开发者而言,只有被理解了的知识才是真正有用的知识,无法理解的知识是毫无用处的。笔者写书的主要目的是让读者能迅速地汲取书中所提供的知识,尽量做到 “用大白话讲述复杂的技术” ,因此在文字上追求深入浅出,但是否真的做到了这一点,还得由读者来做出评价。

  知识的获取与掌握是有其客观规律的,一般而言,具体的知识易于理解,而抽象的知识则难于把握,在学习过程中,应遵循“具体 → 抽象 → 具体 → ……”这样一个无限循环的过程。

  如果某人对一门学科所知不多,却指望他能通过理论学习迅速地把握这门学科,这就违反了人类认识世界的客观规律。可惜的是,目前中国教育体制中普遍采用的让学生重点学习抽象理论而忽视具体实践的做法,造成了大批的学生既没学好理论,也没打好必要的实践基础。

  我认为,只有建立在实践基础之上的理论学习才是真正有效的学习。因此在整个计算机技术的学习过程中,应该把开发实践作为一条主线,由它串起所有的计算机理论。如果把计算机技术中的各个子领域看做是一个个珍珠,开发实践就是那根把所有珍珠串成项链的丝线。没有这根线,学习各门计算机课程得到的不过是一颗颗零散的珠子,价值有限。

  出于这些考虑,笔者在介绍许多编程技巧的同时,也同步介绍了相关的高等数学、数据结构、操作系统、数据库理论、软件工程等计算机科学理论内容,其目的就是希望读者能了解到理论是如何应用在开发实践中的,从而有助于读者日后针对性更强地去学习这些计算机理论课程,最终成为一名优秀的软件工程师。

  本书虽然介绍了大量的编程技巧,但绝不是编程技巧的简单汇编,其中涉及了计算机科学中相当广泛的知识。如果读者能够从本书中体会到计算机技术的脉络,并培养出一定的开发能力,那么我会感到非常高兴与欣慰。

  学习此书,要求读者对 Windows 操作系统比较熟悉,对软件开发有着浓厚的兴趣,并不要求读者系统学习过计算机专业课程,或者有 C 、 Pascal 等丰富的程序开发经验。

  怎样学习软件开发技术

  .区分计算机科学与计算机技术

  “科学技术”四个字往往连在一起说,但事实上“科学”与“技术”是有区别的。

  计算机科学主要研究理论,而计算机技术则是这些理论在实践中的应用。打个比方:编译理论是科学,而具体的编译器,如 VBC (微软公司开发的 VB.NET 程序编译器)就是技术了;操作系统原理是理论,而 Windows 就是理论应用于实践的产品,因而归属于技术范畴。

  讲到这里,读者可能明白了,计算机科学家就是指那些从事计算机理论研究的人。目前,我国高校中计算机系开设的大部分课程都属于计算机科学范畴,比如“数据库原理”、“操作系统”、“计算机图形学”、“人工智能”、“算法理论”、“数据结构”等;而另一些课程则属于技术范畴,比如“ Visual Basic 程序设计”、“ SQL Server 数据库开发”等。还有一些课程,比如“面向对象程序设计”、“软件工程实践”等往往同时涉及理论和技术,因而是“混血儿”。

  “科学”与“技术”的区别,自然地将从事计算机工作的人分成了两大块:计算机科学研究者与计算机技术工程师。前者研究的是理论,是计算机科学,人数较少,他们从事的是往计算机科学大厦中添砖加瓦的工作,是新知识的发现者。一般而言,只有非常优秀的人才能进行理论研究工作。后者研究的是技术,属于工程范畴,他们关注的是如何把一个好的软件、一个好的系统实实在在地做出来,大部分人属于工程范畴。

  计算机技术总体上又分为软件与硬件两大块:硬件工程师研究的是芯片、集成电路、板卡等“实实在在”、可以“摸得着”的东西;而软件工程师则编写程序,驱动各种各样的硬件完成工作。

  在计算机技术中,有一个并不严格但众所周知的“软硬定律”:

  任何一项由软件完成的功能,也可以用硬件实现,反之亦然。

  比如 Java 虚拟机( Virtual Machine ),它原先属于软件范畴,但如果将整个虚拟机烧录到硬件芯片中,然后在它上面运行 Java 程序,那你说现在这个虚拟机是“硬件”还是“软件”?这个界限已经模糊了。

  我们回到本书所介绍的 .NET , .NET 是属于软件技术范畴的。换句话说,如果你想成为一名软件工程师,就可以看这本书。

  . .NET 与 Java

  Java 是 20 世纪 90 年代诞生的一种面向对象的语言,它吸取了 C++ 的许多长处,其最引人注目的特性是“跨平台”。由于它很好地满足了网络时代信息系统对计算机高级语言的要求,因而在实践中得到了广泛应用。

  Java 经过近 10 年的发展,目前已在企业信息系统开发领域占据了主流地位,形成了一整套完整的技术体系,取得了巨大的成功。

  .NET 是微软推出的一种新的软件运行平台,它包括一整套应用范围广泛的技术,旨在迎接 Java 所带来的挑战。 .NET 给软件开发带来了很多新的技术,尤其是它的“混合语言”开发,是第一个成熟的支持多种语言混合开发方式的软件运行平台,在下一代 Windows — — LongHorn (预计 2006 年推出)的核心中将会看到这个新技术的身影。

  如果读者学过 Java ,就会发现 .NET 技术与 Java 技术在许多方面实在是太像了。尤其是 C# ( .NET 下的一种编程语言,念成“ C Sharp ”,不要念成“ C 井” J ),如果给你一段代码,有的时候还真难分辨出是用 Java 还是 C# 写的。

.NET 与 Java 技术的这种相似为我们的学习提供了便利,举个实例,如果你掌握了 C# ,那么掌握 Java 这个语言几乎不费什么力气,需要花费时间的只是熟悉彼此的类库。 .NET 的标准类库是 .NET Framework , Java 的标准类库是 J2SE (注: Java 类库还包括用于手机等移动设备开发的 J2ME 和用于企业级信息系统开发的 J2EE )。掌握这两种技术的基础都是面向对象理论。所以,一名有着扎实的面向对象理论基础的人在学习 .NET 和 Java 技术时就可以触类旁通,举一反三。                                       阅读全文

 


目录

第 1 篇 初 识

第 1 章 初识 .NET 2

1.1 什么是 .NET 2

1.1.1 .NET 与传统 Windows 的不同 2

1.1.2 从 .NET 看软件技术的发展趋势 3

1.2 搭建 .NET 运行平台 6

1.3 使用命令行编译 VB.NET 程序 12

1.4 第一个可视化的 .NET 程序 16

1.5 .NET 程序运行原理 24

1.5.1 理解机器指令 24

1.5.2 程序与编译器 25

1.5.3 .NET 程序运行原理 25

1.5.4 发布 .NET 程序 27

第 2 章 .NET 程序设计基础 30

2.1 使用 VS.NET 设计用户界面 30

2.1.1 窗体的使用 31

2.1.2 常见控件使用 41

2.1.3 界面布局 52

2.1.4 绘制图标 54

2.2 VB.NET 语法基础 56

2.2.1 基本数据类型 56

2.2.2 语句与控制结构 63

2.2.3 对象与类 72

2.2.4 变量的类型 84

2.2.5 函数与方法重载 89

2.2.6 字符串使用 91

2.2.7 递归 93

2.2.8 .NET 中的集合 96

2.2.9 VB.NET 开发实践:多窗体编程 99

2.3 克隆 Word —— MyEditor 程序分析 103

2.3.1 主窗体 frmEditor 界面设计 104

2.3.2 结束程序运行 104

2.3.3 打开文件功能的实现 104

2.3.4 编辑功能的实现 108

2.3.5 查找功能的实现 113

2.4 编译项目 119

2.4.1 Debug 与 Release 版本 119

2.4.2 设置 EXE 文件图标 120

2.4.3 MyEditor 程序分析小结 120

第 2 篇 入 门

第 3 章 面向对象的程序设计语言 122

3.1 .NET 语言族 122

3.2 类的创建与销毁过程 123

3.2.1 类的创建与构造函数 123

3.2.2 类的销毁与垃圾收集 126

3.3 ByRef 与 ByVal 126

3.3.1 简单类型参数的传送 126

3.3.2 引用类型参数的传送 128

3.4 面向对象特性 130

3.4.1 继承 130

3.4.2 多态 137

3.4.3 函数模板——委托 140

3.4.4 事件 142

3.5 异常处理 144

3.5.1 程序的健壮性 144

3.5.2 使用异常处理保证程序的健壮性 145

3.5.3 异常的捕获 145

3.6 面向对象编程实战 146

3.6.1 什么是应用程序向导 146

3.6.2 设计一个向导程序框架 147

3.6.3 向导框架代码分析 148

3.6.4 小结 153

第 4 章 Windows Form 程序设计 154

4.1 组件开发与使用基础 154

4.1.1 可视化组件与非可视化组件 154

4.1.2 使用第三方控件 155

4.1.3 容器控件 156

4.1.4 移动焦点 159

4.2 数据验证 161

4.2.1 窗体级验证与字段级验证 161

4.2.2 正则表达式 164

4.3 读取按键 167

4.3.1 KeyPress 事件 167

4.3.2 KeyDown 和 KeyUp 事件 167

4.3.3 窗体的 KeyPreview 属性 168

4.4 鼠标操作 168

4.4.1 区分鼠标按键 168

4.4.2 检测鼠标滚轮 169

4.4.3 设置等待光标 169

4.4.4 自定义鼠标光标 170

4.5 流 171

4.5.1 使用 MemoryStream 172

4.5.2 使用 FileStream 173

4.5.3 操作流对象 175

4.6 剪贴板原理 178

4.6.1 使用剪贴板 178

4.6.2 剪贴板编程原理 178

4.6.3 剪贴板编程实例 180

4.7 综合实例:开发资源管理器 183

4.7.1 软件总体构想 184

4.7.2 文件操作 184

4.7.3 文件夹操作 186

4.7.4 TreeView 使用 189

4.7.5 ListView 使用 193

4.7.6 软件体系结构设计 195

第 3 篇 深 入

第 5 章 .NET 数据库编程概览 210

5.1 数据库编程技术基础 210

5.1.1 数据库的基本概念 211

5.1.2 SQL 简介 212

5.1.3 关系数据库的三种操作 212

5.2 使用 .NET 开发数据库应用程序 214

5.2.1 用户界面设计 214

5.2.2 开始编码 214

第 6 章 SQL 入门 221

6.1 搭建 SQL 运行平台 221

6.2 SQL 语句的编写 222

6.2.1 选择数据 222

6.2.2 排序 226

6.2.3 聚集函数 227

6.2.4 分组 228

6.2.5 其他数据操作 229

6.3 SQL 命令使用技巧 232

6.3.1 计算数学表达式 232

6.3.2 在返回结果中增加不属于任何一个表的列 233

6.3.3 嵌套子查询 233

6.3.4 流程控制 234

第 7 章 编程访问数据库 236

7.1 使用 ADO.NET 表示数据库模型 236

7.1.1 ADO.NET 对象模型 236

7.1.2 动态创建数据库 237

7.1.3 使用 DataRelation 对象表达数据间的关系 239

7.2 连接数据库 244

7.2.1 四种 Connection 对象 244

7.2.2 连接数据库的基本步骤 244

7.3 向数据库发送 SQL 命令 246

7.3.1 Command 对象的创建 246

7.3.2 执行无返回行的 SQL 命令 247

7.3.3 进行单值查询 247

7.3.4 使用带参数的 SQL 命令 248

7.3.5 调用存储过程 249

7.4 获取数据 252

7.4.1 填充数据 252

7.4.2 获取数据库架构信息 254

7.5 显示数据 256

7.5.1 使用 DataGrid 显示数据 256

7.5.2 在数据集中移动 263

7.6 编辑数据 270

7.6.1 增加数据 270

7.6.2 删除数据 273

7.6.3 修改数据 274

7.7 保存数据到数据库 275

7.7.1 数据更新原理 275

7.7.2 手动更新数据库 278

7.7.3 使用 DataAdapter 更新数据库 282

7.7.4 处理更新失败 283

7.8 查找与过滤数据 284

7.8.1 在 DataTable 中查找 285

7.8.2 使用 DataView 筛选数据 285

7.9 统计与分析 289

7.9.1 计算列 290

7.9.2 Compute 方法 292

第 8 章 数据库编程技巧与实例分析 294

8.1 开发可复用的数据存取类 294

8.1.1 设计数据访问类 294

8.1.2 访问存储过程 298

8.1.3 使用 BLOB 字段 301

8.1.4 获取数据库元信息 304

8.2 开发客户信息管理系统 305

8.2.1 功能简介 306

8.2.2 开发过程 307

8.2.3 养成良好的编程习惯 320

第 9 章 使用 XML 处理数据 322

9.1 XML 基础知识 322

9.1.1 什么是 XML 322

9.1.2 用 XML 表达数据 323

9.2 在 .NET 中处理 XML 数据 326

9.2.1 使用 DOM 处理 XML 数据 326

9.2.2 在程序使用 DOM 处理 XML 数据 329

9.2.3 基于流机制来处理 XML 数据 342

9.2.4 ADO.NET 与 XML 348

第 10 章 计算机绘图原理及其应用 357

10.1 计算机绘图原理 357

10.1.1 在计算机中处理图形图像 357

10.1.2 使用 GDI+ 绘图 359

10.1.3 绘图对象 367

10.1.4 坐标变换 384

10.1.5 绘制数学图案 387

10.1.6 处理图像 397

10.2 综合示例: GDIClock 程序分析 402

10.2.1 怎样阅读别人写的程序代码 403

10.2.2 程序架构 404

10.2.3 实现程序的开机自动运行 405

10.2.4 实现程序退出时保存设置 408

10.2.5 创建图形菜单 409

10.2.6 绘制时钟 410

10.2.7 实现闹钟 416

10.2.8 提升系统性能 417

10.2.9 小结 419

10.3 设计打印系统 419

10.3.1 计算机打印原理 419

10.3.2 控制打印 432

10.3.3 打印系统开发实例——邮签打印 436

第 4 篇 精 通

第 11 章 面向对象软件编程基础 446

11.1 对软件的再认识 446

11.1.1 理解软件的概念 446

11.1.2 软件开发是一项系统工程 446

11.1.3 软件开发的 7 种武器 448

11.2 面向对象编程概述 449

11.2.1 掌握编程的基本原则 451

11.2.2 掌握编程的基本方法 456

11.2.3 面向对象编程实例分析 459

11.3 现代面向对象技术的基石之一:动态链接技术 464

11.3.1 动态链接技术的由来 464

11.3.2 Windows 动态链接技术的概貌 465

11.3.3 .NET 下动态链接技术的发展 469

11.4 UML 使用入门 471

11.4.1 UML 简介 472

11.4.2 使用 UML 类图 475

11.4.3 使用 UML 包图 482

11.4.4 使用用例图描述系统功能 483

11.4.5 使用 UML 描述系统静态结构 483

11.4.6 使用 UML 描述系统动态特性 484

11.4.7 在软件开发中使用 UML 486

第 12 章 基于组件的软件开发 488

12.1 CBD 导论 488

12.1.1 什么是 CBD 488

12.1.2 在软件开发中采用 CBD 的必要性 489

12.1.3 组件化开发基础 490

12.2 开发自定义 .NET 组件实例 495

12.2.1 AutoComplete 的含义 495

12.2.2 设计 AutoComplete 文本框初步开发方案 496

12.2.3 实现 AutoComplete 功能 496

12.2.4 对程序进行重构 498

12.2.5 向组件化迈出第一步 499

12.2.6 定义自己的控件 499

12.2.7 优化性能 501

12.2.8 封装多线程功能到自定义控件中 504

12.2.9 小结 504

12.3 混合语言开发 505

12.3.1 组合多种语言开发的组件 505

12.3.2 混合语言组件的继承 508

12.3.3 混合语言组件间的多态调用 509

12.3.4 小结 512

12.4 动态组件插拔 512

12.4.1 设计示例用到的组件 514

12.4.2 读取 XML 配置文件 514

12.4.3 动态创建对象 516

12.4.4 在主程序中动态装载组件 517

12.4.5 小结 518

第 13 章 面向对象软件开发实践 520

13.1 系统分析与设计 520

13.1.1 缘起 520

13.1.2 确定系统功能 521

13.1.3 技术方案构想 522

13.1.4 体系结构设计 526

13.2 开发自定义树控件 SuperTreeView 529

13.2.1 创建自定义控件项目 529

13.2.2 补习面向对象理论 530

13.2.3 实现树的基本操作功能 531

13.2.4 在树中查找节点 536

13.2.5 小结 538

13.3 开发 SuperRichTextBox 控件 538

13.3.1 设计封装方案 539

13.3.2 应用平台调用技术 541

13.3.3 支持拖动编辑 544

13.3.4 插入行号 548

13.3.5 使用自定义控件“包”起一切 554

13.4 用组件装配系统 557

13.4.1 设计用户界面 557

13.4.2 处理树节点点击事件 559

13.4.3 实现所见即所得的编辑 560

13.4.4 支持键盘操作 561

13.4.5 数据的备份与恢复 562

13.4.6 压缩数据库 564

13.4.7 设置系统参数 565

13.4.8 实现历史记录 568

13.4.9 解决节点移动带来的画面闪烁问题 571

13.5 测试排错 572

13.5.1 编写软件测试报告 572

13.5.2 排除“节点无法删除”的错误 573

13.5.3 排除节点定位算法引发的数据丢失错误 574

13.5.4 排除事件激发次序引发的数据丢失错误 575

13.5.5 进一步改进 PersonalInfo 579

附录 A 常见 Windows 控件中英文名术语对照表 580

附录 B 本书缩略语对照表 581

参考文献 582

后记 583

 
 
Copyright ©1998~2004 华储网. All rights reserved。
To comment on this site,E-mail :
webmaster@huachu.com.cn