C#.NET

2024-09-12

C#.NET(通用9篇)

C#.NET 篇1

值(无论什么类型的值)的格式化输出对任何程序语言(或编程平台)而言都是非常重要的。早期的格式化输入/输出都是语言定义的一部分(如Fortran、Pascal等),功能有限又不灵活。C语言通过程序库(library)定义了scanf () /printf (输入/输出函数族,利用格式控制符(如d, f, u, x等等)为各种数据类型提供了多种格式化输入/输出手段,功能强大又相当灵活。

.NET Framework/C#(为行文方便,以下简称.NET)提供了一个可定制的、通用的格式化机制,将一个值格式化为适合显示的字符串。.NET借鉴了C语言的格式控制符的思想,在具备强大功能及相当的灵活性的同时,还提供了标准格式化的扩展机制,为值的格式化输出提供了功能完备的解决方案。

(1)标准格式化输出

.NET格式控制符的语法格式为:{index[, alignment][formatString]},有关格式控制符3部分的具体含义,请查阅MSDN,下面通过例子具体说明:

例1:.NET的标准格式化输出

.NET的标准格式化能够满足一般情况的输出需求,但也有很多情况,标准格式化不能满足要求。.NET提供了两种扩展标准格式化的手段,一是通过IFormattable接口允许类型作者定制自己的格式控制符;二是通过IFormatProvider和ICustomFormatter接口为类型的使用者提供扩展类型格式输出的手段。

(2)定制格式控制符

类型作者(class author)可以通过实现IFormattable接口为自己的类型提供定制的格式控制符。如有一个Customer类,要求联系电话根据情况或输出全部号码,或隐掉后4位号码。这时,可以设计特定的格式控制符:p表示输出全部号码,np表示隐掉后4位号码,实例代码如下:

例2:通过IFormattable接口实现定制格式控制符

类型作者利用IFormattable接口可以为自己的类型,如Customer类,定制各种输出形式。但现实世界是千变万化的,类型作者不可能穷尽一切可能,总有不能满足需求的时候,最好的办法是实现一种机制,让类型的使用者能够定义自己的格式化输出,这就是IFormatProvider和ICustomFormatter接口的功能。

(3)类型使用者定制格式化输出

decimal数据类型可以用来表示金额,有时候需要将金额以中文大写形式输出,decimal类型并没有这种格式化输出功能,这就需要自己进行扩展。

例3:用IFormatProvider和ICustomFormatter扩展已定义类型的格式化输出

(4)讨论

1).NET的格式控制符{index[, alignment][:formatString]}提供了标准化的格式输出手段,可以满足一般情况下的基本需求。而且NumberFormatInfo、DateTimeFormatInfo、CultureInfo类为一般数值及日期类型的格式化输出提供了灵活的控制手段。

2) IFormattable接口提供了第一级的扩展手段,类型作者可以利用该接口为自己的类型定制格式控制符。

3) IFormatProvider和ICustomFormatter提供了第二级的扩展手段,在类型不能满足使用者的特定需求时,类型的使用者可以利用这两个接口为该类型提供特定的格式化输出能力。

4) Bill Wagner的Effective C#第5条Always Provide ToString () 中的代码片段有两点问题:

(1) IFormattable.ToString (…) 中的代码片段

其中,用this.GetType () 作为GetFormat方法的参数是不对的,因为Customer没有实现ICustomFormatter接口(而且要求Customer实现ICustomFormatter接口也是不合理的),所以总是返回null,因为后文CustomFormatter类的GetFormat方法的判断语句:

if (formatType==typeof (ICustomFormatter) )

总是不成立!

IFormatProvider在这点上让人迷惑,GetFormat () 是获取定制格式化器,传送this.GetType () 作为参数显然是不对的,因为定制格式化器不是this对象所实现的功能,而是this对象的使用者(客户对象)所应实现的功能。如果将typeof (ICustomFormatter) 作为参数就没问题了,但从GetFormat () 方法的实现代码来看,似乎有点同义反复的味道。

从FormatProvider的字面上来看,formatProvider本身就应该“制造”一个定制格式化器出来,而不需要由调用者将定制格式化器作为参数传给GetFormat () ,然后再由GetFormat () 将其返回给调用者!即:

ICustomFormatter fmt=formatProvider.GetFormatter () ;

至于如何“制造”一个定制格式化器,则是该FormatProvider自己的事情,不然怎么能称为“Provider”呢?当然,你也可以在GetFormat () 中“武断”地不用管传送进来的是什么参数,总是“制造”一个定制格式化器返回给调用者。但这样做又与方法调用的约定不符合了。

(2) 定制格式化器的调用语句

Console.WriteLine (string.Format (new CustomFormatter () , "", c1) ) ;

其中,format参数为空字符串("")是不对的。虽然CustomFormatter的Format () 方法没有用到format,但在string.Format () 的参数中,format如果为null,则引发异常,如果为空字符串,则什么也不输出。这可以在StringBuilder.AppendFormat (IFormatProvider provider, string format, object[]args) 的实现代码中就可以看出来(string.Format最终归结为调用StringBuilder.AppendFormat),如果format为空字符串,则中途就返回了,根本没有调用Format () 。

(5) IFormatProvider接口为已定义类型和定制格式化器(实现ICustomFormatter接口的用户类型,用于扩展已定义类型的格式化输出)的中介,string.Format通过IFormatProvider获取定制格式化器(CustomFormatter),而对象的格式化由该定制格式化器来完成。用户不需要了解已定义类型的内部细节,只需要实现IFormatProvider和ICustomFormatter这两个接口,就可以定制已定义类型的格式化输出。非常灵活而优雅。

(6)软件(classes, components, frameworks等)的扩展性(extensibility)是框架设计者非常关注的问题,通过探讨了大量的实现机制,从Windows Hooks到类的继承,再到各种设计模式等。值的格式化输出非常重要,但其需求又千变万化(从各种文化,到各种格式,不一而足),所以实现一种扩展机制就更加重要且必要。.NET通过3个接口IFormattable、IFormatProvider、ICustomFormatter为各类开发人员(类型作者、类型使用者)提供了灵活而完备的扩展机制,很好地实现了“开放-闭合”原则,是实现软件扩展性足资参考的典范。

