Delphi程序开发

2024-09-28

Delphi程序开发(共12篇)

Delphi程序开发 篇1

1. 引言

我们经常会问这样的问题:“到底什么使得Delphi如此优秀?”和“为什么和别的编程工具相比,我更愿意选择Delphi?”等等。简而言之就是:高效性。决定一个软件开发工具效率的因素归结为以下五点:(1)可视化开发环境的性能。(2)编译器的速度和已编译代码的效率。(3)编程语言的功能及其复杂性。(4)数据库结构的灵活性和可扩展性。(5)框架对设计和使用模式的扩充。

2. Del phi的特点

2.1 可视化集成开发环境

可视化开发环境通常分为三个组成部分:编辑器、调试器和窗体设计器。和大多数现代RAD(快速应用开发)工具一样,这三部分是协同工作的。当你在窗体设计器中工作时,Delphi在后台自动为你正在窗体中操纵的控件生成代码。你还可以自己在编辑器中加入代码来定义应用程序的行为,同时还可以在同一个编辑器中通过设置断点和监控点等来调试程序。

在版本5里,Delphi的调试器具备了许多先进的功能,如远程调试、过程关联、DL断口包调试、自动本地监控以及CPU窗口等。Delphi还支持在调试时随意放置和停靠窗口并把这一状态保存为命令的桌面设置。由此,Delphi的IDE实现了对调试功能的良好支持。对RAD工具(如Delphi、Visual Basic、C++Builder和Power Builder等)来说,窗体设计器是一项独特的功能。一些更为经典的开发环境,如VC++和BC++,都提供了对话编辑器,但却没有将窗体设计器集成到开发流程中,没有窗体设计器将会降低开发工具的整体效率。几年来,Delphi与Visual Basic在完善窗体设计器的功能方面展开了激烈的竞争。Delphi的窗体设计器的与众不同之处在于,Delphi是建立在一个真正面向对象的框架结构基础之上的。这样,你对基类所做的改变都将会传递给所有的派生类。这里涉及的一项关键技术就是VFI(visual form inheritance),即可视化窗体继承。VFI技术使你能够动态地继承当前项目或对象库中的任何其他窗体。一旦基窗体发生改变,派生的窗体会立即予以更新。

2.2 编译器的速度和已编译代码的效率

Pascal编译器最著名的特点就是速度快,而Delphi正是建立在这种编译器的基础之上的。事实上,它可能是针对windows的最快的高级语言本地代码编译器。以往速度很慢的C++编译器在近年来取得了很大的进步,增加了链接和各种缓存策略,尤其是在VISua1C++和C++Builder中。但即便如此,C++的编译器还是比Delphi的慢了几倍。Delphi和C++Builder共享同一种编译器后端,是一个公司的产品,因此生成的代码等效于由一个优秀的C++编译器生成的代码。

2.3 编程语言的功能及其复杂性

C++是非强类型语言,有些错误编译器无法发现。Object Pascal和Java很相似,它们很好地把握住了复杂性和功能性的平衡。它们都采取了这样一种途径,即限制其可用功能以加强开发者的逻辑设计。例如,两者都避免了完全面向对象但却容易被滥用的多重继承的观念,而是实现了一个执行多重接口功能的类。两者都不支持美观却危险的操作符加载。两者都有一些强大的功能,诸如异常处理、运行期类型信息(RTT工)和生存期内存自管理字符串。特别是运行期类型信息(RTTI),对我们设计仿真培训系统中的操作站与现场站很重要,用它我们可根据组态数据库的数据在运行期自动创建组件和自动识别组件而赋给相应的数据。同时,Delphi使用编程语言是Object Pascal,是面对对象、强类型语言。有利编制稳健的应用程序,减少调试、检错时间以提高开发效率;有利描述真实世界的事物和系统,如控制系统、工艺数学模型。

2.4 数据库结构的灵活性和可扩展性

由于Borland缺少一种数据库计划,因此Delphi保留了我们认为是所有工具中最灵活的数据库结构。对大多数基于本地、客户服务器和ODBC数据库平台的应用程序来说,BDE的功能都非常强大。如果你对此不满意,可以避开使用BDE以支持新的本地ADO组件。如果你没有装ADO,可以自己创建数据访问类或者购买第三方数据访问解决方案。此外,MIDAS使对数据源的多层访问更易于实现。而Microsoft的工具(ODBC、OLEDB或者其他)从逻辑上来说趋向于支持Microsoft自己的数据库和数据访问解决方案。

2.5 框架对设计和使用模式的扩充

这是一项经常被其他软件设计工具忽略了的重要功能。VCL是Delphi最重要的组成部分。在设计时操纵组件、创建组件、使用面向对象技术继承其他组件的行为,这些能力都是决定Delphi效率的关键因素。在许多场合,编写VCL组件都采用固定的00设计方法。相比之下,其它基于组件的框架经常过于死板或过于复杂。比如Active X控件具有和VCL控件相同的设计期性能,但却不能被继承以创建一个具有其他不同行为的新类。传统的类框架,如OWL和MFC,需要你有大量的内部结构知识,而且如果没有RAD工具的设计期支持,其功能将会受到抑制。

3. Del phi的事件驱动机制

3.1 无约定编程

与传统的Windows消息机制相比,Delphi的事件处理机制的最大优势在于所有的事件都是无约定的。对程序员而言,无约定就是指可以在事件处理程序中什么都不干。而在传统的Windows消息机制中,就不得不调用基类的消息处理程序,还要把信息回传给Windows。当然,Delphi的事件处理机制的无约定的编程方式可能无法对消息进行直接的灵活有效的处理,你要受制于谁引发了这一事件以及应用程序对这一事件要做出什么响应等。例如,可以在On Key Press处理程序中修改和取消击键,但on Resize事件处理程序却只能提供这一事件已发生的通知而无法进一步防止或控制尺寸的改变。

不过,Delphi仍然允许在事件处理程序中直接处理Windows消息。只是这就不像事件处理机制那么简单,因为消息处理需要程序员对要处理的消息有详细了解。可以通过message这个关键字处理所有Windows消息。使用Delphi开发应用程序的好处是,你既可以用高级的、易于理解的方式来编程,也可以在需要时直接访问低层的信息。

3.2 Delphi的VCL消息系统

所有的Delphi类有一个处理消息的内置机理,称之为消息处理方法或者Message handlers。Message handlers的基本思想就是:类获取一些种类的消息,然后再分发(dispatch)它们,由响应的处理函数或者过程进行处理(调用哪一个处理函数或过程取决于所接受的消息)。对于一个特殊的消息,如果没有一个指定的方法存在的话,则由一个缺省的消息处理。

VCL定义了消息分发系统,该系统将所有的windows消息(包括用户定义的消息)传递给相应的对象,由各对象的消息分发系统进行处理。VCL对象用于接收消息的方法叫做Main Wnd Proc()。通过Main Wnd Proc()可以对消息进行任何特殊的处理。不过,一般情况下很少直接调用Main Wnd Proc()来处理消息,除非不想让消息通过VCL的消息系统分发。从Main Wnd Proc()返回后,消息被传递给对象的Wnd Proc()方法,这就是该对象的窗体过程,然后进入VCL的分发机构。分发机构使用Dispatch()方法把消息分发给一个消息句柄。消息到达该消息的处理句柄(Handler)后,经过该句柄的处理,这个消息处理过程就结束了。没有必要改变这个消息分发机理,所要做的只是产生一个消息处理方法或者句柄,即一个消息处理函数。

3.3 加速原型化

当对Delphi使用了一段时间后,即使你只是一个Delphi新手,你也会发现,用Delphi编写第一个项目就能马上获益:开发周期短、应用程序稳健。设计用户界面(UI)是许多windows程序员头疼的问题,而这恰好是Delphi的长处。用户界面的设计和程序的布局被称为原型化。在非可视化的开发环境中,应用程序的原型化经常比真正实现程序的时间还要长。一个简洁直观、令人愉悦的用户界面是应用程序的一大部分。

Delphi能够用它的自定义控件或自己开发的控件来快速建立您需要的用户界面。当你能熟练运用窗口、控件和事件响应方法以后,将发现过去要花很大精力的原型化工作现在大大简化了。同时,用Delphi开发的用户界面丝毫不比用传统的开发工具建立的用户界面逊色。在Delphi中你在设计期看到的往往就是最终的产品。

4. 结束语

综上所述,大家可发现Delphi 5本身就是一个功能十分强大的面向对象开发平台,它的可视组件库VCL(Visual Component Library)是一个易学、易用、高效的可重用的软件对象,还包含有丰富的数据库应用,通讯组件。Delphi自身就是使用VCL编写而成的;不仅界面开发方便迅速,而且对于系统所带组件和自编组件的运用就如同组态一样。只要将组件放置在窗体中,用鼠标移动到你要求的位置,改变某些属性以满足你的要求。

参考文献

[1]黄文兰.Delphi语言开发教务管理系统[J].电脑知识与技术,2006,(20).

[2]向继文.Delphi与汇编语言的混合编程[J].吉林大学学报(自然科学版),2006,(3).

[3]林瑜华.如何在DELPHI中使用SQL语言[J].福建电脑,2005,(10).

[4]严丽平.基于Delphi的C语言词法分析器的实现[J].科技广场,2004,(8).

