文档库 最新最全的文档下载
当前位置:文档库 › 详细的.Net并行编程高级教程--Parallel

详细的.Net并行编程高级教程--Parallel

详细的.Net并行编程高级教程--Parallel
详细的.Net并行编程高级教程--Parallel

详细的.Net并行编程高级教程--Parallel

一直觉得自己对并发了解不够深入,特别是看了《代码整洁之道》觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准。而且在《失控》这本书中也多次提到并发,不管是计算机还是生物都并发处理着各种事物。人真是奇怪,当你关注一个事情的时候,你会发现周围的事物中就常出现那个事情。所以好奇心驱使下学习并发。便有了此文。

一、理解硬件线程和软件线程

多核处理器带有一个以上的物理内核--物理内核是真正的独立处理单元,多个物理内核使得多条指令能够同时并行运行。硬件线程也称为逻辑内核,一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代表一个物理内核;Windows中每个运行的程序都是一个进程,每一个进程都会创建并运行一个或多个线程,这些线程称为软件线程。硬件线程就像是一条泳道,而软件线程就是在其中游泳的人。

二、并行场合

.Net Framework4 引入了新的Task Parallel Library(任务并行库,TPL),它支持数据并行、任务并行和流水线。让开发人员应付不同的并行场合。

?数据并行:有大量数据需要处理,并且必须对每一份数据执行同样的操作。

比如通过256bit的密钥对100个Unicode字符串进行AES算法加密。

?任务并行:通过任务并发运行不同的操作。例如生成文件散列码,加密字符串,创建缩略图。

?流水线:这是任务并行和数据并行的结合体。

TPL引入了System.Threading.Tasks ,主类是Task,这个类表示一个异步的并发的操作,然而我们不一定要使用Task类的实例,可以使用Parallel静态类。它提供了 Parallel.Invoke, Parallel.For Parallel.Forecah 三个方法。

三、Parallel.Invoke

试图让很多方法并行运行的最简单的方法就是使用Parallel类的Invoke 方法。例如有四个方法:

?WatchMovie

?HaveDinner

?ReadBook

?WriteBlog

通过下面的代码就可以使用并行。

System.Threading.Tasks.Parallel.Invoke(WatchMovie, HaveDinner, ReadBook, WriteBlog);

这段代码会创建指向每一个方法的委托。Invoke方法接受一个Action的参数组。

1 p ublic static void Invoke(params Action[] actions);

用lambda表达式或匿名委托可以达到同样的效果。

System.Threading.Tasks.Parallel.Invoke(() => WatchMovie(), () => HaveDinner(), () => ReadBook(), delegate() { WriteBlog(); });

1.没有特定的执行顺序。

Parallel.Invoke方法只有在4个方法全部完成之后才会返回。它至少需要4个硬件线程才足以让这4个方法并发运行。但并不保证这4个方法能够同时启动运行,如果一个或者多个内核处于繁忙状态,那么底层的调度逻辑可能会延迟某些方法的初始化执行。

给方法加上延时,就可以看到必须等待最长的方法执行完成才回到主方法。

1.static void Main(string[] args)

2. {

3. System.Threading.Tasks.Parallel.Invoke(W

atchMovie, HaveDinner, ReadBook,

4. WriteBlog);

5. Console.WriteLine("执行完成");

6. Console.ReadKey();

7. }

8.

9.static void WatchMovie()

10. {

11. Thread.Sleep(5000);

12. Console.WriteLine("看电影");

13. }

14.static void HaveDinner()

15. {

16. Thread.Sleep(1000);

17. Console.WriteLine("吃晚饭");

18. }

19.static void ReadBook()

20. {

21. Thread.Sleep(2000);

22. Console.WriteLine("读书");

23. }

24.static void WriteBlog()

25. {

26. Thread.Sleep(3000);

27. Console.WriteLine("写博客");

28. }

这样会造成很多逻辑内核处于长时间闲置状态。

四、Parallel.For

Parallel.For为固定数目的独立For循环迭代提供了负载均衡 (即将工作分发到不同的任务中执行,这样所有的任务在大部分时间都可以保持繁忙) 的并行执行。从而能尽可能地充分利用所有的可用的内核。

我们比较下下面两个方法,一个使用For循环,一个使用Parallel.For 都是生成密钥在转换为十六进制字符串。

1.private static void GenerateAESKeys()

2. {

3. var sw = Stopwatch.StartNew();

4.for (int i = 0; i < NUM_AES_KEYS; i++)

5. {

6. var aesM = new AesManaged();

7. aesM.GenerateKey();

8.byte[] result = aesM.Key;

9. string hexStr = ConverToHexString(re

sult);

10. }

11. Console.WriteLine("AES:"+sw.Elapsed.ToS

tring());

12. }

13.

14.private static void ParallelGenerateAESKeys()

