DELPHI下的多线程程序设计

DELPHI下的多线程程序设计,第1张

我们知道 win 或winNT都是 多线程 的 *** 作系统 在DELPHI . 中 我们可以充分利用这一特性 编写出 多线程 的应用程序 对以往在DOS或 位windows下写程序的人来说 多线程 仍然是陌生的 但如同以前我们从DOS下的单任务过渡到windows . 下的多任务 如今我们又必须过渡到 多线程 领弯冲域 毕竟计算机时代是在不断发展的 不过 幸运的是 在DELPHI . 下进行多线程程序设计并不需要我们去学习庞大的WIN API函数 我们可以利用DELPHI下标准的多线程类TThread来完成我们的工作  TThread是一个abstract(抽象)类 也就是说 并不需要根据TThread来声明变量(而且根据TThread声明的变量也是完全无用) 我们要做的是把TThread作为基类 用继承的形式来生成子类 实际上 根据TThread来写多线程应用程序是非常容易的 下面就是一个基本的继承TThread生成的多线程类 QuerThrd.Pas unitQuerThrd interface uses Classes DBTables type TQueryThreadΚclass(TThread) private fQuery tQuery protected procedureExecute override public constructorCreate(Suspended Boolean Query TQuery) end implementation constructor TQueryThread.Create(Suspended Boolean Query TQuery) begin inheritedCreate(Suspended) fQuery ΚQuery FreeOnTerminate ΚTrue end procedureTQueryThread.Execute begin fQuery.Open end end. 在上面这个简单的例子中 我们构造了一个TThread的子类TQueryThread 用于在后台执行数据库查询 在该类的Create函数中 传递了两个参数Suspended和Query 其中Suspended用于控制线程的运行 如果Suspend为真 TQueryThread类的线程在建立后将立即被悬挂 一直到运行了Resume方法 该线程才会继续执行 Query参数用于接受一个已经存在的Query控件(在窗体中真正的Query控件)而使它在多线程的情况下运行 Execute是最重要的过程 它是类TQueryThread的执行部分 所有需要在这个多线程类中运行的语句都必须写在这个过程里 实际上构造自己的多线程类时 并不需要输入所有的这些代码 选择DELPHI的File菜单下的new选项 再选 TThreadObject 项埋裂歼目 DELPHI就会为你构造基本的程序模块 然后我们可以根据需要再做相应的修改 进程的执行 假设我们已经建立了一个窗体FORM 窗体中有我们将要使用的查询控件Query 那么我们在该单元的USES部分加入上面写的QuerThrd单元 procedureTForm .Button Click(Sender TObject) begin {建立一个运行的进程} TQueryThread.Create(False Query ) end 如果这个过程被执行 那么窗体中的查询控件Query 就会自动在多线程的环境下运行查询 注意TQueryThread类中只有Create而没有Free 动态建立类以后又忘记删除是我们常犯的错误之一 不过在这里由于我们指定了FreeOnTerminate(运行完即删除)为真 所以当Execute里的语句执行完后 TQueryThread类占据的内存控件将被自动释放 然而还有一个问题值得我们注意 由于同一时刻可以有多个线程同时运行 那么我们还必须解决好同步的问题 如果几个多线程程序之间没有任何关联 那么它们之间也不会有任何冲突 但实际上 可能同时源悄运行几个多线程的数据库应用程序 由于需要共享相同的数据库资源 我们还需要为Query 增加一个Tsession控件 其实 虽然我们也许没有亲自使用过Session控件 但实际上 在所有的数据库访问时DELPHI都会自动建立一个临时的Session控件 使用完后又动态地删除掉它 在平常的数据库编程时 用不着我们亲自来 *** 作 但在数据库多线程执行的情况下 为了不相互冲突 我们必须为每个数据库访问都定制自己的Session控件 这个步骤非常简单 我们只需要在窗体中增加一个Session控件 然后给它的属性 Sessionname 写一个任意的名字 并再在Query 的 Sessionname 中写一个相同的名字 这样我们的数据库程序就安全了 另一类需要解决同步问题的是那些对VCL资源进行 *** 作的程序 这类的程序非常多 好在解决的方法也非常简单 我们可以看下面这样一个程序 unitBncThrd interface uses WinProcs Classes Graphics ExtCtrls type TBounceThreadΚclass(TThread) private FShape TShape FXSpeed Integer FYSpeed Integer procedureMoveShape protected procedureExecute override public constructorCreate(Suspended Boolean Shape TShape XSpeed YSpeed Integer) propertyShape TShapereadFShape end implementation procedureTBouad.MoveShape var MaxHeight MaxWidth Integer begin withFShapedo begin Left ΚLeft+FXSpeed Top ΚTop+FYSpeed if(LeftΙ )or (Left+WidthΛParent.Width)then FXSpeed ΚFXSpeed*- if(TopΙ )or (Top+HeightΛParent.Height)then FYSpeed ΚFYSpeed*- end end procedureTBounceThread.Execute begin WhilenotTerminateddo begin Synchronize(MoveShape) end end constructorTBounceThread.Create(Suspended Boolean Shape TShape XSpeed YSpeed Integer) begin inheritedCreate(Suspended) FShape ΚShape FXSpeed ΚXSpeed {X轴走向的速度} FYSpeed ΚYSpeed {Y轴走向的速度} FreeOnTerminate ΚTrue end end. 这是一个多线程的碰碰球游戏 你可以有多个不同的球 它们分属不同的线程 各自独立的在屏幕上碰撞 显然 由于多个球运行的显示会同时 *** 作VCL资源 为了安全 我们在Execute过程中的执行部分加入了Synchronize(MoveShape)来调用MoveShape过程 实际上 在任何需要 *** 作VCL资源的地方 例如窗体 位图 都应加入Synchronize调用 执行时我们可以新建一个程序 然后在USES部分加入以上的BncThrd单元 再在它的窗体FORM 上加入两个Shape控件Shape 和Shape Shape 可以是一个矩形而Shape 是一个圆 加入以下的代码就可以让矩形和圆动起来 procedureTForm .Button Click(Sender TObject) begin TBounceThread.Create(False Shape ) TBounceThread.Create(False Shape ) end lishixinzhi/Article/program/Delphi/201311/25059

