VB .NET多线程编程的详细说明(完整版)

VB .NET多线程编程的详细说明(完整版)
VB .NET多线程编程的详细说明(完整版)

VB .NET多线程编程的详细说明

作者:陶刚整理:https://www.360docs.net/doc/b411365505.html, 更新时间:2011-4-1

介绍

传统的Visual Basic开发人员已经建立了同步应用程序,在这些程序中事务按顺序执行。尽管由于多个事务多多少少地同时运行使多线程应用程序效率更高,但是使用先前版本的Visual Basic很难建立这类程序。

多线程程序是可行的,因为操作系统是多任务的,它有模拟同一时刻运行多个应用程序的能力。尽管多数个人计算机只有一个处理器,但是现在的操作系统还是通过在多个执行代码片断之间划分处理器时间提供了多任务。线程可能是整个应用程序,但通常是应用程序可以单独运行的一个部分。操作系统根据线程的优先级和离最近运行的时间长短给每一个线程分配处理时间。多线程对于时间密集型事务(例如文件输入输出)应用程序的性能有很大的提高。

但是也有必须细心的地方。尽管多线程能提高性能,但是每个线程还是需要用附加的内存来建立和处理器时间来运行,建立太多的线程可能降低应用程序的性能。当设计多线程应用程序时,应该比较性能与开销。

多任务成为操作系统的一部分已经很久了。但是直到最近Visual Basic程序员才能使用无文档记录特性(undocumented)或者间接使用COM组件或者操作系统的异步部分执行多线程事务。.NET框架组件为开发多线程应用程序,在System.Threading名字空间中提供了全面的支持。

本文讨论多线程的好处以及怎样使用Visual Basic .NET开发多线程应用程序。尽管Visual Basic .NET和.NET框架组件使开发多线程应用程序更容易,但是本文作了调整使其适合高级读者和希望从早期Visual Basic转移到Visual Basic .NET的开发人员。

多线程处理的优点

尽管同步应用程序易于开发,但是它们的性能通常比多线程应用程序低,因为一个新的事务必须等待前面的事务完成后才能开始。如果完成某个同步事务的时间比预想的要长,应用程序可能没有响应。多线程处理可以同时运行多个过程。例如,字处理程序能够在继续操作文档的同时执行拼写检查事务。因为多线程应用程序把程序分解为独立的事务,它们能通过下面的途径充分提高性能:

l 多线程技术可以使程序更容易响应,因为在其它工作继续时用户界面可以保持激活。

l 当前不忙的事务可以把处理器时间让给其它事务。

l 花费大量处理时间的事务可以周期性的把时间让给其它的事务。

l 事务可以在任何时候停止。

l 可以通过把单独事务的优先级调高或调低来优化性能。

明确地建立多线程应用程序的决定依赖于几个因素。多线程最适合下面的情况:

l 时间密集或处理密集的事务妨碍用户界面。

l 单独的事务必须等待外部资源,例如远程文件或Internet连接。

例如,某个应用程序跟随Web页面上的链接并下载符合特定条件的文件。这种应用程序可以同步一个接一个地下载文件或者使用多线程在同一时刻下载多个文件。多线程的方法比同步方法的效率高得多,因为即使某些线程从远程Web服务器上接收到的响应很慢,文件也可以被下载。

建立新线程

建立线程的最直接的方法是建立线程类的一个新的实例并且使用AddressOf语句替你希望运行的过程传递一个委托。例如下面的代码运行一个作为单独的线程的叫做SomeTask的子过程。

这就是建立和启动线程的全部工作。调用线程的Start方法后面的任何代码立即执行,不需要等待前面线程的结束。

下表是你能使用的控制单独线程的方法:

上面的大多数方法字面上容易理解,但是安全点(safe point)的概念对你来说可能是新的。安全点是代码中的某个位置,在这个位置通用语言运行时可以安全地执行自动无用单元收集(garbage collection,释放无用变量并恢复内存的过程)。当调用线程的Abort或Suspend方法时,通用语言运行时分析代码,决定线程停止运行的适当位置。

下表是线程的一些常用的属性:

当建立和管理线程时它的属性和方法很重要。本文的"线程同步"部分将讨论你怎样使用这些属性和方法控制和调整线程。

线程参数和返回值

前面例子中的线程调用没有参数和返回值。这是使用这种方法建立和运行线程的主要缺点之一。但是,你可以在类或结构体中包装线程,为运行在单独线程上的过程提供和返回参数。

手工建立和管理线程最适合于希望很好地控制细节(例如线程的优先级和线程模型)的应用程序。你可能想象,通过这种方法管理大量的线程是很困难的。在你需要很多线程时考虑使用线程池来减小复杂程度。

线程池

线程池是多线程的一种形式,在它里面,事务被添加到一个队列,并随着线程的建立自动启动。有了线程池,你使用希望运行的过程的委托调用Threadpool.QueueUserWorkItem方法,Visual Basic .NET就建立线程并运行该过程。下面的例子演示了怎样使用线程池启动几个事务:

当你需要启动很多单独事务而不需要单独设置每个线程的属性时,线程池是很有用的。每个线程使用默认的栈大小和优先级启动。默认情况下,每个系统处理器可以运行高达25个线程池线程。超过限制的线程可以排队,但是直到其它线程结束才能启动。

线程池的一个优点是你能把状态对象中的参数传递给每个事务过程。如果调用的过程需要一个以上参数,你可以把一个结构体或类的示例转换为Object数据类型。

参数和返回值