上文从标准格式化输出、定制格式控制符和类型使用者定制格式化输出三个方面介绍了.NET提供的格式化输出机制,最后简要地讨论了这种机制对实现一般意义上的软件扩展性的启迪与参考。

C#.NET 篇2

在做项目时要对数据进行统计分析,所以必须生成一些报表统计图(如柱形图、饼图、曲线图等),网上强烈推荐了使用DotNetCharting控件来实现,于是自己对DotNetCharting控件进行了简单的学习,下面先简单介绍一下DotNetCharting控件及其使用。

DotNetCharting是一个非常棒的.NET图表控件,对中文支持非常好,而且操作方便,开发快速,既有for webform 也有for winform的,而且.net1.1和2.0都有支持。它的官方地址是http://..dotnetcharting../

本站也提供了DotNetCharting破解版本下载: 附件: dotnetCHARTING.rar(下载 36 次)

强烈推荐一下DotNetCharting的demo地址:

这个是所有的 DEMO 演示

http://..dotnetcharting../demo.aspx

这个是 Online Documentation http://..dotnetcharting../documentation/v4_4/webframe.html 里面会有详细的说明和用法。

DotNetCharting的简单使用方法:

1.把bindotnetCHARTING.dll添加到工具箱,并且添加引用;

2.把控件拖到你的网页上,然后添加引用using dotnetCHARTING;就可以用了;

3.接下来是自己写的对DotNetCharting操作的封装类,以便于在程序里调用。

ShowData.cs 1.using System;2.using System.Data;3.using System.Text;4.using dotnetCHARTING;5.6.namespace FLX..plexQuery 7.{ 8./**////

9./// 彭建军

10./// 根据数据动态生成图形(柱形图、饼图、曲线图)11./// 2008-06-19 12.///

13.public class ShowData 14.{ 15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.属性#region 属性

图片存放路径图片标题 图片x座标名称 图片y座标名称 图例名称 图片宽度 图片高度 图片数据源 图片存放路径

set{_phaysicalimagepath=value;} get{return _phaysicalimagepath;} 图片标题

set{_title=value;} get{return _title;} private string _phaysicalimagepath;// private string _title;// private string _xtitle;// private string _ytitle;// private string _seriesname;// private int _picwidth;// private int _pichight;// private DataTable _dt;// /**////

/// /// public string PhaysicalImagePath {

} /**////

/// /// public string Title { 41.} 42./**//// 43./// 图片标题 44./// 45.public string XTitle 46.{ 47.set{_xtitle=value;} 48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.get{return _xtitle;} 图片标题

set{_ytitle=value;} get{return _ytitle;} 图例名称

set{_seriesname=value;} get{return _seriesname;} 图片宽度

set{_picwidth=value;} get{return _picwidth;} } /**////

/// /// public string YTitle {

} /**////

/// /// public string SeriesName {

} /**////

/// /// public int PicWidth {

} 75./**////

76./// 图片高度 77./// 78.public int PicHight 79.{ 80.set{_pichight=value;} 81.get{return _pichight;} 82.} 83./**//// 84./// 图片数据源 85./// 86.public DataTable DataSource 87.{ 88.set{_dt=value;} 89.get{return _dt;} 90.} 91.#endregion 92.93.构造函数#region 构造函数 94.public ShowData()95.{ 96.// 97.// TODO: 在此处添加构造函数逻辑 98.// 99.} 100.101.public ShowData(string PhaysicalImagePath,string Title,string XTitle,string YTitle,string SeriesName)102.103.104.105.106.{

_phaysicalimagepath=PhaysicalImagePath;

_title=Title;

_xtitle=XTitle;

_ytitle=YTitle;107.108.109.110.111.112.113.114.115._seriesname=SeriesName;

}

#endregion

输出柱形图#region 输出柱形图

/**////

/// 柱形图

///

/// 116.public void CreateColumn(dotnetCHARTING.Chart chart)117.118.119.120.{

chart.Title=this._title;

chart.XAxis.Label.Text=this._xtitle;

chart.YAxis.Label.Text=this._ytitle;121.chart.TempDirectory =this._phaysicalimagepath;

122.123.chart.Width = this._picwidth;

chart.Height = this._pichight;124.chart.Type = ChartType..bo;

125.chart.Series.Type =SeriesType.Cylinder;126.chart.Series.Name = this._seriesname;

127.128.chart.Series.Data = this._dt;

chart.SeriesCollection.Add();

129.chart.DefaultSeries.DefaultElement.ShowValue = true;

130.131.chart.ShadingEffect = true;

chart.Use3D = false;

132.chart.Series.DefaultElement.ShowValue =true;133.134.135.}

#endregion 136.137.138.139.140.输出饼图#region 输出饼图

/**////

/// 饼图

///

/// 141.public void CreatePie(dotnetCHARTING.Chart chart)142.143.{

chart.Title=this._title;

144.chart.TempDirectory =this._phaysicalimagepath;

145.146.chart.Width = this._picwidth;

chart.Height = this._pichight;147.chart.Type = ChartType.Pie;

148.chart.Series.Type =SeriesType.Cylinder;149.chart.Series.Name = this._seriesname;

150.151.152.chart.ShadingEffect = true;

chart.Use3D = false;

153.chart.DefaultSeries.DefaultElement.Transparency = 20;154.chart.DefaultSeries.DefaultElement.ShowValue = true;155.chart.PieLabelMode = PieLabelMode.Outside;

156.chart.SeriesCollection.Add(getArrayData());157.chart.Series.DefaultElement.ShowValue = true;158.159.160.161.}

private SeriesCollection getArrayData()

{ 162.SeriesCollection SC = new SeriesCollection();163.164.165.166.167.DataTable dt = this._dt;

for(int i=0;i < dt.Rows.Count;i++)

{

Series s = new Series();168.s.Name = dt.Rows[0].ToString();

169.170.171.172.173.174.175.Element e = new Element();

// 每元素的名称

e.Name = dt.Rows[0].ToString();

// 每元素的大小数值

176.e.YValue=Convert.ToInt32(dt.Rows[1].ToString());177.178.179.180.181.182.183.184.185.186.187.188.189.s.Elements.Add(e);

SC.Add(s);

}

return SC;

}

#endregion

输出曲线图#region 输出曲线图

/**////

/// 曲线图

///

/// 190.public void CreateLine(dotnetCHARTING.Chart chart)191.192.{

chart.Title=this._title;