Delphi程序开发 篇2

关键词:delphi;数据库;ODBC;面向对象

引言

Delphi程序开发 篇3

一、语言:存在即是合理

有人认为Object Pascal是“玩具语言”,C++才是“专业语言”,这是不对的。单从语言本身看,Object Pascal与C++属同一重量级。它们都是完全支持面向对象的语言,都扎根于“历史悠久”的面向过程的语言。C++由C发展而来,Object Pascal由Pascal进化而来。它们都有很强的灵活性,都有自己的特长和不足。例如,Object Pascal不支持多重继承、模板、操作符重载、内联函数定义等等,而这些都是C++支持的。但同样地,C++也不支持object pascal的虚构造函数、过程嵌套、内置集合类型、内置字符串类型等等,在rtti方面Object Pascal也比C++做得好。实际上,这些并不重要,因为可以通过其它方式达到同样的目的,如C++可以通过类扩展支持集合、字符串,Object Pascal可以通过“Interface”多重继承等等。关键是二者都可以很好地完成任务。

二、编译和连接:速度的较量

不同的语言带来的另一个不同是:编译和连接的速度不同,以及执行速度的不同。Delphi的编译和连接速度,比VC快几十倍。即使把VC的Incremental link选项打开,Delphi的编译和连接速度仍比VC快好几倍。当然,这并不是说微软的编译器不行,这是由C++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文已提到Object Pascal没有模板、预处理和宏,这本来是缺点,但其带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,Delphi和VC的执行速度并没有太大的差别。

三、应用框架:mfc有kfc流行吗?

应用程序框架(application frame),也称为对象框架。Visual C++采用的框架是mfc。mfc不仅仅是人们通常理解的一个类库。经过多年的不断补充和完善,mfc已经十分成熟。但由于原型出现得较早,mfc相比于vcl,落后了一个时代。尽管微软对mfc的更新没有停止,但就像inprise的owl框架淡出一样,mfc的淡出也是早晚的事情。其实,mfc是和owl同一个时代的产物。owl已经不在了,mfc怎能不“居安思危”呢?如果mfc青春永驻,微软的开发人员也不会“私自”开发出基于atl的wtl呀。当然,wtl的地位不能和mfc比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出mfc存在的不足。

四、稳定性与完善程度:VC是老大哥

VC要比Delphi稳定和完善。VC的发展历史比Delphi长,微软的总体实力比Inprise强。VC的框架mfc经历多年的发展和完善,功能非常全面,而且十分稳定,bug很少。千万不要小看这一点,很多专业程序员就是因为这个原因选择VC的。尽管vcl比mfc的抽象程度高,封装较为高层,但由此带来的开发效率的提高,对高手来说毕竟是有限的。而如果遇到一个怪问题,调试了半天,发现不是代码有错,而是vcl的bug,会作何感想呢?Delphi的ide太占资源,启动速度太慢,和某些显卡驱动程序冲突,vcl中有bug,调试器不够健壮,对不稳定的第三方控件没有防护措施,问题多多,在这一方面Delphi不如VC。

五、可移植性:立足现实,放眼未来

目前,Inprise的兼容性做得并不好。低版本的Delphi不能使用高版本的vcl组件,而高版本的Delphi竟然不能使用低版本的vcl组件。如果Windows 98不能运行95的程序,Windows 95不能运行3.x的程序,还会有人用Windows吗?如果Windows 95的程序必须经过重新编译才能在Windows98下运行,Windows98会卖得那么好吗?“同门兄弟”C++Builder和Delphi也不能互相使用对方的组件,甚至同一套vcl库的文件名也不一样。所以,Inprise应先解决同门兄弟的兼容性问题。而微软的VC没有这类问题,mfc1.0的程序可以毫无障碍地在VC6.0下编译通过。

六、调试:细微之处见真功

Visual C++和Delphi的调试功能都非常强大,都具有单步可视化调试、断点跟踪、运行时改变变量、鼠标指向可以得到变量值等功能。另外,对dll的输入输出也能方便管理,能够进行源码级别的调试。

相对而言,Visual C++能够更加方便地看到变量的变化情况,包括对结构可以展开成数据树,从而了解每一个变量的值,每一步调试,变化了的变量会加红,从而使调试更加方便。另外,Visual C++的块内存察看,比Delphi也要方便。

七、数据库开发:Delphi一枝独秀

数据库支持是Delphi的强项。这主要体现在Delphi与bde的无缝集成,以及Delphi提供的现成数据库操作控件。这是VC望尘莫及的。目前,Delphi支持bde、ado、Interbase三种数据库访问方式。所有的方式都能拖拉到应用程序中实现可视化操作,明显地提高了开发速度。在Delphi中使用Webbroker控件,还能很方便地构造出基于数据库的Web页面,通过html管理Web数据库。

八、鱼和熊掌:艰难的选择

选择一个开发工具,依赖多种不同的因素,每个人都能因为某种语言的某个缺陷而放弃学习或使用这种语言。任何程序员都希望自己喜欢的工具能达到理想的境界,通过上面不完善的比较,笔者认为,影响选择开发语言的因素主要包括:

1.语言入门的难易程度

学习一种语言需要投入大量的时间和精力。开发程序的开发成本是值得考虑的现实因素。一个熟练的Delphi程序员和一个熟练的VC程序员,其工作效率是一样的。但是,成为熟练的程序员必须快速掌握一门语言技巧。不幸的是,目前熟练的Visual C++程序员是十里挑一。相对而言,Delphi更适合初学者。

2.哪门语言有更多可继承的代码

语言代码的可重用性是加快开发效率明显方面,从早期的过程、函数到现在的组件技术都是朝这个目标奋斗的。这两种语言对代码重用的理解是不一样的,Delphi主要通过vcl控件来实现代码重用,Visual C++实现起来就比较复杂。

3.语言自身的本性

就技术(主要指应用框架)来说,Delphi目前领先于Visual C++,但稳定性和健壮性不足。而VC尽管发展到今日已十分完善,但mfc框架已是明日黄花了。如果不使用mfc,目前又没有合适的替代品。

4.语言的前景和可扩充性

Delphi是Inprise的旗舰产品之一,前景还是比较乐观的。微软的Visual C++的前景又怎样呢?Visual Studio 7.0即将推出,这一版本将加强网络开发的特性。

用Delphi开发奖金发放系统 篇4

随着计算机及其网络技术的飞速发展和社会信息化水平的不断提高,利用计算机技术逐步取代传统的手工操作方式,信息技术已成为衡量一个国家、企事业单位发展水平的重要标准。我校实际情况是各个部门、各位教师都配备了微型计算机,在一定程度上提高了办公效率,但有限的技术能力使我们的硬件资源利用率较低。例如:我校的奖金统计工作一直采用传统手工作业方式,操作人员的工作量大,为了保证数据的准确性,通常要进行多次计算,从而导致工作效率低下。

2 需求分析

奖金发放系统是对学校所有教职员工工作量的统计,并计算奖金金额。根据我校实际情况,奖金发放系统应有以下要求:1.数据的保密;2.系统运行稳定;3.具有多种统计查询功能;4.具有报表打印功能。此外还应具有操作简单、界面简洁、符合使用者的习惯等特点。

3 开发工具及数据库

本系统是属于单机版的数据库软件。采用Delphi7.0开发工具,它是一种可视化、面向对象和采用时间驱动程序方式的结构化高级程序设计语言,它是目前开发数据库应用程序的一种强有力的工具。数据库应用程序首先是利用数据库部件与BDE建立联系,然后再通过BDE与数据库联系。数据库系统选择使用SQL Server 2000,主要是因为:首先,SQL Server具有很好的安全性,能够排除所有未经授权的非法用户的访问,确保了SQL Server服务器的安全性;第二,容量庞大,数据表中的记录行数只受服务器硬盘空间的限制。

4 系统设计

4.1 总体框架

根据学校要求和实际情况,设计系统总体框架见图1,系统功能主要体现在各模块上。

4.2 数据库表结构

在数据库的设计中,应用软件工程的思想和方法按照规范设计法进行设计。一般来说,基本表设计应尽量满足规范性的要求,以满足数据的一致性。由于数据的冗余度与数据的一致性成反比,只有冗余最小,一致性才最大,因此基本表的设计的规范性有助于降低数据冗余度,但中间表与临时表以及统计分析表的设计就不用严格遵守3NF范式,因为它们不代表实体,只是用来存储经过处理的统计数据,供分析、查询和报表打印之用。该系统共使用了12个表,由于篇幅有限仅列出以下2个表。

5 奖金发放系统

下面对一些关键性的问题作出具体说明和解决方案。注:以下图片中敏感数据均做了模糊处理。

5.1 系统登录

启动系统的时候,系统会要求用户输入用户名、密码、权限级别。连续3次输入错误,则自动关闭登录对话框。输入正确时,系统根据权限级别给出相应的权限,完全控制、查询、报表输出和仅查询3种不同权限。

5.2 基础数据录入

在使用系统之前需要操作员输入所有课时部门信息、职工信息。由于部门编号、职工编号等信息在数据库中具有唯一性,因此该系统采用了自动编号功能以保证数据的唯一性。

5.3 系统设置