从线程池线程返回值有点棘手。从函数调用返回值的标准方法在这儿是不允许的,因为Sub过程是能被线程池排队的唯一过程类型。提供参数和返回值的途径是把这些参数,返回值和方法包装进一个包装类。提供参数和返回值的一个更简单的方法是使用QueueUserWorkItem方法的ByVal状态对象变量。如果使用该变量传递引用给类的一个实例,实例中的成员能被线程池线程修改并作为返回值使用。起先可以修改值传递的变量所引用的对象是不明显的,由于只有对象引用被值传递了,它才是可能的。当你修改对象引用引用的对象的成员时,改变应用到实际类的实例。

结构体不能用于在状态对象内部返回值。因为结构体是值类型的,异步处理做的改变不会改变原结构体的成员。当不需要返回值时使用结构体提供参数。

通用语言运行时自动为排队的线程池事务建立线程,当这些事务完成时释放这些资源。一旦事务被排队了,这就不是取消事务的容易的方法了。ThreadPool线程使用多线程单元(MTA)线程模型运行。如果你希望线程使用单线程单元模型(STA)运行,必须手工建立线程。

线程同步

同步提供了多线程编程的无组织特性和同步处理的有组织次序之间一种折衷的方法。使用同步技术能够达到的目标:

l 在事务必须按特定次序执行的时候,明确地控制代码运行的次序。

l 当两个线程在同一时刻共享相同的资源的时候防止错误的发生。

例如,你可以使用同步来引发一个显示过程等待另一个线程上运行的数据检索过程结束。

有两种同步的途径,轮询(polling)和使用同步对象。轮询是从某个循环中周期性地检查异步调用的状态。轮询是管理线程的效率最低的方法,因为它周期性检查多样线程属性的状态,浪费了资源。

例如当轮询查看某个线程是否终止时会使用IsAlive属性。使用这个属性必须注意,因为有效的线程不是一定运行的。你可以使用ThreadState属性获得线程状态的更多详细信息。因为在给定的时刻线程可能有一个以上的状态,ThreadState中存储的值可能是System.Threading.Threadstate枚举中值的组合。因此轮询时你必须仔细检查所有的相关线程状态。例如,如果线程的状态显示它不是Running的,它有可能结束了。另一方面,它也可能挂起或休眠了。

你可以想象,轮询为了换取对线程次序的控制牺牲了多线程的一些优点。效率更高的途径是使用Join方法控制线程。Join引发调用过程等待一个线程完成或者超时(如果指定了超时值)。Join这个名字基于建立新线程,它是执行路径中的分叉。你使用Join方法把单独的执行路径合并成单个线程。

图1.线程

有一点必须清楚,Join是同步的或阻塞的调用。一旦你调用Join或等待句柄的等待方法,调用过程会停止并等待线程发出完成信号。

这些简单的控制线程的方法对管理少量的线程是有用的,但是在大型项目中使用困难。下一部分讨论用于同步的一些高级技术。

高级同步技术

多线程应用程序通常使用等待处理和监视对象来同步多个线程。下表是.NET框架组件中能用于同步线程的一些类:

等待句柄

等待句柄是把某个线程的状态信号发送给另一个线程的对象。当线程需要独占访问某种资源时,它们可以使用等待句柄通知其它线程。其它线程必须等待这些资源,直到等待句柄不再使用。等待句柄有两

种状态:signaled和nonsignaled。不属于任何线程的等待句柄状态为signaled。属于某个线程的等待句柄的状态是nonsignaled。

线程通过调用一个等待方法(例如WaitOne、WaitAny或WaitAll)来请求等待句柄的所有权。等待方法也是阻塞调用,与独立线程的Join方法类似。

l 如果其它线程没有拥有等待句柄,该调用立即返回True,等待线程的状态变为nonsignaled,拥有等待句柄的线程继续运行。

l 如果某个线程调用等待句柄的一个等待方法,但是等待句柄属于另一个线程,发出调用的线程要么等待一个特定时间(如果指定了超时值)或者等待不确定的时长(没有指定超时值)直到其它线程释放等待句柄。如果设置了超时值并且等待句柄在期满前被释放了,该调用将返回True。否则,该调用返回False,发送调用的线程继续运行。

当拥有等待句柄的线程完成后或者它们再也不需要等待句柄时,它们调用Set方法。其它线程可以通过调用Reset方法或WaitOne、WaitAll、WaitAny把等待句柄的状态复位成nonsignaled,并且成功地等待某个线程调用Set。当某个等待线程被释放后系统自动把AutoResetEvent句柄复位成nonsignaled。如果没有线程在等待,该事件对象的状态仍然为signaled。

Visual Basic .NET中通常使用三类等待句柄:互斥对象、ManualResetEvent和AutoResetEvent。后两种通常用于同步事件。

互斥对象

互斥对象都是同步对象,它们只能在一个时刻由一个线程拥有。实际上,互斥这个名字衍生自互斥对象的所有权是相互排斥的。当线程请求独占访问某种资源时,它们请求互斥对象的所有权。因为在某个时刻只有一个线程能拥有一个互斥对象,其它线程在使用资源前必须等待互斥对象的所有权。

WaitOne方法引发一个调用线程等待互斥对象的所有权。如果拥有互斥对象的线程正常终止,该互斥对象的状态就被设置为signaled,下一个线程获得它的所有权。

同步事件

同步事件用于通知其它的线程发生了某种事情或者某种资源可用。不要被它使用了"事件"这个词迷惑了。同步事件与其它的Visual Basic事件不同,它是真正的等待句柄。与其它的等待句柄类似,同步事件有两种状态signaled 和nonsignaled。调用同步事件的某个等待方法的线程必须等待,直到其它线程调用Set 方法给事件发信号。有两个同步事件类。线程使用Set方法把ManualResetEvent实例的状态设置为signaled。线程使用Reset方法或控制返回等待WaitOne调用把实例的状态设置为nonsignaled。AutoResetEvent类的实例也可以使用Set设置为signaled,但是只要通知等待线程事件变为signaled,它们自动返回到nonsignaled。