193.194.chart.XAxis.Label.Text=this._xtitle;

chart.YAxis.Label.Text=this._ytitle;195.chart.TempDirectory =this._phaysicalimagepath;

196.197.chart.Width = this._picwidth;

chart.Height = this._pichight;198.chart.Type = ChartType..bo;

199.chart.Series.Type =SeriesType.Line;200.chart.Series.Name = this._seriesname;

201.202.chart.Series.Data = this._dt;

chart.SeriesCollection.Add();

203.chart.DefaultSeries.DefaultElement.ShowValue = true;

204.205.chart.ShadingEffect = true;

chart.Use3D = false;

206.chart.Series.DefaultElement.ShowValue =true;207.208.209.210.}

#endregion

调用说明及范例#region 调用说明及范例

211.//

在要显示统计图的页面代码直接调用,方法类似如下: 212.213.214.215.216.217.218.219.220.221.// //

ShowData show=new ShowData();//

show.Title =“2008年各月消费情况统计”;//

show.XTitle =“月份”;//

show.YTitle =“金额(万元)”;//

show.PicHight =300;//

show.PicWidth =600;//

show.SeriesName =“具体详情”;//

show.PhaysicalImagePath =“ChartImages”;//

show.DataSource =this.GetDataSource();222.223.224.225.226.//

show.CreateColumn(this.Chart1);

#endregion

} } 复制代码 效果图展示:

1、饼图

2、柱形图

3、曲线图

补充:

帖子发了一天,没人回答我多维统计图的实现方式,只好自己去dotnetcharting的官方网站下载了最新的dotnetcharting控件,在 dotnetcharting控件的使用说明文档中详细地介绍了各种多维统计图的实现方式。现把说明文档贴出来供大家下载

dotnetcharting使用说明文档:附件: dotnetcharting使用说明.rar(下载 38 次)

追加补充新内容:

1、解决“每运行一次DotNetCharting页面,就会生成一个图片,这样图片不是越来越多吗?请问怎样自动删除DotNetCharting生成的图片呢”的问题,参照 ASP.NET删除文件夹里的所有文件。

C#.NET 篇3

关键词:C#.NET;审计局信息化;电子政务系统

中图分类号:TP311.52 文献标识码:A文章编号:1007-9599 (2011) 15-0000-02

C#.NET-based Auditing Office E-government System Design

Xie Qizhi

(Mianyang Auditing Information Center,Mianyang621000,China)

Abstract:Social functions of e-government systems and the increasing performance requirements,according to Audit Bureau of information technology requirements,using the most popular C#.NET technology,based on the RBAC model is designed and implemented C#.NET General Audit Information Management systems,including department management,module management,rights management,role management,user management module.Great saving Audit information technology research and development costs and improve basic information re-use of information technology to speed up the process of Audit.

Keywords:C#.NET;Audit information;E-government system

近年來,随着信息化进程的推进,在电子政务专网平台上,各单位建设的应用信息系统和业务系统日益增多,对于提高行政效率和公共服务水平起到了积极的成效。随着电子政务不断发展,电子政务系统也如其它信息系统一样对软件技术和系统建设思想的要求越来越高。为此,本文提出了一种基于C#.NET审计局电子政务系统的解决方案。

一、系统需求和建设目标

整个系统需求包括以下方面。

(一)统一标准,建立市、县二级基础数据库,在审计局信息交换体系上开发应用各分类管理信息系统,实现各类政务管理业务网络化管理和办公,逐步改进传统的管理模式、优化工作流程、规范管理行为、提高工作效率,全面促进政务公正、公开。

(二)通过优化综合事务处理流程和规范管理工作模式,促进机关电子政务和综合事务管理的系统建设,提高机关工作人员的工作效率和政务管理水平,加强各处室、各部门之间的合作和信息共享,形成协作、协调、协同工作的良好氛围,有效的减少办公开支。为降低管理成本、提高工作效率和辅助决策能力提供科学、安全、有效而先进的手段。

(三)全面完成市、县审计资源信息系统,建成结构完整、技术先进、高速、大容量、安全的信息交换体系。

(四)审计分析信息系统以审计指标为中心,以数据仓库技术为基础,利用局域网和审计局信息网为网络平台,建立一个能自动从已建基础数据库中获取各种数据和从各市县上报数据等多种形式来源的数据,并能完成数据审计、传输、汇总处理等综合审计功能的综合审计分析系统,为政务管理提供辅助决策分析服务。

(五)按照省审计局对政务公开的要求,充分利用现代的信息技术,面向社会提供优质审计信息服务,并努力将审计信息资源转化为社会生产力。

二、主要实现技术

(一)选用C#.NET技术。C#.NET是一种建立在通用语言上的程序构架,提供了许多以往Web开发模式强大的优势:

1.C#.NET是基于通用语言编译运行的程序,所以它的强大性和适应性,可以使它在Web应用软件开发者的全部平台上运行。

2.C#.NET使运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。

3.C#.NET页面提供多种验证方式,保证了信息的安全性。