关于选课系统的设计 周 虹

摘要:随着课程改革的不断深入,学校规模不断扩大、课程项目不断增多,为了解决学生选课管理上的复杂的人工 *** 作,减轻重复工作,故设计了选课系统。学校规模的扩大使得学校对每年新生入学、毕业生离校及本校各种分流机制造成的学生信息产生变动,如学籍变动、个人信息修改。为了适应课程的改革,学校在每个学期都要开设一定的课程提供给学生,让学生根据自己的情况来选择,根据学生选择结果给出课程表。本校根据教学实际,为了使教师有效地管理学生信息,设计学生信息管理系统,培虚由此形成学生成绩管理系统,本文就此设计思路进行阐述。

关键词:选课系统 学生信息管理系统 数据流图 DFD图 E-R图 SC图 IPO图 Delphi软件

随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多高校的学生选课管理仍停留在复杂的人工 *** 作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的课程信息管理系统来提高管理工作的效率。基于互联网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性。

一、选课系统的任务概述

1. 目标

选课系统开发的目标是实现学生选课信息关系的系统化、规范化和自动化。

2. 系统技术

学生选课系统要求具有信息处理的开发性,方便教师上传学生成绩、学生上网选课和查询选课信息及成绩等,因此本系统设计为基于WWW的网络数据库应用系统,使用ASP脚本以Access为数据库的开发技术,运行在支持ASP的服务器上。

3. 基本设计概念和处理流程

采用基于SQL Server的分布式数据库管理系统。三层结构是目前用得最多的,这种结构比传统的C/S结构增加了一个应用程序服务器,应用程序服务器包括了统一的界面、业务规则和数据处理逻辑等等,这样客户端程序就可以做得比较小,也就是常说的瘦客户。更由于业务规则和数据处理逻辑的集中在服务器上统一管理,客户端无须进行复杂的计算,也不会因为错误的 *** 作而影响到其他的用户,所以可靠性、稳定性和效率都比较好。(其结构如图)

4. 用户的特点

为保证系统安全高效地运行,本系统把用户划分为3类:教务处、教师和学生。不同的用户在系统中的作用和权限也有所不同,所以它所需要完成的功能也就不同。

(1)教务处可以完成本系统所有的功能

学生信息管理:除学生基本信息外,还可管理学生所选课程、成绩等。

教师信息管理:包括教师个人的基本情况和任课情况。

项目及班数的设定:根据学校教务处所排课进行班级数及人数的统计,然后根据统计结果进行项目及班数的设定。

排课:根据上一步分班情况安排任课教师。

报表生成及输出:生成教师担任课程分班表、按项目生成学生成绩表、按学生行政班生成成绩表及所有报表的输出敏族。

(2)教师在本系统的功能

查询学生选课情况、自己任课情况、获取自己所担任课程分班表、录入及修改成绩等。

(3)学生在本系统的功能

查询本人信息、教师任课信息、选课、选课信息查询、成绩查询。