下面的例子使用AutoResetEvent类同步线程池事务。

监视对象和同步锁

监视对象确保代码块的运行不被运行在其它线程中的代码打断。换句话说,其它线程中的代码不能运行,直到被同步的代码块结束。在Visual Basic .NET中使用SyncLock关键字来简化监视对象的访问。在Visual C# .NET中使用Lock关键字。

例如,假定你有一个程序,它重复地、异步读取数据并显示结果。使用优先多任务操作系统,正在运行的线程可以因为操作系统允许其它的线程运行而被打断。如果没有同步,数据正在显示时,显示数据的对象被其它的线程修改,有可能得到的是部分更新的数据视图。SyncLock保证一段代码持续运行,不被打断。下面的例子显示了怎样使用SyncLock给显示过程提供数据对象的独占访问。

当有一段代码不能被某个独立的线程中运行的代码打断时使用SyncLock。

Interlocked类

你可以使用Interlocked类的方法防止多个线程同时更新或比较同一个值的问题发生。这个类的方法让你安全地增加、减少、交换和比较来自任何线程的值。下面的例子演示了怎样使用Increment方法增加一个运行在独立线程上的多个过程共享的变量的值。

ReaderWriter锁

在有些情况下,你可能希望只在写数据时锁定资源,在数据没有更新完前允许多个客户同时读数据。某个线程正在修改资源时,ReaderWriterLock类加强了对该资源的独占访问,但是允许读取资源的非独占访问。ReaderWriter锁是排他锁的一个有用的备选方案,排他锁引起其它线程等待,即使这些线程不需要更新数据。下面的例子演示了怎样使用ReaderWriter调整来自多个线程的读和写操作。

死锁

在多线程应用程序中线程同步是无价之宝,但是始终有多个线程彼此等待的死锁的危险。类似汽车停在四条路上,彼此等待对方前进,死锁使所有动作停止。不用说,避免死锁很重要。有很多种途径会造成死锁,同样有多种方法可以避免它们。尽管本文没有足够的篇幅讨论死锁相关的问题,但是重要的一点是细心计划是避免死锁的关键。你可以在开始编码前用图解法表示应用程序,预计死锁的情形。

线程计时器

Threading.Timer类对于在独立的线程上周期性地运行事务是很有用的。例如,你可以使用线程计时器检查数据库的状态和完整性或者备份关键文件。下面的例子每两秒启动一个事务,并使用一个标记来初始化停止计时器的Dispose方法。这个例子把状态发送到输出窗口,因此在测试代码前你可以通过按Control+Alt+O使窗口可见。

取消事务

多线程的优点之一是应用程序的用户界面保持响应时,事务可以在其它的线程上运行。同步事件和作为标记的字段通常用于通知其它线程你希望停止它。下面的例子使用同步事件取消一个事务。为了使用这个例子,给项目添加下面的模块。调用StartCancel.StartTask()启动一个线程,调用StartCancel.CancelTask()取消一个或多个正在运行的线程。

结论

多线程处理是可伸缩的、容易响应的应用程序的关键。Visual Basic .NET支持加强的、多线程开发模型,它使开发者迅速拥有了开发多线程应用程序的能力。

l Visual Basic .NET使用新的.NET框架组件类,它使建立多线程应用程序更容易。

l 记住尽管多线程能提高性能,但是每个线程有建立线程需要的附加内存和保持它运行需要的处理器时间的花消。

l 线程的属性和方法控制着线程间的交互操作,并且决定什么时候资源可以给运行的线程使用。

l 尽管多线程看起来带来了混乱,但是你可以使用同步技术控制正在运行的线程。

l 尽管多线程增加了应用程序的复杂性,但是它通过高效率分配可用资源提高了应用程序的可伸缩性。

使用本文讨论的技术,你可以开发和处理处理器密集型事务的专业应用程序。

操作系统源代码

#include<stdio、h> #include<time、h〉 #include