15. {

16. var sw = Stopwatch.StartNew();

17. System.Threading.Tasks.Parallel.For(1,

NUM_AES_KEYS + 1, (int i) =>

18. {

19. var aesM = new AesManaged();

20. aesM.GenerateKey();

21.byte[] result = aesM.Key;

22. string hexStr = ConverToHexString(r

esult);

23. });

24.

25. Console.WriteLine("Parallel_AES:" + sw.

Elapsed.ToString());

26. }

private static int NUM_AES_KEYS = 100000;

static void Main(string[] args)

{

Console.WriteLine("执行"+NUM_AES_KEYS+"次:"); GenerateAESKeys();

ParallelGenerateAESKeys();

Console.ReadKey();

}

执行1000000次

这里并行的时间是串行的一半。

五、Parallel.ForEach

在Parallel.For中,有时候对既有循环进行优化可能会是一个非常复杂的任务。Parallel.ForEach为固定数目的独立For Each循环迭代提供了负载均衡的并行执行,且支持自定义分区器,让使用者可以完全掌握数据分发。实质就是将所有要处理的数据区分为多个部分,然后并行运行这些串行循环。

修改上面的代码:

1.System.Threading.Tasks.Parallel.ForEach(Partitioner.

Create(1, NUM_AES_KEYS + 1), range =>

2. {

3. var aesM = new AesManaged();

4. Console.WriteLine("AES Range({0},{1}

循环开始时间:

{2})",range.Item1,range.Item2,DateTime.Now.TimeOfDay

);

5.

6.for (int i = range.Item1; i < range.

Item2; i++)

7. {

8. aesM.GenerateKey();

9.byte[] result = aesM.Key;

10. string hexStr = ConverToHexStri

ng(result);

11. }

12. Console.WriteLine("AES:"+sw.Elapsed

.ToString());

13. });

从执行结果可以看出,分了13个段执行的。

第二次执行还是13个段。速度上稍微有差异。开始没有指定分区数,Partitioner.Create使用的是内置默认值。

而且我们发现这些分区并不是同时执行的,大致是分了三个时间段执行。而且执行顺序是不同的。总的时间和Parallel.For的方法差不多。

public static ParallelLoopResult ForEach(Partitioner source, Action body)

Parallel.ForEach方法定义了source和Body两个参数。source是指分区器。提供了分解为多个分区的数据源。body是要调用的委托。它接受每一个已定义的分区作为参数。一共有20多个重载,在上面的例子中,分区的类型为

Tuple,是一个二元组类型。此外,返回一个ParallelLoopResult的值。

Partitioner.Create 创建分区是根据逻辑内核数及其他因素决定。

1.public static OrderablePartitioner>

Create(int fromInclusive, int toExclusive)