本系统的大部分数据实现自动输入和自动统计的功能,因此在正式使用前要设置以下系统参数。使用过程中,用户要及时地备份数据,以便在恢复数据的时候使用。

5.4 奖金录入

奖金录入分为历月录入和年终录入,用户操作简单,以图2为例选择科室部门和职工姓名,右侧7个文本框,最多需要输入学时数,其他数据均能自动输入,如果输入行政、后勤人员的奖金,不需输入任何数据,直接单击“添加”按钮即可。实现该功能的部分关键代码如下:

5.5 数据查询

该系统具有灵活的查询系统,1)查询各科室的奖金发放和课时数据。2)按姓名或拼音代码查询每次奖金数据。3)查询全校奖金发放数据(仅具有最高权限用户可用)。

5.6 报表输出

该模块是奖金系统最重要的一部分,分为四部分1)历月分组明细,统计每月每科室奖金发放明细。2)历月汇总报表,统计每月各科室奖金总计,全校奖金总计。3)年终个人明细,统计个人一年内所有工作量及各种奖金补贴明细。4)年终汇总数据,统计学校全年发放奖金金额。

6 结语

本系统现已在莱阳卫校投入使用2年多的时间,从使用情况来看,系统运行正常,未发生奖金统计错误,极大提高工作效率,减轻了工作人员的工作负担,并且大大节省了经费的开支。任何一个软件系统,总有一个逐步完善的过程,该系统也是如此,目前还存在着一些问题,如:系统还不能实现局域网内部查询,该系统还需进一步完善和升级,以实现更强大的功能。

参考文献

[1]吕静骅,史进.SQL Server2000基础教程.北京:清华大学出版社,2001.

[2]周兴华,李增民,臧洪光.Delphi7数据库项目案例导航.北京:清华大学出版社,2005.

Delphi笔试题目 篇5

机械类笔试试题

1. Briefly describe what is blanking(cutting), forming, coining and emboss

ing in stamping process.

2. What is metal clading?

3. What is the purpose of adding glass fiber to thermoplastic material?

4. In contrast with metal and thermoplastic material,which has a higher co

efficient of thermal expansion(CTE).

5. The most suitable material for a integral hinge design (typical plastic

thickness=0.25 to 0.5mm at hinge)

6. Can a bending load makes both compressive and tensile stress in a membe

r?

7. What is the design criteria used in plastics catch/snap?

8. What is FEA?

9. Why is natural frequency important in vibration analysis?

10. What is the deflection equation of a cantilever beam fixed at one edge

?

EE笔试试题

1. Name 3 Vehicle Buses.

2. Name 2 possible sources of Electromagnetic interference on Electronics

Circuit ASM.

3. Wavelength for 12MHz frequency signal is____

4. Name 2 important considerations for car radio performan -ce related to

audio signal processing under multipath condition?

5. What is the typical FM receiver RF signal strength to achieve 30dB S/N

for car radio?

6. When a radio is tuned to 98.1 MHz & with a LO of 108.8 MHz, what is the

image frequency?

7. For a system with a matched impedance, what is the Reflection Coefficie

nt and SWR?

8. Which property of the output capacitor is the primary cause of Low Drop

Out(LDO) regulator loop instability?

(1)Equivalent series resistance(ESR)

(2)Effective series inductance(ESL)

(3)Capacitance value

(4)Dielectric material

9. The switching regulator is capable of:

(1)Higher power conversion efficiency

(2)Providing an output voltage that is higher than the input

(3)Generating an output boltage oppsite in polarity to the input

(4)All of the above

10. A linear regulator op Vin(max) = 10v, Vout(min) = 4.8v, Iout(max) = 2.

5mA, Iq(max) = 2.5mA, Ta(max) = 8.5摄氏度,The regulator is available in 3 pac

kages.Each package has the following thermal characteristics:

Package Rja(摄氏度/W) Rjc(摄氏度/W)

SO14 125 30

D1P8 100 52

Choose the most suitable package to handle the power dissipation requireme

nt without a heat sink and why.

软件笔试题

1. How do you code an infinite loop in C?

2. Volatile:

(1)What does the keyword volatile mean? Give an example

(2)Can a parameter be both const and volatile? Give an example

(3)Can a pointer be volatile? Give an example

3. What are the values of a, b, and c after the following instructions:

int a=5, b=7, c;

c = a+++b;

4. What do the following declarations mean?

(1)const int a;

(2)int const a;

(3)const int *a;

(4)int * const a;

(5)int const * a const;

5. Which of the following statements describe the use of the keyword stati

c?

(1)Within the body of a function: A static variable maintains its value

between function revocations

(2)Within a module: A static variable is accessible by all functions wit

hin that module

(3)Within a module: A static function can only be called by other functi

ons within that module

6. Embedded systems always require the user to manipulate bits in register

s or variables. Given an integer variable a, write two code fragments.

The first should set bit 5 of a. The second shnuld clear bit 5 of a. In bo

th cases, the remaining bits should be unmodified.

7. What does the following function return?

char foo(void)

{

unsigned int a = 6;

iht b = -20;

char c;

(a+b >6) ? (c=1): (c=0);

return c;

}

8. What will be the output of the following C code?

main

{

int k, num= 30;

k =(num >5 ? (num <=10 ? 100:200): 500);

printf(“%d”, k);

}

9. What will the following C code do?

int *ptr;

ptr =(int *)Ox67a9;

*ptr = Oxaa55;

10. What will be the output of the follow C code?

#define product(x) (x*x)

main()

{

int i = 3, j, k;

j = product(i++);

k = product(++i);

printf(“%d %d”,j,k);

}

11. Simplify the following Boolean expression

!((i ==12) || (j >15))

12. How many flip-flop circuits are needed to divide by 16?

13. Provides 3 properties that make an OS, a RTOS?

14. What is pre-emption?

15. Assume the BC register value is 8538H, and the DE register value is 62

A5H.Find the value of register BC after the following assembly operations:

MOV A,C

SUB E

MOV C,A

MOV A,B

SBB D

MOV B,A

16. In the Assembly code shown below

LOOP: MVI C,78H

DCR C

JNZ LOOP

HLT

How many times is the DCR C Operation executed?

17. Describe the most efficient way (in term of execution time and code si

ze) to divide a number by 4 in assembly language

18. what value is stored in m in the following assembly language code frag

ment if n=7?

LDAA #n

LABEL1: CMPA #5

BHI L3

BEQ L2

DECA

BRA L1

LABEL2: CLRA

LABEL3: STAA #m

19. What is the state of a process if a resource is not available?

#define a 365*24*60*60

20. Using the #define statement, how would you declare a manifest constant

that returns the number of seconds in a year? Disregard leap years in your an

swer.

21. Interrupts are an important part of embedded systems. Consequently, ma

ny compiler vendors offer an extension to standard C to support interrupts. Ty

pically, the keyword is __interrupt. The following routine (ISR). Point out pr

oblems in the code.

__interrupt double compute_area (double radius)