?printf(”\nCan't open%s in mode %s、",); ?errorMessage(); } } void makeFreeNode(structfreeList **empty,int startAddress,in tsize) /*根据参数startAddress、size创建空闲节点,由empty指针返回*/ { ?if((*empty= malloc(sizeof(struct freeList)))== NULL) ?{ ?printf("\nNot enough toallocatefor the freenode 、”); ??errorMessage(); } ?(*empty)—>startAddress =startAddress; ?(*empty)-〉size= size; (*empty)-〉next = NULL; } void iniMemory(void) /*初始化存储空间起始地址、大小*/ { ?char MSA[10],MS[10]; ?printf(”\nPlease input the start address ofthe memory!");?scanf(”%s”,MSA); ?memoryStartAddress= atoi(MSA); ?printf(”\nPleaseinputthesize ofthe memory !”); scanf(”%s",MS); memorySize= atoi(MS); } char selectFitMethod(void) /*选择适应算法*/ { ?FILE*fp; char fitMethod; ?do{ ?printf(”\n\nPlease input a char as fallow toselect the fit method!\ ???\n 1(Best fit)\ ?\n 2 (Worst fit) \ ?\n 3 (First fit) \ ?\n 4 (Last fit)\n");

VBNET各种常用函数

(1) https://www.360docs.net/doc/b411365505.html,函数库的名称空间和模块 Conversion 转换函数 DateAndTime 日期和时间函数 Strings 字符串函数 VbMath 随机函数 (2) 基础类库中的名称空间和类 引用名称空间的方法: 项目引用新建一个项目时,https://www.360docs.net/doc/b411365505.html,根据所建项目类型,自动导 入部分名称空间的引用 直接引用给出名称空间的全名,就可访问其中的任一个类及其 各项内容 例使用Math类开方函数sqrt: Label1.Text = system.Math.sqrt(100) Imports语句导入在代码中就可直接使用名称空间的类或成员。 导入语句的格式:Imports 名称空间

数学函数 .NET中的数学函数包含在Math类。使用前在模块的开头用语句Imports System.Math导入 Rnd函数返回0和1(包括0但不包括1)之间的双精度随机数. 每次运行时,要产生不同序列的随机数,先执行Randomize 语句。产生a~b的之间的随机整数:Int(Rnd *(b-a)+a)

(1) Chr和Asc函数互为反函数。 (2) Str函数将非负数值转换成字符类型后,会在转换后的字符串左边增加一空格。 (3) Val将数字字符串转换为数值类型,当字符串中出现数值类型规定的字符外的字符,则停止转换,函数返回的是停止转换前的结果。例如表达式: Val("-123.45ty3")结果为-123.45。 (4) CDdate函数将以日期型表达式转换成日期类型。例如表达式:CDate("2005/5/12")结果为日期类型 https://www.360docs.net/doc/b411365505.html,中还有其他类型转换函数,例如,CInt、CBool、CSng、CStr等,详细例子查阅帮助功能。 日期函数 计算从当前日期到2007年6月30日有多少天?表达式为: DateDiff("d", Now, #6/30/2007#)

VB程序设计课后习题答案(科学出版社)

同步练习1 二、选择题 01——05 CADAB 06——10 ACDAB 11——15 CBDBB 同步练习2 二、选择题 01——05 ABDCA 06——10 CACBC 11——15 DADAD 16——20 BDBBB 三、填空题 1.可视 2.LEFT、TOP、WIDTH、HEIGHT 3.按字母顺序 4.查看代码 5.工具、编辑器 6.FORM窗体、FONT 7.MULTILINE 8.在运行时设计是无效的 9.工程、工程属性、通用、FORM1.SHOW 10.TABINDEX、0 同步练习3 二、选择题 01——05 BCADB 06——10 ADBBC 11——15 DBCBA 16——20 BAABB 三、填空题 1.整型、长整型、单精度型、双精度型 2.SIN(30*3.14/180)+SQR(X+EXP(3))/ABS(X-Y)-LOG(3*X) 3.164、今天是:3-19 4.FALSE 5.-4、3、-3、3、-4、4 6.CDEF 7.(X MOD 10)*10+X\10 8.(35\20)*20=20 ( 35 \ 20 )* 20 = 20 9.X MOD 3=0 OR X MOD 5=0 10.27.6、8.2、8、1、100、397、TRUE、FALSE 同步练习4 一、选择题 01——05 DBCAD 06——10 CBBAB

11——15 D25BAC 16——20 CBACB 21——25 DAABC 二、填空题 1.正确性、有穷性、可行性、有0个或多个输入、有1个或多个输出2.1 2 3 3.X>=7 4.X

系统后台操作手册

手册目录 1、登录后台管理系统..................................... 错误!未定义书签。 登录后台............................................. 错误!未定义书签。 后台管理界面介绍..................................... 错误!未定义书签。 2、修改网站基本信息..................................... 错误!未定义书签。 修改管理员密码....................................... 错误!未定义书签。 更新缓存............................................. 错误!未定义书签。 网站名称,BANNER 修改。............................... 错误!未定义书签。 3、栏目管理............................................. 错误!未定义书签。 添加栏目............................................. 错误!未定义书签。 修改栏目............................................. 错误!未定义书签。 添加子栏目........................................... 错误!未定义书签。 删除栏目............................................. 错误!未定义书签。 4、文章管理............................................. 错误!未定义书签。 添加文章................................................. 错误!未定义书签。 文章管理(删除,修改)................................... 错误!未定义书签。 文章回收站管理........................................... 错误!未定义书签。 5、留言本管理........................................... 错误!未定义书签。 6、其他管理(友情链接,调查等)......................... 错误!未定义书签。 友情连接管理............................................. 错误!未定义书签。 添加友情链接......................................... 错误!未定义书签。 修改友情链接信息..................................... 错误!未定义书签。

《VB程序设计》习题答案-林卓然编著

《VB语言程序设计》教材 林卓然编著 《VB程序设计》习题参考答案 第1章习题 一、单选题 1.D 2.B 3.C 4.A 5.C 6. A 7.A 8.B 9.C 10.(1)A (2)B 二、多选题 1.ACDE 2.BCDE 3.CD 4. CE 三、填空题 1.事件驱动 2.解释,编译 3.设计,运行,中断 4. 属性,方法,事件 5. Command2_Click 6. 中央,代码 7.MyForm.frm 8. (1)Cmd1_Click() (2)Print "VB语言程序设计" 编程及上机调试 1. 按要求设置窗体属性 2.在窗体上建立一个标签Label1。程序代码如下: Private Sub Form_Click() Label1.Caption = "你单击了窗体" End Sub Private Sub Form_DblClick() Label1.Caption = "你双击了窗体" End Sub 3.在窗体上建立两个文本框Text1(输入数)、Text2(输出数)和一个命令按钮Command1。两个文本框的Text属性均为空。 Private Sub Command1_Click() Dim x As Single x = Val(Text1.Text) Text2.Text = 15 * x End Sub 第2章习题 一、单选题 1.①D,②D 2.①A,②C 3.A 4.B 5.B 6.B 7.C 8.D 9.B 10.B 11.A 12.A 13.B 14.A 15.B 16.A 17.B 二、多选题 1.BD 2.CD 3.AC 4. AD 三、填空题 1.(1) Sin(50*3.14159/180) (2) (2+x*y)/(2–y*y)

详细设计文档 (含系统说明书,源代码说明书)

东北师范大学 外语培训机构数据库详细设计文档 雷蕾张丽云丁鼎孔祥楠 2009-11-1

目录 第一章引言 (1) 1.1项目说明 (1) 1.2文档目的 (1) 1.3参考资料 (1) 第二章设计流程图 (3) 2.1注册功能流程图 (3) 2.2用户登录功能流程图 (4) 2.3搜索课程功能流程图 (5) 2.3前台用户下载资料或留言功能流程图 (5) 2.3后台管理员功能流程图 (6) 第三章类规格说明 (7) 2.1模块类图 (7) 3.2 jsp页面说明 (8) 3.3类说明 (10) 第四章程序设计说明 (15)

第一章引言 1.1项目说明 1、在互联网络高速发展的今天,网站是企业在因特网上全面介绍公司信息的一个发布平台:可以把任何想让人们知道的东西放入网站,如公司简介、公司的厂房、生产设施、研究机构、产品的外观、功能及其使用方法等,都可以展示于网上。 2、网站树立培训机构形象,让别人看到自己,展示培训机构的实力。培训机构就能够在国内和世界"亮相",无疑是一种宣传机构、产品和服务的机会。从广告意义上看,培训机构网站事关机构形象建设,没有网站也谈不上机构形象。 3、主动抢占先机,培训机构建设自己的网站,这是时代发展的必然,任何一家培训机构要想跟上时代发展的潮流,必须要有展示自己的一个信息平台。为了不被竞争对手建立网站抢占先机,为了不落后于时代潮流,应该考虑建站的必要性。 4、可以扩大业务范围,可以与潜在客户建立商业联系:这是该网址最重要的功能之一,也是为什么那么多的国外企业非常重视网站建设的根本原因。现在,世界各国大的采购商主要都是利用互联网络来寻找新的产品和新的供应商,因为这样做费用最低,效率最高。原则上,全世界任何地方的人,只要知道了公司的网址,就可以看到公司的产品。因此,关键在于如何将公司网址推介出去。一种非常实用而有效的方法是将公司的网址登记在全球著名的搜索引擎(如Google,百度,雅虎等)上,并选择与公司的产品及服务有关的关键字,则可以使潜在的客户能够容易地找到公司和产品。这正是国际商业上通行的做法,而且被实践证明是十分有效的。 5、给广大热爱外语,渴望了解外语信息的群体提供一个方便快捷的平台。 1.2文档目的 该文档的阅读群体是该项目组的全部成员,为了让所有成员能对本网站的数据库构成,数据流向有个深刻的了解,方便在以后的编程中合理运用。 1.3参考资料 数据库原理及应用教程2版 北京人民邮电出版社 著者:陈志泊王春玲 数据库原理与应用 北京清华大学出版社 著者:狄文辉宋真君白劲波

商业管理系统源码操作手册

本源码下载地址:https://www.360docs.net/doc/b411365505.html,/ 目录┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄1 一、系统硬件安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄3 A、网络布线┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄3 1、设计布线方案┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄3 2、选择网络材料┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄3 3、抗干扰措施┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄3 4、施工要求┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄4 5、布线完成┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄5 B、设备安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄5 1、前台收款机基本安装(****收款机)┄┄┄┄┄┄┄┄┄┄┄┄┄5 2、系统设置┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄5 3、系统自检┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄5 4、注意事项┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄6 二、软件安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 A、系统软件安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 1、在服务器上安装 NT ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 2、在服务器上安装 NTPACK ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 3、在服务器上安装 SQL SERVER┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 4、在服务器上安装调制解调器┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄7 B、用户软件安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 后台商业管理系统┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 1)后台进销存系统安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 2)DELPHI 系统 BDE 安装┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 3)BDE 配置┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 4)安装过程可能存在问题┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄9 5)新用户使用本系统的基本流程(后台)┄┄┄┄┄┄┄┄┄┄┄10前台销售系统┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄12 1) 前台软件的配置文件┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄12

VB常用函数表

ASP纯ASP VBscript常用函数: 1.数值型函数: abs(num): 返回绝对值 sgn(num): num>0 1; num=0 0; num<0 -1;判断数值正负 hex(num): 返回十六进制值直接表示:&Hxx 最大8位 oct(num): 返回八进制值直接表示:&Oxx 最大8位 sqr(num): 返回平方根num>0 int(num): 取整int(99.8)=99; int(-99.2)=100 fix(num): 取整fix(99.8)=99; fix(-99.2)=99 round(num,n): 四舍五入取小数位round(3.14159,3)=3.142 中点数值四舍五入为近偶取整round(3.25,1)=3.2 log(num): 取以e为底的对数num>0 exp(n): 取e的n次幂通常用num^n sin(num): 三角函数,以弧度为值计算(角度*Pai)/180=弧度con(num); tan(num); atn(num) 2.字符串函数: len(str):计算字符串长度中文字符长度也计为一! mid(str,起始字符,[读取长度]):截取字符串中间子字符串 left(str,nlen):从左边起截取nlen长度子字符串 right(str,nlen):从右边起截取nlen长度子字符串 Lcase(str):字符串转成小写 Ucase(str):字符串转成大写 trim(str):去除字符串两端空格 Ltrim(str):去除字符串左侧空格 Rtrim(str):去除字符串右侧空格 replace(str,查找字符串,替代字符串,[起始字符,替代次数,比较方法]):替换字符串 注:默认值:起始字符1;替代次数不限;比较方法区分大小写(0)

代码说明书

系统编码规范 1.目的 为了统一开发过程中关于代码编写时的编写规范和具体开发工作时的编程规范,保证代码的一致性,便于交流和维护,特制定此规范。 2.适用范围 本规范适用于开发组全体人员,为详细设计,代码编写和代码审核提供参考和依据。 3.代码格式 在编写代码过程中,建议遵循以下规则。 (1)缩进规则:使用四个空格作为每层次代码的缩进值。 (2)在括号对对齐的位置垂直对齐左右括号,如: For(i=0;i++) { …. } (3)沿逻辑结构行缩进代码,如:

If…then If…then … Else … End if Else … End if (4)为了防止在阅读代码时左右滚动代码编辑器,每行代码或注释不得超过一个显示屏。 (5)当一行分别为几行时,通过将串联运算符放在每行的末尾而不是开头,清楚地表示没有后面的行是不完整的。 (6)Case 规则:default case 总应该存在,如果不允许到达,则应该保证:若到达了就会触发一个错误。Case的选择条件最好使用int或string类型。 (7)对齐规则:变数的申明和初始化都应对齐。

4.注释规范 4.1. 块注释 //用户名非空 验证+长度验证 +合法性验证 function checkUserName(){ var name = document.myform1.txtUser; if(name.value==""){ alert("请输入用户名"); name.focus(); return false; }else if(name.value.length<4||name.value.length>16){// 用户名长度验证 alert("用户名输入的长度4-16个字符"); name.select(); return false; } 4.2. 行注释 用户名非 空验证+长 度验证+合 法性验证 function checkUserName(){ var name = document.myform1.txtUser; if(name.value==""){ alert("请输入用户名"); name.focus(); return false; }else if(name.value.length<4||name.value.length>16){//用户名 长度验证 alert("用户名输入的长度4-16个字符"); name.select(); return false;

源代码使用许可协议

________源代码使用许可合同 甲方:用友软件股份有限公司乙方: 法定地址:法定地址: 法定代表人:法定代表人: 联系电话:联系电话: 鉴于: 1、甲方设计开发了________软件,依法对________源代码享有著作权; 2、乙方希望获得________源代码的使用许可,甲方同意授予乙方对________源代码的使用 许可。 为此,甲乙双方就________源代码的使用许可事项达成如下一致: 第一条使用许可授权 1.1“________源代码”是指版本号为____的________软件的部分或全部源代码。 1.2“衍生软件”是指以________源代码为平台开发生成的软件产品,不包括源代码本身 及通过源代码编译生成的目标代码。 1.3授予使用许可权及限制 根据本合同约定的条款及条件,甲方同意授予、乙方同意接受对________源代码的非专有的、不可转让的使用许可,乙方可在如下情况下使用________源代码:(1)对以________软件为平台的开发衍生软件而进行的开发调试;(列举内容仅供参考,具体使用范围请业务部门根据实际确定。) 1.4许可使用期限:自______年___月__日至_____年___月__日止。 第二条保密条款 2.1“保密信息”指________源代码、________开发平台教程、本合同及其所有附件和 补充文件,以及其他由甲、乙方各自专有的、且提供给对方的并明确标有“保密”字 样的信息。 2.2双方同意严格按照本合同的规定使用对方的保密信息,未经对方的事先书面许可,不 得向第三方,或允许向第三方直接或间接地透露保密信息。双方同意:

2.2.1对保密信息保密,并采取所有必要的预防措施(包括但不限于双方采取的用 于保护自身保密信息的措施)防止未经授权地使用及透露保密信息。 2.2.2不得向第三方提供保密信息或由保密信息衍生的信息。 2.2.3除了本合同确定的使用范围外,不得在其他任何时候使用保密信息。 2.3甲乙双方不负责保护以下信息: 2.3.1已公开的信息。 2.3.2由另一方从不受保密限制的第三方获得的信息。 2.3.3未参考保密信息而由另一方独立开发的信息。 2.3.4依据法律的规定或根据法律赋予的权力可以获取此信息的司法、政府机构的 要求必须公开的信息。接到此类要求后的一方,应立即通知另一方,使另一 方了解将要披露的内容并提出意见。 2.4本合同约定的双方所承担的保密义务不因本合同的变更、终止而终止,如双方没有对 保密期限加以规定,则直至保密信息在本行业中成为公知信息后,本合同约定的保密 义务才予以解除。 2.5甲乙双方同意,以适当方式告知并要求各自能接触到保密信息的员工遵守本条约定, 若其员工违反本条约定,应承担连带责任。 第三条交付 3.1本合同签订__日内,甲方以光盘形式向乙方指定人员提供________源代码和________ 开发平台教程各一份。 3.2乙方应及时查收,核对无误后,应向甲方出具书面收讫证明。 第四条技术支持和新版________源代码的提供 4.1甲方同意按甲方当时技术支持政策,在乙方按规定支付技术支持费用后,向乙方提供 与________源代码有关的技术支持。 4.2如甲方发布新版________,经乙方书面申请,甲方应在接到乙方申请__日内,向乙方 提供该新版______源代码以及________开发平台教程,并支付相应的使用许可费。注:如甲方发布新版源代码,经乙方申请后,除提供开发平台教程外是否需要向乙方提供 该新版源代码?如是,请注明,并请注明提供新版源代码及开发平台教程所需费用及 其支付方式。

《VB程序设计》考试题型练习 答案

《VB 程序设计》考试题型练习 一. 填空 1. VB 中的对象具有 属性 、 事件 、和 方法 三种特性,它们是构成对象的三个基本要素。 2. VB 中的常量分为哪三种: 文字常量 、 符号常量(用户自定义常量) 系统内部常量 。 3. 变量的三要素是指: 变量的名 、 变量的数据类型 、 变量的值 。 4. VB 中日期型数据的表示格式为: #mm/dd/YYYY#或#mm-dd-YYYY# 。 5. 在VB 中,“\”是 整除 运算符;“/”是 浮点除 运算符。两个字符串可以使用连接符 &或+ 串接起来。 6. 2 22z y x z y x ++++的VB 表达式为 (x+y+z )/sqr(x^2+y^2+z^2) 。 7. a ac b b 242-+的VB 表达式为 (b+sqr(b^2-4*a*c))/(2*a) 。 8. 计时器控件的 Interval 属性用于设置Timer 事件发生的时间间隔,为了使计时器控件Timer1每隔0.5秒触发一次Timer 事件,应将该属性设置为 500 ;为了暂时关闭计时器,应把该计时器的 Enable 属性设置为False 。 二. 单选题 1. 如果要使VB 程序运行时不能对文本框中的内容进行编辑,需将文本框的哪个属性设置为True ( D )。 A )MultiLine B )Visible C )TabStop D )Locked 2. 表达式Right("asdf", 2)+Ucase("as" )的值为( A )。 A )dfAS B )asAS C )dfas D )asas 3. 执行如下语句: a =InputBox("Today", "Tomorrow", "Yesterday") 将显示一个输入对话框,在对话框的输入区中的默认值是( C )。 A) Today B) Tomorrow C) Yesterday D) Today Tomorrow Yesterday 4. 设a=3,b=5,则以下表达式值为真的是( B )。 A) a>=b And b>10 B) (a>b) Or (b>0) C) (a<0) Or Not (b>0) D) (-3+5>a) And (b>0)

源代码是什么

源代码是什么 源代码(也称源程序),是指一系列人类可读的计算机语言指令。在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。 代码组合 源代码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程序不必用同一种格式的源代码书写。例如,一个程序如果有C语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。较为复杂的软件,一般需要数十种甚至上百种的源代码的参与。为了降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。还有另外一种组合:源代码的编写和编译分别在不同的平台上实现,专业术语叫做软件移植。 质量 对于计算机而言,并不存在真正意义上的“好”的源代码;然而作为一个人,好的书写习惯将决定源代码的好坏。源代码是否具有可读性,成为好坏的重要标准。软件文档则是表明可读性的关键。 作用 源代码主要功用有如下2种作用: 生成目标代码,即计算机可以识别的代码。 对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。

图书馆管理系统源代码

源程序清单 1、文件名 login(login.frm) 功能说明:整个系统的登陆界面,需要输入用户名和登陆密码才能进入到系统中,进行借阅等操作。 源代码: Option Explicit Dim cnt As Integer Private Sub Command1_Click() Dim sql As String Dim rs_login As New ADODB.Recordset If Trim(Combo1.Text) = "" Then MsgBox "没有这个用户", vbOKOnly + vbExclamation, "" Combo1.SetFocus Else sql = "select * from 系统管理 where 用户名='" & Combo1.Text & "'" rs_login.Open sql, conn, adOpenKeyset, adLockPessimistic If rs_login.EOF = True Then MsgBox "没有这个用户", vbOKOnly + vbExclamation, "" Combo1.SetFocus Else If Trim(rs_login.Fields(1)) = Trim(txtpwd.Text) Then userID = Combo1.Text rs_login.Close Unload Me form1.Show Else MsgBox "密码不正确", vbOKOnly + vbExclamation, "" txtpwd.SetFocus End If

End If cnt = cnt + 1 If cnt = 3 Then Unload Me End If Exit Sub End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() Dim connectionstring As String connectionstring = "provider=Microsoft.Jet.oledb.4.0;" & _ "data source=book.mdb" conn.Open connectionstring cnt = 0 End Sub Private Sub txtuser_Change() End Sub 2、文件名 form1(form1.frm) 功能说明:整个系统的主界面,其中包括图书管理、读者管理、图书借阅管理、系统管理、关于,以及在这下面的子菜单。 源代码: Private Sub add_admin_Click() frmadduser.Show End Sub Private Sub add_back_book_Click() frmbackbookinfo.Show

vb6常用函数

字符函数 函数名 功能 示例 ASC 返回一个Integer,代表字符串中首字母的字符代码。 Asc(string) CHR 返回String,其中包含有与指定的字符代码相关的字符 Chr(charcode) Format 返回Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。 Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) Hex 返回代表十六进制数值的String。 Hex(number) InStr 返回Variant (Long),指定一字符串在另一字符串中最先出现的位置。 InStr([start, ]string1, string2[, compare]) InstrRev 返回一个字符串在另一个字符串中出现的位置,从字符串的末尾算起。 InstrRev(string1, string2[, start[, compare]]) Join 返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。 Join(list[, delimiter]) LCase 返回转成小写的String。 LCase(string) Left 返回Variant (String),其中包含字符串中从左边算起指定数量的字符。 Left(string, length) Len 返回Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。