2. {

3.int num = 3;

4.if (toExclusive <= fromInclusive)

5.throw new ArgumentOutOfRangeException("toExc

lusive");

6.int rangeSize = (toExclusive - fromInclusive)

/ (PlatformHelper.ProcessorCount * num);

7.if (rangeSize == 0)

8. rangeSize = 1;

9.return Partitioner.Create>(Par

titioner.CreateRanges(fromInclusive, toExclusive, ra

ngeSize), EnumerablePartitionerOptions.NoBuffering);

10. }

因此我们可以修改分区数目,rangesize大致为250000左右。也就是说我的逻辑内核是4.

var rangesize = (int) (NUM_AES_KEYS/Environment.ProcessorCount) + 1;

System.Threading.Tasks.Parallel.ForEach(Partitioner.Create(1, NUM_AES_KEYS + 1,rangesize), range =>

再次执行:

分区变成了四个,时间上没有多大差别(第一个时间是串行时间)。我们看见这四个分区几乎是同时执行的。大部分情况下,TPL在幕后使用的负载均衡机制都是非常高效的,然而对分区的控制便于使用者对自己的工作负载进行分析,来改进整体的性能。

Parallel.ForEach也能对IEnumerable集合进行重构。Enumerable.Range 生产了序列化的数目。但这样就没有上面的分区效果。

1.private static void ParallelForEachGenerateMD5HasHes

()

2. {

3. var sw = Stopwatch.StartNew();

4. System.Threading.Tasks.Parallel.ForEach(

Enumerable.Range(1, NUM_AES_KEYS), number =>

5. {

6. var md5M = MD5.Create();

7.byte[] data = Encoding.Unicode.GetBy

tes(https://www.wendangku.net/doc/f914816912.html,erName + number);

8.byte[] result = https://www.wendangku.net/doc/f914816912.html,puteHash(dat

a);

9. string hexString = ConverToHexString

(result);

10. });

11. Console.WriteLine("MD5:"+sw.Elapsed.ToS

tring());

12. }

六、从循环中退出

和串行运行中的break不同,ParallelLoopState 提供了两个方法用于停止Parallel.For 和 Parallel.ForEach的执行。

Break:让循环在执行了当前迭代后尽快停止执行。比如执行到100了,那么循环会处理掉所有小于100的迭代。

Stop:让循环尽快停止执行。如果执行到了100的迭代,那不能保证处理完所有小于100的迭代。

修改上面的方法:执行3秒后退出。

1.private static void ParallelLoopResult(ParallelLoopR

esult loopResult)

2. {

3. string text;

4.if (loopResult.IsCompleted)

5. {

6. text = "循环完成";

7. }

8.else

9. {

10.if (loopResult.LowestBreakIteration

.HasValue)

11. {

12. text = "Break终止";

13. }

14.else

15. {

16. text = "Stop 终止";

17. }

18. }

19. Console.WriteLine(text);

20. }

21.

22.

23.private static void ParallelForEachGenerate

MD5HasHesBreak()

24. {

25. var sw = Stopwatch.StartNew();

26. var loopresult= System.Threading.Tasks.

Parallel.ForEach(Enumerable.Range(1, NUM_AES_KEYS), (int number,ParallelLoopState loopState) =>

27. {

28. var md5M = MD5.Create();

29.byte[] data = Encoding.Unicode.GetB

ytes(https://www.wendangku.net/doc/f914816912.html,erName + number);

30.byte[] result = https://www.wendangku.net/doc/f914816912.html,puteHash(da

ta);

31. string hexString = ConverToHexStrin

g(result);

32.if (sw.Elapsed.Seconds > 3)

33. {

34. loopState.Stop();

35. }

36. });

37. ParallelLoopResult(loopresult);

38. Console.WriteLine("MD5:" + sw.Elapsed);

39. }

七、捕捉并行循环中发生的异常。

当并行迭代中调用的委托抛出异常,这个异常没有在委托中被捕获到时,就会变成一组异常,新的System.AggregateException负责处理这一组异常。

1.private static void ParallelForEachGenerateMD5HasHes

Exception()

2. {

3. var sw = Stopwatch.StartNew();

4. var loopresult = new ParallelLoopResult(

);

5.try

6. {

7. loopresult = System.Threading.Tasks.

Parallel.ForEach(Enumerable.Range(1, NUM_AES_KEYS), (number, loopState) =>

8. {

9. var md5M = MD5.Create();

10.byte[] data = Encoding.Unicode.

GetBytes(https://www.wendangku.net/doc/f914816912.html,erName + number);

11.byte[] result = https://www.wendangku.net/doc/f914816912.html,puteHas

h(data);

12. string hexString = ConverToHexS

tring(result);

13.if (sw.Elapsed.Seconds > 3)

14. {

15.throw new TimeoutException(

"执行超过三秒");

16. }

17. });

18. }

19.catch (AggregateException ex)

20. {

21. foreach (var innerEx in ex.InnerEx

ceptions)

22. {

23. Console.WriteLine(innerEx.ToStr

ing());

24. }

25. }

26.

27. ParallelLoopResult(loopresult);

28. Console.WriteLine("MD5:" + sw.Elapsed);

29. }

结果:

异常出现了好几次。

八、指定并行度。

TPL的方法总会试图利用所有可用的逻辑内核来实现最好的结果,但有时候你并不希望在并行循环中使用所有的内核。比如你需要留出一个不参与并行计算的内核,来创建能够响应用户的应用程序,而且这个内核需要帮助你运行代码中的其他部分。这个时候一种好的解决方法就是指定最大并行度。

这需要创建一个ParallelOptions的实例,设置MaxDegreeOfParallelism的值。

1.private static void ParallelMaxDegree(int maxDegree)

2. {

3. var parallelOptions = new ParallelOption

s();

4. parallelOptions.MaxDegreeOfParallelism =

maxDegree;

5.

6. var sw = Stopwatch.StartNew();

7. System.Threading.Tasks.Parallel.For(1, N

UM_AES_KEYS + 1, parallelOptions, (int i) =>

8. {

9. var aesM = new AesManaged();

10. aesM.GenerateKey();

11.byte[] result = aesM.Key;

12. string hexStr = ConverToHexString(r

esult);

13. });

14. Console.WriteLine("AES:" + sw.Elapsed.T

oString());

15. }

调用:如果在四核微处理器上运行,那么将使用3个内核。

ParallelMaxDegree(Environment.ProcessorCount - 1);

时间上大致慢了点(第一次Parallel.For 3.18s),但可以腾出一个内核来处理其他的事情。

小结:这次学习了Parallel相关方法以及如何退出并行循环和捕获异常、设置并行度,还有并行相关的知识。园子里也有类似的博客。但作为自己知识的管理,在这里梳理一遍。

【编辑推荐】

1.关于面向切面编程的部分内容-错误处理机制

2.程序员编程时心力交瘁失去工作热情咋整?

3.5个可以教你编程的游戏

4.十一款值得深入了解的物联网编程语言

《C#语言程序设计》实 验 报 告

《C#语言程序设计》实验报告 学院:信息学院 专业:计算机科学与技术 指导教师: 报告人: 学号: 班级:

实验一简单编程练习 一、目的与要求 1、熟悉Visual https://www.wendangku.net/doc/f914816912.html,集成开发环境(IDE) 2、熟悉C#源程序语言的编辑、编译和运行过程 3、能够创建、编译和执行一个简单的C#程序 二、实验仪器 Windows操作系统,Microsoft Visual Studio .NET 2010。 三、实验内容 1.开发一个简单的控制台应用程序,该程序完成一段字符的输入,然后输出该字符串。 2.开发一个简单的Windows应用程序,该程序通过鼠标单击按钮在文本框中显示一行字符串。 四、实验过程及结果 1.控制台应用程序 (1)启动.NET 2010。 (2)在“文件”菜单上找到“新建”->“项目”,打开“新建项目”对话框。 (3)在模板一栏选择“控制台应用程序”,在名称一栏输入项目的名称。 (4)位置一栏内指定的是项目存放的目录,可以更改为自己定制的目录,也可以使用系统提供的默认路径。 (5)按确定以后用下面的代码替换Program.cs已有的所有代码: using System; namespace TestConsole { class Program { static void Main() { string str; System.Console.WriteLine("Please input a string !"); str = System.Console.ReadLine(); System.Console.WriteLine(str); } } } (6)运行应用程序(ctrl + F5)。

软件工程 实验报告

v1.0 可编辑可修改 院系:计算机科学学院 专业:计算机科学与技术 年级: 2013级 课程名称:软件工程 组员:司少武(1135) 兰少雄(1136) 张宇(1133) 纳洪泽(1132) 指导教师:刘卫平 2015年 12月 26 日

聊天室 1 前言 即时消息系统的研究现状 即时消息系统[1](Instant Messenger,IM)是一种在后 PC 时代兴起的,以Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。 本工程的主要内容 随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见,最直接的网上交流的方式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型网站。本文所介绍的网络聊天系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,且具有脱离数据库技术方法,易于维护和更新的特点。 2 需求分析 本系统所要实现的主要功能是当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加

程序设计基础课程设计报告 内容样例

第一章目的与要求 书上有。 第二章需求分析 软件设计的一个重要的环节就是需求分析。本章在对ATM取款机管理系统的应用情况作了全面调查的基础上,确定系统目标,并对系统所需要的基础功能进行分析,从而确定用户的需求。以下是ATM取款机管理系统所需要的需求分析。 ATM管理系统包括六个模块:登录,挂失功能,修改密码,取款功能,转账功能,查询功能。 ①登录: 输入银行卡的账号,密码,验证银行卡的卡号,密码是否正确,之后进入主界面 ②挂失功能: 确认是否对银行卡进行挂失,挂失后账户无法操作 ③修改密码: 用户可自由对其银行卡密码进行修改,修改之后的新密码将会覆盖其原密码 ④取款功能: 用户可自由取得所持银行卡内的存款,所取款数必须在其原有账户余额之内 ⑤转账功能: 用户可将本账户中的存款转入其他账户,转账过程中,需要转入账户的账

号 ⑥查询功能: 用户可查询用户信息,其中包括用户姓名、用户身份证号码、银行卡号以及存款余额 模拟ATM取款机的操作: 首先录入账户信息,格式如下 ㈠、登录功能:输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。 ㈡、查询功能:查询账户余额。 ㈢、取款功能:取款,更新余额。 ㈣、挂失功能:挂失后,该账户不能进行任何操作。 ㈤、修改密码:输入原密码和新设置密码。 ㈥、转账功能:输入转账的转出账户以及转账金额,进行转账。

第三章设计分析 3.1、ATM系统管理 3.1.1系统基本功能 首先,确定系统中存在两种用户,一种是ATM,可以进行信息录入和后台管理。另外一种是取款人,取款人主要是进行信息的查询,不能进行信息录入。所以在创建类的时候,先创建一个ATM类,然后创建取款人类,并与ATM 类形成有元,进而继承ATM的所有功能,并添加录入信息的功能。 基本功能: 登录功能---------输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。 查询功能---------查询账户余额。 取款功能---------取款,更新余额。 挂失功能---------挂失后,该账户不能进行任何操作。 修改密码---------输入原密码和新设置密码。 转账功能---------输入转账的转出账户以及转账金额,进行转账。、

Web.asp程序设计课后习题答案(沈士根版)

第一章 1.填空题 (1).NET Framework主要包括公共语言运行库CLR和类库。 (2)https://www.wendangku.net/doc/f914816912.html,网站在编译时,首先将语言代码编译成微软中间语言MSIL。(3)一台IIS Web服务器IP地址为210.78.60.19,网站端口号为8000,则要访问虚拟目录xxxy中default.aspx的URL为 http://210.78.60.19.8000/xxxy/default.aspx。 (4)可以通过复制网站同步网站上的一个文件。 2.是非题 (1)托管代码是以CLR为基础的代码。(√) (2)https://www.wendangku.net/doc/f914816912.html,3.5仍使用https://www.wendangku.net/doc/f914816912.html,2.0引擎。(√) (3).NET Framework 3.0是.NET Framework 3.5的一部分。(√) (4)https://www.wendangku.net/doc/f914816912.html, 3.5是边解释边执行的。(×) (5)在Visual Studio 2008环境中开发网站必须安装IIS。(×) 3.选择题 (1).NET Framwork3.5不包括(A) A. .NET Framework 1.1 B. .NET Framework 2.0 C. LINQ D. https://www.wendangku.net/doc/f914816912.html, AJAX (2)下面(D)网站在建立时要求安装Microsoft FrontPage服务器扩展。 文件系统 B. 本地IIS C. FTP站点 D.远程站点 (3)发布网站后不可能存在的文件夹是(B) A.App_Data B.App_Code C.App_Themes D.bin 第二章 1.填空题 (1)Visual Studio 2008 默认建立的XHIML文件类型是Transitional。 (2)利用XHTML建立一个链接到jxst@https://www.wendangku.net/doc/f914816912.html,邮箱的元素是……。 (3)存放Web窗体页C#代码的模型有单文件页模型和代码隐藏页模型。(4)单文件页模型中,C#代码必须包含于之间。 (5)外部样式表通过元素链接到网页。 (6)XML主要用于传输和存储数据。 2.是非题 (1)XHTML是HTML的子集。(×) (2)XHTML中每个元素都有结束标记。(√) (3).htm文件不需要编译,直接从Web服务器下载到浏览器执即可。(√)(4)基于类的样式在定义是要加前缀“#”。(×) (5)JavaScript代码必须包含在

A、submit B、button C、btnok D、ok 2、下列能够建立游标指针,灵活移动指针选择操作记录的是()。 A、Connection对象 B、RecordSet对象 C、Command对象 D、Select对象 3、VBScript中只有一种数据类型称为()。 A、Integer B、Date C、Char D、Variant 4、ASP是在()解析执行的。 A、客户端 B、服务器端 C、浏览器 D、Windows xp 5、如果a=3,b=4,c=5,那么b Mod c-c\a<>0 and b^2-4*a*c>0的值为() A、Ture B、False C、系统报错 D、0 6、会话用户所用的全局变量应存储在()。 A、Application对象中 B、Session对象中 C、Cookies对象中 D、Buffer对象中 7、Vbscript基本输入函数Inputbox和基本输入函数Msgbox 的返回值类型分别是()和() A、数值型 B、字符型 C、变体型 D、数字型 8、一个用户第一次到达网站时,系统为其分配一个(),只有该用户退出,或其生命周期结束时,信息才被清除。 A、Cookies B、Session C、Application D、以上都是 9、以下不是Vbscript的函数的为()。

《javaweb程序设计》课程标准

《Java Web程序设计》课程标准 1.课程定位 1.1课程定位 《Java Web程序设计》是计算机及相关专业学生的程序设计主修课程。修习本课程的目的是让学生在经过基本程序设计能力训练之后,掌握具有较高应用价值的JavaWeb应用程序设计的能力,掌握Java Web网站应用程序设计的方法。本课程的先修课程是《计算机操作基础》和《Java程序设计》,学生必须掌握基本的计算机操作技能、程序设计基础和Java面向对象程序设计的基本的方法,Java语言程序的编写设计方法,并具备一定SQL数据库语言基础及Java数据库应用能力。本课程是一门专业课程,适用于具备程序设计基础知识及网页设计技能的学生。 2.课程目标 Java Web程序设计是大学期间主要的程序设计类课程,以学生构思、创建一个简单网站的过程为主线,建立和掌握JavaWEB应用程序设计的基本概念和方法。本课程学习的效果如何,对学生在计算机应用设计技能的培养和学习有着重要影响,也对学生毕业后的工作能力有相当的作用。在课程讲授过程中,以不同的WEB数据库应用设计作为应用设计最主要的元素,进行教学驱动,通过递进的方式,把完成JavaWEB网站设计的学习进程及内容进行连贯和衔接,总体目标是:让学生建立WEB网站设计的基本基本概念和方法,掌握WEB数据库应用程序设计的规范和基本方法、同时根据不同的应用,掌握WEB网站设计的基本技巧,能

够对现实的的问题进行分析和抽象,设计出一个简单的WEB网站,并通过代码实现网站的基本功能,完成应用程序的编写、调试和运行。 2.1知识目标 (1)掌握Web网站设计基本概念、学会Tomcat服务器安装配置 (2)掌握JSP语法基础、脚本编写及程序的运行方法 (3)掌握JSP程序控制方法 (4)掌握JSP指令元素、动作的基本概念及应用方法 (5)掌握主要的JSP内置对象及这些对象的用途 (6)学会根据实际要求设计表单,实现表单的提交及表单数据的 提取 (7)掌握WEB数据库应用设计,能够完成WEB数据库的基本访问 操作的设计 (8)掌握JavaBean程序的设计和应用方法,学会使用JavaBean 进行程序封装 (9)了解Java Servlet应用及程序的设计方法 2.2能力目标 2.2.1、专业能力目标 (1)熟练掌握WEB应用开发工具,掌握WEB网站设计的基本方法 和过程 (2)能够根据实际网站设计要求,完成一个简单网站的程序结构 设计 (3)能够合理设计网站数据库结构 (4)能够设计基本的WEB页面,实现数据库的查询及显示操作 (5)能够准确提取WEB数据,完成数据库的添加、修改和删除操 作 (6)理解JavaBean程序概念,设计并通过Java类完成WEB应用 (7)能够使用Bean程序对网站数据库操作进行封装 (8)了解Servlet程序的结构和编写方法,完成简单的Servlet 应用 2.2.2、方法能力目标 (1)建立WEB应用程序设计的思想和基本方法;

C#程序设计实验报告

学生实验报告 (理工类) 课程名称: C#程序设计专业班级:M11计算机科学与技术(专转本)学生学号: XXXXXXXX 学生姓名: XXX 所属院部:信息技术学院指导教师: XXX 2012 — 2013学年第 1 学期 金陵科技学院教务处制

实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:C#基础编程实验学时: 6 同组学生姓名:实验地点: A205 实验日期: 9月17日-9月24日实验成绩: 批改教师:批改时间:

实验1 C#基础编程 一、实验目的 1、熟悉Visual Studio .NET开发环境; 2、掌握C#应用程序的基本操作过程; 3、掌握C#的数据类型,运算符以及表达式的使用; 4、掌握分支和循环语句的使用方法; 5、掌握一维数组,二维数组及数组型数组的使用。 二、实验要求 (1)编写程序要规范、正确,上机调试过程和结果要有记录; (2)做完实验后给出本实验的实验报告。 三、实验设备、环境 安装有Visual Studio .NET软件。 四、实验步骤 1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。 五、实验内容 1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。using System; using System.Collections.Generic; using System.Text; namespace Test1_1 { class Program { static void Main(string[] args) { Console.WriteLine("1121412016 张明星!"); Console.ReadLine(); } } } 2、编写一个简单的Windows应用程序,在标签中显示你的姓名。 Form窗体的代码: using System; using System.Collections.Generic;

Web程序设计课程设计报告模板

Web程序设计课程设计报告课程设计题目:某电子杂志网站 姓名:肖琴霞 专业:软件工程(国际教育) 班级:10211133 学号:1021113321 指导教师:吴光明 2013 年 3 月 10 日

一、设计目的 《Web应用开发课程设计》是实践性教学环节之一,是《Web程序设计》课程的辅助教学课程。通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握软件开发的基本概念、原理和技术,将理论与实际相结合,应用现有的开发工具,规范、科学地完成一个完整地应用软件的设计与实现,把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力。 当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正使得计算机被广泛的应用于信息管理系统。计算机的最大好处在于利用它能够进行信息管理和查询。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。制作电子杂志网站可以方便读者阅读,且可以扩大读者的视野以及提高阅历。 二、设计解决方案 问题解决方案: 经过分析,我们决定利用ASP编程,使用Dreamweaver MX作前端开发工具,利用SQLServer2000作后台数据库管理,数据库驱动使用ADO。 前台功能模块:系统主界面与登录程序设计,杂志查询及订阅,读者服务模块,杂志分类设计等。 后台功能模块:管理主界面与登录程序设计,最新杂志信息管理模块,杂志订阅管理模块,在留言管理模块设计等。后台管理的建立,使管理员可以通过后台很容易的对杂志城进行管理,比如:对最畅销杂志,公告和杂志城注册用户进行添加,删除等管理工作,还可以对读者在线留言的处理。 三、电子杂志网需求分析 3.1 需求分析 需求分析是整个设计过程的基础,最困难、最消耗时间的一步。它的最终结果是提供

C# .net实验报告.

【目录】 一、实验目的 (2) 二、实验要求 (2) 三、实验内容 (2) 任务1 判断每个输入的数是否可被3,5和7整除,并将整除状态输出。 (2) 任务2 练习使用for、while、do while、foreach in等循环语句。 (3) 任务3 绘图输出y=a*sin(c*x + b) (3) 四、实验步骤 (4) 任务1 判断每个输入的数是否可被3,5和7整除,并将整除状态输出。 (4) 任务2 练习使用for、while、do while、foreach in等循环语句。 (5) 任务3 绘图输出y=a*sin(c*x + b) (8) 五、实验结果 (10) 六、实验体会及思考题讨论 (16) 实验体会: (16) 思考题讨论: (17) 七、附件 (19) 附件一:(任务一程序代码) (19) 附件二:(任务二——三角形程序代码) (20) 附件三:(任务二——背靠背三角形程序代码) (21) 附件四:(任务二——菱形程序代码) (22) 附件五:(任务二——倒置三角形程序代码) (23) 附件六:(任务三——三角函数程序代码) (24)

一、实验目的 配合课程教学,通过实际上机练习,熟练掌握和运用C#基本语法,能运用它进行控制台应用程序设计;熟悉VISUAL https://www.wendangku.net/doc/f914816912.html,开发平台;熟悉控制台应用程序的调试经验和技巧。 二、实验要求 实现试验内容提要中规定的各项需求;独立(或合作或在别人协助下或老师指导下)创造性地完成试验,严禁抄袭;试验结束,提交试验报告。 基于VISUAL https://www.wendangku.net/doc/f914816912.html,平台开展试验,学会如何建立控制台应用的项目工程。 掌握以下语法知识: (1)数据类型; (2)运算符、表达式、语句; (3)数组、字符串、迭代器; (4)异常处理与预处理指令; (5)类与接口; (6)事件与委托。 三、实验内容 任务1 判断每个输入的数是否可被3,5和7整除,并将整除状态输出。 要求: (1)掌握VISUAL C#.NET的基本调试技巧。演示调试情况,会跟踪变量的值, 会设置和取消断点,会跟踪如何进入函数内部 (2)对每个输入数,分别输出对3,5和7的整除状态; (3)能实现多次输入输出,最好能有一些输入提示; (4)亦可同时输入和处理多个数,并输出多个数的整除状态。 (5)考虑使用switch或if。 小组成员任务分配: 倪鑫负责用自己的方式编出相应程序,并负责注释程序; 蒋树志负责用自己的方式编出相应程序; 梅傲霜负责用自己的方式编出相应程序; 张希望负责编出相应程序,该报告中使用的程序是是我编写的程序;

程序设计基础课程设计报告

课程设计(大作业)报告 课程名称:程序设计基础 设计题目:学生成绩记录薄设计 院系:信息技术学院 班级: 设计者: 学号: 指导教师: 设计时间:2013.7 8.-2013.7.13 信息技术学院

昆明学院课程设计(大作业)任务书

学生成绩记录薄设计 一、课程设计目的与要求 1.课程设计目的 (1)综合运用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单的信息管理程序的设计。 (2)充分体现和体会函数在程序设计中的必要性和实用性,并反映主函数main()在程序设计中的实现思路和方法。 2. 课程设计要求 设计一个简易学生成绩记录簿设计,其中包括:姓名,学号,C语言成绩; 具体功能: 1.系统以菜单方式工作 2. 创建学生成绩信息并以磁盘文件保存; 3. 读取磁盘文件并显示输出所有学生的成绩; 4. 查询学生成绩 (1)按学号查询成绩 (2)学号姓名查询成绩 5.添加成绩记录; 6.修改指定姓名或学号的学生的成绩并可存盘; 7.显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。 二、总体设计 图1 系统总体结构

三、详细设计 1、数据结构设计 #include #include #include #include int n=4; struct student { int num; /*学号*/ char name[10]; /*姓名*/ float score[3]; /*成绩*/ } 2.函数说明 1.主函数 main()允许用户通过菜单进行功能选择,使用相应的功能代码来调用对应的函数功能。 2.其他部分功能函数包括 (1) 将学生成绩信息保存为文件void save(); 算法思想: ①定义指向文件的指针变量; ②输入保存路径及文件名,打开文件,若不能打开文件给出提示信息; ③将存有学生成绩信息的结构体数组信息依次保存到文件中。 (2)学生成绩信息录入函数void input() 算法思想: ①依次录入结构体数组中所包含的各个成员; ②直到输入的结构体成员中信息为4,数据输入结束; ③返回实际录入的学生成绩信息数。 (3)从文件中读出学生成绩信息void output(); 算法思想: ①定义指向结构体变量的指针和指向文件的指针; ②输入文件的路径,打开文件,若不能打开文件给出提示信息; ③将文件中的信息依次读出,最后结构体的指针为NULL。

ASP编程题

1,求以下表达式的值,写出你想到的一种实现方法:1-2+3-4+……+m. 此处m需要手动输入,使用C#语言编写 2.实现一记数器功能,如给出0~9所对应的图片分别为0.gif~9.gif,写出程序的主要代码(注:记数存放在counter.txt文件中) 简单的ASP计数器counter.asp代码及注释: <% CountFile=Server.MapPath("counter.txt") Set FileObject=Server.CreateObject("Scripting.FileSystemObject") Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE) counter=Out.ReadLine //读取计数器文件中的值 Out.Close

//关闭文件 SET FileObject=Server.CreateObject("Scripting.FileSystemObject") Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE) counter= counter + 1 //计数器的值增加1 Out.WriteLine(counter) Out.Close //关闭文件 %> 3.谈谈如何设计一个聊天室程序,并简要阐述实现过程 (1)需求分析 聊天室是实现用户之间即时通信的一种工具。所以,聊天室应该具备用户的登录页面、用户的注册、用户的信息的修改、以及实现用户进行聊天的功能。聊天室作为一种交流工具,应该具备简单易用,容易上手,对于使用者的要求不高,适合大众的需求。同时聊天室还要有一些个性化的界面提供给用户不仅仅是聊天的乐趣,同时也带来全新的视觉效果。 (2)主要模块 用户注册页面 用户登录页面 个人信息页面 留言板页面 (3)重要的代码程序: (1)登陆页面(login_in.aspx)的调用事件代码: Sub page_load(ByVal sender As Object, ByVal e As EventArgs) Session("user_name") = user_name.Text End Sub Sub Enter_Click(ByVal Sender As Object, ByVal E As EventArgs) '建立Connection对象 Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("chat.mdb")) '建立Command对象

https://www.wendangku.net/doc/f914816912.html,程序的设计实验报告

福建农林大学金山学院 实验报告 课程名称:.NET程序设计 姓名:洪绵绵 系:信息与机电工程系 专业:计算机科学与技术 年级:2008 学号:082231029 指导教师:林松 职称:讲师 2010年12月29日

实验项目列表

福建农林大学金山学院实验报告 系:信息与机电工程专业:计算机科学与技术年级: 2008级 姓名:洪绵绵学号: 082231029 实验室号_ 608 计算机号 B3 实验时间: 2010.11.26上午一二节指导教师签字:成绩: 实验一数组、类、接口与结构 一、实验目的和要求 1、了解数组、类、接口和结构的定义、概念。 2、了解结构和类的区别。 3、掌握数组的声明、实例化、初始化和访问。 4、掌握类、接口的声明和使用,结构的声明和调用。 二、实验内容和原理 1、屏幕打印10行杨辉三角,逐行输出,用到Console.Write("{0,5}", A[i, j]); 和Console.WriteLine();语句。 2、创建抽象基类Shape和派生类Rectangle, Circle利用多态性实现Area(计算面积)和Show(在屏幕上显示图形名称和面积)抽象方法 3、声明一个接口ICDPlayer,包含4个接口方法:Play(),Stop(),NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrack创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。 4、声明一个表示平面坐标系中的点的结构体CoOrds,包含字段x,y,以及带2个参数的构造函数。分别利用三种不同的方法(默认构造函数、有2个参数的构造函数、先声明结构体变量再对其x,y字段赋值),创建3个平面坐标点变量。求这3个点所构成的三角形面积。注意判断3个坐标点是否可以构成三角形。 三、实验环境 1、硬件:PC机 2、软件:windowsXP、VS2008 四、算法描述及实验步骤 1、(1) 打开记事本,编写代码。

高级程序设计实验报告

高级程序设计 实验报告 班级 学号: 姓名: 实验名称: 指导老师: 日期:

实验十一文件和流I/O 一、实验题目:文件和流I/O 二、实验内容: 1.掌握磁盘的基本操作 2.掌握目录的基本操作 3.文件的基本操作 4.文本文件的读取和写入 5.字符串的读取和写入 6.二进制文件的读取和写入I 7. 二进制文件的读取和写入2 三、主要程序代码: 1. using System; using System.IO; using System.Collections.Generic; using System.Text; namespace实验1 { class Test { public static void Main() { DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", https://www.wendangku.net/doc/f914816912.html,); Console.WriteLine(" File type: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Volume label: {0}", d.VolumeLabel); Console.WriteLine(" File system: {0}", d.DriveFormat); Console.WriteLine(" Available space to current user:{0, 15} bytes",d.AvailableFreeSpace); Console.WriteLine("Total available space: {0, 15} bytes",d.TotalFreeSpace); Console.WriteLine( " Total size of drive: {0, 15} bytes ", d.TotalSize); } } Console.ReadKey();

C#编写WEB程序设计课程设计报告

WEB程序设计—课程设计报告一、程序总体功能描述 我们通过设计首页来让员工注册自己的个人信息才能登陆进我们的管理系统。登陆系统后,就可以方便维修人员对自己的工作的安排,首先是自己的工作任务,还可以在设备分类里面添加我们的设备,对用户送来修理的设备进行录入,最后每天都可以查看自己的工作的统计。我们进行了一个详细的分类总 结。

二、添加分类需求程序详细设计 (一)设备分类管理功能详细设计(梅浩) 1、功能描述 2、实现描述 在sort_add代码中添加分类需求这个字段,然后在后台代码中添加能够判断数据库读写的字段,在SortDataAccess.cs代码中添加写入数据的代码,并且在添加、修改、删除的数据段中都必须添加此字段,否则会运行报错

3、主要功能函数解析 sort_add.aspx代码 <%@ Page Language="C#" MasterPageFile="~/master/MasterPage.master" AutoEventWireup="true" CodeFile="sort_add.aspx.cs" Inherits="sort_sort_add" %>



添加新的维修设备
设备分类名称

合工大汇编语言程序设计实验报告

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级:**************** 学号:********** 姓名:***** 目录

实验一 (3) 实验二 (7) 实验三 (12) 实验四 (22)

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 实验内容一: e ds:0200 E7 1A 3F 00 e ds:0204 C4 E5 6B 00 实验内容二: (1)直接寻址方式 MOV AX,[0200] MOV BX,[0202] ADD AX,[0204] ADC BX,[0206] MOV [0208],AX MOV [020A],BX (2)寄存器间接寻址方式 MOV SI,0200H MOV DI,0204H MOV BX,0208H MOV AX,[SI] MOV DX,[SI+2] ADD AX,[DI] ADC DX,[DI+2]

相关文档 最新文档