(二)采用B/S架构。B/S结构,即浏览器/服务器(Browser/Server)结构,是随着Internet技术的兴起而改进的结构.B/S结构主要是通过不断成熟的。浏览器技术,采用TCP/IP协议,结合多种Script语言(VBScript,JavaScript和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本。

三、总体结构设计

(一)系统设计模式。建立在RBAC基础上的电子政务系统采用了C#.NET开发模型进行系统设计,可缩短电子政务系统的开发和实施周期,能有效降低电子政务系统的复杂性,使电子政务系统具有良好的可扩展性、集成性、并能减少电子政务系统的总体成本。这种体系结构能有效地在存储和展示数据的对象中区分功能模块以降低它们之间的连接度,能将传统的输入、处理和输出模型转化为图形显示的用户交互模型,是多层次的Web商业应用。

该体系结构具有三个部分:模型、视图和控制,每个部分有其各自的功能。模型部分代表了商业数据的访问及修改数据的操作。当数据发生改变时,它要负责通知视图部分,并且提供视图查询状态的能力。另外,它还向控制提供应用功能。视图部分以自己的方式显示模型的内容。它访问模型的数据,并且当模型的数据发生变化时更新模型的显示。视图还把从用户那里得到的信息传给控制部分。控制部分定义了应用的行为。它分发用户请求和选择表现视图,还负责解释用户输入,进而调用模型的功能。在Web应用中,用户输入包括对Web级资源的HTTP、GET和POST请求。控制部分根据用户交互和模型的状态选择要显示的视图。一个应用程序一般为相关的功能选择一个控制,这样做有利于团队合作开发,有利于代码的重用,也有利于后期的管理维护,如图1所示:

图1:审计局电子政务门户系统示意图

(二)框架设计

图2:总体技术框架

如图2所示,采用B/S三层架构进行设计,其中,数据层主要存放各种数据库,包括办公用的办公数据库,也有决策系统的决策数据库以及各种职能数据库等。应用层(也叫控制层)是核心层,系统设计和实现的大部分工作都在这个层次体现,其中应用平台层是中间件产品,应用服务器提供各种服务和功能;业务子功能层是系统对政务的现实办公的抽象,将这些抽象封装为实现工作的相对独立的功能模块,图中列出了系统的几个功能模块,这一层次上开发人员开发可复用的构件或者复用已有构件来避免当前乃至日后的重复开发。服务渠道子层是现存产品提供的各种辅助功能。客户层是用户使用的界面层次,用户通过Web浏览器应用政务系统。这种架构使得系统具有易维护、易扩展及易兼容性,实现了真正意义上的“瘦客户”,给软件系统的开发和维护带来极大的方便。

(三)系统运行及调试。经运行和调试,该系统能顺利的实现各项功能。该系统的建设完成将对市、县(区)二级数据中心的建设和加快各级电子政务信息系统步伐将起到示范和指导作用;同时也会对审计局信息化建设起到极大地推动作用和产生深远的影响。

四、结语

随着互联网时代的到来,电子政务已成为各政府部门运用现代信息技术为公众提供服务的一种新型运作模式。这需要我们相关工作者,进行积极探索,从而最大限度地使系统简单快速,真正实现信息共享和系统的互联互通。

参考文献:

[1]葛春林,周杰.基于ASP.NET街道电子政务系统设计[J].软件设计与开发,2008,7

C#.NET 篇4

(1) 在DCOM, ASP, XML Web Services等在众多远程处理方法中, 因为.NET远程处理的二进制编码和TcpChanel的最佳进程间通信能力, 决定了其远程处理的高效率。所以本解决方案就采用了它为C/S间的交互方法。

(2) 数据集DataSet是数据的容器, 在缓存中存储数据, 提供了高性能数据访问以及可伸缩性。数据集的结构类似于关系数据库的结构;它公开表、行和列的分层对象模型。另外, 它包含为数据集定义的约束和关系。通过在数据集内保存数据, 可以方便地将它在应用程序的表示层、业务层和数据层之间或应用程序之间移动。本解决方案采用它作为远程数据交互的数据容器。

(3) 类库具有良好的数据封装特性和可重用性, 并且可以以异步方式来调用同步方法。本解决方案采用它提供公共数据结构定义外, 还利用这些特性同时实现方案的单机版。

2 模型框架

模型基本框架一共建立两个类库, 一个类库DataAgent, 包含远程处理对象和数据库访问逻辑;另一个类库Utility, 负责公共数据结构和接口定义;两个应用程序, 一个是服务器端值守程序, 负责在指定端口上呈现DataAgent远程处理对象;另一个是客户端应用程序。

基本框架逻辑图如图1所示。

3 代码实现

下面的代码示例以某公司员工档案分布式管理系统开发为背景展开。

3.1 Utility类库

该类库中提供了基本的数据接口定义:

另外, 该类库还提供一个DataAgentCallerHelper是远程对象调用器, 供客户机端在创建远程对象时调用, 并提供了本机版和网络版的实现, 通过Ini配置文件解决。Ini配置文件在系统安装时可根据具体环境配置, 内容如下:

远程对象调用器DataAgentCallerHelper的实现如下:

3.2 DataContext对象

远程处理中, 不可避免地要和数据库交互。以下示例代码提供了DataSet和Access数据库之间交互的逻辑。

3.3 DataAgent类库

DataAgent类库提供了远程处理对象clsDataAgent。逻辑函数中的对象ResultConext负责提供每次数据访问时的数据库连接, 并在交互的DataSet中动态插入一个记录数据处理过程中是否出现错误的一个数据表DataTable, 便于客户端进行错误处理。

以下是远程处理对象clsDataAgent的实现, 这个对象提供了系统所有的业务逻辑。

3.4 服务器值守程序Sever.exe

值守程序负责将类库DataAgent中的clsDataAgent远程处理对象在指定的端口下呈现出来, 供客户端远程激活。核心代码如下:

3.5 客户机实现

在客户机端, 实现业务的调用封装, 包括异常处理。

4 结语

介绍了一个基于.NET平台, 以DataSet为基本交互对象的C/S泛化模型, 并给出具体的代码实现。在实际开发过程中采用上述模型, 取得了很好的效果。以上的处理模式同时适用于局域网环境和Internet环境, 可用于高层次大规模的系统开发, 使开发人员致力于业务逻辑, 而不再过多关注与业务无关的细节, 减小了系统设计开发的复杂度, 提高了效率。

(收稿日期:2010-06-23)

摘要:介绍了一个基于.NET平台、以DataSet为基本交互对象的C/S泛化解决模型。

C#.NET 篇5

任天堂FC上的坦克大战是游戏史上的经典游戏, 随着时代的发展, 硬件水平的不断提高, 人们对于娱乐的要求逐渐提高, FC等上个世纪80年代出现的游戏机早已不能满足人们对于娱乐的需求。

在学习.NET的过程中, 随着对于.NET开发工具Visual Studio 2008的深入了解以及.NET开发技术、开发规范的不断认识, 萌生了将FC上的经典游戏--坦克大战在电脑上重现并加以改进的想法, 这就是本项目开发背景。

2 任务概要

疯狂坦克是一个基于.NET平台的Windows Forms小型应用程序, 使用C#语言编写, 要求能够实现画布的生成, 坦克的生成, 敌我识别, 我方坦克移动, 敌方AI坦克移动, 坦克的越界处理, 坦克射击功能, 子弹与坦克的碰撞检测, 坦克护甲系统, 墙体系统等;另外还要求能够在游戏过程中显示游戏的实时信息、画布上子弹总数、残存物体总数、击毁坦克数, 来作为游戏水平的检测;在游戏中还能够随即产生AI坦克以及墙体。

3 项目分析

(1) 模块划分:

疯狂坦克游戏按照功能划分为两个模块:游戏元素和游戏处理。其中, 游戏元素是游戏中的装备, 主要包括了:绘制坦克、绘制墙体、绘制子弹;游戏处理完成游戏的各种操作, 主要包括:子弹命中、坦克护甲、坦克移除, 如图3-1所示:

(2) 业务流程:

游戏的工作流程:初始化生成游戏, 绘制坦克、墙体, 完成坦克移动、射击, 根据子弹碰撞的情况, 判断目标是否命中, 如果坦克被命中, 那么坦克将被销毁;然后, 游戏结束, 简单描述如下:

<1>当程序开始运行的时候, 首先生成一个窗体, 然后创建一个容器, 用来容纳游戏中的元素。

<2>容器创建完成后, 开始绘制敌方坦克和己方坦克以及墙体。

<3>绘制完成后, 敌方坦克按照AI开始移动, 并开始射击, 射击时根据坦克的方向绘制子弹。己方坦克根据键盘按键进行移动, 若按下ctrl键则己方坦克开始射击。如果子弹命中目标, 如果目标拥有护甲, 则目标减去一层护甲, 如果目标已经没有护甲, 则目标被消灭, 从容器中移除它。墙体和坦克一样, 也拥有护甲值, 但和坦克不同的是, 墙体不能移动。当消灭一定数量的坦克或者墙体后, 游戏会自动添加一定数量的坦克或者墙体, 从而增加游戏难度。

<4>当己方坦克被消灭时, 游戏结束。

(3) 运行环境:

操作系统:选择win7或者indows xp

运行框架:.Net framework3.0

4 项目实现

根据模块功能, 创建游戏运行界面, 包含坦克、子弹、墙等游戏元素的绘制和重画;构建类库, 包含游戏实现的主要方法, 完成游戏的操作;创建配置文件, 主要包括游戏元素的初始化信息, 如:坐标信息。下面是游戏部分功能的实现方法:

(1) 坦克的生成方法, 部分代码如下:

(2) 坦克绘制以及坦克装甲绘制, 部分代码如下:

(3) 坦克的移动及射击, 用random.Next () 控制坦克的随机运动, 用next值表示对应的方向, 用random.Next () 控制坦克的随机发射炮弹, 部分代码如下:

(4) 子弹与坦克的碰撞检测方法, 用IntersectsWith来检测两个矩形相碰撞。碰撞后, 依次检视是否为墙、是否无效子弹、是否有护甲, 主要代码如下:

结束语

本文采用C#语言实现了游戏的全部功能, 在单机和局域网上测试通过, 并改进了部分功能, 游戏占内存比较小, 运行比较流畅、没有出现死机或者其它问题

摘要:本文以坦克大战游戏为例, 采用了C#.NET技术, 设计和完成了游戏的全部功能, 主要包括:项目背景、模块设计、业务流程, 以及游戏代码的分析;在游戏界面设计时, 采用GDI+技术, 绘制出了游戏的运行效果图;对于游戏涉及到的关键算法, 给出了简要的分析。

关键词:C#.NET,GDI+,坦克大战

参考文献

[1]于国防.李剑.C#语言Windows程序设计[M], 清华大学出版社, 2010.5

[2]童恒庆, 梅清.基于.NET平台的B/S系统开发框架的研究[J].微机发展, 2004.6

C#.NET 篇6

关键词:CLIPS,C#.NET,专家系统

0 引言

CLIPS是美国国家航天局1985年推出的, 广泛应用于开发各类专家系统。CLIPS嵌入到其他开发平台程序中编写, 是CLIPS支持专家系统开发常用的方法[1]。

C#是常用的开发语言。C#更适合快速软件开发, 开发效率都比C++高。本文选择在C#.Net中嵌入CLIPS方法实现专家系统开发。

CLIPS是为人工智能设计的, 但把C#和CLIPS融合起来, 可以充分发挥二者的优点, 对于在有限的时间里设计一个高效可靠、对用户友好的专家系统是很有效的[2]。

1 C#与CLIPS接口技术

1.1 C#.Net与CLIPS交互

CLIPS的内部推理机制采用的是Rete模式匹配算法, 具有效率高等优点[3]。CLIPS基本结构如图1所示。

在互联网上可以得到CLIPS的源代码和动态库Clips Net.dll。C#.Net与CLIPS的交互方式主要有动态库导入式和移植嵌入式。

1.2 C#.Net与CLIPS接口实现方法

1.2.1 Clips Net组件及其类函数

Clips Net组件是美国公司推出的产品, 可以将CLIPS项目整合到.Net框架。Clips Net组件包括:Clips Net.dll, 可以用于托管形式;Clips32.dll, 用作非托管形式。在C#中调用CLIPS应采用Clips Net.dll组件[4]。

1.2.2 实现方法代码及相关说明

C#.Net中调用CLIPS编程的具体实现方法和过程:

1) Clips Net作为开源软件, 把源码down下来, 通过在本机上重新编译生成dll就可以使用了, 可以通过SVN工具从http://svn.code.sf.Net/p/clips Net/code中把Clips Net源码下载下来;