Len(string | varname) Ltrim Rtrim Trim 返回Variant (String),其中包含指定字符串的拷贝,没有前导空白(LTrim)、尾随空白(RTrim) 或前导和尾随空白(Trim)。 LTrim(string)RTrim(string)Trim(string) Mid 返回Variant (String),其中包含字符串中指定数量的字符。 Mid(string, start[, length]) Partition 返回一个Variant (String),指定一个范围,在一系列计算的范围中指定的数字出现在这个范围内。 Partition(number, start, stop, interval) Replace 返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,且替换发生的次数也是指定的。 Replace(expression, find, replacewith[, start[, count[, compare]]]) Right 返回Variant (String),其中包含从字符串右边取出的指定数量的字符。 Right(string, length) Space 返回特定数目空格的V ariant (String)。 Space(number) Split 返回一个下标从零开始的一维数组,它包含指定数目的子字符串。 Split(expression[, delimiter[, count[, compare]]]) StrComp 返回Variant (Integer),为字符串比较的结果。 StrComp(string1, string2[, compare]) String 返回Variant (String),其中包含指定长度重复字符的字符串。 String(number, character) StrReverse 返回一个字符串,其中一个指定子字符串的字符顺序是反向的。 StrReverse(string1)

VB程序设计答案

VB程序设计答案 第一章习题参考答案 一、填空题 1、对象事件驱动 2、编译运行模式解释运行模式 二、简答题 1、简述VB的特点。 答:①可视化的程序设计方法 ②面向对象的程序设计思想 ③事件驱动的编程机制 ④结构化的程序设计语言 ⑤高度的可扩充性 ⑥强大的数据库访问能力 ⑦支持动态数据交换 ⑧支持对象链接与嵌入 2、简述VB的安装过程。 答:①向光驱中放入VB安装光盘; ②计算机将运行自动安装程序,若没有,执行VB目录下的Setup.exe; ③根据提示逐一回答问题,并点击“下一步”; ④点击“完成”; 2、如何启动VB。 答:三种方法: ①单击“开始”按钮,选择“程序”菜单下的“Microsoft Visual Basic 6.0 中文版”菜单项并单击; ②双击桌面上的VB6.0快捷图标; ③在“开始”菜单的运行对话框中输入命令来启动VB; 第二章习题参考答案 一、选择题: 1-10、DCACD BCBBC 11-20、BADCA BBAAB 21-29、AACBB CDDC 二、填空题 1.窗体、控件 2.属性值 3.属性窗口设置、代码窗口设置 4.事件过程 5.对象名、下划线、事件名 6.Form_Click 第三章习题参考答案

