字体型号和字体实际高度是怎么对应起来的?

wei20020225 2002-09-18 09:42:30
word里面宋体是从八号到初号,他们的打印高度是多少?
比如说二号字高度是多少mm?

...全文
616 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_feeling 2002-11-12
  • 打赏
  • 举报
回复
初号...八号 对应 一定的磅值.五号对应的可能是9.5磅.
everandforever 2002-09-20
  • 打赏
  • 举报
回复
字体大小,和几号字是不同的意义.
wei20020225 2002-09-18
  • 打赏
  • 举报
回复
可是宋体里面八号最小,初号最大,这又是怎么换算的?
river99 2002-09-18
  • 打赏
  • 举报
回复
字体标号*25.4/72。例如字体大小为12,实际高度为12*25.4/72=4.3mm
软件测试规范 目 录 一.概述 ............................................................................................................................................................ 1 二 软件测试理论 ........................................................................................................................................... 2 1.什么是软件测试 .................................................................................................................................. 2 2.软件测试的目标 .................................................................................................................................. 2 三.软件测试流程 ............................................................................................................................................ 3 1.软件测试流程图 .................................................................................................................................. 3 2.软件测试流程细则 .............................................................................................................................. 4 3.软件测试注意事项 .............................................................................................................................. 5 四.软件测试类型 ............................................................................................................................................ 6 1.模块测试 .............................................................................................................................................. 6 2.子系统测试 .......................................................................................................................................... 6 3.系统测试 .............................................................................................................................................. 6 4.验收测试 .............................................................................................................................................. 6 五.黑盒测试方法 ............................................................................................................................................ 7 1.等价类划分 .......................................................................................................................................... 7 2.因果图 .................................................................................................................................................. 8 3.边值分析法 .......................................................................................................................................... 8 4.猜错法 .................................................................................................................................................. 8 5.随机数法 .............................................................................................................................................. 9 六.白盒测试方法 .......................................................................................................................................... 10 1.语句覆盖 ............................................................................................................................................ 10 2.判定理盖 ............................................................................................................................................ 10 3.条件覆盖 ............................................................................................................................................ 11 4.判定/条件覆盖 ................................................................................................................................ 11 5.条件组合覆盖 .................................................................................................................................... 11 七.测试错误类型 .......................................................................................................................................... 12 八.测试标准 .................................................................................................................................................. 13 附录一 单元测试报告 ................................................................................................................................. 14 附录二 集成测试报告 ................................................................................................................................. 15 附录三 测试大纲 ......................................................................................................................................... 16 附录四 测试大纲附录 ................................................................................................................................. 17 附录五 测试计划 ......................................................................................................................................... 18 附录六 程序错误报告 ................................................................................................................................. 19 附录七 测试分析报告 ................................................................................................................................. 20 软件测试规范 概述 一.概述 本规范是对项目软件测试的一份指导性文件,对软件测试过程中所涉及到的测试理论、测试类型、测试方法、测试标准、测试流程以及软件产品开发单位所承担的职责进行总体规范,以有效保证软件产品的质量。 - 1 - 软件测试规范 软件测试理论 二 软件测试理论 1.什么是软件测试 无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。在开发大型软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,与工程密切相关的各类人员之间的通信和配合也不可能完美无缺,因此,在软件生命周期的每个阶段都不可避免地会产生差错。我们力求在每个阶段结束之前通过严格的技术审查,尽可能早地发现并纠正差错;但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。软件测试在软件生命周期中横跨两个阶段。通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。 大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。因此,必须高度重视软件测试工作,绝不要以为写出程序之后软件开发工作就接近完成了,实际上,大约还有同样多的开发工作量需要完成。仅就测试而言,它的目标是发现软件中的错误,但是,发现错误并不是我们的最终日的。软件工程的根本目标是开发出高质量的完全符合用户需要的软件。 2.软件测试的目标 下面这些规则也可以看作是测试的目标或定义: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。 从上述规则可以看出,测试的正确定义是“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,“成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案。 由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。此外,应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。 - 2 - 软件测试规范 软件测试流程 三.软件测试流程 1.软件测试流程图 参与需求分析,了解项目需求内容 了解需求变更 制定《测试计划 》 编写《测试大纲》 编写《单元测试报告》 N 项目组进行修改 配合开发人员进行单元测试 Y 编写《集成测试报告》 N 项目组进行修改 配合开发人员进行集成测试 Y 收集待测软件的各种相关文档及《需求分析》、《软件设计规范》和上一级《测试报告》 N 复合 对待测软件进行测试 项目组进行修改 Y 填写《错误报告》 编写《测试分析报告》 提交《测试分析报告》 所有文件存档 编写《用户操作手册》(帮助文件) 与用户方协商测试相关事宜 - 3 - 软件测试规范 软件测试流程 向用户方提供内部测试汇总报告 配合用户方进行软件测试 用户方签字确认错误报告 项目经理与用户方测试进行确认 2.软件测试流程细则 需求阶段: 测试人员了解项目需求收集结果包括项目需求规格说明、功能结构及模块划分等。 测试人员了解项目需求变更。 测试人员会同项目主管根据软件需求制定并确认《测试计划》(附录五)。 设计编码阶段: 测试人员制定《测试大纲》(附录三、附录四)。 项目开发组对完成的功能模块进行单元测试,测试人员参与单元测试过程;单元测试完成,产生单元测试报告。 所有单元测试及相应的修改完成后,项目开发组组织进行集成测试,测试人员参与集成测试过程;集成测试完成后,产生集成测试报告。 测试阶段: 项目开发组完成集成测试后,提交测试所要求的待测软件及各种文档、手册、前期测试报告(《需求分析》、《软件设计规范》和上一级《测试报告》附录一、附录二)。 测试组安排和协调测试设备、环境等准备工作。 测试组按测试计划、测试大纲的要求对待测软件进行有效性测试、集成测试。 填写《错误报告》(附录六)。 对修改后的情况进行复合。 测试结束后,测试人员对测试结果进行汇总;测试主管审核测试结果,得出测试结论;测试组进行测试分析和评估,编写《测试分析报告》(附录七)。 提交《测试分析报告》。 将所有文件存档。 对测试未通过的待测软件,测试人员汇总并向项目开发组提交测试错误报告。 项目开发组对测试错误报告进行确认,对有争议的问题可由上一级技术负责人确认和仲裁;项目开发组针对测试错误报告进行逐项修改,修改完成后再将待测软件及错误修改情况提交及测试组进行回归测试。 待测软件测试通过后,项目测评结束。 制作《用户操作手册》(帮助文件)。 用户测试阶段: 项目开发组与用户方商定测试计划、测试内容、测试环境等。 项目测试组向用户方提供项目内部测试汇总报告。 由项目开发组或测试组配合用户进行用户方测试。 由用户方编制用户方软件测试报告(程序错误报告和测试分析报告),若用户方不愿或无法编制测试报告,则经与用户方协商由我方测试人员编制用户方测试报告,经用户方签字后即可生效。 - 4 - 软件测试规范 软件测试流程 项目经理与用户方对用户方测试进行确认。 3.软件测试注意事项 根据《软件开发规范》仔细检查软件的界面是否合乎要求。(每一个子界面也应如此) 其中,应注意提示信息和软件开发商信息是否正确。小的图标是否合乎要求。检查菜单当中的各项功能和功能按钮是否能正确使用。 根据《软件开发规范》和《用户需求》及《软件详细设计》设计测试用例。(以边界值法、等价类划分法为主)。对功能界面要求注意与功能相关的信息显示及显示位置是否正确。数据输入界面应注意文字格式及数字和文字的区别。是否能够正确保存信息。数据查询(显示)界面应注意显示信息是否正确和完整。是否能正确查询。对打印功能要求注意打印出的报表是否正确。(包括报表各项信息、数据信息和报表字体等)。 这一项测试主要是对软件的错误处理功能进行测试。就是进行错误的操作或输入错误的数据,检查软件对这些情况是否能做出判断并予以提示。 特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。 一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。 对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。 制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。 回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。 妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。 - 5 - 软件测试规范 软件测试类型 四.软件测试类型 除非是测试一个小程序,否则一开始就把整个系统作为一个单独的实体来测试是不现实的。与开发过程类似,测试过程也必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件系统的测试基本上由下述几个步骤组成: 1.模块测试 在设计得好的软件系统中,每个模块完成一个清晰定义的子功能,而且这个子功能和同级其他模块的功能之间没有相互依赖关系。因此,有可能把每个模块作为一个单独的实体来测试,而且通常比较容易设计检验模块正确性的测试方案。模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。在这个测试步骤中所发现的往往是编码和详细设计的错误。 2.子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模块相互间的协调和通信是这个测试过程中的主要问题,因此这个步骤着重测试模块的接口。 3.系统测试 系统测试是把经过测试的于系统装配成一个完整的系统来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也符合预定要求。在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。 4.验收测试 验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试。验收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。 - 6 - 软件测试规范 黑盒测试方法 五.黑盒测试方法 黑盒测试( lack— ox testing)又称功能测试、数据驱动测试或基于规范的测试(即ec颠cation— ased testing)。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。 黑盒测试首先是程序通常的功能性测试。要求: 每个软件特性必须被一个测试用例或一个被认可的异常所覆盖。 用数据类型和数据值的最小集测试。 用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果; 用假想的数据类型和数据值运行,测试排斥不规则输入的能力; 对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。 不仅要考核“程序应该做什么?”还要考察“程序是否做了不该做的2”同时还要考察程序在其他一些情况下是否正常。这些情况包括数据类型和数据值的异常等等。下述几种方法:(a)等价类划分,( )因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。 1.等价类划分 等价类划分是一种典型的黑盒测试方法。等价类是指某个输入域的集合。它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。因此我们只要在一个集合中选取一个测试数据即可。等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。这样就可使用少数测试用例检验程序在一大类情况下的反映。 在考虑等价类时,应该注意区别以下两种不同的情况: 有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。 无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。 确定等价类有以下几条原则: 如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。例如,程序的规范中提到的输入条包括“??项数可以从1到999??”,则可取有效等价类为“l<项数<999”,无效等价类为“项数<l,,及“项数>999”。 输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。如某程序涉及标识符,其输入条件规定“标识符应以字母开头??”则“以字母开头者”作为有效等价类,“以非字母开头”作为无效等价类。 如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小等价类。 输入条件 。。。。。。 。。。。。。 有效等价类 。。。。。。 。。。。。。 无效等价类 。。。。。。 。。。。。。 根据已列出的等价类表,按以下步骤确定测试用例: 为每个等价类规定一个唯一的编号; - 7 - 软件测试规范 黑盒测试方法 设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖; 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步,使所有无效等价类均被覆盖。这里强调每次只覆盖一个无效等价类。这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视。等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例。后面介绍的边值分析法可以弥补这一缺点。 2.因果图 等价类划分法并没有考虑到输入情况的各种组合。这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略。采用因果图方法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规范的描述中存在什么问题。 利用因果图导出测试用例需要经过以下几个步骤: 分析程序规范的描述中哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类。结果是输出条件。 分析程序规范的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。 由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件。把因果图转换成判定表。把判定表的每一列写成一个测试用例。 3.边值分析法 边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的方法。典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等。边值分析法不是一类找一个例子的方法,而是以边界情况的处理作为主要目标专门设计测试用例的方法。另外,边值分析不仅考查输入的边值,也要考虑输出的边值。这是从人们的经验得出的一种有效方法。人们发现许多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高。 用边值分析法设计测试用例时,有以下几条原则: 如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例。如有规范“某文件可包含l至255”个记录??“,则测试用例可选1和255及0和256等。 针对规范的每个输出条件使用原则〔a〕。 如果程序规范中提到的输入或输出域是个有序的集合(如顺序文件、表格等)就应注意选取有序集的第一个和最后一个元素作为测试用例。 分析规范,尽可能找出可能的边界条件。一个典型的边值分析例子是三角形分类程序。选取a, ,c构成三角形三边,“任意两边之和大于第三边”为边界条件。边值分析相等价类划分侧重不同,对等价类划分是一个补充。如上述三角形问题,选取a=3, =4,c=5,a=2, =4,c=7则覆盖有效和无效等价类。如果能在等价类划分中注入边值分析的思想。在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例。 4.猜错法 猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的。 一个采用两分法的检索程序,典型地可以列出下面几种测试情况: 被检索的表只有一项或为空表; - 8 - 软件测试规范 黑盒测试方法 表的项数恰好是2的幂次; 表的项数比2的幂次多1等。 猜错法充分发挥人的经验,在一个测试小组中集思广益,方便实用,特别在软件测试基础较差的情况下,很好地组织测试小组 (也可以有外来人员)进行错误猜测,是有效的测试方法。 5.随机数法 即测试用例的参数是随机数。它可以自动生成,因此自动化程度高。使用大量随机测试用例测试通过的程序会提高用户对程序的信心。但其关键在于随机数的规律是否符合使用实际。 - 9 - 软件测试规范 白盒测试方法 六.白盒测试方法 白盒法测试,是以程序的内部逻辑为基础,有选择地执行程序中最有代表性的通路。因此,白盒法也叫逻辑覆盖法( gic MM阴e)。最彻底的逻辑覆盖法,是覆盖程序巾的诲一条通路。但当程序中含有大量循环时,要执行每一条通路是44可能的。因此,我们只能寄希望于程序的覆盖度尽可能高一些。目前常用的一些覆盖标准有:语句覆盖、判定覆盖、条件澄盖、判定涤件覆盖、条件组合覆盖、路径覆盖等。 白盒法考虑的是测试用例对程序内部逻辑的覆盖程度,所以又称为逻辑覆盖法。最彻底的白盒法是覆盖程序中的每一条路径,但这不可能,我们希望覆盖的路径尽可能多一些。为了衡量测试的覆盖程度,需要建立一些标准,目前常用的一些覆盖标准是: (1)语句覆盖; (2)判定覆盖; (3)条件覆盖; (4)判定/条件覆盖; (5)条件组合覆盖。 1.语句覆盖 程序的某次运行一般并不能执行到其中的每一个语句,因此,如果某语句含有一个错误,而它在测试中没执行,这个错误就不可能被发现。为了提高发现错误的可能性,应该在测试时至少要执行程序中的每一个语句。 所谓“语句覆盖”测试标准,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能执行一次。 例子: e Example( A,B,C:eal) egin if(1)and(B=0) then x:=A; if(A=2)(1) then x:=x+l end; 为了使程序中每个语句至少执行一次,只需设计一个能通过路径ace的例子就可以了。例如选择输入数据为: A=2,B=0,x=3 就可达到“语句覆盖”标准。 显然,语句覆盖是一个比较弱的覆盖标准。如果第一个条件语句中的and错误地写成,上面的测试用例是不能发现这个错误的,或者是第二个条件语句中1误写成0,这个测试用例也不能暴露它。我们还可以举出许多错误情况是上述测试数据不能发现的。所以,一般认为“语句覆盖”是很不充分的最低的一种覆盖标准。 2.判定理盖 比“语句覆盖”稍强的覆盖标准是“判定覆盖”(或称分支覆盖)。这个标准是:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值,即使得程序中的每一个分文至少都通过一次。 对上面那个例子,如果设计两个测试用例,就可以达到“判定覆盖”的标难。为此,我们可以选择输人数据为: (1)A=3,B=0,x=l - 10 - 软件测试规范 白盒测试方法 (2)A=2,B=1,x=3 “判定覆盖”比“语句覆盖”严格,因为如果每个分支都执行过了,自然每个语句也就执行了。 3.条件覆盖 它的含义是:执行足够的测试用例,使得判定中每个条件获得各种可能的结果。 对于例子程序,我们只需设计以下两个测试用例就可满足这标准: (1)A=2,B=o,x=4(沿路径ace执行) (2)A=1,B=l,x=l(沿路径aN执行) 虽然同样只要两个测试用例,但它比判定覆盖中两个测试用例更有效。一般来说,“条件覆盖”比“判定覆盖”强,但是,并不总是如此,满足“条件覆盖”不一定满足“判定覆盖”。例如对语句。 IF(A AND B)THEN S 设计两个测试用例:A“真”B“假”和A“假”B“真”。对于上例我们设计两个测试用例为: (1)A=1,B=o,x=3 (2)A=2,B=l,x=1 亦是如此,它们能满足“条件覆盖”但不满足“判定覆盖”。 4.判定/条件覆盖 针对上面的问题引出了另一种覆盖标准,这就是“判定/条件覆盖”,它的含义是:执行足够的测试用例,同时满足判定覆盖和条件覆盖的要求。显然,它比“判定覆盖”和“条件覆盖”都强。 对于例子程序,我们选取测试用例: (1)A=2,B=0,x=4 (2)A=1,B=l,x=l 它满足判定/条件覆盖标准。 值得指出,看起来“判定/条件覆盖”似乎是比较合理的,应成为我们的目标,但是事实并非如此,因为大多数计算机不能用一条指令对多个条件作出判定,而必须将源程序中对多个条件的判定分解成几个简单判定。这个讨论说明了,尽管“判定/条件覆盖”看起来能使各种条件取到所有可能的值,但实际上并不一定能检查到这样的程度。针对这种情况,有下面的条件组合覆盖标准。 5.条件组合覆盖 “条件组合覆盖”的含义是:执行足够的测试用例,使得每个判定中条件的各种可能组合都至少执行一次。这是一个最强的逻辑覆盖标准。 再看例子程序,必须使测试用例覆盖八种组合结果 (1)1,B=0 (5)A=2,1 (2)1,0 (6)A=2,1 (3)l,B=0 (7)2,1 (4)1,0 (8)2,1 必须注意到,(5)、(6)、(7)、(8)四种情况是第二个条件语句的条件组合,而x的值在该语句之前是要经过计算的,所以我们还必须根据程序的逻辑推算出在程序的人口点x的输入值应是什么。 要测试八个组合结果并不是意味着需要八种测试用例,事实上,我们能用四种测试用例来覆盖它们: (1)A=2,B=o,x=4; (2)A=2,B=1,x=l; (3)A=l,B=o,x=2; (4)A=1,B=1,x=l。 上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,可以看出条件组合覆盖仍然是不彻底的,在白盒测试时,要设法弥补这个缺陷。 - 11 - 软件测试规范 测试错误类型 七.测试错误类型 本规范定义以下五类测试错误类型。 A类—严重错误,包括以下各种错误: 由于程序所引起的死机,非法退出 死循环 数据库发生死锁 因错误操作导致的程序中断 功能错误 与数据库连接错误 数据通讯错误 B类—较严重错误,包括以下各种错误: 程序错误 程序接口错误 数据库的表、业务规则、缺省值未加完整性等约束条件 C类—一般性错误,包括以下各种错误: 操作界面错误(包括数据窗口内列名定义、含义是否一致) 打印内容、格式错误 简单的输入限制未放在前台进行控制 删除操作未给出提示 数据库表中有过多的空字段 D类—较小错误,包括以下各种错误: 界面不规范 辅助说明描述不清楚 输入输出不规范 长操作未给用户提示 提示窗口文字未采用行业术语 可输入区域和只读区域没有明显的区分标志 E类—测试建议 - 12 - 软件测试规范 测试标准 八.测试标准 黑盒测试的通过准则一般有: 单元功能同设计需求一致; 规定的路径覆盖率及覆盖类达到要求,且单元执行正确; 所规定的黑盒测试手段被使用,且单元执行正确; 对残留错误有合法解释或被认可暂留; 虽然路径覆盖率不能达到,但其他各测试的错误查出率趋产0或稳定(时间的长短视情况而定)。 各类软件测试合格须符合以下标准。 A类错误 无 B类错误 无 C类错误 1% D类错误 5% E类建议 暂不作要求 以上比例为错误占总测试模块的比例。 软件产品未经测试合格,不允许出公司。 - 13 - 软件测试规范 附录一 单元测试报告 附录一 单元测试报告 1 测试过程与结果 1.1 (某程序模块 文档名称)测试 测试对象:(某程序模块 文档) 测试方面:(设计规范 应用功能及流程 程序代码) 责任人: 测试人及测试时间: 问题及影响、处理结果: 1.2 (某程序模块 文档名称)测试 测试对象:(某程序模块 文档) 测试方面:(设计规范 应用功能及流程 程序代码) 责任人: 测试人及测试时间: 问题及影响、处理结果: …… 2 测试结论 对单元测试的结果评价。 测试负责人: 审核(项目经理): 年 月 日 年 月 日 - 14 - 软件测试规范 附录二 集成测试报告 附录二 集成测试报告 项目名称 测试人 项目编号 测试时间 问题类型: 程序代码 数据库 项目文档 问题及影响描述、处理结果(可加附页) 测试结论 测试负责人: 年 月 日 审核(项目经理): 年 月 日 - 15 - 软件测试规范 附录三 测试大纲 附录三 测试大纲 1 概述 1.1 编写目的 [可照抄下列语句,也可适当修改。] 本文档的编写目的在于为XXXX(软件名称)软件测试人员提供详细的测试步骤和测试数据,以保证测试人员对软件测试的正确性和完整性。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 1.4 测试内容和测试种类 2 系统结构 图表形式表示。 3 测试目的 4 测试环境 4.1 硬件 列出进行本次测试所需的硬件资源的型号、配置和厂家。 4.2 软件 列出进行本次测试所需的软件资源,包括操作系统和支持软件(不含待测软件)的名称、版本、厂家。 5 人员 列出一份清单,说明在整个测试期间人员的数量、时间、技术水平的要求。 6 测试说明 可以把整个测试过程按逻辑划分为几个组(包括测试计划中描述的总体测试要求的每个方面),并给每个组命名一个标识符。 6.1 [测试1名称及标识符]说明 6.1.1 测试概述 对测试1进行一个总体描述,主要说明这组测试的基本内容。 6.1.2 测试准备 描述本测试开始前系统必须具备的状态和数据。 6.1.3 测试步骤 对各测试操作按先后顺序进行编号。具体操作和数据见附录。 6.2 [测试2名称及标识符]说明 测评组: 年 月 日 - 16 - 软件测试规范 附录四 测试大纲附录 附录四 测试大纲附录 本附录描述了各测试步骤的详细说明,在填入测试结果后,可直接作为测试记录。内容较多时,可一页只放一个测试说明。 测试名称: 测试时间: 操作序号 说明输入的具体数据或动作 测试输入 说明预期的输出或结果 预期输出 标识符: 测试人: 错误等级 说明实际的输出或结果 实际输出 操作序号 说明输入的具体数据或动作 错误等级 测试输入 预期输出 实际输出 - 17 - 软件测试规范 附录五 测试计划 附录五 测试计划 1 概述 1.1 编写目的 [可照抄下列语句,也可适当修改。] 本文档的编写目的在于为整个测试阶段的管理工作和技术工作提供指南;确定测试的内容和范围,为评价系统提供依据。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 1.4 测试种类 说明本次测试所属的测试种类(单元测试、集成测试、有效性测试、系统测试、用户测试)及测试的对象。 2 系统描述 简要描述被测软件系统,可用图表加解释的形式,说明被测系统的输入、基本处理功能及输出,为进行测试提供一个提纲。 3 测试环境 3.1 硬件 列出进行本次测试所需的硬件资源的型号、配置和厂家。 3.2 软件 列出进行本次测试所需的软件资源,包括操作系统和支持软件(不含待测软件)的名称、版本、厂家。 4 测试安排 4.1 (子系统1名称和项目唯一标识号) 4.1.1 测试总体要求 描述本次测试的要求,如: 对所有功能进行正确性测试; 使用一些虚假值、最大值和错误值对软件进行测试; 对软件进行错误检测和出错恢复的测试; 对特定环境条件的组合,用模拟测试数据对软件进行测试; 使用从环境中提取的“真实数据”作为输入,对软件进行测试。 4.1.2 主要测试内容 列出提纲。 4.1.3 测试进度安排 给出进行测试工作的时间安排。 4.2 (子系统2名称和项目唯一标识号) 5 测试数据的记录、整理和分析 说明对本次测试得到数据的记录、整理和分析的方法和存档要求。 审核: 年 月 日 批准: 年 月 日 - 18 - 软件测试规范 附录六 程序错误报告 附录六 程序错误报告 (系统名称) 测试项目 项目名称 测试类型 模块名称 测试时间 序号 模块名称 错误等级 错 误 描 述 版本 测试批次 修改情况 复 核 测试人: - 19 - 软件测试规范 附录七 测试分析误报告 附录七 测试分析报告 1 概述 1.1 编写目的 编写本文档的目的在于 通过对测试结果的分析得到对软件的评价; 为纠正软件缺陷提供依据; 使用户对系统运行建立信心。 1.2 参考资料 说明软件测试所需的资料(需求分析、设计规范等)。 1.3 术语和缩写词 说明本次测试所涉及到的专业术语和缩写词等。 2 测试对象 包括测试项目、测试类型、测试批次(本测试类型的第几次测试)、测试时间等。 3 测试分析 3.1 测试结果分析 列出测试结果分析记录,并按下列模板产生BUG分布表和BUG分布图。 分析模版: 从软件测试中发现的并最终确认的错误点等级数量来评估: 从以上提出的BUG等级来统计等级和数量的一个分布情况:(如下表) BUG数量 所占比例 A 2 9% B 17 74% C 3 13% D 0 0% E 1 4% BUG分布图 0%4%9% A级 B级C级D级E级 74% 3.2 对比分析 若非首次测试时,将本次测试结果与首次测试、前一次测试的结果进行对比分析比较。 3.3 测试评估 通过对测试结果的分析提出一个对软件能力的全面分析,需标明遗留缺陷、局限性和软件的约束限制等,并提出改进建议。 3.4 测试结论 根据测试标准及测试结果,判定软件能否通过测试。 测试主管: 年 月 日
公司的每一分钱都来源于客户,在商业竞争日益激烈的今天,谁的服务好,抓住了客户,谁就抓住了财 富,就能在商业竞争中立于不败这地,邦仁客户管理系统帮您管理好销售的每个环节,管理好您的客户。 邦仁桶装水配送管理软件根据上千家成功企业独到管理经验开发而成,软件一上市便受到了业内专家 和客户的高度赞许与肯定。实用性的功能模块完全按照水店配送管理行业流程设计。已成为业内一流的软 件产品,产品的业务流程、先进的配送管理实施已成为水店配送管理软件行业的领头羊。软件把电脑与电 话功能集成,电脑上安装客户管理软件及来电接收器, 当客户来电时,电脑会在资料库中查询客户资料 , 并在电话第二声响铃时在电脑屏幕上弹出客户资料,让你在一接电话时就能叫出客户的名字, 客户一 定会感觉很惊喜,同时,与该客户的相关业务记录、财务信息、服务反馈及来电记录也同时显示出来,相 信软件必定会大大地帮您提高工作效率, 客户的满意度也会大大的提高。 软件特点 来电弹出客户,通话自动录音,缩短订水时间,提高订水数量和准确度; 支持多部电话同时来电同时弹出,多客户可以同时开单,缩短开单时间,比市面上队列式弹出更先进 提醒客户预约和订水频率提醒等多种提醒功能,防止客户流失 及时了解客户财务信息-欠桶,欠款,欠票,押桶 可以同时支持一路、两路及多路电话叠加 无需人工输入,自动填写派工单与回单 同时支持手机短讯派单,飞信,QQ等派单方式; 操作简便,点点鼠标就可以完成工作 防止假水假水票 支持市面上所有的Pos打印机(58/75/80等型号)和所有宽行打印机,打印店名地址配送电话等自已设置 ,自已设置字体大小; 独有的接线机器人功能,自动打印派工单 用户可自定义设置来电提示音功能,软件可以在无人值守的情况,语音提示用户,完成订水过程,并自动 打印配送单(订水机器人是额外收费的) 完善的进销存功能 方便简洁的短信单发和群发功能(向公司申请开通此功能) 多角度的报表输出和分析功能 支持多店连锁管理(联锁呼叫中心方案向我公司索要) 支持多用户协同工作 支持现金,月结,水票,水卡,签单等所有结算方式 功能介绍 是一个专业的电话服务系统 来电号码和客户资料自动弹出,多个电话同时打来,软件可以同时弹出,不用 输入客户编号就可得知客户地址,订水品牌,剩余水票,定购总金额,欠桶数量,押金,最后订购时间等 情况。让客户的资料一目了然,陌生客户第一次来电还可弹出来电归属地。 基本资料设置 1.配送的水种品牌、进货价、销售价、初始库存、初始空瓶等设置,可让软件识别我们做的业务,同时让 软件自动为我们管理各个品水牌的库存,及时准确的了解库存; 2.员工管理 设置员工为业务员或配送员,当设置成业务员/配送员时我们可以通过软件报表统计统计业 务员的提成,而且可以看到业务员/配送员历史与当天的任一时间的销售配送和提成状况。 3.片区设置 根据自己客户的实际情况分配片区,灵活实用的片区销售报表可以帮你看到各个片区的任何 时间内的销售情况,让我们对桶装水配送做出更合理的优化方案。 4.供应商管理 将自己的供应商录入软件内,方便我们查找供应商,同时了解与供应商的财务信息情况 5.工作模式设置 单机版本和网络版本合二为一, 购买一套在一台电脑上运行就是单机版本,购买多套 在多台电脑运行,简单的设置一下就可以实现数据共享,行成网络版本 6.操作员管理 设置成不同用户、不同权限登入软件使客户资料更安全。在system超级用户名下设置其他 的用户可对其他的用户权限划分,修改客户、删除客户、修改供应商、删除供应商、修改销售单、删除销 售单、开进货单、浏览销售统计报表、删除来电日志、导出客户资料等,勾选代表赋予权限 7.用户信息设置 设置自己公司或水站自己的名称、地址、电话、其他说明等,可个性化打印出自己喜爱 的打印小票 8.录音及外线设置 可设置软件是否自动录音,根据自己电脑硬盘大小设置录音文件是否删除,删除的话 留存多少天删除。特有的外线过滤功能可设置任意外线号码,轻松过滤来电前的外线 9.客户资料的录入 可通过软件快捷键迅速新建客户,对客户的卡号、地址、联系人、开卡日、电话(可 设无数个)、收款方式、片区、月结日、订水频度、洗机情况、销户日期、业务员/配送员及提成、借机 、押瓶、喜爱品牌及价格、备注和客户财务信息等设置  强大的提醒功能 根据客户实际的订水周期设定天数,超过该频率未订水的客户,软件里都会有提醒。对 于预约订水的客户,可以设置具体的时间提醒、多少时间提醒。月结客户的月结提醒,方便我们合理分配 时间; 客户订水操作 客户订单编号自动生成 格式如下:SH080103-00001,080103:年月日, 00001:当天的订单号,每天都会从 00001开始自动编起,比如:sh080101-00001 表示2008年1月1日的第一张订单; 订水订单处理 当客户用客户资料里的其中一个电话打过来的时候,多个电话同时打过来软件会同时弹出 所有客户资料且自动记录该客户的订水品牌、数量和价格。跟客户校对后点“立即送水”按钮,软件会自 动填写配送单且客户资料里的财务信息会自动积累欠款数量、欠票数量、欠桶数量等,这时我们可以选择 打印软件预设的不打印/窄行打印/宽行打印3种模式中的一种,以后软件会自动选择该打印方式打印小票 。配送员便可以凭借小票配送和回款及回瓶。而且订水如果洗机会主动更新客户的最新洗机时间 订单修改 当出现客户要改订其他水或打印机卡纸时,我们可以双击该单进行修改、重新打印和删除该单重新做新单 。当出现客户退单时,我们可以直接删除该单和选择软件快捷按钮进行销售退货; 订水回单处理 配送员送完水以后我们就要做回单操作了,点“回单”按钮软件会自动根据客户的收款方式不同自动填写 回单,你只要核对客户的已收款,已收水票,已回桶,送水提成,基本无需录入,客户财务信息里会自动累 计 欠款金额、欠票数量、欠桶数量等。且没有回单跟回了单的订单有颜色区分(红色的代表没有回单, 白色的代表已经回了单),同时软件会对每个商品的空桶统计,总的空桶统计等; 水票处理 可以对水票客户进行快速充值,客户财务信息里会自动累加水票总数,可以管理每张水票的票号,收票后 可以查询水票号,防止假水票,在报表里有客户在任一段时间充水票的详细情况,你也可以快速查询水票 客户剩余水票情况; 进销存管理 实时显示当前所有产品的库存数,空瓶数量。销售自动出库,并自动更新库存,出库统计,入库统计,自 动累计,每一供应商的未付款,欠瓶等; 经营状况分析 强大的经营分析报表,业务员,配送员的配送明细表与提成报表,每日销售配送报表,水票统计报表,配 送员洗机报表,每个客户的欠桶统计表; 销售明细报表 可对任何时间段内的配送员、各类水品牌和客户作为条件索引查询销售情况,实时掌控经营状况,及准确 算出配送员的工资提成。同时也方便对帐; 客户财务统计表 可统计所有客户订水品牌及单价、押金、欠瓶、欠款、未收水票等,方便掌控客户资讯; 多角度销售统计报表 可通过时间查询各个时间段内的产品销售情况,提供年、月、日、配送员、产品和客户等多个索引查询, 轻松做到甩手老板; 所有报表可导出,供打印或二次编辑个性化样式; 客户资料的方便查询(支持模糊查询)和录入修改 来电日志的管理 可通过时间查询各个时间段内的来电客户的时间、电话、地址、订购品牌、接线员和事由等。也可删除你 的来电,亦可通过时间打印个时间段内的来电记录; 软件可最小化到计算机右下脚的托盘中不影响用户进行其他操作,一旦来电,自动弹出小窗口,并捕捉来 电进行订单录入操作 客户资料导入和导出 正式版软件可将客户资料直接导入本软件,免去录入资料的步骤。有权限的用户可迅速导出软件方便自己 编辑个性化资料。 短信单发和群发 可以给送水员发送短信来实现送水信息的传递,也可以实现对客户在节假日群发祝福短信或平时的促销短 信,还可以定时发送,到了该时间软件会自动给设定的客户发送。 试用版登录帐号 用户名:system 密码:空 适用对象 桶装水配送店及煤气配送点。 软件价格及服务 服务: 终身电话、Email终身免费支持,软件终身免费升级,硬件三个月内有问题包换。 历史版本更新 -------------------------------------------------------------------------------- 10.1版改进 1、增加退单查询报表 2、宽行打印有表格线输出,打印格式更漂亮 3、录单文件存放路径支持自己设置 4、开进货单放宽限制,开入库单时充许数量为0 5、工具栏和订单区右键增加“派单”按钮,派单操作更简单直接 6、对数据进行加密处理,数据更安全 7、来电区来电记录更改排序算法,未处理来按电话先后自动上排,防止来电遗漏处理 8、增加来电区对陌客户开单提醒,有效防止人为误操作 9、增加软件对配送单在不同配送阶段的软件识别,引导用户进入下一步操作,有效避免错误操作 10、优化主界面客户搜索的功能智性,直接输入关键字回车,既可完成模糊搜索 11、回单窗口可直接录入备注 12、更新操作视频教程 10.0版改进 1、增加对现金出入里,对回桶,收现付现金的统计,作为其它收入和其它回瓶显示在主界面的统计栏里 2、增加库与库对导时,出入库记录,充票记录,供应商,操作员等其它数据表的自动导入 3、增加对收到的所有水票的核销功能,防止同号水票重复所用,防假水票更易操作 9.2版改进 1、增加录音文件存放目录自已设置支持 2、增加预先地址设置,录入客户时选地址 3、弹出客户资料窗口增加欠桶明细报表 4、增加水票核销功能,当现金客户用其它水票客户赠送的水票来结算时,可用些功能来核销掉原水票客 户的剩余水票 5、导入数据时,增加库与库对导的选项,方便用户升级 6、开配送单时,支持飞信通知配送员 9.1版改进 1、充水票未付清款自动产生欠款 2、现金出入增加其它收款和其它付款 3、修改了客户欠瓶明表不显示的BUG 4、打印字体大小支持自定义 5、押金条打印支持窄行打印和宽行打印 9.0版改进 1、增加多个客户共用一个电话的解决,会弹一个小窗口列出该电话对应的所有配送地址,选择地址后弹 出再做单 2、弹出窗口里直接显示历史送水记录 3、增加回单时,客户欠桶时收客户押金的支持 4、对每个客户都增加现金出入的功能,用以解决没送水但收到月结款,买水票水卡款,收支押金款,并 计入当日所收现金报表 5、增加产品销售利润报表,每日现金出入流量利润平衡表等多个报表 -------------------------------------------------------------------------------- 8.0版改进 1、软件界面全新设计 2、软件退出前增加备份数据的是提示 3、数据导入,备份数据,恢复数据等功能增加进度提示 -------------------------------------------------------------------------------- 7.1版改进 1、窄行打印的打印格式增加了店名、配送电话、配送地址和广告语的打印; 2、打印设置里,增加了打印的格式设置(不打印,宽行打印,窄行打印),开单时,系统会自动按设定 的打印格式打印小票; 3、更正了以往版本里更改客户编号,销售记录里的客户编号不随之更改的BUG; -------------------------------------------------------------------------------- 7.0版改进 1、系统增加押金条打印功能; 2、系统退桶和退押金功能,空桶自动更新库存; 3、宽行打印和窄行打印的单上增加欠桶、欠款和欠票等项目; 4、修改6.X版里客户资料的排序方式,改回按录入顺序的排序; 5、修改6.X版里订水记录的排序方式,未配送完的单排上面(有颜色区分),配送完的单按时间先后排下 面; 6、增加销售订单的备注查询; -------------------------------------------------------------------------------- 6.1版改进 1、系统增加对充水票记录的修改和删除; -------------------------------------------------------------------------------- 6.0版改进 1、系统增加对支装水、饮水机和纸杯等勿需回瓶的产品销售支持; 2、建订水记录时,增加了短讯自动通知送水工上门配送的功能; 3、更换了短讯发送网关,解决以往版本发短讯有延时的问题; 4、支持多用户联网群发短讯; 5、改进了客户与订单的索引方式,查询速度更快; 6、增加了版本升级时,导入销售数据的支持,解决以往版本升级时,销售数据无法导入的问题,此功能 适用6.0以上的版,从6.0以下的版本升级到6.0及以上版本时,不适用; 7、系统增加了数据操作工具,数据备份、恢复和清理维护等工作更简单、方便; -------------------------------------------------------------------------------- 5.2版改进 1、订单状态增加颜色区分,未回单的订单红色显示; 2、增加了操作权限的显示和修改功能; -------------------------------------------------------------------------------- 5.1版改进 1、增加业务员提成及业务员提成报表; 2、修改了以往版本在修改和删除订单时不更新客户财务信息和库存的BUG; 3、修改了以往有客户反应在有些系统上,选择时间不显示日历的现象; 4、订水如果洗机会主动更新客户的最新洗机时间 5、客户资料里加入押桶品牌 -------------------------------------------------------------------------------- 5.0版改进 1、客户资料增加累计总金额,累计总数量,弹出客户显示订水时间; 2、增加用户信息自定义设置,设置后,宽行打印订单时会打印出用户信息; 3、打印可以同时支持窄行打印(小票)和宽行打印,打印格式自动记忆; 4、订单号改成流水号,并自动生成,方便用户对单; 5、增加销售退单功能,退单自动重新计算库存; 6、增加每个商品的空桶统计,总的空桶统计等; 7、增加送水提成的计算,可根据客遍及户远近设置不同的提成; 8、修改了以往版本导入数据时,不导入客户财务数据的问题; 9、增加了各种报表都可以导出到excel文件,供二次编辑打印; 10、库存报表增加了进货金额,库存总量及库存总金额的计算; 11、增加了销售明细表,此表可生成配送员配送明细表,客户的销售明细表,产品的销售明细表等; 12、修改以往版本的销售订单不可以重复打印问题; 13、增加了每个客户的欠桶统计表,可统计出每个品牌的欠桶和数量; 14、增加配送员洗机报表;
GS7020B GPRS LED 显示屏控制卡用户手册 一、 技术指标和特点 1. 同时支持GPRS 和串口通信。 2. GPRS 通信 (1) 频段:EGSM900/DCS1800 双频。 (2) 灵敏度: -106dBm (3) 最大发射功率: EGSM900 Class4(2W) DCS1800 Class1(1W) 3. 串口通信速率: 115200bps。 4. 单色控制范围: 32768 点(127 条节目)32*1024、64*512、128*256… 40960 点(31 条节目)48*832、64*640… 5. 支持扫描方式: 1/16、1/8、1/4、静态等。 6. 支持最多8 个分区。 7. 支持每日8 个时段的8 级亮度调节(含自动开关显示屏)。 8. 支持多种节目显示方式,可单独控制进入和退出方式。 9. 可定义节目的每日播放时段(最多4 个)。 10. 可定义节目播放的起始和终止日期。 11. 树形显示屏管理。支持快速节目群发。 12. 节目预览功能。 13. 发送失败后的自动重发功能。 14. 发送日志记录与查询。 15. 数字时钟(支持农历)、倒计时功能。 16. 支持动态域名解析。 17. 控制卡自带4 个12 接口和2 个08 接口。 18. 支持开关量输入报警功能(选项) 19. 多个显示屏节目同步播放(选项) 20. 操作方便的操作软件。 21. 供电电压: 5V 22. 工作温度: -40℃~+80℃ 二、 GS7020B 硬件 1. 控制卡布局: (1) RS232 及报警输入接口(9 芯针座) (2) 天线接口(阴头) (3) SIM 卡座 (4) 电源端子 (5) 显示屏扫描接口,6 个接口上排从左至右为 P2_12, P1_12, P1_08; 下排从左至右为 P4_12, P3_12, P3_08。 (6) OE 极性选择跳线 OE_SEL。应与显示单元板和控制卡软件软件配置一 致。 (7) 状态指示灯 (8) 时钟电池(3V 锂纽扣电池CR1220) 2. RS232 及报警输入接口信号定义: 1 – 报警开关量输入 2 – RXD 3 – TXD 4 – 空 5 – GND 6 – 空 7 – 空 8 – 空 9 – 空 3. OE 极性选择:  如果显示单元板OE 为低电平有效,除在软件配置中选择OE 反向外, 1 2 7 8 3 4 5 6 OE_SEL 应用跳线块短接右侧(-)的两个插针。如此可保证控制卡加 电期间显示屏为关闭状态而不会有亮线出现,从而减少对电源的冲击 并对控制卡的正常启动提供保障。  如果显示单元板OE 为高电平有效,除在软件配置中不选择OE 反向外, OE_SEL 应用跳线块短接左侧(+)的两个插针。如此可保证控制卡加 电期间显示屏为关闭状态而不会有亮线出现,从而减少对电源的冲击 并对控制卡的正常启动提供保障。 三、 使用前的准备工作 1. 电源 GS7020B 采用5V 电源供电,可与显示屏共用一个电源。由于 GPRS 通信 对电源要求较高,峰值最大可能需要电源能瞬间提供2A 电流并且电压跌 落不大于0.5V,因此应选用动态响应较好的电源。必要时可使用5V2A 的电源单独为GS7020B 供电。 如果GS7020B 与显示屏共用一个电源,应使用不超过1 米的电源线直接 从电源上引出,请勿使用经过若干显示单元板串接的电源。 注意:如果已经将显示单元板通过排线连接到了GS7020B,则一定要保 证显示屏单元板与GS7020B 同时供电或显示屏单元板先于GS7020B 供 电。否则可能造成GS7020B 接口驱动的损坏! 2. 手机卡和GPRS 资费 GS7020B 的GPRS 通信要求手机卡开通GPRS 数据业务。一般情况下需要 开通cmnet 来保证发送计算机通过Internet 与GS7020B 通信。客户可根 据自身情况选择中国移动或中国联通的GPRS 业务。 GS7020B 每个月最少需要10MB 流量,根据发送节目的平凡程度和节目 内容大小,客户可选择20~50MB 的包月流量。具体资费请咨询当地移动 运营商。 3. 串口通信 GS7020B 的RS232 串口可用来配置GPRS 通信参数或作为GPRS 通信的备 用通信方式。在正式使用GS7020B 前,用户可使用串口通信对 GS7020B 的显示和通信参数进行配置并可测试显示效果。 GS7020B 与计算机之间的串口线采用2-3 交叉的串口线通信。客户可以 自行制作或使用从市场上购买的标准交叉串口线。 4. 天线 GS7020B 标准配置为带3 米引线的磁性或无磁吸盘天线。使用时应将天 线置于手机信号较好的位置。除非显示屏位于信号较强的位置,一般应 将天线引出显示屏的金属外壳。 在露天环境中,要注意引出位置的防水 处理。 5. GPRS 通信服务器 GS7020B的GPRS 通信服务器可根据通信数据量的大小及服务器位置使用 一台单独的计算机或与发送软件共用一台计算机。 (1) 通信服务器的联网要求  通信服务器或其路由设备(路由器、交换机等)必须拥有 Internet 上的IP 地址(固定IP 或动态IP)。如果存在路由设备, 该路由设备客户应有修改其配置的权利和能力。  根据系统中显示屏的数量,具有相应的通信带宽 (2) 通信服务器常见构成方案: A. ADSL(中国联通、中国电信)路由器上网,路由器可获得动 态Internet IP 地址。 B. ADSL(中国联通、中国电信)路由器上网,并且路由器绑定 静态Internet IP 地址。 C. 计算机直接通过ADSL 拨号上网,可获得动态Internet IP 地 址。 D. 计算机直接通过ADSL 拨号上网,并且绑定静态Internet IP 地址。 E. 由Internet 网络接入商提供光纤、DDN 专线、等接入方式, 并提供Internet 固定IP 地址。 F. 由网络服务商托管服务器,服务器拥有Internet 固定IP 地址。 客户计算机可通过互联网访问该服务器。 (3) 服务器域名解析:  无论服务器是否拥有固定的Internet IP 地址,客户都可采用相 应的域名绑定业务使GS7020B 可通过该域名注册到服务器上。 但为了减少域名解析带来的额外通信流量,建议拥有固定 Internet IP 地址的客户直接使用该IP 地址通信。  如果客户采用的动态Internet IP 地址方案,则需要在服务器上 安装和运行动态域名解析(DDNS)客户端软件。常见的动态 域名解析软件有“花生壳”等。客户可到其网站下载、注册、 运行该软件。  采用动态Internet IP 地址方案和动态域名解析时,如果服务器 刚开机或断线重新上网,则最长可能要等待5 分钟,GS7020B 才能注册到服务器上。 (4) 路由器配置: 很多客户的局域网上的计算机是通过一个共用的ADSL 路由器联 接到Internet 上的。此时需要对路由器进行配置。下面以一种路 由器为例说明路由器的配置方法:  路由器型号:D_Link DI-704UP  路由器在局域网上的IP 地址: 本例中为192.168.0.1  客户计算机(用作GPRS 通信服务器)IP 地址: 本例中为 192.168.0.17。 注意:客户计算机IP 地址应采用静态IP, 勿使用DHCP 动态获 得。否则路由器配置在客户计算机或路由器重启后将不能正 确地指向客户计算机。  配置步骤: a. 打开浏览器,输入路由器起始页面地址: b. 如果路由器配置页面需要密码进入请输入用户名密码(本 例中的路由器出厂默认用户名和密码为admin、admin。 c. 进入路由器配置页面后选择相应选项,找到虚拟服务器 (Virtual Server)项。如下: 其中: Name(名称)为自己起的一个名字 Private IP(本地IP 地址)填客户计算机的IP 地址 Protocol Type(协议类型)选UDP 或所有(Both) Private Port(本地端口号):3700 Public Port(外网端口号) :3700 填好相应内容后,按下应用/保存(Apply/Save)按钮,即可 生效。 四、 单用户版服务器软件IpTransfer 使用说明 1. 安装与运行 本软件无需安装。直接拷贝并运行IpTransfer.exe 即可 2. 软件界面 界面中的上半部分指示客户端软件(GS702BMan)的连接和通信状态。 RX、TX 分别表示IpTransfer 从GS7020BMan 接收和向GS7020BMan 发送 的数据字节数。在线DTU 数量统计当前可通信的控制卡数量。 界面中的下半部分指示GS7020B 控制卡的连接和通信状态。RX、TX 分 别表示IpTransfer 从该控制卡接收和向该控制卡发送的数据字节数。最后 登陆时间指明服务器最近一次收到GS7020B 控制卡发送的登陆报文或命 令响应的时间。正常情况下,该时间距离当前时间不超过30 秒钟。 3. 用户名和密码 为防止对显示屏的不安全访问。客户端软件GS7020BMan 通过IpTransfer 向GS7020B 控制卡发送数据或命令均须通过口令检查。第一次运行 IpTransfer 后,应选择“用户/编辑”菜单设置用户名和密码: 用户名最长11 个字符;密码最长15 个字符。 4. 控制卡在线状态 对已经在线的控制卡,如果超过2 分钟未接收到新的登陆报文或数据, 则IpTansfer 从列表中删除该控制卡。 五、 客户端软件GS7020BMan 使用说明 1. 安装与运行 本软件无需安装。可将GS7020BMan_V2.x.exe 拷贝到一个文件夹里并运 行即可。 运行GS7020BMan_V2.x.exe 后,在其所在的文件夹中,可能会自动生成 一些新的文件和文件夹: 其中:config.ini 保存控制卡配置和节目信息;config 文件夹保存控制卡列 表信息;log 文件夹保存节目发送日志;txstatus.txt 保存各控制卡最后的 节目发送状态(是否成功)。 2. 软件升级和备份 如有新的GS7020BMan 软件版本,仅需将新软件拷贝到原来的安装目录 即可。 如果要更换计算机或进行备份。需要拷贝GS7020BMan 所在文件夹内的 所有内容,至少要备份config.ini 文件和config 文件夹。 3. 软件界面 菜单栏 工具条 显示屏列表 节目列表 节目内容 编辑区 节目属性 定义区 4. 通信配置 通信配置用于选择与控制卡的通信方式及定义有关参数。 选择菜单“系统/通信配置”项即可进入通信配置对话框。  串口通信方式主要用于修改控制卡内的GPRS 通信参数和本地测试, 也可用于安装运行后的GPRS 通信的备用通信方式及。  GPRS 通信服务器的IP 地址或域名是指运行IpTransfer 软件的计算机 的IP 地址或其域名。常见配置有以下几种情况: (1) GS7020BMan 和IpTransfer 运行在同一台计算机上,此时GPRS 通信服务器的IP 地址或域名应填写为”127.0.0.1”(IP 地址127.0.0.1 在计算机中表示本机)。 (2) GS7020BMan 和IpTransfer 运行在不同的计算机上,但两台计 算机处于同一个局域网中,此时GPRS 通信服务器的IP 地址或域 名应填写运行IpTransfer 的计算机的局域网IP 地址。 例: IpTransfer 运行在IP 地址为”192.168.0.17”的计算机上, GS7020BMan 运行在IP 地址为”192.168.0.220”的计算机上, 则此 处应填写”192.168.0.17”。 (3) GS7020BMan 和IpTransfer 运行在不同的计算机上,并且两台 计算机位于不同的局域网中。此时应填写运行IpTransfer 的计算 机所在网络的Internet IP 地址或域名。 例1:IpTransfer 运行的计算机上安装有动态域名解析软件,其域 名为”yuepoch.5166.info”, 则在GS7020BMan 中的GPRS 通信服务 器的IP 地址或域名应填写”yuepoch.5166.info” 例2:IpTransfer 运行在域名为”dtu.yuepoch.com”的计算机上, 且 该计算机拥有Internet 固定IP 地址”219.234.88.231”,则在 GS7020BMan 中的GPRS 通信服务器的IP 地址或域名应填写” dtu.yuepoch.com”或”219.234.88.231”。  用户名和密码此处要填写已在IpTransfer 中设定的用户名和密码。  GPRS 通信的超时时间和重试次数一般用4 秒和5 次。根据客户自身 的网络情况可适当改变,但由于GPRS 通信的特点,超时时间一般应 在3~15 秒之间。  自动重发间隔是指如果发送节目失败,则在失败后的指定时间后开始 尝试重新发送,如失败则再次等待指定时间发送,直至发送成功。如 此处为0,表示发送失败后不自动重发。不管此处是否指定了自动重 发时间间隔,用户随时都可手动开始重发未成功发送的节目内容。 5. 控制卡配置 在将控制卡连接到显示屏之前,应检查和修改控制卡中的有关配置。该 项也用于检查和修改控制卡内的GPRS 通信参数。在运行中也可远程修改 某些参数。 选择菜单“系统/控制卡配置”项或 按钮即可进入控制卡配置对话框。  设备编码:标识控制卡的最长11 个字符的字串。设备编码用于GPRS 通信。在一个系统中,不能有重复的编号。GS7020B 在出厂时已经预 写入唯一的设备编号,并已在控制卡标签上注明。在串口通信方式下, 该项可被修改,因此建议在修改配置前先读取控制卡配置,以防写入 错误的编号。GPRS 通信方式下,该项不可编辑修改。  GPRS APN: APN 是GPRS 接入点名称。除非在中国大陆以外运行 GS7020B, 或已从移动服务商获得专用的APN, 该项都应为”cmnet”。  服务器 IP 地址或域名: 是指运行IpTransfer 软件的计算机的Internet IP 地址或其域名。GS7020B 将在连接到GPRS 网络后向该项指定的计 算机定时发送登陆报文。  DNS 服务器1 和DNS 服务器2:域名解析服务器。目前GS7020B 依靠 自动获得的域名服务器解析GPRS 通信服务器域名,这两项暂时无用。  自动亮度调节:可设定每天8 个时段的8 级亮度(关屏-最亮)。  显示屏宽度、高度:按显示屏实际尺寸配置。  扫描方式: (1) 1/16(A) 32 点高1/16 扫描单元板 (2) 1/8(A) 16 点高1/8 扫描单元板 (3) 1/4(A) 16 点高1/4 扫描12 接口单元板(P10、P12.5…) (4) 1/4(B) 8 点高1/4 扫描12 接口单元板(P10…) (5) 1/16(B) 16 点高1/16 扫描08 接口单元板 (6) 1/16(C) 32 点高1/16 扫描08 接口单元板仅显示中间16 点 (7) 1/1(A) 静态显示单元板 (8) 1/1(B) 静态显示单元板  OE 反相: 显示单元板OE 低电平有效时选择该项。注意控制卡上的 OE_SEL 跳线应和此处设置一致,否则有可能造成开机失败。  数据反相:显示屏单元板数据低电平有效时选择该项。  扫描逆序:显示屏单元板上的ABCD 地址线反过来使用时选择该项。  字节逆序:暂不支持  折行输出:用于输出接口不够用时用Z 字形方式驱动显示屏。具体接 线与显示屏有关,具体使用请联系我公司技术支持。  双色:2.4 版本以下暂不支持。如驱动双色显示屏,请联系我公司技 术支持。  允许开关量报警:如选择该项,则在将控制卡上的9 针插座的1 脚和 5 脚短路200 毫秒后,将在显示屏上闪烁显示最后一个编号(127 或31) 的节目内容。一旦显示了报警内容,只有停止控制卡电源才能使其恢 复显示正常的节目内容。如未选择该项,最后一个编号(127 或31)的 节目将作为正常节目参与循环播放。  分区管理:GS7020B 支持最多8 各分区同时显示独立的节目内容。分 区位置坐标以显示屏左上角水平位置x = 0, 垂直位置y=0。每条节目 编辑时可指定其所属分区编号。为了方便操作,一般将需要经常编辑 节目内容的编号设为1。不经常改动的分区节目,例如时钟或倒计时 节目可使用编号较大的节目序号。 修改分区时可从分区管理下部的窗口中观察分区在显示屏上的位置 以检查分区设置是否正确。 6. 控制卡(显示屏)管理 GS7020BMan 采用树形分级显示屏管理。 选择菜单“系统/显示屏管理”项或 按钮即可进入显示屏管理对话框。 工具栏按钮自左至右分别为:添加显示屏组、添加显示屏、删除、重新 打开(恢复)之前保存的显示屏列表、保存。  修改显示屏组或显示屏名称:选中要编辑的项,在其名称上单击鼠标 左键,等待改名称变为可编辑状态后再进行修改。  修改显示屏设备编号:选中要编辑的项,在原编号上单击鼠标左键, 等待其变为可编辑状态后再进行修改。  退出显示屏管理窗口前请保存已经进行的修改。如果为保存改动,退 出窗口时将出现如下提示: 此时可选择保存后退出(是)、不保存退出(否)或回到显示屏管理 窗口(取消)。 7. 节目内容的编辑  节目内容直接在节目内容编辑区内输入完成。  编辑区内的每个网格表示一个显示屏的大小,目的是为了可以直观 地了解显示内容的显示位置。  单击节目列表项或改变下拉列表 可选择 当前编辑的节目。  通过 可以选择该节目所属分区。  节目内容说明修改后将在节目列表中显示,以方便进行节目管理。  节目现有内容实际播放所需要的时间可在节目编辑区上面显示出 来: ,单击刷新播放时间按 钮或者打开新节目时将重新计算播放时间。 (1) 节目文字内容的编辑  字体:按下 按钮即可弹出字体选择对话框。  水平对齐:编辑区外左上的三个按钮 分别为左对 齐、水平居中、有对齐。当文字内容少于一个屏宽时可用于 调整文字内容的水平位置。  垂直居中:当文字内容少于一个屏高时,按钮 可以调整 文字内容的垂直位置。  键盘命令 箭头键( ):移动编辑光标 回退键(Backspace):删除光标前的文字 删除键(Delete): 删除当前光标处的文字 Shift+箭头键( ):选择文字 Ctrl+C: 复制 Ctrl+V:粘贴 Ctrl+X: 剪切 Ctrl+A:选择所有文字  可以使用鼠标改变光标位置(单击左键)和选择文字(按下 左键拖动)。  在编辑区内单击鼠标右键,可弹出编辑命令菜单。 (2) 节目图片内容的编辑  按下 按钮即可弹出图片文件选择对话框。  GS7020BMan 仅支持bmp 格式的文件,并将彩色文件转换为 单色格式显示。  通过调整 ,可以改变图片的位置。  图片的大小可以超过显示屏的显示范围。  每个节目只能加载一个图片。 (3) 节目内容的删除。 除了可以使用键盘命令和右键菜单删除节目文字内容外,还可以 通过编辑菜单中相应命令删除全部文字、图片内容。  注意使用这些菜单命令前,要确认节目列表中的选择框是否 正确。 8. 节目显示属性控制  节目进入方式  直接显示:立即显示一个屏幕的内容。如果节目内容超过一 个屏幕,则按先从左到右再从上到下的次序分多次载入显示 内容。该显示方式下,应注意文字不要跨在屏幕分割线上。  连续左移:第1 个屏高的节目内容全部向左连续移入  连续右移:第1 个屏高的节目内容全部向右连续移入  连续上移:第1 个屏宽的节目内容全部向上连续移入  连续下移:第1 个屏宽的节目内容全部向下连续移入  向左移入:第1 个屏高的节目内容向左移入屏幕,如果节目 宽度超过一个屏幕,则按从左到右的次序分多次移入。  向右移入:第1 个屏高的节目内容向左移入屏幕,如果节目 宽度超过一个屏幕,则按从右到左的次序分多次移入。  向上移入:第1 个屏宽的节目内容向上移入屏幕,如果节目 高度超过一个屏幕,则按从上到下的次序分多次移入。  向下移入:第1 个屏宽的节目内容向下移入屏幕,如果节目 高度超过一个屏幕,则按从下到上的次序分多次移入。  向右展开:  向左展开:  向下展开:  向上展开:  从左右向中间展开:  从中间向左右展开:  从上下向中间展开:  从中间向上下展开:  水平百叶窗:  垂直百叶窗: 显示一个屏幕的内容。如果节目内容超过一个屏幕,则按先 从左到右再从上到下的次序分多次载入显示内容。在这些显 示方式下,应注意文字不要跨在屏幕分割线上。 百叶窗的页片宽度可定义,一般取8~64  节目退出方式:  直接清除:  向左移出:  向右移出:  向上移出:  向下移出:  向右擦除:  向左擦除:  向下擦除:  向上擦除:  从左右向中间擦除:  从中间向左右擦除:  从上下向中间擦除:  从中间向上下擦除:  水平百叶窗:  垂直百叶窗:  无:不退出。根据本节目的下一部分内容或下一条节目内容 的进入方式决定显示方式。  进入速度和退出速度: 单位为毫秒。指每做一次动作,例如左移一个像素宽度所需要的 时间。直接显示和直接清除方式对应的进入速度和退出速度无 效。该数值越大,动作速度越慢。 一般取值再16~50 之间。 对1/16 扫描的16 点高显示屏,取值16 可获得平滑清晰的左移和 右移效果。  停留时间: 单位为毫秒。指一次进入方式动作完成后,显示内容在屏幕上静 止停留的时间。  起始时间和终止时间: 节目在该项指定的时间范围内才会被播放。  每日播放时段 节目在该项指定的时段范围内才会被播放。 上图中第一个时段为0 时0 分至23 时59 分(含59 分),即全天 播放。后三个时段起始时间和终止时间相同,表示无效。 如果已经播放了部分内容,即使此时终止时间到,该节目也会被 继续播放完成。 9. 节目显示效果预览  可以通过菜单“编辑/预览当前编辑的节目”项在电脑显示屏上预览 当前编辑的节目的显示效果。要停止预览,选择菜单“编辑/停止预 览当前编辑的节目”。  可以通过菜单“编辑/预览所有节目”项或 按钮在电脑显示屏上 预览总的显示效果。要停止预览,选择菜单“编辑/停止预览所有节 目”。 10. 数字时钟和倒计时 数字时钟和倒计时项统称为动态变化项。含有动态变化项的节目的进入 方式只能选择“直接显示”, 退出方式可以选“直接清除”或“无”,停留 时间选1000 毫秒以上。 例如要显示格式为 “2010 年11 月17 日 23:31:31 星期三”的数字时钟。  步骤1:先输入以上文字(具体的年、月、日、时、分、秒、星期等 数值随意)。  步骤2:选中2010 四个数字,再选择菜单“编辑/将所选文字设为动 态变化项”。等弹出如下对话框后,选择动态类型为“4 位数字年”, 点确定即可。 此时2010 四个数字将变成暗红色显示 :  步骤3:选中11 两个数字,再选择菜单“编辑/将所选文字设为动态 变化项”。 在设定动态文字对话框中选择动态类型为“2 位数字月”, 确定。  步骤4:依次选择动态类型,最后输入文字效果如下:  步骤5:设定显示方式等: 11. 节目的导出和导入 某些节目具有一定的代表性,此时可以选择菜单“编辑/导出当前节目” 将该节目导出至某一个节目文件。在编辑其它类似节目时可以选择菜单 “编辑/从节目文件导入到当前节目”来导入保存好的节目内容,然后在 此基础上修改即可。 12. 发送节目内容  发送节目内容的步骤: (1) 选择要进行操作的显示屏 (2) 选择要发送的节目 (3) 选择菜单“通信/发送节目内容”或 按钮即可开始发送 (4) 发送状态和是否成功可在相应的显示屏控制卡的通信状态/ 结果栏中观察到。  发送节目中如果出现单次命令响应失败,将按照通信配置中设置的次 数尝试重新发送该命令。  如果向某个显示屏发送节目失败,可以选择菜单“通信/查看所选显 示屏未成功发送的节目”以在所选显示屏通信状态/结果栏中显示未 成功发送的节目列表。  选择菜单“通信/重新发送上次未成功发送的节目内容”,可以手动发 起重新补发未成功发送的节目。  如果在通信配置中选择了自动重发,则在发送失败后的指定时间后将 弹出如下提示,并在未被手动推迟的情况下自动发起重新发送。 13. 查询控制卡在线状态 选择菜单“通信/查询控制卡在线状态”或 按钮即可查询所选择 控制卡的在线状态。如果该控制卡在线,则对应通信状态/结果栏中 将显示“在线”,否则显示“-”。 14. 查询控制卡时钟 选择菜单“通信/查询控制卡时钟”或 按钮即可查询所选择控制 卡的当前时钟。通信结果显示在其对应的通信状态/结果栏中。 15. 校对控制卡时钟 选择菜单“通信/校对控制卡时钟”或 按钮即可用发送计算机的 时钟校对所选择的控制卡。通信结果显示在其对应的通信状态/结果 栏中。 16. 开关量输入报警  如果要使用报警功能,在控制卡配置中应选择“允许开关量报警”并 写入控制卡。  报警输入为9 针D 型插座的1 脚和5 脚。如果这两个引脚连续短路 0.2 秒以上,则可引发报警显示。  报警显示的内容在控制卡允许的最后一条节目(第127 条或第31 条) 中定义。  报警显示内容节目的进入方式应选择“直接显示”,退出方式可选择 “无”,停留时间一般选300 毫秒。实际显示时,将以快闪方式显示。  报警显示一旦启动,则只有断开控制卡电源才能取消。  如果在控制卡配置中为选择“允许开关量报警”,则控制卡允许的最 后一条节目(第127 条或第31 条)将作为普通节目参与循环播放。 17. 查看发送日志 选择菜单“日志/查看节目发送记录”可打开如下记录窗口:
C#编程经验技巧宝典源代码,目录如下:第1章 开发环境 11.1 Visual Studio开发环境安装与配置 20001 安装Visual Studio 2005开发环境须知 20002 配置合适的Visual Studio 2005开发环境 20003 设置程序代码行序号 30004 开发环境全屏显示 30005 设置窗口的自动隐藏功能 30006 根据需要创建所需解决方案 40007 如何使用“验证的目标架构”功能 41.2 Visual Studio开发环境的使用 40008 为程序设置版本和帮助信息 40009 设置Windows应用程序启动窗体 50010 设置Web应用程序起始页 50011 如何设置程序的出错窗口 50012 如何进行程序调试 60013 如何结束不能正常运行的程序 60014 如何锁定窗体中的控件 60015 统一窗体中控件的字体设置 70016 通过“格式”菜单布局窗体 70017 起始页中的“Visual Studio开发人员新闻” 71.3 MSDN帮助的使用 80018 有效利用Visual Studio 2005附带程序 80019 有效使用MSDN帮助 90020 如何设置MSDN帮助 91.4 其他 100021 如何添加项目引用 100022 如何添加Web引用 100023 如何添加引用第3方控件 110024 如何生成DLL文件 110025 如何使用不安全代码 11第2章 语言基础 132.1 注释 140026 如何对代码进行注释 140027 #region、#endregion关键字的使用技巧 140028 “///”符号的使用技巧 140029 使用注释取消程序语句的执行 152.2 语句 150030 跳转语句GOTO的使用 150031 Continue语句的使用 160032 Break语句的使用 160033 Return语句的使用 170034 如何实现无限循环 170035 巧用foreach语句控制控件 180036 有效使用switch case语句 182.3 运算符 190037 如何使用引号赋值 190038 巧用“^=”运算符 190039 巧用位移运算符 200040 使用条件运算符 200041 巧用分隔符 200042 如何处理转义字符 210043 “;”结束符问题 210044 如何使用“??”操作符 222.4 表达式与关键词 220045 正确使用“&&”和“||” 220046 如何处理程序“溢出”错误 230047 有效使用base关键字 230048 typeof表达式的使用 230049 params关键字可以指定多参数 240050 using关键字的用法 240051 变量的作用域 252.5 其他 260052 有效使用this对象 260053 如何声明变量 260054 如何声明相同类型的多个变量 260055 利用Object变量传递参数 270056 强行改变运算符的运算顺序 27第3章 程序算法 293.1 数据结构 300057 如何实现单向链表 300058 如何实现双向链表 350059 如何实现堆栈 410060 队列的实现 430061 树的实现 443.2 排序 480062 如何实现选择排序算法 480063 如何实现冒泡排序算法 490064 如何实现快速排序算法 500065 如何实现插入排序算法 500066 如何实现希尔排序算法 513.3 常见算法的实际应用 520067 计算1+22+33+44+……+nn的值 520068 计算10!的值 520069 求最大公约数 520070 求最小公倍数 530071 判断素数的算法 530072 如何判断一个数是否是完数 540073 歌德巴赫猜想的算法 540074 八皇后问题 540075 用回溯法找出n个自然数中取r个数的全排列 550076 约瑟夫环问题 560077 猴子选大王 570078 如何判断IP是否正确 570079 如何将小写金额转换为大写金额 570080 统计文本字数 580081 文本中首字母改为大写 590082 C#随机数的产生 590083 身份证从15位升至18位算法 600084 十进制数转二进制数的算法 600085 十进制数转八进制数的算法 610086 十进制数转十六进制数的算法 620087 二、八、十六进制数转十进制数的算法 633.4 密码算法 650088 使用MD5算法对密码进行加密 650089 “凯撒”密码的算法 65第4章 字符及字符串处理技术 674.1 字符及字符串转换 680090 如何获得字母的ASCII码 680091 如何根据ASCII码获得字母 680092 编程中经常使用的ASCII码 680093 获得汉字的区位码 690094 如何根据区位码获得汉字 690095 如何将行字符串转换为列字符串 700096 如何将数字转换为字符串 700097 如何将字符串转换为数字 700098 如何将数字转换为日期格式 710099 如何将数字转换为货币格式 710100 将字母全部转换大写 710101 将字母全部转换小写 720102 将字符串首字母转换大写 720103 如何进行字节数组和字符串的相互转换 720104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 734.2 获取字符串信息 730105 如何获得一个字符串的长度 730106 如何获得一个字符串中数字的长度 740107 如何获得字符串中数字或字母的长度 740108 如何获得字符串中某个数字的位置 750109 获得字符串中汉字的个数 760110 获得字符串中指定后几位字符 760111 计算字符串中子字符串出现的次数 760112 获得字符串中大写字母的个数 770113 获得某字符在字符串中最后出现的位置 780114 如何找出字符串中某一字符的所有位置 784.3 常用字符及字符串处理技术 790115 如何判断是否为数字 790116 如何在字符串中查找指定字符 790117 如何在字符串中用一子串替换另一子串 800118 将新字符串添加到已有字符串中 800119 如何在字符串中添加多个空格 810120 如何根据标点符号分行 810121 如何将字符串颠倒输出 820122 如何设置小数的保留位数 820123 如何对字符串进行组合或分解 820124 判断字符串中某一字符是否大写 830125 按要求生成指定位数编号 830126 确定两字符串是否相等 840127 判断两字符串中指定子串是否相等 840128 判断字符串是否为日期格式 850129 清除字符串中指定的字符 850130 复制字符串中指定的字符 850131 巧截字符串的数字 860132 如何存储变长字符串 860133 在进行字符串比较时忽略大小写 870134 如何去除字符串尾空格 870135 如何去掉字符串中所有空格 880136 如何进行文本加密与解密 880137 如何区别0、空字符串、Null、Empty和Nothing 890138 从字符串中分离文件路径、文件名及扩展名 890139 如何批量替换某一类字符串 89第5章 数据处理 915.1 数字处理技巧 920140 如何对计算结果四舍五放入 920141 如何将商品金额小写转换成大写 920142 如何根据生日自动计算员工年龄 930143 如何设置货币值中使用的小数位数 930144 如何自定义货币值中的小数点 940145 如何自定义货币值中小数点左边数字分组字符 940146 如何自定义货币值中小数点左边每一组的位数 950147 如何自定义百分比值中小数的位数 950148 如何自定义百分比小数点 960149 如何自定义百分比小数点左边数字分组字符 960150 如何自定义百分比小数点左边每一组的位数 970151 如何自定义百分比符号 970152 如何自定义数字小数点右边的保留位数 980153 如何自定义数字小数点左边分组位数 980154 格式化输入数据为货币格式 990155 如何计算两个整数的乘积 990156 如何将二进制数转换为十进制数 1000157 如何将二进制数转换为八进制数 1000158 如何将二进制数转换为十六进制数 1000159 如何实现0~9之间随机整数 1010160 如何实现0~1之间随机数 1010161 如何返回数字的绝对值 1015.2 控件数据处理技巧 1020162 如何实现C#中用键完成TAB的功能 1020163 如何限制文本框密码输入长度 1020164 数据输入为空提示 1030165 如何设置文本框光标到末尾 1030166 输入法调整技巧 1030167 锁定文本框内的文本 1030168 使用Message.Show输出用户信息 1045.3 图片数据处理技巧 1040169 如何将图片存入数据库 1040170 如何将图片从数据库中读取出来 1040171 如何只允许输入指定图片格式 1050172 如何设置录入图片统一图片大小 1055.4 数组处理技巧 1050173 如何转换数组类型 1050174 如何复制数组中一系列元素的元素 1060175 如何检索指定条件数组中的元素 1070176 如何动态改变数组长度 1080177 如何反转数组中元素的顺序 1080178 如何排序数组中的元素的顺序 1090179 如何创建动态数组 1105.5 NET应用技巧 1100180 如何使用ASP.NET技术对口令加密 1100181 如何设定ASP.NET全局变量 1110182 如何设定全局联接数据库对象 1110183 如何在ASP.NET中获得客户端IP地址 1110184 如何在ASP.NET中获取文件的扩展名 1110185 如何在ASP.NET中用URL在页面之间传值 1120186 如何使用IsPostBack实现ASP.NET页面加载 1120187 如何利用输出缓存技术缓存ASP.NET页面 1120188 如何在ASP.NET中显示当前IE浏览器头信息 1135.6 其他应用技巧 1140189 如何判断年份是否为闰年 1140190 如何根据年份判断十二生肖 1140191 如何根据IP地址获取本机域名 1150192 如何获取“我的文档”系统文件夹路径 1150193 如何获取应用程序当前执行的路径 1160194 如何获取当前操作系统的信息 1160195 如何实现基本数据类型随意转换 1160196 如何生成全局唯一标识符(GUID) 118第6章 资料验证技术 1196.1 网络验证应用技巧 1200197 如何使用正则表达式验证E-mail格式 1200198 如何使用正则表达式验证IP地址 1200199 如何使用正则表达式验证URL 1206.2 常用数字验证技巧 1210200 如何使用正则表达式验证电话号码 1210201 如何使用正则表达式验证输入密码条件 1210202 如何使用正则表达式验证邮政编号 1210203 如何使用正则表达式验证手机号 1220204 如何使用正则表达式验证身份证号 1220205 如何使用正则表达式验证两位小数 1220206 如何使用正则表达式验证一年的12个月份 1230207 如何使用正则表达式验证一个月的31天 1230208 如何使用正则表达式验证数字输入 1230209 如何使用正则表达式验证密码长度 1240210 如何使用正则表达式验证非零的正整数 1240211 如何使用正则表达式验证非零的负整数 1246.3 常用字符验证技巧 1250212 如何使用正则表达式验证大写字母 1250213 如何使用正则表达式验证小写字母 1250214 使用正则表达式检查字符串中重复出现的词 1250215 如何使用正则表达式替换字符串 1260216 如何使用正则表达式拆分字符串 1270217 如何使用正则表达式验证输入字母 1270218 如何使用正则表达式验证中文汉字输入 1280219 如何使用正则表达式验证输入字符串 128第7章 日期和时间 1297.1 日期与时间的获取 1300220 获得系统当前日期 1300221 获得系统当前时间 1300222 同时获得系统当前日期和时间 1300223 如何获取当前日期是星期几 1300224 如何获取当前年的天数 1310225 如何获取当前月的天数 1310226 如何取得当前日期的前一天 1320227 使用TimeSpan对象获取时间间隔 1337.2 日期的格式化及其时间的比较 1330228 将日期格式化为指定格式 1330229 如何将短日期格式化为长日期格式 1340230 如何将数字日期转化为中文格式 1340231 如何对系统时间和数字进行比较 1350232 如何比较时间 1350233 获取两个日期之间的时间差并进行比较 1367.3 日期方法与函数的应用 1360234 使用DateDiff方法获取日期时间的间隔数 1360235 在SQL语句中使用DATEADD函数向指定日期添加一段时间间隔 1370236 在SQL语句中使用DATEDIFF函数获得两个日期的间隔 1370237 如何使用Sleep方法延迟时间 1370238 如何确定程序的运行时间 1380239 如何使用ParseExact方法将字符串转化为日期格式 1380240 如何使用ToString方法格式化日期 1390241 如何使用Convert方法转换日期显示格式 1397.4 系统时间与日期的设置 1400242 如何设置系统的日期 1400243 如何设置系统的时间 1400244 如何设置系统的日期和时间 1417.5 日期与时间的应用 1420245 如何将数据控件中的日期以编程的方式转化为指定格式 1420246 将格式化日期的方法绑定到数据控件中 1420247 直接格式化绑定到数据控件GridView中的日期列 1430248 在数据控件GridView的RowDataBound事件中对绑定到GridView控件的日期列进行格式化 1430249 如何实现倒计时功能 1430250 如何创建一个数字时钟 144第8章 Windows窗体设计 1458.1 Windows窗体基本操作 1460251 控制窗体加载时所在的位置 1460252 控制窗体最大化、最小化 1460253 清空窗体中的图片 1460254 如何使程序窗体总在最前 1470255 如何将菜单置于窗体的左侧 1470256 将其他窗体作为当前窗体的子窗体 1470257 如何根据控件大小自动显示滚动条 1480258 如何显示About窗体 1480259 利用Show方法显示被调用窗体 1490260 Load事件将窗体加载到内存 1490261 窗体的卸载与隐藏 1490262 设置窗体的状态 1490263 如何设置窗体在桌面上的位置 1500264 如何在关闭窗体前显示确认对话框 1500265 如何去掉窗体的标题栏 1510266 如何禁止在任务栏中显示窗体标题 1520267 如何禁止缩放窗体的边框 1520268 如何设置窗体标题栏文字右对齐 1520269 如何显示窗体的属性信息 1530270 如何隐藏窗体标题栏的按钮 1538.2 Windows窗体高级操作 1530271 设置闪烁的标题栏 1530272 如何在托盘中写入应用程序图标 1540273 如何以全屏方式显示程序窗体 1540274 如何从上次关闭位置启动窗体 1540275 如何通过拖动工作区来移动窗体 1550276 如何渐变显示窗体背景颜色 1550277 如何排列MDI窗体中的子窗体 1560278 如何拖动无标题栏窗体 1578.3 特殊类型的窗体 1580279 创建一个无ICON的窗体 1580280 如何制作飘动的窗体 1580281 使用拆分窗口 1590282 用C#实现启动欢迎界面 1590283 如何实现半透明渐显窗体 1600284 基于ListView的导航界面 1600285 类似OutLook的导航界面 1620286 图形化的导航界面 1620287 如何实现类似QQ的程序界面 1620288 如何实现类似Windows XP的程序界面 1640289 制作字形窗体 1640290 制作图形窗体 1640291 随机更换背景的窗体 1658.4 菜单、工具栏和状态栏的设计 1660292 带图标的菜单 1660293 带历史信息的菜单 1660294 可以拉伸的菜单 1670295 带背景的工具栏 1680296 浮动工具栏 1680297 带下拉菜单的工具栏 1690298 在状态栏中显示复选框 1690299 带进度条的状态栏 1690300 带图标的状态栏 1708.5 其他 1700301 界面设计要素 1700302 界面设计在程序开发中的重要性 1710303 如何设置窗体的键响应按钮 1720304 如何设置窗体的键响应按钮 1720305 窗体间数据的访问 172第9章 Windows窗体控件 1759.1 TextBox控件应用技巧 1760306 文本框中只能输入数字 1760307 如何设置TextBox控件输入多行文本 1760308 如何锁定文本框 1760309 如何控制TextBox控件中的插入点 1760310 如何创建密码文本框 1770311 如何创建只读文本框 1770312 如何在文本框字符串中放置引号 1770313 如何在TextBox控件中查看多个行 1770314 如何TextBox控件中显示回车符 1789.2 RichTextBox控件应用技巧 1780315 删除RichTextBox控件中的部分文字 1780316 RichTextBox与TextBox控件有何不同 1790317 如何使用RichTextBox控件显示文件 1790318 如何使用RichTextBox控件保存文件 1800319 如何在RichTextBox控件中查找字符 1810320 如何在RichTextBox控件插入图片 1810321 如何为RichTextBox控件添加快捷菜单 1820322 在RichTextBox控件中替换文本文字 1839.3 Button控件应用技巧 1830323 C#中轻松打造绚丽按钮 1830324 如何使Button控件大小自动适应文本长度 1840325 如何设置窗体一个默认单击按钮 1840326 如何设置窗体一个默认取消按钮 1840327 如何给按钮控件创建快捷键 1850328 如何触发Button按钮的Click事件 1850329 使用控件的Tag属性传递信息 1850330 如何在Windows窗体上停靠控件 1860331 如何动态创建Button控件 1869.4 DataGridView控件应用技巧 1870332 如何对DataGridView控件进行数据绑定 1870333 如何在DataGridView控件中设置数据的格式 1870334 如何在DataGridView控件基于文本的单元格中启用换行 1870335 如何设置DataGridView控件单元格的文本对齐方式 1870336 如何在DataGridView控件中验证数据输入 1880337 DataGridView控件中输入数据时发生的错误 1880338 如何设置DataGridView控件中网格线的样式 1890339 如何设置DataGridView控件中的边框样式 1890340 如何设置DataGridView控件中字体样式 1900341 如何设置DataGridView控件中颜色样式 1900342 获取DataGridView控件中单元格、行和列坐标 1900343 如何获取DataGridView控件中的当前单元格 1910344 如何禁止DataGridView控件中添加和删除行 1910345 DataGridView控件选中单元格时整个行背景变色 1910346 如何复制DataGridView控件单元格中的数据 1910347 如何在DataGridView控件实现下拉列表 1929.5 对话框控件应用技巧 1920348 如何利用FontDialog控件设置字体 1920349 如何利用ColorDialog控件设置字颜色 1930350 如何利用OpenFileDialog控件打开文件 1930351 如何获得弹出对话框的相关返回值 1940352 使用FolderBrowserDialog控件选择文件夹 1959.6 ListBox控件应用技巧 1950353 如何快速选中ListBox控件中全部条目 1950354 如何排序ListBox控件中的数据 1960355 如何实现ListBox控件的多项选择功能 1960356 如何在ListBox控件中查找指定的项 1960357 实现ListBox控件与ListBox控件交换数据 1979.7 ListView控件应用技巧 1980358 如何实现ListView控件实现动态加载数据 1980359 如何向ListView控件添加搜索功能 1990360 如何将数据中的表内容填充到ListView控件中 2000361 如何使ListView控件拥有编辑功能 2010362 如何实现ListView控件显示图标与列表 2010363 如何获取ListView控件中的选择结果 2020364 如何将图片加载ListView控件 2029.8 TreeView控件应用技巧 2030365 如何在TreeView控件结点中显示图片 2030366 如何在TreeView控件中用鼠标右键选中节点 2030367 区分TreeView控件选中各节点方式 2040368 如何实现TreeView控件节点拖放操作 2040369 如何实现带复选框的TtreeView控件 2050370 如何实现TreeView控件遍历磁盘目录 2060371 如何将数据库字段填充到TreeView控件 2069.9 ComboBox控件应用技巧 2070372 如何使ComboBox下拉列表显示图片 2070373 ComboBox只能从下拉列表框中选择数据 2080374 如何实现带查询功能的ComboBox控件 2080375 如何实现文件目录名称填充ComboBox控件 2090376 如何将数组绑定到ComboBox控件 2100377 如何将数据库字段绑定到ComboBox控件 2109.10 组件应用技巧 2110378 如何使用ProgressBar控件显示操作的进度 2110379 如何使用ToolTip控件显示提示信息 2110380 如何使用FlowLayoutPanel控件布局窗体 2120381 如何使用SplitContainer控件分隔窗体 2130382 如何使用Process组件打开系统进程 2140383 FileSystemWatcher监视文件夹内文件的更改 2149.11 其他常用件控件应用技巧 2150384 如何在状态栏中显示时间 2150385 如何在状态栏中加载图片 2150386 如何设置DateTimePicker控件显示为空文 2150387 如何判断ToolStrip控件Button控钮的单击 2150388 如何实现Panle自动调整大小充满窗体 2160389 如何实现CheckedListBox控件选重所有项 2160390 如何实现CheckBox控件的选择状态 2160391 如何使Lable控件显示出多行文字 2170392 如何使用LinkLabel控件实现超级链接 2170393 如何设置MaskedTextBox控件输入验证 2180394 如何使用NotifyIcon控件创建任务托盘 2190395 如何控制PictureBox控件显示图片风格 219第10章 Web页面设计 22110.1 网页外观设计 2220396 将CSS样式表应用到页面中 2220397 在页面的源码中直接定义样式表 2220398 动态加载主题到页面中 2230399 利用Table布局Web页面 2230400 FrameSet框架的应用 2240401 IFrame框架的应用 2240402 页面尺寸自动适应1024×768像素和800×600分辨率 22510.2 网页性能设计 2250403 用meta标签来增强网页性能 2250404 什么情况下使用缓冲会提高速度 2260405 使用OutputCache指令实现页面缓存 2260406 设置网页缓存的位置 2270407 使用Cache类实现应用程序数据缓存 2270408 缓存网页的不同版本 22710.3 Web页的绑定 2280409 如何绑定变量 2280410 如何绑定集合 2280411 如何绑定表达式 2290412 如何绑定方法结果 2300413 巧用DataBinder.Eval()方法进行数据绑定 2300414 如何将DropDownList控件绑定到GridView控件中 23110.4 开发Web页的常用功能 2310415 使用QueryString变量在页面之间传值 2310416 页面定时刷新如何实现 2320417 显示只有数字的验证码图片 2320418 显示数字和英文字母组合的验证码图片 2320419 页面定时刷新后跳转到其他页 2330420 打开新的窗口并传送参数 2330421 动态显示用户头像 2330422 利用Pannel控件显示和隐藏一组控件 2330423 如何在GridView控件上添加删除确认 2340424 如何为GridView控件添加编号列 2340425 FindControl方法的应用 2340426 如何实现单击表格行打开另一页并传递参数 2350427 如何实现双击表格行超级链接到另一页并传递参数 2350428 如何实现单击表格行改变颜色 2350429 鼠标移动改变表格行的颜色 2350430 如何在Web页中使用表格控件 23610.5 Web.Config文件的配置 2370431 通过Encoding的设置实现页面无乱码 2370432 限制上传文件大小与时间 2370433 配置验证级别 23710.6 开发Web页其他功能 2380434 如何使Pannel实现横向滚动纵向自动扩展 2380435 属性MaintainScrollPositionOnPostBack实现网页定位 2380436 自动隐藏式菜单 2380437 关闭弹出窗口刷新父窗口 2390438 弹出网页模式对话框 2400439 弹出全屏显示网页 2410440 为什么要生成静态页 2420441 用快捷键+实现屏蔽 2420442 如何在Web页中使用广告控件 2420443 滚动显示博客公告 243第11章 HTML客户端控件与服务器控件 24511.1 数据控件应用技巧 2460444 如何将数组绑定到GridView数据控件中 2460445 使用GridView Web服务器控件绑定数据源 2460446 使用GridView Web服务器控件自定义外观风格 2470447 使用GridView Web服务器控件的简单排序 2470448 如何在GridView Web服务器控件中分页 2480449 使用GridView Web服务器控件编辑数据 2490450 使用GridView Web服务器控件删除数据 2510451 如何使用GridView Web服务器控件选择数据 2520452 单击GridView控件按钮刷新保持原来的位置 2530453 向GridView Web控件中添加CheckBox控件 2530454 如何使用GridView Web控件实现超级链接 2540455 在GridView Web控件中高亮显示鼠标所在行 2560456 实现DataList Web服务器控件数据绑定功能 2560457 如何实现DataList Web服务器控件分页功能 2580458 实现查看DataList控件中数据的详细信息 2590459 如何在DataList控件中创建多个列 2600460 如何实现DetailsView 控件分页功能 2610461 将DataSet类对象绑定到Repeater数据控件中 26211.2 导航控件应用技巧 2630462 TreeView、SiteMapDataSource控件和SiteMap文件实现导航 2630463 如何在TreeView控件中添加连接线 2640464 以编程方式向TreeView控件中添加节点 2640465 如何在TreeView控件中显示CheckBox控件 2650466 如何判断TreeView控件中被勾选的节点 2650467 用SiteMapPath控件绑定SiteMap文件实现导航 2660468 如何设置SiteMapPath控件路径分隔符 2660469 如何设置SiteMapPath控件路径方向 2670470 如何设置SiteMapPath控件父节点显示个数 2670471 如何设置SiteMapPath控件提示字符 2680472 如何用Menu控件绑定SiteMap文件实现导航 2680473 如何设置Menu控件显示静态菜单 2690474 如何以编程方式创建Menu控件 27011.3 标准控件应用技巧 2710475 使用HyperLink服务器控件实现页面间传值 2710476 如何使用Input(Reset)实现文本框清空功能 2710477 如何取消DropDownLidt控件的激发验证 2720478 使用FileUpload服务器控件实现文件上传 2720479 使用LinkButton服务器控件实现超级链接 2730480 实现DropDownList服务器控件的数据绑定 2730481 如何改变DropDownList服务器控件中的项 2740482 指定ListBox服务器控件中的项的目的移位顺序 2750483 响应ListBox服务器控件的改变事件 2760484 如何使用CheckBox服务器控件 2760485 如何使用CheckBoxList服务器控件 2770486 使用RadioButtonList服务器控件巧用单项选择 2780487 使用BulletedList控件显示项目符号和编号 2790488 如何使用HiddenField控件 2800489 如何使用Literal控件显示静态文本 2810490 如何使用AdRotator控件制作广告 2810491 如何使用Wizard Web服务器控件制作导航页 2820492 使用XML服务器控件转换XML文档 2830493 使用MultiView与View控件制作导航页面 2860494 使用PlaceHolder控件实现动态添加控件 2890495 如何实现带滚动条的Panel面板 2900496 使用Substitution控件在缓存页面插入内容 290第12章 内置对象 29312.1 ASP.NET基本对象 2940497 使用Session对象在页面之间传值 2940498 如何使用Session验证用户登录 2940499 配置Session的生命周期 2940500 如何遍历Session对象 2950501 使用Application对象在页面之间传值 2950502 存取Application变量内容 2950503 如何锁定Application对象 2960504 如何使用Application实现站点访问量统计 2960505 如何删除Application变量内容 2960506 使用ViewState对象在同一个页面传值 29712.2 Response与Request对象 2970507 如何解决Response.Redirect方法传递汉字时出现的错误 2970508 使用Response.BinaryWrite方法输出二进制图像 2970509 Response对象将文本文件的内容写回客户端浏览器 2980510 如何使用Request接收页面间传值 2980511 使用Request对象的Browser属性获取客户端浏览器信息 2980512 获取客户端和服务器端IP地址 2990513 使用Request对象获取客户端的表单信息 3000514 使用Request对象的PhysicalApplicationPath属性获取服务器的绝对路径 3000515 使用Request对象的CurrentExecutionFilePath属性获取当前页面的路径 3000516 如何获取ASP.NET中所有Request的属性 3000517 缓存区的应用 30112.3 Cookie对象 3020518 使用Cookie的优缺点 3020519 使用Cookie对象在页面之间传值 3020520 如何使用Cookie验证用户登录 3030521 Cookie可以存储哪些值 3030522 使用Cookie对象保存和读取客户端信息 3030523 如何加密Cookie中的数据 3040524 创建及存取多个键值的Cookie对象 3040525 如何遍历Cookie集合 3040526 设定Cookie变量的生命周期 3050527 如何删除客户端的Cookies 3050528 如何删除多值Cookie中的某个值 3050529 如何使用Cookie处理网上重复投票 3050530 如何使用户第2次访问我的网站不用提交信息 30612.4 Server对象 3070531 使用Server.Transfer方法在页面之间传值 3070532 使用Server.MapPath方法获取服务器的物理地址 3080533 使用Server.UrlEncode方法对字符串进行编码 3080534 使用Server.UrlDecode方法对字符串进行解码 3080535 利用Server对象进行HTML编码输出 3080536 利用Server对象进行HTML解码输出 309第13章 图形图像技术 31113.1 图像预览及转换 3120537 如何设计缩略图功能的图片浏览器 3120538 如何浏览大图片 3120539 如何局部放大图片 3130540 如何实现剪切图片 31313.2 图形缩放与变换 3150541 如何缩放图片 3150542 如何转换图像文件格式 31513.3 图像效果 3160543 如何以底片效果显示图像 3160544 如何以浮雕效果显示图像 3170545 如何以黑白效果显示图像 3180546 如何以柔化效果显示图像 3190547 如何以锐化效果显示图像 3200548 如何以雾化效果显示图像 3210549 如何以光照效果显示图像 3220550 如何以百叶窗效果显示图像 3230551 如何以马赛克效果显示图像 3250552 如何以任意角度旋转图像 3260553 如何以椭圆形显示图像 3270554 如何以不同的透明度显示图像 3280555 如何以不同分辨率显示图像 3280556 如何以不同翻转方式显示图像 3290557 如何以油画效果显示图像 3300558 如何以扭曲效果显示图像 3310559 如何以分块效果显示图像 3320560 如何以四周扩散方式显示图像 3330561 如何以从上向下拉伸方式显示图像 3340562 如何以从左向右拉伸方式显示图像 3350563 如何以上下反转方式显示图像 3350564 如何以上下对接方式显示图像 3360565 如何以左右反转方式显示图像 3370566 如何以左右对接方式显示图像 3380567 如何以淡入淡出效果显示图像 3390568 如何以积木效果显示图像 34113.4 图像字体 3420569 如何以渐变色效果显示文字 3420570 如何以倾斜效果显示文字 3430571 如何以阴影效果显示文字 3430572 如何以倒影效果显示文字 3440573 如何以投影效果显示文字 3440574 如何以浮雕效果显示文字 3450575 如何以印版效果显示文字 3460576 如何为文字填充图片纹理 3460577 如何创建可旋转文字 34713.5 图像识别及图像工具 3470578 如何获取图像的像素值 3470579 如何设置图像的像素值 3480580 如何校正图像显示颜色 3490581 如何使用阈值校正图像显示颜色 3510582 如何获得图像信息 3520583 如何制作简单的画图工具 3530584 如何将图片以Image类型存储到数据库 3560585 如何从数据库中读取Image类型的字段 35713.6 图像应用及其他 3580586 如何在Web页面上显示图像 3580587 绘制渐变背景图像 3590588 确定鼠标是否在图形范围内 3590589 如何绘制柱形图 3600590 如何绘制饼形图 3620591 如何绘制折线图 3640592 如何绘制图形验证码 3660593 如何在桌面上全屏显示图像 3670594 如何利用Image制作小动画 3680595 如何使用鼠标拖动图片 3680596 如何获取当前鼠标的形状 369第14章 动画与多媒体 37114.1 声音控制 3720597 如何播放WAV声音文件 3720598 如何播放默认的Beep事件声音 3720599 如何播放默认的Hand事件声音 3720600 如何播放默认的Asterisk事件声音 3720601 如何播放默认的Question事件声音 3730602 如何播放默认的Exclamation事件声音 3730603 如何设置计算机喇叭发出的声音 3730604 如何同步加载并播放声音文件 3740605 如何异步加载并播放声音文件 37414.2 多媒体及其他 3750606 C#实现动画效果 3750607 C#设计屏幕保护程序 3750608 如何实现滚动字幕 3760609 如何播放AVI动画文件 3760610 如何播放Flash 3770611 用C#实现家庭影集 3780612 C#实现电影特效 3790613 如何实现Word艺术字 3790614 检查是否安装声卡 3800615 带有记忆功能的MP3 3800616 打开和关闭光驱 3810617 如何收听网络电台 3820618 如何通过剪贴板复制粘贴图像 3820619 如何转换图像文件的保存格式 3830620 如何制作自动播放的MP3播放器 3840621 学校体操定时音乐播放 3850622 如何从ARGB分量值创建Color结构 3850623 如何动画显示窗体 3860624 如何获取系统的图像编码器信息 3870625 如何获取系统的图像解码器信息 388第15章 键盘与鼠标 38915.1 鼠标操作技巧 3900626 鼠标双击窗体时模拟键盘Tab键操作 3900627 定义鼠标指针形状 3900628 自定义鼠标的图片 3910629 鼠标拖放复制文本 3910630 如何使用鼠标单击添加控件 3920631 如何获得鼠标在窗体上的位置 3920632 如何交换鼠标左右键功能 3920633 如何隐藏和显示鼠标 3930634 如何获取光标闪烁的频率 3940635 如何获得屏幕上鼠标的坐标 3940636 如何限制鼠标在某一区域工作 3940637 如何利用鼠标绘图 3950638 如何获取鼠标双击时间间隔 3960639 如何获取鼠标键数 3960640 如何显示鼠标的等待光标 3970641 如何禁用鼠标左键 3970642 如何模拟鼠标操作 3980643 如何实现鼠标穿透窗体 3990644 如何记录鼠标行为 39915.2 键盘操作技巧应用 4000645 如何禁用输入法编辑器 4000646 如何打开和关闭输入法编辑器 4000647 回车转换成Tab键 4000648 如何获取组合键 4010649 如何获取功能键 4010650 如何判断NumLock键和CapsLock键是否锁定 4010651 如何屏蔽+键关闭窗体 4020652 如何实现按下键关闭窗体 4020653 如何避免按键产生“嘀”声 4030654 如何设置键盘热键 403第16章 文件、文件管理及数据流 40516.1 获取文件基本信息 4060655 获取文件创建的日期和时间 4060656 如何检索路径中的文件名和扩展名 4060657 如何获得文件的大小 4070658 如何修改文件属性 4070659 如何监视文件系统变化情况 4080660 如何获取文件的系统启动方式 4080661 如何获取文件名禁止使用的字符 4090662 如何获取路径名禁止使用的字符 4100663 如何获取指定目录的上级目录 41016.2 文件基本操作 4110664 判断文件是否存在 4110665 创建一个文件用于写入UTF-8编码的文本 4110666 OpenRead方法打开现有文件并读取 4120667 打开现有UTF-8编码文本文件并进行读取 4120668 OpenWrite方法打开现有文件并进行写入 4130669 如何读取文件中的第一行数据 4130670 如何向文件中写入数据 4130671 如何读取文件中所有数据 4140672 如何创建临时文件 4140673 如何实现文件替换 4150674 使用递归法删除文件夹中所有文件 4150675 如何更改文件扩展名 4160676 如何实现复制文件 4160677 如何修改文件名 4160678 如何删除文件 4170679 如何上传文件 4170680 如何下载文件 4180681 如何拖放文件 4190682 如何搜索文件 41916.3 文件夹基本操作 4200683 如何创建文件夹 4200684 如何移动文件夹 4200685 如何修改文件夹名称 4210686 如何遍历文件夹 4210687 如何删除文件夹 42216.4 数据流操作 4220688 如何读写内存数据流 4220689 如何创建二进制文件 4230690 如何读取二进制文件 4230691 如何使用缓冲流 42416.5 加密、解密及解压缩文件 4250692 加密和解密文件 4250693 如何使用对称算法加密文件 4250694 如何使用对称算法解密文件 4260695 如何使用GZip压缩文件 4270696 如何使用GZip解压文件 4280697 如何使用WinRAR压缩文件 4290698 如何使用WinRAR解压文件 42916.6 其他 4300699 设置文件的访问模式 4300700 如何在C#应用程序中使用INI文件 4300701 如何操作帮助文件 4310702 如何操作Word文件 4320703 如何操作Excel文件 4330704 如何将文本文件转换成网页文件 4340705 如何产生随机文件夹名或文件名 4350706 如何将长文件名转换成短文件名 4360707 如何用程序创建XML文档并写入内容 4360708 如何通过DataSet对象读取XML文件 4380709 如何动态创建XML文件节点 4390710 如何实现XML文件数据类型的转换 4390711 将图片保存到XML文件中 4400712 如何比较两个文件的内容是否相同 4400713 如何以缩略图形式上传图片文件 4410714 如何解析只有一种格式的文本文件 4420715 如何解析含有多种格式的文本文件 443第17章 Windows开发技术 44517.1 获取计算机系统信息 4460716 如何获取系统时间 4460717 如何获取系统目录 4460718 如何获取计算机名称 4460719 如何获取当前程序运行目录 4460720 如何获得操作系统版本号 44617.2 获取计算机硬件信息 4460721 如何获取CPU编号 4460722 如何获取显示设备的PNPDeviceID 4470723 如何获取声音设备的PNPDeviceID 4470724 如何获取硬盘编号 4470725 如何获取CPU的版本信息 4480726 如何获取CPU的产品名称信息 4480727 如何获取CPU的制造商名称 4480728 如何获取主板制造商 4490729 如何获取主板编号 4490730 如何获取主板型号 4490731 如何获取磁盘空间 4500732 如何获取磁盘剩余空间 4500733 如何确定屏幕的分辨率 4510734 如何获得磁盘的卷标 4520735 如何获得磁盘的文件系统类型 45217.3 获取特殊文件夹路径 4530736 如何获取ProgramFiles目录全路径 4530737 如何获取桌面目录全路径 4530738 如何获取开始菜单目录全路径 4540739 如何获取用户程序组目录全路径 4540740 如何获取文档模板目录全路径 4550741 如何获取收藏夹目录全路径 4550742 如何获取共享组件目录全路径 4560743 如何获取我的图片目录全路径 4560744 如何获取Internet历史记录全路径 4570745 如何获取Internet临时文件目录全路径 4570746 如何设置可用样式 45717.4 获得Windows当前用户 4580747 如何获取当前用户 4580748 如何判断当前用户是否是普通用户 4580749 如何判断当前用户是否是超级用户 4580750 如何判断当前用户是否是系统管理员 4590751 如何判断当前用户是否是系统操作员 4590752 如何判断当前用户是否是备份操作员 4600753 如何判断当前用户是否是打印操作员 4600754 如何判断当前用户是否是复制程序员 4610755 如何判断当前用户是否是账户操作员 46117.5 Windows日志 4620756 如何获取系统日志信息 4620757 如何获取安全日志信息 4620758 如何获取应用程序日志信息 4630759 如何创建并写入自定义日志信息 4640760 如何向系统日志写入自定义数据 4640761 如何向应用程序日志写入自定义信息 46517.6 计算机控制 4650762 列举系统中所有窗口 4650763 C#实现键盘钩子 4650764 如何关闭计算机 4660765 如何抓屏 4660766 如何休眠计算机 4670767 如何禁止使用Windows任务管理器 4680768 如何为文件新增右键菜单项 4680769 如何设置系统仅能运行的程序 4690770 如何获取本地计算机上所有的进程 4690771 如何启动一个进程 4700772 怎样杀死一个进程 4700773 如何获取远程计算机上所有的进程 47017.7 其他相关技术 4700774 如何在注册表中保存窗体的大小和位置 4700775 如何实现程序间注册表内传递变量 4710776 在使用OpenFileDialog中的相对路径问题 4710777 如何设置启动时自动执行程序 4710778 C#编程实现Windows XP风格的界面 4710779 用C#实现文件查找功能 4730780 如何序列化对象 4730781 如何实现特殊形状的窗体 4740782 如何移动正在使用的文件 4740783 如何实现类似QQ的程序界面 4750784 如何实现动画显示窗体 4760785 如何显示和隐藏任务栏 4770786 如何实现OutLook界面 4780787 如何在C#中回车换行 4780788 如何获取进程的命令行 4790789 如何按行读取文本并显示行数 4790790 如何在Form中嵌入Excel 4790791 如何使用互斥量禁止程序运行两个实例 4800792 如何使用进程名禁止程序运行两个实例 4800793 如何获取控制台应用程序的显示结果 4810794 如何用@代替路径中的转义字符 482第18章 程序应用控制 48318.1 提取信息 4840795 判断驱动器类型并获取其属性 4840796 如何得到本地机器的IP 4840797 如何得到本地运行的EXE的路径 4850798 得到计算机所有正在运行的进程 4850799 获得Windows的启动模式 4850800 获取鼠标的按钮个数及鼠标安装状态 4850801 检测计算机是否存在网络连接 4860802 如何判断计算机的联机状态 4860803 获取计算机屏幕分辨率 4860804 获取计算机当前登录的用户名称 48618.2 系统控制 4860805 远程关闭或重新启动计算机 4860806 创建应用程序快捷方式 4870807 启动Windows系统服务 4880808 在C#应用程序中控制输入法 4880809 打开“区域和语言选项”对话框并指定选项卡 4890810 如何执行命令行命令? 4890811 如何修改计算机的默认打印机 4900812 如何实现行业软件系统注销功能 4900813 如何将计算机设置为休眠状态 4900814 在Windows系统中建立事件日志 4910815 如何使PC喇叭发音 49118.3 程序控制 4910816 使用回车键控制鼠标焦点 4910817 如何调用可执行应用程序 4920818 TextBox上禁用鼠标右鍵 4920819 如何实现屏幕截图 4920820 如何将截取的图片保存为指定图片格式 4930821 如何复制程序本身 4930822 分段显示电话号码颜色 4930823 软件版本号是如何组成的 4930824 单击“关闭”按钮或按+键时最小化窗口 4940825 屏蔽RichTextBox控件+快捷键 49518.4 其他 4950826 将DataGridView控件中的数据导入Excel 4950827 无法获取自定义环境变量的值 4960828 将组件放到COM+服务器上去 4960829 调用非托管的DLL文件 4970830 如何将GridView控件数据导入Word 4970831 如何将GridView控件数据导入Excel 4970832 单片机如何实现在线调试 4980833 单片机如何实现内存优化管理 4980834 单片机实现文件系统管理 4980835 杀死进程 4980836 如何下载某网站上的图片资源 498第19章 SQL查询相关技术 50119.1 常用SQL查询技术 5020837 如何在查询中正确使用单引号“’” 5020838 SQL中SELECT语句的执行顺序 5020839 在查询时查询数据为指定长度的数据 5020840 如何利用WHERE参数过滤数据 5030841 如何正确地理解和运用SQL中的判式 5030842 如何正确地理解和使用SQL中的关键字 50319.2 比较、逻辑运算符查询 5040843 如何使用算术运算符号进行比较查询 5040844 如何使用比较运算符号进行比较查询 5040845 如何使用AND逻辑运算符查询 5050846 如何使用OR逻辑运算符查询 5060847 如何联合使用AND和OR运算符查询 5060848 如何在查询中正确使用逻辑操作符 5070849 利用通配符进行查询 50719.3 SQL关键字查询 5080850 如何使用ESCAPE关键字规定转义字符 5080851 如何使用BETWEEN进行范围查询 5080852 如何使用NOT BETWEEN进行范围查询 5090853 如何使用GROUP BY子句查询 5090854 如何使用HAVING语句过滤分组数据 5100855 如何使用ALL关键字查询 5100856 如何使用CUBE关键字查询 51119.4 表结构与性能 5110857 检测信息是否存在 5110858 @@CPU_BUSY获取CPU的工作时间 5110859 如何获取磁盘读写次数 5120860 获取SQL Server服务器名 5120861 获取数据库标识号 5120862 判断用户是否访问数据的权限 5120863 显示表中列信息 5120864 显示表中任意列名称 5130865 提高SQL性能加快执行速度 5130866 控制批处理内语句的执行 5130867 执行查询但是显示列信息 5140868 获取连接或试图连接的次数 5140869 获取当前数据库的语言名 51419.5 时间与谓词 5140870 时间函数的使用 5140871 设置数据库时间表显形式 5150872 格式化日期显示格式 5150873 如何正确理解SQL中的NULL值 5160874 如何使用IsNull()函数来处理空值 5160875 如何使用Nullif()函数来处理空值 5160876 查询空值(NULL)的技巧 5170877 利用关键字DISTINCT去除重复记录 5170878 巧用TOP子句获取信息 5180879 巧用CONTAINS谓词检索信息 5180880 通过ISNULL替换信息 5190881 比较COMPUTE和GROUP BY 5190882 如何对指定时间段进行查询 5190883 对某期间的数据进行查询的几种方法 5190884 NOT与谓词进行组合条件的查询 52019.6 聚合函数 5200885 聚合函数SUM的使用 5200886 聚合函数AVG的使用 5210887 如何使用聚合函数MAX 5210888 如何使用聚合函数MIN 5220889 如何使用聚合函数COUNT 5220890 如何使用聚合函数First或Last 52319.7 子查询与连接查询 5230891 union与连接之间的区别 5230892 如何应用IN查询表中的记录信息 5240893 使用一个单行的子查询来更新列 5240894 使用IN引入子查询限定查询范围 5240895 在UPDATE语句中应用子查询 5250896 如何应用子查询 5250897 EXISTS与子查询联合应用 5250898 在FROM子句中的子查询 5250899 在DELETE语句中应用子查询 5260900 子查询与聚合函数的应用 5260901 有效使用内连接 5260902 如何使用LEFT OUTER JOIN查询 5260903 如何使用RIGHT OUTER JOIN查询 5270904 利用CASE语句查询结果 52719.8 交叉表 5280905 Access中利用TRASFORM分析数据 5280906 Access中利用TRASFORM动态分析数据 5290907 SQL Server实现静态交叉表 5290908 SQL Server实现动态交叉表 53119.9 常用数据操作 5320909 如何对字符串进行查询 5320910 如何进行单条数据的添加 5330911 如何进行批量数据的添加 5330912 如何对数据进行修改 5340913 如何对数据进行删除 5340914 对数据库数据进行局部删除 53419.10 高级应用 5350915 如何使用临时表 5350916 如何查询表中的列名 5350917 在查询中如何防止输入指定符串 5360918 查询指定长度的数据 5360919 获取当前数据库的详细信息 5370920 在查询过程中灵活定义与使用别名 53819.11 视图、存储过程和触发器的使用 5380921 如何正确认识视图 5380922 如何获取数据库中的全部用户视图 5390923 如何通过视图修改数据 5390924 如何正确理解存储过程 5400925 如何获取数据库中的全部存储过程 5400926 如何正确认识触发器 5410927 Update触发器在系统日志中的应用 5420928 触发器的嵌套使用 5420929 获取数据库中的触发器 54319.12 其他 5440930 在查询程序中使用变量 5440931 对查询结果进行排序 5440932 批量获取结果集信息 5450933 对查询结果生成表 5450934 实现数据类型转换 5460935 获取当前数据库的登录用户名 5460936 如何正确理解数据库键字 5460937 将结果转换为XML形式 5470938 追加查询结果到已存在的表 5470939 利用对多个表中的字段创建新记录集 5470940 利用EXECUTE执行SQL语句 548第20章 数据库技术 54920.1 Access数据库的使用 5500941 如何为Access数据库设置密码 5500942 如何创建加密的Access数据库 5500943 建立Access数据库连接 5510944 与加密后的Access数据库建立连接 5510945 如何提取Access数据库中的数据表名 5510946 随机读取Access数据库记录 5520947 将Access数据库导入到Excel中(ASP.NET) 5520948 在.NET 2.0框架下动态创建Access数据库 5530949 在.NET 2.0框架下动态创建Access数据表 5530950 如何备份Access数据库 55420.2 SQL数据库的使用 5540951 建立SQL Server数据库连接 5540952 如何使用ODBC访问SQL Server数据库 5550953 读取SQL Server数据表结构 5560954 在C#中分离SQL Server数据库 5570955 C#中附加SQL Server数据库 5580956 C#中附加单文件SQL Server数据库 5590957 备份SQL Server数据库 5590958 还原SQL Server数据库 5600959 开启SQL Server数据库服务 5610960 断开SQL Server数据库服务 5620961 如何判断SQL Server数据库连接状态 5620962 获取连接SQL Server数据库的名称 5630963 获取SQL Server的连接统计数据 5630964 如何调用SQL Server存储过程 5630965 如何生成SQL数据库脚本 5640966 SQL Server 2000无法安装的解决办法 56520.3 其他 5650967 如何判断记录是否为NULL 5650968 建立Oracle数据库连接 5660969 如何在数据表中设置主键 5660970 DataSet读取XML文件中数据作为数据源 5670971 如何读取Fox的DBF文件 5670972 通用方法实现数据增、删、改功能 5670973 通用方法获取查询结果DataSet数据集 5680974 同时查询多条SQL语句 5680975 如何判断是否查询到结果 5680976 将图片以二进制格式存储到数据库中(asp.net) 5690977 从DataReader对象读取数据的技巧 5690978 随机显示数据库记录 5690979 通过DataTable获得数据表的主键 5690980 将Access数据库转化为SQL Server数据库 5700981 将SQL Server数据库转化为Access数据库 5710982 如何避免数据库死锁现象 5720983 如何调用带输入参数的存储过程 5720984 如何获取存储过程返回的结果集 5730985 取得数据表某个单元格的值 5730986 在ASP.NET2.0下将数据绑定DropDownList 5730987 在ADO.NET中实现数据库的事务处理 5740988 将任意文件保存到数据库中 5740989 将存储在数据库中的文件提取出来 5750990 合并具有相同数据表结构的查询结果 5750991 使用DataTable进行数据检索 5750992 使用DataView对数据进行检索和排序 5760993 使用DataSet建立DataTable明细表 576第21章 打印与报表技术 57921.1 报表设计技术 5800994 如何快速创建水晶报表 5800995 如何编写带图片的报表 5820996 如何使图片成为整个报表的背景 5830997 如何设置水晶报表中节的背景图片 5830998 如何设置水晶报表中节的背景色 5840999 如何设置水晶报表的页面 5841000 如何在报表中添加节 5841001 如何在报表中移动节的顺序 5851002 如何在报表中合并节 5851003 如何在报表中册除节 5851004 如何在报表中显示与隐藏节 5861005 如何设置多列样式报表 5861006 如何设置报表中节的高度 5871007 如何设置报表的摘要信息 5871008 如何设置报表的打印日期与时间 58721.2 报表格式化类对象技巧 5881009 如何在报表中使用文本对象 5881010 如何移动对象操作 5881011 如何对齐多个对象 5891012 如何使用公式字段 5891013 如何在报表中使用线 5901014 如何在报表中使用方框 59021.3 报表数据排序与分组技巧 5911015 如何排序报表数据 5911016 如何报表数据分组 5911017 如何报表中筛选数据 5921018 如何对分组报表中的页码进行设置 59221.4 报表的应用技巧 5931019 如何在水晶报表中使用交叉表 5931020 如何在水晶报表中使用子报表 5941021 如何动态显示子报表 5961022 如何删除子报表 5971023 如何在报表中计算百分比 59721.5 Windows打印控件应用技巧 5991024 如何使用PrintDocument控件打印窗体数据 5991025 如何使用PrintPreviewContronl控件预览 5991026 使用PrintPreviewDialog对话框 6001027 如何使用PrintDialog对话框打印 6011028 如何使用PageSetupDialog对话框设置页面 6011029 如何使用PrintDocument控件打印文本文件 602第22章 C#高级应用开发 60522.1 线程的使用 6061030 如何开始一个线程 6061031 如何结束一个线程 6061032 如何使线程休眠 6061033 如何挂起一个线程 6061034 如何判断线程的状态 6061035 如何实现线程的同步 6071036 如何避免死锁 60722.2 .NET 2.0的新特性 6071037 如何使用泛型 6071038 如何使用匿名方法 6081039 如何使用迭代器 6091040 如何使用分部类 61022.3 C#WebService 6101041 建立SQL Server返回数据集WebService 6101042 利用WebService传送图片 61122.4 文件监视 6111043 如何监视文件的创建 6111044 如何监视文件的改变 6121045 如何监视文件的重命名 6121046 如何监视文件的删除 61322.5 C#高级应用 6131047 如何将聊天程序做成Windows服务 6131048 COM+服务解决同时访问大量数据并发性 6151049 COM+服务实现银行转账系统 6171050 如何用Remoting技术传送文件 6191051 大规模数据访问时缓解服务器压力 620第23章 硬件及相关开发技术 62323.1 语音卡、IC卡、神龙卡的使用 6241052 利用语音卡拨

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