{

double area = PI * radius * radius;

printf(“nArea = %f”, area);

return area;

Delphi程序开发 篇6

关键词:计算机应用;Delphi编程技术;教学方法

中图分类号:TP311.13

1 问题的提出

Delphi 是可视化应用程序开发环境、可重用性面向对象编程语言、快速编译器和数据库技术的完美结合。它具有功能强大、运行速度快、易于学习和使用以及开发迅速等特点。在高校计算机应用及相关专业高年级的学生中开设《Delphi 编程技术》这门课程能培养学生应用可视化的开发工具,进行有关信息系统开发的能力。但是,如果《Delphi 编程技术》的教学采用计算机类课程的传统教学模式——先由教师讲授知识要点,然后隔段时间让学生在机房进行实验,学生往往会觉得这门课程抽象、枯燥,就如体育教师在教室里教游泳的动作,事倍功半,影响教学效果。因此,本文介绍使用多媒体设备,选择一些生动典型的实例,再辅以相应的练习,让学生在边学习边实践中熟悉Delphi开发环境和掌握Delphi编程技术,本文讲述笔者使用实例教学法中的一些体会。

2 实例教学的目的:引导学生的学习兴趣,发挥学生的主体作用。

教学中教是手段,学是主体,教是为学服务的,追求学生最佳的学习效果是教学的目的。要产生好的学习效果,必须引导学生的学习兴趣,增强学生的主体意识,发挥学生的主体作用,引导学生主动、积极地参与教学过程,激发学生的求知欲望,使其觉得学习这门课程是自己的需求。实例教学法利用实例把一些抽象的概念直观化,Delphi 友好的界面也易于引起学生的学习兴趣,在这样的条件下,辅以一些生动、活泼,贴近学生生活,易于被学生接受的实例,如学生选课管理系统、學生成绩管理系统、简单的游戏制作等,让学生觉得该课程不仅有趣而且实用性强,学生就愿意通过自我学习,自我实践把知识引向纵深。

另一方面,计算机应用科学技术日新月异,这要求计算机应用及相关专业的学生必须具备举一反三、触类旁通的能力,从这个意义上说,在教学过程中开发学生的自主学习的潜力,学会学习,意义更重大、更深远。那么,怎么开发学生自主学习的潜力,让学生学会学习呢?要做到这点,在课堂上就实例学实例就不够了,本人试着从以下几方面入手培养学生。

首先,由于课时的限制,课堂上不可能介绍Delphi所有控件的功能和属性,一般同种类型的控件,选择4至5个详细介绍,其余的则引导学生通过阅读课本和参考书进行自我学习。例如,Delphi中有十几个常用组件:Label、Edit、Memo、Button、CheckBox、RadioButton、ListBox、ComboBox、ScrollBar、GroupBox、RadioGroup等,全部详细介绍既费时也没必要,只要选择其中几个有代表性的详细介绍,如详细介绍Edit、Memo、ListBox、ComboBox、ScrollBar,其余组件稍作提示后让学生自学即可。

第二,《Delphi 编程技术》是实践性很强的课程,要特别注重学生的自我动手实践,所以讲解完实例,要相应地给学生布置一个练习。练习不能是让学生把课堂上的实例照原样实现一遍,练习既要有具体的要求,又要留给学生自我发挥的空间,鼓励学生充分应用想象力和创造力完成。例如常用组件的功能、属性及事件介绍完后,可要求学生用这些组件实现输入时间(包括年、月、日、时、分、秒、星期),然后显示时间的练习,强调输入时间的方式是否多样化,界面布局是否友好是该练习的成绩的依据。至于怎么布局,用什么控件进行输入则让学生自己发挥,这样,学生会以完成自己的作品的态度来完成练习,以增加学生学习的成就感。最后,把优秀的作品拿出来让大家共同欣赏,让所有学生都从中有所收获。

第三,通过学习Delphi引导学生强化计算机英语的学习,为今后的进一步学习打下坚实的基础。Delphi中的提示信息是英文信息,要想让学生更好地进行自主学习,将来熟练地使用这项编程技术,熟悉这些英文提示很重要,所以,在课堂上有意识地引导学生,要学生用心认识这些英文信息,并最终能利用这些英文信息,减少编程过程中对教师的依赖性,增强独立编程的能力。

第四,强调学生在学习过程中要注意Delphi编程技术是“一种能自我发展的编程技术”。一方面,随着Delphi版本的不断更新,Delphi的新功能和新特点不断出现;另一方面,学生可以方便地通过Internet下载一些原系统没有但别人编写好的方便实用功能强大的控件,同时,鼓励学生自己编写一些自定义构件供自己使用。

第五,为了有利于发挥学生的主体作用,要积极培植师生间融洽的情感气氛,营造生动活泼的课堂氛围。鼓励学生从多种途径去寻求解决问题的方法,让他们平等地参与讨论,自我解决问题。

3 实例教学法必须精心设计实例

是否精心设计实例关系到实例教学法能否成功。教学过程中,本人对实例的设计基本上贯彻三个原则。

第一,实例内容应循序渐进、由浅入深。根据这个原则,本人将教学过程划分为四个阶段:①介绍Delphi的集成开发环境、各种控件的使用和集成调试器。②介绍如何用Delphi开发多媒体应用程序。③介绍如何用Delphi开发数据库应用程序。④介绍如何开发自定义构件及开发Internet应用程序等。每个阶段辅以若干实例,在讲解实例的过程中列出该实例的技术要点及通过实例要学习的知识点。

第二,实例内容能够基本涵盖Delphi的各类控件的功能与特征。在四个阶段的课程中,每个阶段都有学习的侧重点,课堂上不可能也没必要详细介绍全部控件,在教学过程中要把控件分类,以几个控件辐射一类控件。当然,最后可以让学生动手制作一个简单但能综合应用各种控件的数据库系统,如学生成绩管理系统,该练习既包含了窗体、菜单、面板组件、快速按钮组件以及其他一些常用组件,又使用了各种对话框组件及基本的数据库组件。

第三,围绕教学目的设计典型、有代表性的实例。每一堂课都有教学目的,课堂的教学内容应围绕着教学目的展开,实例教学法也不例外。所以,在备课时首先要考虑的是教学目的,即这堂课要求学生学习哪些控件的功能及特征,通过这些控件学生又能自己学习到哪些控件的功能及特征,根据教学目的,去精心设计典型、有代表性的实例。只有这样,每堂课的学习才能体现其侧重点,学生学习时才能有针对性、有目的性。例如,在介绍用Delphi开发多媒体应用程序时,只要两个实例,一个实例学习利用Delphi进行多媒体动画制作,另一个实例学习利用Delphi实现声音,有了这样明确的目的性,用不多的课时就可以让学生学会用Delphi开发多媒体应用程序。

4结束语

Delphi程序开发 篇7

Delphi是Borland公司出品的开发工具, 在众多的开发工具中, 我们为什么要选择Delphi呢?因为Delphi具有众多其它开发工具所没有的优点:语言的高效、编译的高效、执行的高效、维护的高效。基于以上理由, 我们毫不忧郁的选择了Delphi做为我们的开发工具!!

1.1 数据库连接方式选择

Delphi连接数据库的主要方式有两种:一是:BDE, 二是ADO。现在我们来大致比较一下这两种技术的优缺点:

BDE (Borland Database Engine) 是Delphi颇具特色的数据库连接管理技术。凭借窗体和报表, BDE可以访问诸如Paradox, d BASE, 本地Inter Base服务器的数据库, 也可访问远程数据库服务器上的数据库, 如Oracle, Sy Base, Informix等C/S数据库中的数据库, 也可访问经ODBC可访问的数据库管理系统中的数据库。

ADO (Active X Data Objects) 是微软提供的一项技术。通过ADO, 可以方便的访问各种类型的数据库, 特别是OLEDB数据库。ADO已成为访问数据库的新的标准接口。从Delphi 6.0开始Delphi添加了对ADO的支持, 以便让用户能迅速实现对终端用户用来做商业决策的数据库的一致性访问, 结合Delphi本身的开发式数据组件结构, 程序员可以很快地建立应用程序, 用来把自己的商业数据库通过Internet发送给客户, 最终用户以及整个销售环节。通过ADO, Delphi 7.0也能让用户快速访问关系或非关系数据库以及E-Mail和商务文件系统。

这两者提供了几乎相同的功能, 在进行产品开发时, 势必要做一个精心的比较。虽然ADO技术提出的时间不长, 并被定位为工业标准的, 而且其在性能上由于当前没有良好的数据库引擎支持, 其性能还不够完美, 但是, 我们应该要注意到Borland公司已经宣布停止发展BDE了, 其性能被ADO超越也是迟早的事, 因此, 在开发长期应用的产品时, 推荐采用ADO技术。这样还有另一个好处是, 在进行产品分发时, 可以避开大量BDE的链接库DLL的分发。

基于以上原因我们选择了ADO做为我们的数据库访问组件。

2 软件实现

2.1 OOP简介

每一个软件开发人员都会经常听到, 看到“面向对象”这个词, 程序员也时常把它挂在嘴上。那么什么还是真正的“面向对象”?什么是面向对象的编程?是不是写几个类就算面向对象了?为什么要面向对象?“面向对象是一种思维方式, 一种方法论”, “结构化编程” (SP) 是一种编程方法, 是从计算机的视角来抽象问题的方法。而“面向对象编程” (OOP) 也是一种编程方法, 只不过它是从更接近真实世界的视角来分析问题, 使用更接近人们理解真实世界的方法来抽象问题, 这种方法称为“面向对象”。

“面向对象”这个词代表的是一种认识世界, 分析问题, 解决问题的方法, 因此它是一种方法论。而面向对象编程则是将这种方法应用于程序设计的方法。当你会使用面向对象的方法去思考, 用面向对象的模式支分析和解决问题的时候, 才是真正的“面向对象”了!!

“面向对象”最主要的特性有三个:

⑴继承性。Delphi提供大量的可被二次开发的类。每个类都可被继承。

⑵封装性。Delphi的封装性主要由类的私有域和保护域来实现的。

⑶多态性。Delphi的多太性主要是通过虚拟方法和动态方法来实现的。

2.2 开发的关键技术⑴VBA编程技术

Visual Basic for Applications (简称VBA) 是新一代标准宏语言。在没有VBA以前, 一些应用软件如Excel, Word, Access等都采用自己的宏语言供用户开发使用, 但每一种宏语言都是相互独立的并且它们之间是互不兼容的。这导致了应用软件之间不能在程序上互联。找到一种可被所有的Microsoft可编程应用软件所共享的通用宏语言是Microsoft公司长期追求的目标。VBA作为新一代的标准宏语言具有了跨越多种OFFICE应用软件并且控制应用软件对象的能力。

3 系统测试

测试在软件开发过程中一直都是备受关注的, 即使在传统的软件工程中, 也有一个明确、独立的测试阶段。随着软件危机的频频出现以及人们对于软件本质的进一步认识, 测试的地位得到了前所未有的提高。测试已经不仅仅局限于软件开发中的一个阶段, 它已经开始贯穿于整个软件开发过程, 人们已经开始认识到:测试开始的时间越早, 测试执行的越频繁, 所带来的整个软件开发成本的下降就会越多。Extreme Programming更是把测试推到了极限的位置, 一切软件开发活动都要从首先编写测试代码开始。

为了使本软件运行更加稳定, 我对它进行了全面的测试, 测试分为二部分来进行, 一是:界面测试;二是功能测试。

首先是界面测试, 为了使软件在不同的的操作系统平台上运行界面能保持原来的风格。我的开发平台如上介绍。我把完整程序拷贝到我同学的机子, 同学机子的相关配置如下:Windows 7+14.5寸笔记本显示器;程序运行界面正常, 界面上的字体等设置都保持得相当好。没有出现类似字体变形的情况!第二个平台:Windows XP+19寸显示器, 测试结果:字体有些不正常。后来在网查找了很多相关的资料, 得出这是由于Window XP和我的开发平台的操作系统Window 7的字体集不一样造成的。解决方案是:把软件的字体设置成:宋体+9号, 字符集使用:CHINASE_GB2312。至此软件的界面测试顺利完成。

二是进行功能的测试。我的功能模块主要是试卷生成。而试卷生成后都是输出到Microsoft Office Word里。实际测试结果如下:在Windows 7+Microsoft Office 2003的平台下, 试卷功能里的预览功能不能用了。界面停留在“正在链接Microsoft Office Word......”这里, 一看就知道没有办法和Microsoft Office Word链接了。换平台测试, 这回是在Windows 7+Office 2007, 程序正常运行了包括试卷预览等功能都正常运行。再换平台:Windows XP+Office 2007程序同样完全正常运行, 由此可以总结出在低于Office 2007的平台下程序无法和办公软件交互。至此到这里在功能的测试上也已经比较圆满的完成了!

4 系统维护

由于在开发本程序的时候我就特别注意软件的后续维护和再开发上。因此极努力的想把它开发成一个强内聚、弱耦合、接口明确、意图明晰的软件。对于程序里的功能我尽力把它们封装在类的私有过程或私有函数里, 这样可以大大提高软件的内聚性, 在各个功能模块和窗体之间尽可能减少它们之间的调用关系, 以减少软件的耦合性。在软件设计初期我就预留了接口用于调用另一个同学的模块。为了保证两人开发出的功能模块能在最后能顺利地联合。在一开始我就预先编了一个公共的“数据模块”以提高软件连接数据库能高效共享。并且给他规定一些如控件的命名规则, 代码的规范等。这些都大大提高了软件后续的可维护性。

摘要:一般情况教师想出一份试卷, 要么到庞大的题库里一道一道的把题找出来, 或是从几本相关的书里把题一道一道挑出来。这样即费时又费力, 而且很难保证试题的覆盖面和把握好试卷的难度。正是为了能够帮助教师轻松的出一份高质量的试卷而开发了本软件。在开发本软件之前, 正是我努力提高自己的Delphi开发水平的时期。因此我选择了Delphi做为我的开发工具, 然而这次开发的软件和以前不一样。最主要的区别在于这个软件要以Microsoft Office Word做为试卷的终端输出。而它们又是两个不同公司的产品。因而, 刚一开始我特别担心这个技术能否得到比较圆满的解决。在开发的过程中我不断的对VBA技术进行研究, 并且将它应用于这次的软件开发中。因而比较好的解决了Microsoft Office Word的接口编程问题。还有一个比较棘手的问题就是Delphi提供的控件都是很基本的, 而这次开发中要用到一个可以标记选中状态的树型控件, 在对Delphi的TtreeView的深入研究后确认它不能胜任这个任务。在深入研究Windows的消息机制和VCL框架对Windows消息机制的封装技术后我成功的修改了那个TCheckTree控件。在程序开发的后期测试中, 我充分利用各个同学电脑平台的多样性。

关键词:Delphi,VBA,题库

参考文献

[1]陈明.软件工程学教程.科技出版社, 2002.[1]陈明.软件工程学教程.科技出版社, 2002.

[2]萨师煊, 王珊.数据库系统概论.第三版.高等教育出版社, 2000.[2]萨师煊, 王珊.数据库系统概论.第三版.高等教育出版社, 2000.

[3]飞思科技产品研发中心.Delphi7数据库应用开发.电子工业出版社, 2003.[3]飞思科技产品研发中心.Delphi7数据库应用开发.电子工业出版社, 2003.

[4]飞思科技产品研发中心.Delphi6开发者手册.电子工业出版社, 2002.[4]飞思科技产品研发中心.Delphi6开发者手册.电子工业出版社, 2002.

Delphi程序开发 篇8

关键词:数据库开发,Delphi技术,软件编程

1数据库开发

数据库系统主要包括3个部分: 数据库管理系统(DBMS)、 数据库应用程序和数据库[1]。 其中数据库管理系统的主要作用是对数据库信息的程序进行组织和管理; 数据库应用程序则提供了获取、 显示和更新DBMS存储数据的功能; 数据库则是按照一定结构组织起来的数据集合。

DBMS是用于描述、 管理和维护数据库的程序系统, 也是数据库系统的核心部分。 它以操作系统为基础, 对数据库进行统一的管理和控制。 其主要功能包括描述数据库、 管理数据库、 维护数据库和数据通信。 在DBMS中, 关系型数据库的应用最为广泛, 一个关系数据库包括若干个表。 DBMS中存储了大量的数据信息, 其主要目的是为用户提供数据信息服务, 而数据库应用程序正式与DBMS进行通信, 并对其中的数据进行访问, 它是DBMS实现对外提供数据信息服务的唯一途径。 近年来出多种面向用户的数据库应用程序开发工具, 利用这些工具可以使DBMS的过程更加简化, 而不需要进行专门的编程, Delphi就是一种强有力的数据库应用程序开发工具。

2组件功能

Delphi是由Inprise公司所开发的一种可视化编程环境, 同时也是目前世界上最快的编辑器以及最先进的数据库技术, 可以同时应用于多种数据库结构的开发。 Delphi开发的数据库应用程序提供了管理、 存储以及维护信息的方法, 采用多样化的方式对数据库信息进行管理。 Delphi自带40多个预先建立的数据库组建, 包含了集成的代码编辑器、 Database Formwizard、 加速可浏览的数据库表单、 Data Module Designer以及用于多个表单之间的数据共享。 组建面板的Data Access向用户提供了连接数据源的组件, Data Controls中的数据可视化组建则用于从数据库中获取数据或者将数据发送到数据库。 ADO页的组件利用Active X技术通过OLE DB对数据库的信息进行访问。

2.1数据访问组件

数据访问控件在Delphi组件面板的Data Acess选项卡上面, 可以通过TTable、 TQuery以及TStoredproc 3个空间对数据库中的一个或者多个表中的字段进行访问。 学习者在对它们进行操作时, 可以将这些控件看作虚拟的数据库, 即操作过程就是对数据库的操作。

2.2数据库的字段对象

TTable及TQuery控件中包含一个类型为TField的属性Fie lds, 该属性是TField类型的对象列表[2]。 字段对象TField对记录字段可能出现的每一种数据类型都存在一个相对独立的TFiled类型。 通过将Fields Editor在应用程序中进行使用, 可以为数据库表中的字段创建对应的静态TField对象。 字段对象的生成分为动态和静态两类, 其中动态生成主要由应用程序实现, 而静态生成则是由字段编辑器Fields Editor创建, 字段对象虽然在设计和运行的过程中均是不可见的, 但是它们都具备自己独特的属性、 方法和事件, 因此, 在应用程序中可以访问和控制字段对象。

2.3数据浏览控件

数据浏览空间的控件, 主要功能是对用户界面进行数据访问, 对数据库中的数据进行浏览、 编辑、 插入及删除等多项操作。 数据库浏览控件为开发Delphi数据库应用程序提供了可视化界面, 应用程序无论是对本地数据库中的数据还是远程数据服务器中的数据进行访问, 都采用相同的用户界面。 Delphi中常用的数据库浏览控件主要包括TDBGrid控件和TDBNavigato控件。 其中, TDBGrid控件主要用于在控件中对整个表或者整个数据集进行显示和编辑, 通过网格的形式将数据库中的字段信息显示出来; TDBNavigator控件则提供了一组用于数据库表中的导航按钮, 编辑修改、 插入、 删除记录以及刷新数据的显示。 除了上述主要控件外, 还包括DBtext、 DBMemo以及DBList Box等用于显示数据库字段信息的控件。

2.4各控件之间的联系

基于Delphi数据库程序设计最关键的组件是与数据库进行连接的TTable控件[3], 该控件的主要功能是连接数据库文件中的表。 通过应用该控件的相关方法、 属性以及事件执行新增、 编辑、 删除等多种数据操作, 可以直接进行连接。 当连接控件将数据库文件中的表连接起来后, 表的内容无法连接控件并直接交付给数据库浏览控件进行显示, 必须通过Data- Soruce组件对数据库表中的内容进行解析, 然后将解析得到的结果交付给数据库浏览控件进行显示。

3开发步骤

3.1设计方案

Delphi数据库的设计方案首先需要对系统进行分析, 这也是最重要的环节, 主要是结合用户的实际使用需求确定程序的主要功能, 其次, 确定一些通用的功能和辅助功能, 最后建立数据结构。 在确定具体的设计方案之后, 根据数据库对需要实现的功能进行设计, 选择对应的数据库类型和数据表, 包括每个数据表的长度、 字段以及索引等。

3.2数据库流程

根据制定的设计方案, 编写程序设计流程。 为了对后期程序的设计提供指导, 最好详细编写每个功能模块的基本流程。 虽然在进行设计的过程中, 可能需要对程序进行多次改动, 但是基本流程的设计可以保证程序设计的主线不会出现太大偏差, 因此, 程序的改动幅度也相对较小。

3.3准备编程资源

结合功能设计, 列出需要的功能模块, 分层次、 分结构地对可能需要编程的资源进行分析, 并将这些资源储备好, 方便后期开发的使用。

3.4程序整体界面

结合程序实际设计需求, 可以对登录界面和主界面进行初步设计, 将整体界面框架设计好, 并将主要的菜单、 状态栏、 工具栏等界面插件设计好, 然后在此基础上不断完善。

3.5详细系统分析及解决方案

在编程过程中, 不可避免会碰到各种各样的困难, 为了更加顺利地完成编程设计, 最好结合实际功能需求以及程序流程对整个程序的框架进行分析, 根据自己掌握的知识、 技能对难点问题进行分析, 并找到解决的方法。 比如, 对于一个比较复杂的查询, 可能通过一条SQL语句无法获取查询结果, 此时就需要分析是否还有其他方法可以实现这一功能, 是否需要采用临时数据表来实现, 如果需要使用临时数据表, 那么如何将数据导出到临时数据表中, 这样的SQL语句如果还不会, 那么就即是通过资料查找等方式来解决, 最好找一个临时的数据库对代码进行验证, 确定能否解决该问题, 如果能够解决, 则将代码保存作为备用资料。

4结语

Delphi程序开发 篇9

网络中很多非法网站或计算机病毒修改用户Internet Explorer(IE)浏览器的主页、标题栏等功能、信息,使计算机的正常运行、操作难以保证。这一问题可以通过注册表编辑器解决。但是,有的恶意网页或者病毒可能把用户操作系统中的注册表编辑器也屏蔽掉,使得修改注册表的权利都没有[1]。本文就是针对这一问题,介绍一个利用Delphi开发能够通过注册表保护、修复IE浏览器程序的方法。

2 设计原理

在Delphi 3.0及以上版本中,提供了一个构件Tregistry。在程序中可以利用它来实现对WINODOWS 9X/NT/XP注册表的操作。IE浏览器中的一些功能和信息与Windows操作系统中注册表是一一对应的。通过Tregistry构件访问注册表的首要工作就是对该构件的核心属性、方法进行解析[2]。

2.1 Tregistry构件解析

TRegistry常用的属性和方法有:Root Key、Create Key、Open Key、Close Key、Delete Key、Read XXXX、Write XXXX(XXXX表示数据类型如String、Integer等)。本文所用到的属性和方法有如下三个:

1)Root Key:注册表的根键名(如HKEY_LOCAL_MACHINE等);