二、需求规定

(一)对功能的规定

1. 可实现学生选课注册。

2. 方便实现学生选课信息查询。

3. 可对学生成绩档案进行管理,成绩表单生成简便。

4. 安全有效的用户区分,管理。

5. 档案数据的高安全性,保密性。

6. 有帮助文档

(二)对性能的规定

使用稳定, *** 作性能好, *** 作方法易于掌握,系统的安全性强。

三、设计思想

用户的需求具体表现在对各种信息的提供、编辑、处理及查询统计上。这就要求数据库结构能充分满足各种信息的输入、处理和输出。通过分析学生选课管理系统的现实需求配拿燃,学生选课管理系统各环节的基本数据及数据处理流程,在与管理人员沟通、交流与探讨的基础上,得到以下学生选课系统的数据流程图。

(一)数据库的设计

通过对学生选课管理系统工作内容和相关数据流程分析,根据学生选课管理系统的需要,就可以设计出能满足用户需求的各种实体,以及它们之间的关系,由此得到数据库所支持的数据模型,即数据库的逻辑结构,具体情况如下:

1. 学生信息表

开学时将教务处提供的学生信息库按系统的要求修改库结构并导入Access数据库中,应包括如下信息:姓名、学号、院系、班级、性别、所选课程、任课教师、备注等。

2. 教师信息表

包括教师姓名、教师代码、性别、年龄、职称、主要教授课程、兼任课程等。

3. 课程信息

包括课程目录、课程、课程代码、教学内容、任务与目的、考试方法、要求等。

4. 课程表

包括课程名称、课程编号、任课教师、课程学分、上课时间。

5. 成绩单列表

包括学生姓名、学号、院系、班级、课程、任课教师、成绩。

(二)系统功能特点

1. 内容全面 系统全面覆盖了体育课信息,可为学校、教师和学生提供全面准确的信息。

2. 层次分明 系统采用模块化程序设计结构。各模块之间既相互独立,又具有一定的联系,各模块可独立编制、调试、查错、修改和执行,结构严谨,便于扩展和维护。

四、数据库概念设计

根据以上数据流图导出数据库所需数据项和数据结构。

学生:学号、姓名、性别、生日、所在院系、所在班级。

课程:课程号、课程名、讲师、上课时间、地点、课程简介。

选课结果:记录号、选课学生、所选课程。

学籍变更记录:记录号、变更情况、记录时间、详细描述。

1. 数据库逻辑结构设计

设计五个基本表:学生信息表、课程信息表、选课结果表、奖惩信息表、教师信息表。其中教师信息表是外部表,不列出。由于使用打开系统的不只是教务人员,每个学生都要登录到选课系统进行课程的选择,所以需要对不同的登录人员进行密码的认证和权限的限制,防止越权行为,用户名、密码、权限保存在一个表中。分别设计如下表:(具体内容略)

USER-PASS用户密码信息表

COURSE课程信息表

COURSE-SELECT选课结果表

STUDENT学生个人信息表

奖惩记录信息表

2. 概要设计

4. 选课模块详细设计说明书

功能:接受学生选课信息,刷新学生课程表。

界面:调用添加、删除模块,打印课表模块。

设计感想

通过这次实践,我对Delphi有了全新的认识。Delphi可以让你用最少的程序量来得到最高的开发效率,从而迅速地开发Windows的应用程序。开发者可按照自己的喜好及用户要求,随心所欲地安排窗口的外观。Delphi是以面向对象的方式设计程序代码的,有着面向对象的四大特征:封装性、可维护性、继承性和多态性。

当然,这个系统还有些地方需要修改和完善,我将在以后的时间里逐步学习改进。

参考文献:

〔1〕〔美〕Grady Booch,James Rumbaugh,Ivar Jacobson,UML用户指南.机械工业出版社,2001年8月.

〔2〕Microsoft,MSDN.

〔3〕Microsoft,SQL Server 2000联机手册.

〔4〕Roger S. Pressman.软件工程——实践者的研究方法.机械工业出版社,1997.

〔5〕IPL. Software Testing and Software Development Lifecycles. IPL,1996.

〔6〕Karl E. Wiegers.软件需求.机械工业出版社,1999.

〔7〕张海藩.软件工程导论.清华大学出版社.

http://www.google.cn/search?q=%E5%AD%A6%E7%94%9F%E9%80%89%E8%AF%BE%E7%A8%8B%E5%BA%8F+delphi%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1&sourceid=navclient-ff&ie=UTF-8&rlz=1B2GGFB_zh-CNCN278CN278


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12524028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存