2) 动态库导入方式, 把动态库Clips.dll导入C#.Net程序, 随后在程序中调用动态库中的函数, 实现与CLIPS交互技术;

3) CLIPSNet.Environment enviroment=new CLIPSNet.Environment () ;实例化一个CLIPS环境对象, 然后就可以在此CLIPS环境中使用CLIPS相对应的函数完成clp文件的读取, fact对象的生成等命令;

4) enviroment.Load (@"......Judge Wheel.clp") ;通过Load命令载入编写好的车轮智能化设计系统逻辑推理文件, 这个文件包含了推理规则、自定义模板和自定义方法;

5) enviroment.Reset () ;通过Reset命令初始化推理规

MANUFACTURING INFORMATIZATION仿真/建模/CAD/CAM/CAE/CAPP

则、自定义模板和自定义方法, 只有Reset之后这些自定义的内容才能被使用;

6) enviroment.Assert String (" (Wheel Rim (value"+str Rim+") ) ") ;

enviroment.Assert String (" (Wheel Spoke (value"+str Spoke+") ) ") ;

enviroment.Assert String (" (Wheel Bolt (value"+str Bolt+") ) ") ;

通过Asset String命令把选择的车轮参数传入到Clips Net动态链接库中生成事实Fact;

7) enviroment.Run () ;通过Run命令, 在CLIPS中匹配相应的自定义规则, 最后经过规则的推理生成对应车轮的型号的事实Fact;