2)Open Key(Key Name:string;Can Create:boolean):使当前键为Key Name,Can Create表示当指定的键不存在时是否创建,True表示创建

3)Set Key(Key Name,Key Value:string):使键Key Name的值为Key Value。

2.2 IE相关的注册表信息

获取IE浏览器关键功能和信息与注册表德对应键值是实现该程序的关键所在,其中:

1)IE主页:在注册表的SoftwareMicrosoftInternet ExplorerMain下的start page键值中存储;

2)IE标题栏:在注册表的SoftwareMicrosoftInternet ExplorerMain下的Window Title键值中存储;

3)注册表编辑器:SoftwareMicrosoftWindowsCurrent VersionPolicies管理注册表是否处于活动状态。如果注册表编辑器处于活动状态,那么其键值为true。如果注册表被锁住,其键值为false[3]。

3 详细设计

通过TRegistry构件、注册表和IE浏览器关联键值的分析,即可进行具体的代码设计。图1为该程序的功能流程图。

在Delphi开发环境中新建一个工程,在窗体上添加如下控件:一个Check List Box、一个Edit和两个Button。Check List Box的Items属性中添加五个选项,分别是:允许编辑注册表、恢复IE主页、恢复IE标题、恢复IE设置按钮和显示Internet设置选项。Edit控件用来编辑要设置的IE主页内容。两个Button控件的Caption属性分别命名为:应用和退出。然后,在“应用”按钮中编写代码。核心代码如下:

代码完成后,运行程序,程序运行如图2所示。

4 总结

本文介绍了用Delphi编写的IE保护器程序的方法,通过它可以对IE进行轻松的管理与维护。在此工作基础上可以进一步完善,如增加托盘功能,或者通过Timer控件对注册表进行实时监控,以及添加程序的自启动功能等。

摘要:分析了Delphi中Tregistry构建与Windows操作系统注册表的关联,归纳了开发网络浏览器进行保护程序的全部过程和方法,提供Delphi中Tregistry构建应用于Windows操作系统网络安全的基本思路。

关键词:网络浏览器,安全防护,Delphi,注册表

参考文献

[1]张福峰,李文广.Delphi下网页广告拦截技术的实现[J].沧州师范专科学校学报,2007,23(1):58-59.

[2]韦志鹏,王勇,李静.Delphi中面向对象程序设计思想[J].电脑知识与技术:学术交流,2007(1):267-271.

Delphi程序开发 篇10

ORACLE数据库系统是美国ORACLE公司 (甲骨文) 提供的以分布式数据库为核心的一组软件产品, 是目前最流行的客户/服务器 (CLIENT/SERVER) 或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统, 作为一个通用的数据库系统, 它具有完整的数据管理功能;作为一个关系数据库, 它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。

1 配置Oracle监听和网络服务名

建立了Oracle数据库后, 必须合理地配置监听程序和网络服务名, 客户应用才能访问数据库。服务器端必须配置监听程序, 而网络服务名在客户端跟服务器端都可以配置。

服务器端的监听程序用于接收客户端的连接请求。建立Oracle数据库后, 为了客户应用能访问特定数据库, 必须要在监听程序中追加该数据库。一个监听程序可以监听多个Oracle数据库, 多个监听程序也可以监听同一个数据库。但是监听程序只能用于同一台服务器上的Oracle数据库。安装了Oracle时, 会自动建立默认的监听程序LISTENER., 监听程序使用的默认端口为1521。保存了监听程序配置之后, 必须要重新启动监听程序才能生效。windows中可以在“服务”中重新启动。例如:假如在10.150.27.45上装了ORACLE服务器, 端口是1521, 为了让其他客户端应用 (不管是本地的还是其他的) 可以访问我的名为TESTDB的数据库, 首先得在服务器上配置监听器:进入Net Manager新建一个端口, 如命名为LISTENER, 配置主机名:如10.150.27.45和端口1521, 配置全局数据库名:如TESTDB, 然后保存。

客户端需要配置网络服务名, 才能访问Oracle数据库, 一般使用数据库名作为服务名。注意:网络协议要与监听程序的一致 (如TCP/IP) 例如:假如在10.150.27.46上装了ORACLE客户端, 进入NET MANAGER, 新建一服务命名, 如:TEST, 然后配置你要连接的DB服务器名字和端口好, 如:10.150.27.45, 1521, 配置服务名必须跟监听端口的全局数据库名一样:如TESTDB, 然后可以通过输入用户名和密码测试连接成不成功了。

2 设置BDE连接

Delphi数据库应用的最大奥秘在于它的独特的数据库引擎BDE (Borland Database Engine) , 它使我们的程序编写更为方便, 移植起来也十方便, 可适应从客户/服务器模式到分布式网络计算, 如果再充分利用Windows的多线程、COM、CORBA、MTS等机制, 将会开发出更为美妙的东西来。Delphi主要是通过数据库引擎BDE来处理数据的。BDE实际上是由几个DLL模块组成的, 它们分别负责处理一些数据库的相关工作。所有数据库存取使用的例程, 均需要通过BDE来处理。BDE是Delphi数据库功能的枢纽部分, 是连接应用程序和数据库的桥梁。

Delphi要访问Oracle数据库时, 需要先在BDE中进行相关的设置。设置BDE步骤如下:运行BDE工具, 对右边的Database根节点点击右键, 在弹出的New Database Alias对话框的下拉框选择Oracle驱动程序。在Database根节点下面添加了一个节点, 节点名称可以修改, 然后修改右边的SERVER NAME属性, 此值与Oracle的Net Manager工具设置的网络服务名一致。修改SQLQRYMODE选项值, 数据库在本机, 选择Local, 不在本机, 选择Server。还需要修改USER NAME的值, 输入Oracle的用户账户。

3 BDE数据库组件使用说明

3.1 Tdatabase组件

Database组件用于事务处理控制、安全性以及连接控制。它通常只用于连接客户机/服务器应用程序中的远程数据库, 或避免在多个窗体中连接同一个数据库。Database组件还用于设置只在程序内使用的本地别名。一旦该本地别名被设置为一个给定的路径, 应用程序的Table和Query组件就可以引用本地数据库别名。这要比在程序的每个Data Set组件中复制编码路径的方法好得多。

3.2 TSession组件

Session组件提供了对应用程序数据库连接的全局控制, 包括一个已有数据库和别名的列表以及一个定制数据库注册的事件。

3.3 Ttable组件

在Delphi中, 指定数据访问最简单的方法是使用Table组件。Table对象只引用数据库表格。当使用Table组件时, 需要指明要在它的Database Name属性中使用的数据库名称。可以输入别名或含有数据表格文件的目录路径。Object Inspector列出了所有可用的名称, 这要根据在BDE中安装的别名来定。