一、选择题 1、B 2、C 3、A 4、B 5、A 6、C 7、C 二、填空题 1、11 字符型、字节型、整型、长整型、单精度型、双精度型、货币型、逻辑型、日期型、对象型、变体型。String、Byte、Integer、Long、Single、Double、Currency、Boolean 、Date、Object、Variant 2、双引号(英文)、# 3、ASCII、1、2 4、public、通用、Dim、Static、Private、Static 5、&、+、+ 6、Now()、Time、日期型 三、解答题 1、(3) 2、(1 ) 3、(1)常量(关键字)(2)字符型常量(3)逻辑型常量(4)变量(5)字符串常量(6)变量 (7)字符串常量(8)变量(9)日期型常量(题目应是#11/16/1999#)(10)数值型常量(单精度) 4、31 5、(1)(1+y/x)/(1-y/x) (2)x^3+3*x*y/(2-y) (3)sqr(abs(a*b-c^3)) (4)sqr(s*(s-a)*(s-b)*(s-c)) 6、 7、(1)13 (2)17 (3)#1999-11-12# (4)zxy123ABC 8、(1)19 (2)8.16666666666667 (3)5.25 (4)2 9、(1)-4 (2)2 . 82842712474619 (3)-3 (4)49 (5)”hello”(6)He 7)16 (8)“-459.65”(9)5 10、(4) 11、(2) 12、(4) 第四章习题参考答案 一、选择题: 1—7: DAABBCD 二、填空题 1.500.00% 2.将字号扩大为原来的二倍 3. B 三、编程题(略) 1.文本框、标签和命令按钮的名称分别为text1、label1、command1 Private Sub Command1_Click() Label1.caption=text1.text Command1.caption=text1.text