8) string expression String=“ (Get-Wine-List) ”;

Multifieldreturn List= (CLIPSNet.Data Types.Multifield) enviroment.Eval (expression String) ;

通过Eval命令把自定义方法名Get-Wine_List传入到CLIPS中并实现调用自定义方法Get-Wine-List返回生成的车轮Fact;

9) CLIPSNet.Fact fact= (CLIPSNet.Fact) return List[0];

string fact Value=fact.Get Slot ("str") .To String () ;

把返回的未知Fact对象强制转换成CLIPSNET.Fact类型, 然后通过Get Slot命令获取该车轮对象的型号值, 直至完成CLIPS与C#的交互过程。

2 专家系统

2.1 专家系统的结构

专家系统主要包含2个部分:应用程序和CLIPS专家系统。应用程序由人机交互界面和CLIPS专家系统接口组成。CLIPS专家系统由推理机和知识库组成[5]。

2.2 车轮专家系统组成

车轮专家系统基本构造如图2所示。

知识库:知识来源于数据, 一个实用的专家系统必须有强大可更新的数据来支持, 随着数据的不断更新, 知识也将随之变化[6]。

推理机:根据知识由已知事实推断出新事实, 得到问题求解最终结果。

车轮知识获取机制:知识获取是经过处理将数据反馈给知识库和数据库, 对知识库进行扩充和更新[7]。

解释机制:使一般用户也可理解系统的问题求解方法和求解思路, 问题求解过程, 使初学者得到直观和清晰明了的学习[8]。

用户界面:用户能方便直观地进行人机对话。

客户:是车轮专家系统的一部分, 包括工作师、维护人员和普通用户等。

3 应用

3.1 车轮智能化设计系统主界面

最新的CLIPS版本是6.3, 将编写好的规则clp格式保存, 打开CLIPS中load命令, 将规则文件导CLIPS运行界面运行。

在本设计中, 智能化设计系统主界面如图3所示。

3.2 车轮智能化设计系统推理运行操作

在车轮智能化设计系统推理模块, 点击进入推理按钮, 进入推理运行界面, 包括显示推理结果、专家推荐意见区域、显示结果图片区域、选择按钮区域。选择按钮区域包括5个选择, 分别是轮辋直径按钮、轮辐条数按钮、螺栓孔距按钮、轮辋宽度按钮、轮廓代号按钮。车轮智能化设计系统推理运行界面如图4所示。

在此系统下, 以16x7j-pcd108-5车轮为实例对象, 在选择按钮区域选择相关要求, 点击推理, 则程序显示推理结果为:专家建议您选择:"16x7J-PCD108-5"型号的车轮, 并在显示结果图片区域显示型号为16x7j-pcd108-5车轮图片, 智能化设计系统推理运行结果界面如图5所示。

4 结语

CLIPS具有强大的知识表达能力和推理能力, 是开放源代码的软件, 可以把它嵌入到C#.NET项目中。这既可充分发挥C#.NET擅长软件界面开发和与外界进行数据交换的优点, 又可以实现专家系统的功能, 弥补了相互的缺点, 发挥了各自的优势。因而运用CLIPS和C#.NET是开发专家系统的好方案。

参考文献

[1]刘磊.基于CLIPS的热采锅炉故障诊断专家系统研究[D].青岛:中国石油大学 (华东) , 2007.

[2]马华杰, 袁永军, 谭悦, 等.CLIPS与Visual C++接口的研究[J].仪器仪表用户, 2005, 12 (6) :110-111.

[3]朱谦成.基于CLIPS的车轮方案智能设计研究及程序实现[D].湘潭:湘潭大学, 2010.

[4]郭凤桐, 韩卫, 李磊, 等.基于软件在Visual C#.NET中调用CLIPS的技术实现[J].科学技术与工程, 2006 (12) :1699-1701.

[5]申建平, 师海涛, 汪慧娟.在.Net C#中使用CLIPS开发专家系统的方法[J].导弹试验技术, 2009 (3) :53-55.

[6]李海龙, 焦彦生.国家863智能化农业专家系统开发技术[J].科技情报开发与经济, 2005, 15 (18) :236-238.

[7]刘永安.智能故障诊断专家系统开发平台——数据融合算法[D].无锡:江南大学, 2007.

[8]林慧英.汽车车轮侧滑检测与诊断专家系统的研究[D].西安:长安大学, 2006.

C#.NET 篇7

1. 问题提出

学生信息管理系统是学校网络化、信息化建设中不可缺少的一部分,专门用于收集、存储、传输和加工学生信息数据,最终输出统计报表的业务管理系统。

计算机技术给学校学生管理工作带来了一系列的方便、快捷和高效,使学校学生管理工作不断迈向新的境界,借助高速的、先进的计算机软硬件平台,把先进的网络技术与学生管理相关业务结合在一起,实现数据共享和资源共享,促使学生管理工作更快捷、准确、规范,在另一层次上保证了学校校园网信息化普及的顺利进行。学生信息管理系统是基于院校机构、学生信息,以帮助院校机构对学生信息进行有效管理的业务信息系统。

2. 系统分析

2.1 系统结构

学生信息管理系统在功能上可划分为以下几个模块:院校机构管理、学生学籍管理、助学金管理、查询统计、用户管理、系统维护等几大模块。

2.2 用户角色与权限需求分析

学生信息管理系统分为两种角色:管理员用户、系统配置角色。

(1)管理员用户:该角色主要用来维护学生信息管理系统的基础信息,包括模块、系统角色、系统用户、系统日志等,因此超级用户角色信息不可删除,是系统默认的超级用户角色,具有超级用户权限。

(2)系统配置角色:此类角色是因学校学生信息管理业务流程的需要而创建的,因此可对系统配置角色进行添加、修改、删除操作。具有此类角色的用户可访问角色相对应的模块菜单。

3. 总体设计

根据学校学生管理业务相关流程,学生信息管理系统的功能主要分为五大类:

(1)院校机构管理:维护院校机构的组织架构基础信息。