还需要在Table Name属性中提供相应的值。Object Inspector列出了当前的数据库 (或目录) 可使用的数据表格, 所以通常应该首先选择Database Name属性, 接着选择Table Name属性。

3.4 Tquery组件

Delphi中第二个数据集合组件是Query组件。查询一般要比数据表格复杂, 因为它需要SQL语言命令。然而, 使用SQL定制查询比定制数据表格容易 (当然, 至少需要知道SQL的基本元素) 。Query组件和Table组件一样有Database Name属性, 但没有TableName属性。数据表格是在SQL语句中定义的, 存储在SQL属性中。

3.5 Tstored Proc组件

第三个数据集合组件是Stored Proc, 它引用了SQL服务器数据库的存储过程。可以运行这些过程并在数据库表格窗体中得到结果。Stored Proc只能与SQL服务器一起使用。

4 结束语

通过本文介绍的方法连接Oracle数据库, 方法简单、操作方便, 但在部署软件的时候就很不方便, 因为在每台运行软件的计算机上都需要设置特定名字的别名。

摘要:该文介绍了Delphi搭配Oracle进行数据库应用开发时, 通过Delphi提供的BDE以及Oracle提供的Net Manager工具进行有关数据库连接设置。通过设置Tdatabase及Tsession控件属性, 然后使用TTable、Tquery和TstoredProc等BDE控件, 进行Oracle数据库的有关操作。

关键词:Delphi,Oracle,数据库,存储过程,SQL语句

参考文献

[1]Marco Cantu.Delphi2005从入门到精通[M].北京:电子工业出版社, 2006.

[2]路遥, 宋鑫.Oracle基础与提高[M].北京:电子工业出版社, 2003.

Delphi程序开发 篇11

关键词:学生综合素质测评;Delphi 7.0;数据库;数据模块

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30760-02

The Design of Student Synthetic Quality Evaluation System Based on the Delphi

LIU Jie, WU Zhi-hui, ZHU Jie

(Chengdu Aeronautic Vocational and Technical College, Chengdu 610021, China)

Abstract:Elaborated the universities student synthesize quality evaluation system module design structure, introduced with emphasis the database relational model and the database physics design technology, described the main module function and the treating processes. The system onstage uses the Delphi development language, the backstage uses the InterBase database, the realization evaluation system the information.

Key words:Student Synthetic Quality Evaluation; Delphi 7.0; Database; Data module

1 引言

学生综合素质测评是从德、智、体三方面对学生进行综合评价,形成综合测评成绩,将这一成绩作为评定各种荣誉称号、评定各类奖学金、助学金的主要依据。以某高校为例,综合素质测评成绩=德育测评成绩×30%+智育测评成绩×60%+体育测评成绩×10%。人工进行学生综合素质测评是一项极繁琐、复杂的工作,难以保证测评工作的公平、公正、公开。因此我们尝试开发了一套综合素质测评软件。

系统利用Delphi 7.0面向对象的可视化编程环境开发设计,故在系统程序设计过程中,采用传统的过程化设计模式与面向对象程序设计向结合的方法,使得程序维护、程序代码设计等方面的工作更为容易,效率更高。安装程序用Installshield Express软件,在数据库实现中使用了InterBase数据库。

2 系统功能模块设计

根据对系统功能的分析,得出学生综合素质测评系统模块结构图如图1所示。

图1 系统模块结构图

3 数据库设计

3.1 数据库关系模式

专业(专业号,名称)班级(班号,专业,班主任)

学生(专业号,班级,学号,姓名,性别,民族,政治面貌,联系方式,通讯地址,邮政编码)

学生家庭(专业号,班级,学号,姓名,父亲姓名,父亲工作单位,母亲姓名,母亲工作单位)

学生简历(专业号,班级,学号,姓名,高中学校,邮政编码)

寝室(男女生,楼号,寝室号,专业号,班)

考勤(编号,早操/正课,专业号,班级,学号,姓名,学期,周次,病假,迟到,早退,缺勤,事假)

选课(课程号,专业号,班级,学号,学生姓名,学期,成绩)

任职(专业号,班级,学号,部门号,职务,起止学期)

3.2 主要数据信息表及关键数据表的定义

3.2.1 系统的主要数据信息表如表1所示。

表1 系统主要数据信息表

3.2.2 以个人综合测评加减分表为例说明数据表的定义。

表2 个人综合测评加减分表

3.3 数据库物理设计

本数据库在物理设计时用了较先进的技术,如建立主关键字、建立唯一性约束、建立多个索引、建立字段值约束、建立默认值、建立参照完整性、定义函数、定义异常、定义触发器等,使数据库更加安全有效。

3.3.1 处理数据库异常

异常是能够导致程序状态从正常执行变成中断的错误或事件。在Delphi中常用try...finally语句处理异常情况。以下是“班级管理”模块中“选择专业”的处理过程,可看到try...finally的使用。

begin

lstbxBan.Items.Clear;

with DtMdl.qryJiChuChaXun do

try

Close;

SQL.Clear;

SQL.Add('select ZHUANYEHAO from ZHUANYE');

SQL.Add('where MINGCHENG=:MingCheng');

ParamByName('MingCheng').AsString:= cmbZhuanYe.Text;

Prepare;

Open;

ZhuanYeHao:= FieldByName('ZHUANYEHAO').AsString;

finally

3.3.2 用SQL语言建立数据表

在本软件数据库实现中使用了InterBase数据库,它是纯关系数据库,不但支持国际标准的SQL语言,还对其进行了丰富,使其功能更加强大。下面给出一个用SQL语言建立数据表(“系表”)的语句,来说明本数据库在建表方面是怎样进行的。这只是数据定义语句,数据操作和数据控制语句没有给出。

CREATE TABLE DEPARTMENT

( EPT_NODEPTNO NOT NULL,

DEPARTMENTVARCHAR(25) NOT NULL,

HEAD_DEPTDEPTNO,

MNGR_NOEMPNO,

PHONE_NOPHONENUMBERDEFAULT '028-80000000',

UNIQUE (DEPARTMENT),

PRIMARY KEY (DEPT_NO));

ALTER TABLE DEPARTMENT ADD FOREIGN KEY (HEAD_DEPT) REFERENCES DEPARTMENT (DEPT_NO);

4 主要模块功能与处理过程设计

4.1 建立数据模块

数据模块用来集中维护程序中要用到的所有数据库规则以及相互之间的关系,一个数据模块可以被多个项目、开发组共享。数据模块用Delphi7.0中VCL组件的TdataModule类来操纵。要在一个项目的多个窗体和单元之间共享数据,比较简单的办法就是把数据访问组件放在数据模块上。在较为复杂的情况下,需要对多个TTable、Tquery等组件进行适当的安排,包括定义这些组件之间的关联关系(例如主/次关系)以及字段级的操作规则,诸如显示格式、字段的最小/最大值等。尽管工作量很大,但是在完成了这些工作后,可以把数据模块加入到对象库中以备今后使用,在开发另一个应用程序时不必重复同样的劳动。这也是Delphi7.0软件与Visual Basic相比的优势,它的代码更加规范,程序的可移植性强,所以开发效率更高。

4.2 专业/班/寝室/部门信息模块

该模块实现固定信息录入的功能,它将存放在基础数据库中。系统为每一届学生提供一个专门数据库来存放当届学生的信息,另外还提供了一个基础数据库,来存放一些对每届学生来说基本不变的数据,如专业,校、系所设置的部门等信息。模块界面如图1所示。

4.3 学生基本信息管理模块

学生基本信息管理模块实现对学生基本信息的管理,如信息录入、查询信息等。此模块是系统较重要的模块,它不但在制作上复杂、功能上强大,而且它使用到很多别的模块没有用的技术,如图像处理技术、键盘操作控制技术等等。此模块的界面完全根据学生登记表的格式进行设计,形象直观,易于操作,如图2所示:

图1 专业/班/寝室/部门信息模块界面

图2 学生基本信息录入界面

该界面录入数据量大、数据类型多,无论在数据库设计时还在界面功能的设置上,都提供了输入检查功能,能部分防止录入错误信息。同时该项还拥有查询功能,用户可通过学号或姓名两种方式进行查找。本界面实际上打开的是三个表:学生基本信息表、来校前简历表、家庭主要成员表,前一个表是主表,后两个表是从表,主表变从表跟着变,从而达到数据的对应一致。

5 结束语

利用Delphi开发语言和数据库技术实现的学生综合素质测评系统,界面友好,操作方便,系统运行稳定,性能可靠,大大提高了综合素质测评的效率和学生管理水平。

参考文献:

[1] 薛华成. 管理信息系统[M]. 清华大学出版社,1999.

[2] 张宽海. 管理信息系统概论[M]. 高等教育出版社,2002.

[3] 张基温,曹渠江. 信息系统开发案例[M]. 清华大学出版社,2000.

[4] 萨师煊,王珊. 数据库系统概论[M]. 高等教育出版社,2000.

[5] 张晓东,杜宏生. Delphi 5编程与开发实例[M]. 人民邮电出版社,1998.

[6] 王志强. Delphi 7 经典开发案例[M]. 中国铁道出版社,2003.

[7] (美)SteveTeixeiaXavierPacheco. Delphi 5开发人员指南[M]. 机械工业出版社,2000.