源代码例子以及页面设置说明

chdgdfgeclid.a 1 2 #ifnfdgdfdef __CHEDGDFGCLID_A_ 3 #dedfgdffine __CHEGDFGCLID_A_ 4 5 /************************************************************************/ 6 /* 定义*/ 7 /************************************************************************/ 8 #defgdfgdfine FLADGDFGSH_SEDGDFGION 9 #defidgdne EDFGDFNS_ ADDGDFDESS_TEST 10 11 #defidgdfne EDGDFGNS_ ADDEDGDGSS_TEST_3 12 13 #defdgdfine NDGDFGEED _CHECK 6 14 15 typdfgdfedef enum 16 { CA_ONEISDGDFGEMPTY, 17 18 CA_TWOISEDGDFGMPTY, 19 CA_TWOISFFDGDFGULL 20 }chedgdfckusdfdfm; 21 typedsfsdfef ssfsdftruct 22 23 { TX_U8 desfdfsKey[9]; 24 25 TX_U8 desfsdfdsresult[9]; 26 TX_U64 crc64; }DedgdfgsDatsfsdfdsa_f; 27 28 29 /************************************************************************/ 30 /* 函数声明*/ 31 /************************************************************************/ 32 TX_ ChesfsfckValid(checkenum checkcase); 33 TX_ ResfsdfadFlash(void); 34 TX_ ReadRanFromPanel(void); 35 TX_ ResfsdfadSerial(void); TX_ ResfsdfadIPanel(void); 36 37 vdgdfgoid Plasdfsdfsfsdfsdar_To_Linear(TX_U8,TX_U9 N); 38 TX_BOOL BufferIsEmsfsdfdsfty(TX_U9 buffer[],int bufsdfdsffer_len); 39 40 TX_BOOL TX_BoxValid(void); 41 TX_U64 GetBxNo(void); 42 usfsdfdsfed char *GetPFSDlSerial(void); 43 #endgdfdif 44 3 sr_burGDFGnflash.h 45 /* 46 sr_busdgdfffsgdfsdsh.a - hdfsdfer file for sr_bfdfsdflash.D 47 48 */ 49 50 #ifndgdfgdef _SR_BURFSDFNFLASH_A_

相关文档
最新文档