(2)学籍管理:维护学校学生学籍的基础信息。

(3)助学金管理:维护学校学生助学金发放的历史信息。

(4)查询统计:分类统计学生信息及学生助学金信息。

(5)用户管理:维护系统中用户基础信息。

(6)系统维护:修改密码及数据备份。

4. 系统实现

4.1 院校机构

院校机构管理主要包括对学校院校机构基础信息的添加、修改、删除、调整、排序等操作。

主要代码如下:

4.2 学籍管理

学籍管理主要是对学校学生学籍的基础信息,如学号、姓名、性别等属性进行有效管理,包括添加、修改、删除等功能。如图4-1所示。

4.3 助学金管理

助学金管理主要是对学校学生助学金发放信息进行有效的管理,包括添加、修改、删除等。如图4-2所示。

4.4 查询统计

查询统计包括:学籍信息查询、学生助学金查询等。如图1所示。

4.5 系统维护

系统维护管理主要包括修改密码及数据备份等。主要代码:

5. 结束语

经过前期需求分析和软件设计编码测试,此学生信息管理系统其功能符合学校学生管理业务流程需求,能够完成学生信息、学生助学金信息等基本信息的维护、查询检索和数据及时备份,为学生管理工作起到了重要作用,推动了学校校园网络化、信息化的普及和应用。

摘要:根据学校学生管理工作信息化建设的要求,利用校园网资源,采用目前最流行的C#.NET技术,使用SQLServer数据库设计并实现了学生信息管理系统,包括院校机构管理、学生学籍管理、助学金管理、查询统计、系统用户管理、系统维护等模块。学生学习管理系统的设计极大的提高了学校各院校机构及学生管理人员的工作效率和工作质量,提高各院校机构业务处理的自动化水平。

关键词:C#.NET,SQL Server

参考文献

[1]杨丽萍.基于B/S架构的《操作系统》教学辅助系统的研发[J]长春大学学报,2009(04).

C#.NET 篇8

随着教育信息化改革的不断深入与教学信息化在院校的普及,通过校园网实现课程网上考试已十分普及。然而,目前的院校网上考试系统仍然以J2EE、VB、JSP等开发设计程序为主,系统存在开发复杂程度高、维护工作量大、更新方式不易行等诸多问题。与之相比,基于.NET框架技术简单易用,开发效率高,系统部署更加方便、快捷等优点,并且C#.net语言具有简单、安全等优点。本文介绍采用C#.net设计开发院校网上考试系统,采用SQL Server2000为数据库,系统经过网络调试,能够实现院校网内部的稳定运行。

2 系统结构

院校网上考试系统由应用平台、数据库系统、网络系统3部分组成。平台软件基于网络和数据库系统完成指定功能。系统层次如图1所示。

2.1 题库管理

题库管理围绕相关知识点设有5种题型:单项选择题、多项选择题、判断题、填空题和简答题,针对不同的需求,可进行题目等数据的录入、更新、保存或删除等操作。

2.2 学习培训

包括题目训练和模拟考试:题目训练为设定每道题目显示时间以及答案显示时间,根据选择题目大类的逻辑顺序依次显示训练题目,用户可根据自身进度选择适合自己的部分,循序渐进学习;模拟考试与真实考试布局一致、界面相同、数量相同的定时在线考试界面,为参训人员提供身临其境的模拟考试环境,达到熟练掌握、印象深刻的学习效果。

2.3 在线考试

考生通过考号和姓名进入网上考试界面,在规定时间内答题,答题完毕后系统会自动判决,并核对处最后分数,当网上在线考核时间结束时系统自动提交考卷。

2.4 试卷评分

由评分人员通过用户名和密码进入网上评分界面,为考试人员的主观题部分评判。

2.5 成绩查询

考试人员可对考核成绩以进行在线查询,成绩信息公开透明,既可保证考试的公正性,又能对个人学习进步起到督促作用。

2.6 档案管理

对考核人员的管理信息进行成绩归档、试卷维护,建立人员信息档案、考试数据管理档案。

2.7 系统管理

对网上考试系统进行数据管理、备份、恢复等。

3 技术要点

3.1 网上考试

网上考试功能利用C#.net实现对SQL Server 2000数据库的访问与存储。可以根据实际情况采取任何规模的在线考核,考题包括:单选题、多选题、填空题、判断题和简答题。在规定时间内答题,时间结束时自动提交考卷。

为避免参加考试的参训人员对随机抽取的试题不满意而反复进行考试的行为,系统采用对参加考试的人员进行身份识别功能,在参训人员点击“网上考试”按钮之后,判断其是否已经参加过考试再进入在线考试界面。网上考试具体流程如图2所示。

网上考试随机出题采用随机产生一个数,然后取该数前后范围内的题目数量。以填空题为例,随机取题的部分代码如下:

3.2 Ajax服务器控件技术

系统中采用网络在线考试的方法实现理论考核功能,在实现考试倒计时、网页异步时主要应用Visual Studio 2008开发环境中自带的Ajax服务器端控件Scripmanager、Update Panel与Timer控件。Script Manager控件负责管理Page页面中所有的Ajax服务器控件,是Ajax的核心,有了Script Manager控件才能够让Page局部更新起作用,所需要的Java Script才会自动管理。因此,开发Ajax网站是每个页面中必须添加ScriptManager控件作为管理。

随着.NET服务器控件的更新,早期的Ajax服务器控件如Text Box、Button等并不能满足实际需要,于是微软开发出了Update Panel控件,程序人员将ASP.NET服务器控件拖放到Update Panel控件中,就可以使原本不具备Ajax能力的ASP.NET服务器控件具有Ajax异步的功能。Update Panel控件的基本属性主要有Update Mode属性,用于表示异步更新的模式是Always还是Conditional,Always是每次Postback后,Update Panel都会连带被更新,而Conditional只针对特定情况才被更新;Triggers属性用于设置Update Panel的触发事件,共有两种类型,一种是控件属性改名,一种是控件属性引发事件。针对这两种不同情况可以设置Trigger要监视的对象,一个Update Panel可以同时设置多个Triggers属性。

Timer定时器用Java Script构建非常容易,但在ASP.NET中实现Timer定时器不但困难,而且运作起来非常麻烦,还会损耗计算机资源。但Ajax直接构建了一个Timer服务器控件,让程序开发人员可以设置事件间隔来触发特定事件的操作。Timer控件的主要属性有Interval属性,用于设置Timer事件控件的Tick事件间隔事件,单位为ms;Tick事件用于在指定的时间间隔进行触发。