[8] 王毅,程垮,孙新,崔艳梅. 学生管理信息系统的设计与开发[M]. 郑州航空工业管理学院学报, 2002.6.

[9] 王秀华,徐元彬. 学生管理信息系统的开发及实现[M]. 西南民族大学学报(自然科学版), 第30卷第3期.

Delphi程序开发 篇12

由于U盘小巧易携、使用方便、容量适度,使用频度较其他移动存储介质要高,信息安全隐患也要大得多。黑客、病毒和木马都将目标瞄准了移动存储介质特有的“信息安全软肋”,目前移动存储介质的摆渡、木马、远程控制程序多达百种,很多还采用了隐藏技术,防护的难度越来越大。一般的删除不能使原文档彻底清除,有时甚至是“文件粉碎”这样的工具也不能保证万无一失,因为像很多Word这样的应用软件在打开文档时,会生成一个临时文件,所有操作都在临时文件上进行,只在关闭时才将临时文件拷回到原文件的名录上。这样,在一个存储介质上会存在多个“有实无名”的隐身文档副本,没有名录信息对操作系统而言是不可见的,一般方法访问不到,但是通过特殊的技术可以将“实体”的大部分内容恢复。因此,针对U盘流动性大、数据易泄漏的特点,在保护隐私、跨网使用和清除摆渡泄密的需求下,开发出对U盘数据安全可靠清除的程序很有必要。目前市场上的数据清除设备动辄上万元,基本上是使用嵌入式系统开发的专用产品,在此介绍的方法和程序在原理和实际效果上与其没有差别,在某些方面甚至有更好的拓展性、适应性和灵活性。

2 文件系统的原理

无论是FAT还是NTFS文件系统,尽管安全机制和存取的效率差别很大,但是原理基本相同,都是由索引部分和文件数据实体部分组成,索引提供名录的有效存取、检索,数据实体存放文件的真正内容。为了提高文件系统对文件处理的效率,在删除文件时并不是将上述的两部分全部消除,只是在索引部分标记为“已删除”,而文件的实体数据依然原封不动地存在介质上,从表面上已经查不到这些删除文件的存在,但是通过一定的方法,还是可以一定程度上进行恢复,这是多种文件恢复工具的工作原理。即使采用高级格式化,也只是将文件系统的索引部分清除,而数据实体部分基本上没有涉及,仍可进行数据恢复和提取。

3 U盘的特点

U盘与磁介质移动盘不同,U盘是内部的Flash(电可擦除芯片组)的电荷来维持电位高低,从而进行二进制数据存储的,一旦电荷发生变化,则二进制数据也会发生根本性的改变,或者说物理上不太可能恢复和还原。但是磁介质不同,由于每次的磁头位置不可能完全重合,可能会有微弱的磁化残留,也就是上一次写的数据虽然被覆盖,在磁力显微镜下仍可看出其残留的痕迹,至于是否能将被覆盖的上一次信息完整地恢复出来,学术界目前争论不休,鲜见实测检验的权威报告。光介质存储也存在类似的问题,只是使用频度远低于前两者,还未引起重视。

U盘因为电荷清除后信息就消失了,不会有类似弱磁残留的问题,可以保证清除效果。

4 关键技术

4.1 U盘容量的获取

获取U盘容量有两个API函数,第一个是:

//此函数在SysUtils单元

这个函数返回的容量(int64类型变量Total Space所返回的值)就是U盘标写的容量,但是这个函数必须是在U盘已经格式化后才能正常工作,否则返回的容量是错误值。

另一个函数是:

DeviceIoControl(hDevice:THandle;dwIoControlCode:DWORD;lpInBuffer:Pointer;nInBufferSize:DWORD;lpOutBuffer:Pointer;nOutBufferSize:DWORD;var lpBytesReturned:DWORD;lpOverlapped:POverlapped):BOOL;//这个函数在Windows单元。

这个函数是向设备级发送请求,返回的是底层设备的原始值。在使用这个函数时,不要求U盘设备已经格式化,在“属性”里的“文件系统”一栏可以显示为“RAW”,即没有任何格式的移动盘。笔者在实验中发现,这个函数是在设备层进行请求,有时在资源管理器中不显示该盘符时,使用物理硬设备符(如用文件方式打开设备生成句柄hDevice时,用'.PHYSICALDRIVE1'而不是'.u:'),仍然可以得到U盘的容量,这对U盘数据恢复很有意义。但是这个函数与前一个函数相比,其返回的容量总是小于前函数的结果,并且没有规律。

4.2 真实容量分析

要对U盘进行完全彻底的数据清除,首先必须要知道它的容量。由于U盘本身的特性,一般在商标上标写的容量并不一定是真正的容量。原因有三:(1)正规品牌的U盘标写的是正常使用的容量,在其内部还有一部分是作为坏区补偿的备用容量,当检测有坏片时,U盘内部的电路会将坏区与补偿部分进行互相置换,所以其真正容量会大于标写的容量;(2)某些不良商家会将小容量的U盘Mask成大容量的盘,这时所注的容量也不正确;(3)目前很多黑客、木马会将大容量的U盘改写成小容量,使一部分存储区成为一般手段无法访问的隐蔽区,作为恶意信息的真正藏身地。表面上似乎如何检测U盘真正的容量是关键,实质上能否完全清除U盘上的所有存储信息才是安全保障的根本所在。

4.3 覆盖U盘所有存储空间

由上可知,无论哪个函数,包括系统显示的的容量,都不是U盘真正的容量,而且多出来的容量不同厂家的产品各不相同。笔者通过测试,发现多出来的容量和额定的容量在连续的地址空间,即多出来的部分紧接在额定的后面。

因此,有效的解决方法是:当清除到额定容量时,并不停止,继续清除,直到发生“写错误”时才退出清除过程。如果用这种解决方法,实际上获取容量是为了大概估算清除时间,在程序设计时进度条控件需要总量来计算进度的百分比,前面介绍的U盘容量获取的结果与真实容量差别不大,可以作为参考值。

5 代码实现

5.1 程序界面与控件布局

如图1所示。

5.2 搜索当前在线的U盘

因为U盘的数据清除与移动硬盘不同,U盘可以从逻辑的0扇区开始一直清除下去,也就是从活动分区DBR开始清除下去,U盘一般没有硬盘引导扇区MBR,即使有也可以进行清除,而移动硬盘不能从从MBR开始清除,因为MBR扇区里存有划分的多个分区的信息和整个硬盘的容量信息。从设备检测来说,U盘属于移动设备(DRIVE_REMOVABLE),而移动硬盘属性仍然是固定设备(DRIVE_FIXED)。

搜索当前在线的U盘列表的程序代码如下:

5.3 容量估算与显示

对List Box1的OnClick事件进行处理,一方面保证所处理的盘肯定是U盘,另一方面可以确认清除的目标盘无误,因为数据是永久性的清除,无法恢复。

事件处理程序如下:

5.4 数据清除

使用最为简单但是可靠有效的清除方式,就是从U盘的第一个扇区(逻辑序号为0的扇区),覆盖无效的数据一直到U盘的最后尾部。确定尾部的方法前面已经介绍过,一种是根据容量来确定覆盖的长度;另一种是根据覆盖的"写错误"发生时为止,这是清除U盘最干净的方式。

无论是按检测的U盘容量进行清除,还是进行超容量的试探性清除,最好是分段进行,以方便控制和进度显示。下面是一个通用数据清除的子程序,源代码如下:

说明:

(1)输入参数From Where和CleanSize必须是“每扇区字节数”(一般是512B)的整数倍。

(2)填充的数据可以根据用户自己的喜好定义,上述程序因篇幅只是简单地填充00。

(3)返回值是正确填充的容量,与输入参数CleanSize相比可判断该子程序执行的情况。

5.5 可靠性和稳定性

前述基本上解决了功能问题,在实际发布过程中,还要考虑很多可靠性和稳定性方面的问题。

(1)清除的过程最好使用线程。这样可以避免界面不响应的问题,线程中的完成情况,通过Delphi的Sychrinize过程传递到主界面上,不会发生死锁冲突。

(2)如果不使用线程,在调用CleanUSBDisk函数的循环间隙调用Application.ProcessMessages,可以让主界面有机会响应一些正常的消息。

(3)要考虑在程序非正常退出时还原工作环境,如打开的驱动器句柄要关闭、申请的内存要释放等。

6 结语

从U盘的结构和内部工作机制上对其进行了详细的剖析,从硬设备层和逻辑分区层对U盘进行完整的数据清除,原理也基本适用于移动硬盘。对于固定硬盘,不包含系统工作文档的逻辑分区也适用。其实际效果与专用清除设备没有差别,可扩展性上具有更大的灵活性,如对冗余容量的清除、用户自定义填充数据、清除效果扫描回显等。此外,有时U盘插入后,在资源管理器中并不显示盘符,但是在“控制面板”———“计算机管理”里可以检测到U盘,这时用硬设备名,如“.PHYSICALDRIVE1”(表示第二个存储设备),进行U盘数据清除,同时还可以修复U盘的异常故障。

程序只完成了最基本的实用功能,如图1所示,在Windows XP+Delphi 7下调试通过,清除效果通过专业测定。

参考文献

[1]http://msdn.microsoft.com

上一篇:妇科肿瘤患者下一篇:辅导员工作技能