3.3 动态创建组件技术

使用C#.net开发程序时,将组件简单的添加到程序窗体上,即预先设置静态组件,对于程序设计员来说十分简单直观,而在某些对系统资源利用率要求较高的程序中,部分组件只在需要使用的时候才创建的方法就是动态创建组件。动态创建的组件与预先设置在对话框中的静态组件是不同的:静态组件无论程序使用与否,都占用一定的程序空间,容易造成程序体积过大、代码冗余、运行缓慢;通过动态创建组件技术编写的程序代码少、体积小、运行迅速,同时,运行时动态创建的组件在关闭对话框后会释放掉所需的内存空间,从而释放其所占用的内存空间,节省资源,提高系统资源利用率。

C#.net中组件的动态创建组件首先要声明一个组件类型的对象,然后为该组件对象分配空间,应用组件类的New()方法动态创建,创建后再调用组件对象的visible方法显示。以选择题目为例,动态创建组件的代码如下:

4 结语

采用C#.net设计实现网上考试系统,具有以下优点:(1)基于B/S(浏览器/服务器)模式的系统架构,不需用户再安装任何客户端或者数据库,只需通过IE浏览器即可完成;(2)动态创建组件技术使得程序代码少、体积小、运行迅速,从而节省系统资源,提高资源利用率;(3)Ajax服务器控件技术实现页面的异步刷新与回发,大大降低页面等待时间,提高页面打开与浏览的速度,为用户提供更加舒适的网络体验;(4)一旦用户提交试卷即断开与数据库的连接,及时释放所占用的数据库资源,提高数据库访问效率。

参考文献

[1]郝春强.C#基础与实例教程[M].北京:中国电力出版社,2006.

C#.NET 篇9

Visual C#是.NET框架的重要组成部分,也是微软公司力推的新一代程序设计语言。掌握.NET程序设计技术的工程师已成为企业的急需人才。本课程处于课程体系的核心位置,如何在《C#.NET》课程的教学过程中既可以让学生掌握课程要求的知识技能,又能让学生收获较强的学习能力、思考能力和实践能力等综合能力,这就需要我们老师在教学实践中不断探索,不断总结。对于《C#.NET》课程的教学来说,采用项目教学法不失为一个行之有效的教学方法。下面就结合课程的教学实践,研究项目教学法在《C#.NET》课程中的实施。

2 课程的设计思路

通过行业分析,确定岗位群,针对典型职业活动,先确定课程体系及每门课程的作用,再细化教学内容。并以职业能力培养为重点,采用“实践导向型”教学设计模式设计教学过程。打破以知识传授为主要特征的传统学科课程模式,转变为以工作任务为中心组织课程内容,并让学生在完成具体项目的过程中学会完成相应工作任务,并构建相关理论知识,发展职业能力。课程内容突出对学生职业能力的训练,并融合了相关职业资格证书对知识、技能和态度的要求。课程设计以基于工作过程系统化为线索来进行。教学过程中,要通过校企合作,校内实训基地建设等多种途径充分开发学习资源,给学生提供丰富的实践机会。

3 项目设计

为使学生掌握C#程序设计等专业能力所需的知识与技能,本课程设计8个案例场景(或者称为规模大小不同的项目)来组织教学,将职业行动领域的工作过程融合在项目训练中。本课程项目结构与学时分配见表1。

4 项目实施与评价

4.1 项目实施

在堂教学设计中,结合项目规模的大小,可采用“大项目”、“子项目”和“小任务”结合实现。在开始讲授课程的时候,教师将“大项目”,即一个完整的示范项目演示给学生,使学生带着明确的目的去学习,随着教学内容韵展开,教师依据示范项目来安排大部分子项目内容的讲授,并合理安排好每次课要完成的“小任务”,最后,在进行综合项目设计的时候,指导学生们以个人或小组的形式利用所学过的子项目知识进行项目扩展和链接,生成一个综合项目,给学生一种水到渠成的感觉。

例如,成绩管理系统就是一个“大项目”,它结合了大部分知识点,是具有实用性的综合项目。我们将其分成4个“子项目”,而每个子项目在拆分成每次课要完成的“小任务”。在整个教学过程中,“小任务”是“子项目”的基础和必要准备,“子项目“则是“项目”的基础和必要准备。

4.2 项目评价

项目实施结束后要进行评价,为了能使评价更趋客观、准确、全面,在各组项同按规定时间完成后,通过组内学生自我总结、小组间交流、老师点评三级评定情况来确定。学生自我总结,学生本人进行自评,这利于学生的自主学习;小组互评,由各小组成员根据各组员对本小组贡献的情况进行互评,互评有利于学生共享学习成果,从不同的角度发现问题以及提出改进意见;教师点评,由教师对各项目进行综合评价,是否达到项目的目标要求。学生总的评价成绩中,自评占30%,互评占30%,总评占40%。

5 总结

通过采用项目教学法开展课程的教学实践,深化了课程的教学改革,提高了课程的教学水平和教学质量。从根本上改变了教师的教学理念,更重要的是改变了学生的学习态度和学习方法,使学生有了明确的任务,能让学生围绕项目组织所学知识和学习资源,学习的主动性、积极性能得以发挥,使得大部分同学对程序设计语言都很感兴趣,受到了学生的欢迎,并取得了较好的教学效果。这是传统的教学法所达不到的效果。同时发掘了学生的创造潜能,提高了学生用计算机语言来解决实际问题的综合应用,并提高了教师的动手实践能力。

摘要:以真实的工作任务或产品为载体来实施课程整体设计,并将项目教学法应用于《C#.NET》课程教学中,充分体现了工学结合的教学特点。

关键词:项目教学,工学结合,课程设计

参考文献

[1]朱香卫,邹羚,张建,等.《ASP.NET程序设计》精品课程开发与建设[J].职业技术教育,2010(31).

[2]郝蕊洁,万小红.项且教学法在非计算机专业《C语言程序设计》课程中的实践[J].电脑知识与技术,2009(9).

【C#.NET】推荐阅读:

上一篇:镍钛聚髌器下一篇:成人教育现状

本站热搜

    相关推荐