C#技术

2024-09-11

C#技术(共7篇)

C#技术 篇1

1 引言

一般采用C/S架构的系统, 其权限管理功能往往很简单, 有的系统用户较多, 系统的业务流程复杂, 随着用户职能和业务流程变化, 用户操作系统的权限也不断变更, 而一般的用户权限管理程序只能管理到窗体画面, 每次修改某个用户的权限很不方便, 甚至需要改动程序。 正是基于上述问题而设计开发, 可以很好地帮助系统管理员轻松灵活地实现用户操作系统的权限管理, 提高了系统管理员的工作效率, 减轻了系统开发人员的工作量。 下面将介绍基于C# 开发的系统权限管理技术的应用方法。

2 数据表的建立

权限管理功能的开发软件为VS2008, 数据库采用Oracle10, 首先在数据库中建立需要的数据表:

(1) 用户信息表: HG_PORTAL_USER, 保存用户的信息, 如表1 所示。

(2) 角色表: HG_ZBS_JS_PZ, 保存角色信息, 如表2 所示。

(3) 系统资源表: HG_ZBS_QX, 保存系统上窗体的组件信息, 如表3 所示。

(4) 角色与用户对应关系表: HG_ZBS_YHQX, 用来保存某个用户与角色的对应关系, 如表4 所示。

(5) 角色与系统资源的对应关系: HG_ZBS_JS, 用来保存某个角色有哪些系统资源, 如表5 所示。

3 系统权限管理的功能描述

对于C/S架构下的窗体程序来说, 很多功能都是通过操作组件 (控件) 来完成, 比如buttton, menu等, 通过这些操作这些组件 (控件) 来完成数据库增、 删、 改、 查以及其他功能, 也就是说系统的权限管理的本质就是对用户授予操作这些组件 (控件) 的功能, 下面开始介绍基于C# 的系统权限管理技术的应用方法。

(1) 系统资源的初始化, 就是将系统中窗体上所有的组件 (控件) 的Visible设为false, 然后遍历窗体上的所有组件 ( 控件) , 将其name、 text等属性值保存在数据库中, 实现该功能的代码为:

上面代码实现了将窗体上组件的name、text保存在系统资源表HG_ZBS_QX中, 对于菜单的使用方法Get Menu StripItem Name完成遍历。

(2) 授权管理。 首先在用户信息表HG_PORTAL_USER中创建用户, 比如账户描述为46615 和46986, 在角色表HG_ZBS_JS_PZ中创建角色, 比如角色代码为1001; 然后将用户46615 和46986 对应在角色1001 下, 对应关系信息保存在角色与用户对应关系表HG_ZBS_YHQX。 中; 在将系统资源对应在角色1001 下, 对应关系信息保存在角色与系统资源的对应关系HG_ZBS_JS中。 这时, 用户通过角色与系统资源建立了对应关系, 对该用户授权完成。 显示效果如图1 所示, 窗体资源查询和用户查询下的红色部分表示该角已与系统资源、 用户建立了对应关系, 已授权; 白色部分未授权。

(3) 用户登录系统后, 系统首先加载用户对应的角色拥有的窗体组件资源, 然后将这些组件的Visible设为True, 用户就可以在系统窗体上看到这些组件, 便可以操作组件, 代码如下:

4 结语

以上的一些使用方法是在工作中学习和摸索出来的, 并在实际工作中广泛使用, 不足之处, 还要进一步学习完善。

C#技术 篇2

利用Visual C#语言可快速编写各种基于Microsof.NET平台的应用程序, .NET平台集成了对解决方案的设计、调试、开发、部署和管理的功能, 其一整套的开发工具组件, 也为C#提供了一个易用且逻辑结构一致的程序设计环境。

1 网络通信基础

Internet时代的软件应用系统基本上均会涉及到网络技术, 单机软件开发技术已无法满足大中型的项目开发。所以, 为使计算机、不同的网络之间能够相互连接, 实现资源共享, 便需要一个标准的通信规则, 使计算机与相关设备按照相同的协议进行通信。目前在网络通讯上使用最为广泛的是TCP/IP协议[1]。

从名称上看, TCP/IP包括两个协议, 即传输控制协议 (Transfer Control Protocol, TCP) 和网际协议 (Internet Protocol, IP) , 但实际上TCP/IP并非单独的协议, 而是一个协议簇, 其包括了上百个功能众多的协议, 如地址解析协议 (ARP) 、Internet控制消息协议 (ICMP) 等。该协议簇分为4层次:链路层、网络层、传输层和应用层。通过TCP/IP协议, 互联的计算机之间可通过通信共享网络上的资源[2]。

2. NET中实现网络编程的类

.NET框架下的System.NET命名空间为需进行网络访问的开发人员提供了Win Sock接口的托管实现。其中的Socket类用于实现Berkeley套接字接口, 并为实现网络编程提供了大量方法。Socket作为其他网络协议的基础, 既可面向客户端开发, 又可面向服务器端开发, 在传输层面上使用较多。但在网络编程中, 通常传输的是海量数据, 若按Socket类的收发, 则会过慢, 无法满足网络传输的需要[3]。因此, 在应用协议层面上, 通常使用构建于Socket类之上的Tcp Client类和Tcp Listener类。其位于System.NET.Sockets命名空间中。相比位于底层的Socket类提供了更高层次的抽象, 封装TCP套接字的创建, 无需处理连接的细节。

2.1 Tcp Client类

Tcpclient类为TCP网络服务提供客户端连接, 其构建于Socket类之上, 以提供较高级别的TCP服务, 即用于在同步阻止模式下通过网络连接、发送和接收流数据。并通过与Network Stream对象关联, 使得用户可通过流操作方式实现对网络连接状态下海量数据的发送与接收。Tcp Client类的常用属性和方法如表1所示[4]。

利用Tcp Client类实现与TCP主机通信的步骤如下:

(1) 创建Tcp Client实例。Tcp Client类有4种构造函数的重载形式, 分别是Tcp Client () 、Tcp Client (Address Family) 、Tcp Client (IPEnd Point) 、Tcp Client (String, Int32) 。其中, Address Family是地址族, 定义了网络类型, 一般使用Address Family.Inter Network;IPEnd Point将网络端点表示为IP地址和端口号, 用于指定在建立远程主机连接时所使用的本地网络接口。

(2) 连接远程主机。若在实例化Tcp Client时未与远程主机连接, 则可通过Tcp Client类的Connect方法连接。Connect方法使用主机名和端口号将客户端连接到远程主机。

(3) 发送和接收数据。Tcp Client使用标准的Stream流处理技术, 利用Network Stream实例的读写操作来实现网络数据的发送和接收。Network Stream与普通的Stream流不同, Network Stream没有当前位置的概念, 不支持查找和对数据流的随机访问。Network Stream实现通过网络套接字发送和接收数据的标准.NET框架流机制, Network Stream支持对网络数据流的同步和异步访问, 但不支持对网络数据流的随机访问。

所以, Tcp Client实例只有在建立并与远程主机连接成功后, 才能使用Get Stream方法以返回NetworkStream实例, 然后通过获取的Network Stream实例的读写方法Write和Read来发送和接收数据。这两种方法的原型是

int Write (byte[]buffer, int offset, int size) ;//把buffer中的数据写入Network Stream中

int Read (byte[]buffer, int offset, int size) ;//从Network Stream中读取数据到buffer

需注意, Network Stream的读写均是针对字节数组, 即Byte数据类型进行的, 若要对读写的内容进一步操作, 则需将Byte转换成字符串, 即string类型。

(4) 关闭TCP套接字。在与服务器完成通信后, 必须调用Close方法释放所有的资源。

2.2 Tcp Listener类

通常情况下, 服务器端应用程序在启动时将首先绑定本地网络接口的IP地址和端口号, 然后进入侦听客户请求的状态, 以便于客户端应用程序提出显示请求。一旦侦听到有客户端应用程序请求连接侦听端口, 服务器应用程序将接受请求, 并建立一个负责与客户端应用程序通信的信道, 即通过创建连接套接字与客户端应用程序建立连接, 由连接套接字完成与客户端应用程序的数据传送操作, 服务器端应用程序继续侦听更多客户端连接请求。

Tcp Listener类是专为服务器端设计的, 用于监视TCP端口上传入的请求, 接收传入的连接请求并创建Tcp Client实例以处理请求, 并可使用此连接发送和接收数据包。该类的常用属性和方法如表2所示。

通过Tcp Listener类创建服务器端以完成通信的步骤如下:

(1) 创建Tcp Listener实例。Tcp Listener类提供了3种构造函数的重载形式, 分别是Tcp Listener (port) 、Tcp Listener (IPEnd Point) 、Tcp Listener (IPAddress, port) , 其分别根据指定的侦听端口、IPEnd Point对象、IPAddress对象和端口号来创建Tcp Listener的实例, 且实现与默认端口或指定IP地址和指定端口的绑定。

(2) 启动侦听。Tcp Listener实例创建成功后, 便可调用Start方法启动侦听, 该方法会自动调用Tcp Listener实例的基础Socket上的Listen方法, 开始侦听客户的连接请求。

(3) 接受连接请求。一旦Tcp Listener侦听到有客户连接请求时, 便可使用Accept Socket或Accept Tcp Client方法来接受当前在队列中挂起的连接请求。这两种方法分别返回一个Socket或Tcp Client实例以实现与提出连接请求客户的数据交流。

(4) 发送和接收数据。若接受连接请求时返回的是Socket实例, 则可用其自身的Send和Receive方法实现与客户端的通信;若返回的是Tcp Client实例, 则可通过对Network Stream数据流的读写Read和Write方法来实现与客户端的数据通信。在实际中, 与服务器连接的通常不止一个客户端, 服务器需同时与多个客户建立连接并通信, 此时需引入多线程技术, 为每个客户的连接建立一个线程, 并在该线程中进行数据通信。

(5) 关闭连接。在与客户程序完成通信后, 必须停止侦听套接字, 其可通过调用Tcp Listener类的Stop方法来实现。同时也必须关闭从Accept Socket或Accept Tcp Client返回的任何实例, 以释放相关资源。

3 通信流程

在使用TCP/IP协议进行通信时, 应先建立服务器的对象, 一般以当前主机作为服务器, 所以IP地址选取本机地址, 通信端口一般选取>1 024的闲置端口, 利用IP地址和端口建立完成服务器后, 调用Start () 方法开始侦听该端口上是否有挂起的连接请求, 一旦有客户端发出连接, 服务器经判断调用Accept Tcp Client () 方法接受连接请求, 并同时产生一个连接套接字负责与该客户端应用程序进行通信, 以实现数据的发送与接收。一般服务器在创建新的进程与客户通信后, 会返回调用处等待是否有新的连接。客户端进程一般先创建Tcp Client类的实例, 然后使用Connect () 方法向一个指定服务器的指定端口发起连接, 一旦连接成功, 便说明该客户端与服务器的通信信道建立完成, 可利用网络流Network Stream的读写Read () 和Write () 方法实现发送或接收数据包。使用Tcp Client类和Tcp Listener类建立Socket连接的流程如图1所示。

4 程序框架

利用Tcp Client和Tcp Listener编写基于TCP/IP协议的网络通信代码, 不论是服务器端或是客户端, 均要首先在命名空间部分引入System..Net和System.Net.Sockets。当运行程序时, 先运行服务器端, 使其保持在监听连接状态, 然后再运行客户端程序。

(1) 服务器端。

同时可利用网络流读取客户端发送给服务器的数据。Network Stream类的实例将数据以Read () 方法读取到一个字节数组byt, 若用户需将读取到的数据进行显示以证明是否无误, 则必须将byt转化成字符串的形式。

(2) 客户端。

此时需注意, Connect () 方法中的参数IP地址和端口必须与服务器的设置保持一致。成功连接到服务器后, 客户端就可向其发送数据。

5 结束语

文中对利用Visual C#语言进行网络通信的编程方法作了探讨, 尤其是使用Tcp Client类和Tcp Listener类, 可方便高效地建立网络连接并收发数据。通过实验证明, 其生成的界面友好, 编写的程序也能较好地完成通信功能任务。

参考文献

[1]杨富国.Visual C#.NET网络编程案例解析[M].北京:清华大学出版社, 北京交通大学出版社, 2009.

[2]金华, 华进.C#网络编程技术教程[M].北京:人民邮电出版社, 2009.

[3]李新峰, 付志涛, 缪勇.亮剑.NET:图解C#开发实战[M].北京:电子工业出版社, 2009.

C#技术 篇3

关键词:C#,Excel,导入

1 概述

Excel以其功能强大,界面友好等受到了许多用户的欢迎。在办公的时候,正是由于Excel的这么多的优点,许多重要的数据,往往以Excel电子表格的形式存储起来[1]。这样就给程序员带来了一个问题,虽然Excel功能比较强大,但毕竟不是数据库,如何把Excel中的数据读取到程序以便进一步的加工和处理,就是本文要进一步探讨的问题。

2 基本原理

2.1 程序设计前期准备

1)安装Office程序集。

在本系统开发中,由于要对Word文档对象进行编程,所以必须运用Office的程序集,它属于office 2003的可选组件,如有office2003安装程序或者光盘,可再次运行安装程序,选择“添加或删除组件”,在应用程序的安装列表中展开Microsoft Office Excel节点,并选择安装“.Net Programmability Support(.Net可编程支持)”项目,这是在.Net上实现对Excel文档操作的基本环节。

2)制作Excel模板。

为确保导入成功和导入的数据完整、准确,一般都会规定Excel表格数据的填写格式和必填栏目,并制作为Excel模板让用户填写。这样可以按照定义好的格式来导入Excel中的数据。

3)开发语言选择。

由于需要操作的是Excel文档,于是我们选择了C#作为开发语言。在Visual Studio环境下的C#的可视化开发非常的迅速,便捷且相关文献充足,使得开发过程更加顺畅[2,3]。

2.2 COM组件操作Excel原理

一般来说,Excel的操作方法有两种:把Excel文档作为数据源和调用COM组件操作Excel[4]。在Visual C#中可以直接以数据源的方式操作Excel,具体的操作方法和操作数据库类似,很多文章对于这个问题有比较多的研究,这里就不详细讨论了。调用COM组件操作Excel的核心是使用Office 2003程序集中的命名空间Excel,在这个命名空间中定义了四个类:

1)Application类。Application类处于Excel对象层次结构的顶层,表示Excel自身的运行环境。

2)Workbook类。Workbook类直接地处于Application类的下层,表示一个Excel工作薄文件。

3)Worksheet类。Worksheet类包含于Workbook类,表示一个Excel工作表。

4)Range类。Range类包含于Worksheet类,表示Excel工作表中的一个或多个单元格。

3 功能实现

3.1 实现

任何操作Excel的动作首先肯定要用Excel应用程序,因此要new一个Applications实例,即Microsoft.Office.Interop.Excel.ApplicationClass app=new ApplicationClass(),并在最后将此实例释放。然后使用app.Workbooks对象的open方法打开相应的Excel文件,访问相应的工作表得到工作表的行数与列数,并把数据读取到程序中以便做进一步的处理。其数据导入的流程图如图1所示。

3.2 部分核心代码

按照上述的方法设计的Excel数据导入模块在Visual C#2005中经β测试通过,具体效果如图2所示。

4 结束语

本文是在C#下使用了COM组件完成了Excel文件的导入,虽然COM组件在结构上和.Net Framework SDK存在很大的不同,但是利用COM组件可以很容易的实现Excel数据的导入。另外,由于现代化的办公环境中Excel文件的广泛使用,对于Excel的数据导入进行统一处理具有很大的需求,因此具有很强的实用性。

参考文献

[1]刘万军.利用ASP.NET操作Excel文档[J].电脑知识与技术,2009(5).

[2]杨晓强.Visual C#.NET程序设计[M].北京:清华大学出版社,2006.

[3]Libery J,Macdonald B.C#3.0学习指南[M].北京:人民邮电出版社,2010.

C#技术 篇4

1 数据采集与组态软件

1.1 数据采集概况

数据的采集是数字化、点子扫描系统记录的过程以及内容和属性的编码过程, 其主要的是从相应的传感器和其他等待测量的设备等模拟和数字被测的单元当中, 自动的采非电量或者是电量的信号, 将其送到上位机上进行分析和处理的过程。数据采集系统主要的是结合基于计算机或者是其他的专用测试的平台的测量软件和硬件产品, 以此来灵活的实现用户自定义的系统。数据采集技术已经被广泛的引用到各个领域当中, 其随着科学技术的发挥在那也得到快速的发展, 数据采集主要的目的是为了测量电流、电压以及温度等多种物理现象, 数据采集系统整合了传感器、信号、信号调理以及数据采集设备和应用软件等。

1.2 组态软件概况

组态软件又被称之为组态监控软件系统软件, 其主要的是指一些数据采集和过程控制当中专用的软件。其是处在自动控制系统监控层一级的软件的平台以及开发环境, 使用相对灵活的组态的方式, 为相应的用户提供快速构建工业自动化控制监控系统功能的, 并且具有通用层次的一种软件工具。组态软件当前应用的范围非常的广泛, 其可以应用到电力系统、石油以及化工等领域的数据采集以及监视控制以及过程控制等诸多的领域。组态软件是具有专业性的, 一种组态软件只能够适用于某种领域, 组态软件大多数都支持各种主流的工控设备以及标准的通讯协议, 并且一般情况下还会提供分布式数据管理以及网络功能。

1.3 数据采集和组态软件的关系

数据采集是组态系统运行的前提, 数据采集的对象是组态系统加工和处理的对象, 数据采集是组态系统的核心的组成部分。数据采集系统能够准、及时的采集到相关的数据, 能否良好的进行功能上的扩展, 以及能否灵活的进行运用, 是关系到组态系统正常运行的关键性的因素, 其已经成为在设计中的一个重要的问题。

2 C#与组件设计

C#是微软公司发布的一种面向对象的, 运行于.NET Framework上面的高级程序设计语言, 其主要的包含了单一继承、接口以及与Java几乎相同的语法以及编译成中间代码再进行运行的过程。C#是一种安全的、简单的、稳定的以及优雅的, 是由C和C++语言所衍生出来的面对对象的高级编程语言。C#语言在继承了C和C++语言强大的功能的同时, 还去除了它们本身的一些复杂的特性, C#综合了VB相对简单的可视化的操作以及C++语言高效运行的特点, 是一款操作能力强大、语法风格优雅、语言特征创新以及便捷的面向组件编程的支持成为.NET开发的首选的编程语言, 其能够为在分布式环境中的开发提供适用的组件开发和应用。

组件简单的来说就是对象, 组件主要的是对数据和方法的简单封装, 一个组件是代表一个系统当中实现的物理的部分, 其主要的包含了软件代码或者是相应类似的内容, 比如脚本和命令文件等。组件并不是很复杂, 自己可发的组件通常情况下可以分为以下三种类型:复合组件、扩展组件以及自定义组件。其中复合组件是将享有的各种组件结合起来, 形成一个新的组件, 能够将所组成组件的性能集中起来;扩展组件主要的是在现有组件的组件入门上派生出一个新的组件, 为原有的组件增加新的性能或者是更改原有组件的控能;自定义组件是直接的从System.作Windows.Forms.Control类派生出来, 其具有很强的灵活性, 同时对于开发者的要求也是非常高的。组件的设计是当前系统设计的重要的组成部分, 组件是否具有灵活的结构, 能否提供方便的调用接口等, 将直接的会影响到组件的整体质量。

3 C#封装C接口的硬件驱动

随着科学技术的不断发展, 当前硬件设备的种类在不断的增加, 而硬件制造商提供的主要的驱动程序有以下两种:一种是以DLL的形式提供, 其中以C或者是C++的接口居多;另一种是以Active X的形式提供, 以下就主要的对DLL和C#之间的配合进行讨论。在C#运行于.NET Framework上的时候, 其相应的代码是安全的, 被称之为托管代码。在托管代码当中调用非托管代码的步骤如下:首先是获取非托函数的信息;其次是对该非托管函数进行声明, 并且设置P/Invoke所需的属性;最后就是对该函数的调用。在完成上述第一步的过程当中, 可以使用dumpbin.exe或者是depends.exe工具, 这两个工具在VC++.NET部分提供。以下就一个完整的互操作的调用实例做探讨分析。

如果已经存在一个VC++6.0创建的DLL文件, 其文件名称之为Dev Agent.dll, 其中包含了被导出的函数extern”C”HRESULT_s t d c a l l D o Wo r k (c o n s t I N T i D e v I D, I N T i ICmd ID) ;其在托管代码防止使用此函数的代码表示为:[Dll Import (“Dev Arent.dll”) ]static extern int Do Work (const int i Drv ID;int i ICmd ID) ;在声明之后就可以直接的调用了, 此外, 在声明的时候必须使用extern进行修饰, 其主要的告知编译器, 此函数是在外部实现的方法体, 还应该用static进行修饰, 表明不需要实例化就可以进行调用。

4 结束语

数据采集组件的设计的科学合理性对于一个涉及到多种硬件设备的系统来说是非常重要的, 在组件设计的过程中, 应该尽最大努力保障其组件的高效性和灵活性, 只有这样才能够保障对系统进行有效的扩展。

摘要:随着科学技术的不断的发展, 组态软件当前已经被广泛的应用到各个领域中, 组态软件运行的前提和基础是数据采集, 数据采集是组态软件重要的组成部分, 数据采集的优劣将直接的影响组态系统的运行。以下就主要的对C#设计实现数据采集组件的关键技术以及设计的思路做探讨分析, 保障其设计的科学合理性, 使组态软件能够发挥出最佳的效果。

关键词:C#设计,数据采集,组件,关键技术设计思路

参考文献

C#技术 篇5

条形码技术最早出现在上世纪40年代,但直到70年代左右才得到实际应用,而随着现代电子技术和信息技术的发展,条形码技术已经被世界上许多国家和地区普遍使用,并逐步渗透到多个技术领域。条形码种类很多,常见的大概有二十多种码制,目前。国际上广泛采用的商品条形码种类有EAN、UPC码,主要用于在世界范围内唯一标识一种商品,在超市中看到的通常就是EAN和UPC码,其中,EAN码已成为电子数据交换(EDI)的基础。描述了用于生成EAN-13条形码的算法以及基于C#的实现过程。

2 条形码组成

EAN-13条形码一般由前缀码、制造厂商代码、商品代码和校验位组成。通常,第一个前缀码被打印在条形码的左边,第二个前缀码被作为条形码下方左手边的那组6位数的第一个字符打印,厂商码是条形码下方左手边的后四位数和右手边的前一位数,产品码是条形码下方右手边的第二至五位数,校验位则是条形码下方右手边的最后一位。条形码组成如图1所示。

前缀码是用来标识国家、地区或应用领域的代码,赋码权在国际物品编码协会,如690-695代表中国大陆,489代表香港特区,978代表国际标准书号(International Standard Book Number)简称ISBN。

制造厂商代码的赋权在各个国家或地区的物品编码组织,由国家物品编码中心赋予制造厂商代码。

商品代码是用来标识商品的代码,赋码权由产品生产企业自己行使,生产企业按照规定条件自己决定在自己的商品上使用哪些阿拉伯数字为商品代码。

校验位是一个附加的位,用来验证一个条形码是否被正确的扫描。然而扫描可能产生不正确的数据,这可能是由于不一致的扫描速度、不完善的打印或一系列其他的问题造成的,因此,有必要验证条形码的其余数据已经被正确诠释。校验位是从条形码中其余的数字位中计算得到的。通常,如果校验位和基于已经扫描得到的数据计算出来的校验位的值相同,就可以完全信任条形码已经被正确扫描。

3 计算校验位

把一个值编码为EAN-13条形码,首先需要计算出校验位。条形码校验位计算公式是把条形码从右往左依次编序号为“1,2,3,4……”,然后从序号二开始把所有偶数序号位上的数相加求和,用求出的和乘3,再把所有奇数序号上的数相加求和,用求出的和加上偶数序号上的数的和乘3的积,然后得出和。最后用大于或等于这个和的最小的10的倍数减去这个和,就得出校验位。

计算校验位代码:

4 条形码编码

一个EAN-13条形码拥有如下物理结构:左手边警戒条,编码为101;前缀码的后两个字符及厂商码的前4个字符,按照下面表格1描述的左手边字符方式编码;中间警戒模式,编码为01010;厂商码的第五个字符和产品码的4个字符,按照表格描述的右手边字符方式进行编码;校验位,按照表格描述的右手边字符方式进行编码;右手边警戒条,编码为101。中间警戒模式左边的字符被作为符号的“左手边”而中间警戒模式右边的字符被作为符号的“右手边”。

EAN-13前缀码的第一个字符用来校验左手边字符的奇偶性。这就是说,EAN-13数值的第一个字符的值决定了条形码左手边字符将按照表1中的哪种奇偶性来编码。

奇偶性取决于EAN-13值得第一个数位。奇偶性编码如表2所示。

例如对值“9787115201003”进行EAN-13编码。其中“978”是前缀码,“71152”是厂商码,“0100”是产品码,“3”是校验位。这是一本图书出版物上的条形码。

接下来,观察前缀码的第一个数位(条形码中最左边的那个数位)是数字“9”。参照奇偶性编码表中的数字“9”,可以知道前缀码后两个数位和厂商码前四位应该按照“奇/偶/偶/奇/偶/奇”的模式进行编码。这就是说前缀码第二个数位将按照“左手边奇数”性表进行编码,厂商码的第一个数位应该按照“左手边偶数”性编码的等。现在,可以按照如下步骤来编制条形码。之后将所有字符串连接起来就构成了最终的条形码。

(1)左警戒条(总是相同的):101。

(2)前缀码第2个数位[7]:按照左手边奇数性进行编码,0111011。

(3)前缀码第3个数位[8]:按照左手边偶数性进行编码,0001001。

(4)厂商码第1个数位[7]:按照左手边偶数性进行编码,0010001。

(5)厂商码第2个数位[1]:按照左手边奇数性进行编码,0011001。

(6)厂商码第3个数位[1]:按照左手边偶数性进行编码,0110011。

(7)厂商码第4个数位[5]:按照左手边奇数性进行编码,0110001。

(8)中间警戒条(总是相同的):01010。

(9)厂商码第5个数位[2]:按照右手边字符进行编码,1101100。

(10)产品码第1个数位[0]:按照右手边字符进行编码,1110010。

(11)产品码第2个数位[1]:按照右手边字符进行编码,1100110。

(12)产品码第3个数位[0]:按照右手边字符进行编码,1110010。

(13)产品码第4个数位[0]:按照右手边字符进行编码,1110010。

(14)校验位[3]:按照右手边字符进行编码,1000010。

(15)右边警戒条(总是相同的):101。

“1”代表一个条,“0”代表一个空间。因此,可以将这个数字字符串转换成他们的图形表示形式,为了能够更清晰的看出条形码的构造,在这张图上,每个字符,使用了交替的颜色来加以区分。在这个条形码上,每个有颜色的段都对应着1到15的一步,它覆盖了上面所描述的所有“步骤”。如图2所示。

条形码编码程序实现过程如下:

使用C#绘制条形码图形程序实现过程如下:

程序运行结果如图3所示。

5 结语

条形码技术极大地方便了商品流通,现代社会已离不开条形码。据统计,目前我国已有50万种产品使用了国际通用的商品条形码,在国内推行使用的就是EAN条形码。EAN商品条形码分为EAN-13(标准版)和EAN-8(缩短版)两种。仅就EAN-13条形码的编码原理及绘制过程进行了探讨,供大家共同切磋、进步。

摘要:详细介绍了EAN-13条形码的组成、校验位的计算以及编码原理,通过对实际案例的开发,可以使读者轻松掌握使用C#对EAN-13条形码进行编码及绘制的过程。

关键词:条形码,EAN-13,C#

参考文献

[1]UPC-A SYMBOLOGY.http://www.barcodeisland.com/ean13.phtml.

[2]条形码_百度百科.http://baike.baidu.com/view/13740.htm.

C#技术 篇6

本文主要是介绍一款用C#技术开发《网络串口测试工具》的软件, 该软件是为了满足拼接墙工程实际测试, 应用, 集成过程中一些需求而使用C#技术快速开发出来的软件。这款软件的特点是实用, 简单, 同时应用C#开发软件方便、稳定、高效。

需求综述:

在拼接墙工程中的系统搭建, 软件开发以及工程项目集成的时候都需要各种软件和硬件的应用整合, 例如:矩阵切换器, 视频切换器, 控制终端等等, 因为这些硬件都是系统的一个组成部分, 它们的测试, 应用, 集成十分重要, 只有把各个模块都合理的应用起来, 这样才能保证整个系统的成功。但是, 由于这些软件或者硬件模块都是有网路 (TCP/UDP) 或者串口, 就带了如何快速测试, 应用, 集成。为了测试, 应用, 集成的方便, 因此决定开发这个工程应用软件, 用于提高开发以及测试效率。

C#快速开发的优势:

现在软件开发的工具很多, 有C++, C#, jave等等。由于我们的需求只是测试, 集成用辅助的软件, 目的主要是开发快, 应用简单。因此我选用现在比较流行的C#开发。实际应用中也发现C#快速开发的优势。C#的优势在于很多功能都已经封装好了, 例如:sockets, serialport等等, 这样就不需要你去封装, 直接调用就可以了, 这样就大大加快了开发速度。同时C#在WinForm上的开发的直观简便, 也很容易让你上手开发, 另外, 其字符之间的转换也是其优势之一。

应用场合:

现在很多硬件或者软件都会提供相应的扩展功能, 其对外的接口常用的有网络 (TCP/UDP) 或者串口。一旦工程中需要购买其他厂商的的商品或者自身商品向其他采购商提供对外接口, 那就可以运用该测试软件进行测试。这样就十分容易简单的测试以及判断问题和功能。

测试系统简单框图以及软件界面:

具体功能说明:

主要是两大功能块:网络测试和串口测试。

一, 通过网络接口发送字符串或者十六进制数据, 同时接受对方的反馈。那么你只要在发送内容里面内填入相应的内容, (例如RGB1V1) , 选择发送内容的形式是字符串还是十六进制。同时选中TCP或者UDP, 填写好IP地址和端口, 然后按发送, 然后会自动触发开始接收, 这样如果发送的协议内容, 对方接口有反馈就会在收到内容里面显示内容, 同时, 你可以选择是字符串还是十六制的形式的查看返回的内容。这样就可以根据实际情况来看看这个测试整个网络回路是否正确。

二、通过串口发送字符串或者十六进制数据, 那么你只要在发送内容里面内填入相应的内容, 同时勾选串口, 选择哪个串口 (例如:COM1, COM2等等) , 然后, 输入波特率, 数据位, 奇偶校验, 停止位, 就可以测试对应的串口连接的终端了。同时, 你可以选择是字符串还是十六制的形式的查看返回的内容。这样就可以根据实际情况来看看这个测试整个串口回路是否正确。

主要代码简单说明:

使用串口主要代码:

通过上述的代码和功能, 你可以看到使用C#可以方便简单迅速的开发出满足实际工程需要的软件《网络串口测试工具》, 由于该软件是为了公司特别开发定制的, 在拼接墙工程中为开工程, 集成开发带了很多方便, 是一款实用性很强的工程软件。

摘要:本文主要是介绍一款用C#技术开发《网络串口测试工具》的软件, 该软件是为了满足拼接墙工程实际测试, 应用, 集成过程中一些需求而使用C#技术快速开发出来的软件。这款软件的特点是实用, 简单, 同时应用C#开发软件方便, 稳定, 高效。

关键词:C#,TCP,UDP,串口,工程测试

参考文献

[1]David B.Makofske, Michael J.Donahoo, Kenneth L.Calvert, TCP/IP Sockets in C#-Practical Guide for Programmers, Elsevier Inc.2004

C#技术 篇7

关键词:语义网,Web3.0技术,Baidu MapAPI编程,地理数据获取,SQLite引擎,Jena工具,地理本体,本体构建, IKVM.NET虚拟机

经过近10多年的研究与发展, 作为Web3.0重要组成部分的语义网已经走出实验室进入工程实践阶段。由于万维网上已产生了浩瀚的网络信息和知识资源, 寻找人们所需要的准确信息常常耗费大量人力精力。提供网络信息的语义半自动化或自动化处理已迫在眉睫。这就使语义网是成为Web 3.0最有希望的基础技术。它的核心思想是:通过给万维网上的文档 (如:HTML) 添加能够被计算机所理解的语义 (Meta data) , 从而使整个互联网成为一个通用的信息交换媒介。语义网与本体技术实际上是人类知识领域的概念标准化运动, 这就涉及到逻辑描述 (Description Logics) 和推理 (reasoning) 技术。由于描述网络数据的需要, 科学家们开发了一系列元数据描述语言, 如RDF/RDFS等。出于建模后进行语义分析与推理的需要, 科学家规定了本体描述语言 (如OWL) , 并开发了种种特定领域的本体 (Ontology) 。所谓本体, 可以简单地将它理解成特定知识领域中满足共同约定的常识部分, 这对于特定领域信息分类是必要的一步。

接下来要实现的功能就是主要利用语义网技术, 在C#环境中基于IKVM的Jena接口来实现铁路交通的语义查询功能, 该功能结合了地理信息系统的周边领域, 获取城市中心范围内与火车站相关的POI信息, 存储于SQLite数据库中, 然后利用Jena推理进行“包含于”某城市的语义查询。本程序实验数据主要为在线调用百度地图数据。程序最后的实现效果如图1所示。

本程序使用的是SQLite数据引擎和Java API编程, 因此很容易移植到Android系统。

功能实现分为3篇介绍。本篇主要讨论了总体设计思路, 介绍在C#中进行地理数据的网络获取、SQLite数据操作类和本体操作类的设计, 第二篇介绍从关系数据库中创建本体与定义推理规则。第三篇介绍集成本体推理结果并在地理空间中可视化。

1 问题的提出

传统的信息检索通常是通过关键词来实现的, 其原理是用户提出查询式—通常由若干个反映主题的词汇组成, 然后系统在数据库中将提问式与预存的文本关键词进行自动匹配, 两者相符的文本被检出。但是大量的事实证明, 这种通过词汇简单匹配检索出的结果并不是最优的。例如, 在进行火车站点换乘查询时 (目前大多数程序就是根据关键词查询) , 当用户查询“武汉”关键词, 往往只能查询到包含“武汉”字符的记录, 而使用者的真实意图可能还需要知道武汉区域的“武昌站”、“汉口站”。本程序就是要利用语义网技术解决这个问题。

2 设计思路

下文所述的具体实现方法是根据百度地图的Web服务进行城市中心位置的周边查询, 将查询结果存储到SQLite数据中并与铁路交通数据相结合, 利用运行于IKVM.NET上的Jena API创建铁路站点本体, 将本体存储为owl文件;当用户进行火车站点查询时, 基于创建完的本体模型进行规则推理和本体查询, 得到语义查询结果并在网络电子地图上显示。方法设计思路如图2所示。

以下分别简单介绍一下百度地图Java Script API地图引擎、SQLite引擎、Jena工具、IKVM.NET虚拟机。

百度地图Java Script API提供了地图基本功能 (显示、平移、缩放、拖拽等) 、兴趣点搜索、周边搜索、公交驾车路线搜索、逆/地理编码等, 可以十分方便地获取地理信息数据并搭建电子地图应用。

SQLite是一款轻型的嵌入式数据库, 它有着相当小的内存占用和高速的响应, 遵守ACID的关联式数据库管理系统;它的设计目标是嵌入式的, 而且目前已经在很多嵌入式产品中使用了它, 在嵌入式设备中, 可能只需要几百KB的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统, 同时能够跟很多程序语言相结合, 比如C#、PHP、Java等, 还有ODBC接口;比起Mysql、Postgre SQL这两款开源的数据库管理系统来讲, 它的处理速度比他们都快。SQLite 3版本已经发布, 很多著名的公司 (诸如Adobe, Apple, Google, Sun, Symbian) , 开源项目 (Mozilla, PHP, Python) 都在产品中装配SQLite。Android中, SQLite是被集成于Android runtime, 每个Android应用程序都可以使用SQLite数据库。

Jena由HP Labs (http://www.hpl.hp.com) 开发的开源的Java开发工具包, 用于Semantic Web (语义网) 中的应用程序开发。Jena框架主要包括: (1) 以RDF/XML、三元组形式读写RDF:其内容包括RDF模型的创建、读写、查询等操作。 (2) RDFS, OWL, DAML+OIL等本体的操作:Jena框架包含一个本体子系统 (Ontology Subsystem) , 它提供的API允许处理基于RDF的本体数据。本体API与推理子系统结合可以从特定本体中提取信息。 (3) 利用数据库保存数据:Jena 2允许将数据存储到硬盘中, 或者是OWL文件, 或者是在关系数据库中。这里处理的本体就是由OWL文件读入的。 (4) 查询模型Jena 2提供了ARQ查询引擎, 它实现SPARQL查询语言和RDQL, 从而支持对模型的查询。 (5) 基于规则的推理:ena 2支持基于规则的简单推理, 其推理机制支持将推理器 (inference reasoners) 导入Jena, 创建模型时将推理器与模型关联以实现推理。

由于Jena是Java开发包, 因此, 在C#环境中使用Jena, 必须要使用虚拟机让Java程序和.NET应用程序一起协同工作。程序选中的C#环境中Java虚拟机就是IKVM.NET。

IKVM.NET包含以下的部分:IKVM.Runtime.dll VM运行时和所有支持代码。它包括以下的功能:Byte Code JIT编译器和验证器, 使用JIT将Java Byte Code编译为CIL (C中间语言) 。对象模式映射结构, 将.NET中的System.Object, System String, System.Exception映射为Java代码中的java.lang.Object, java.lang.String, java.lang.Throwable。管理本地方法 (在Classpath中) 的.NET重新实现。IKVM.GNU.Classpath.dll被编译的GNU Classpath版本, 它是由自由软件基金会实现的Java类库和一些IKVM.NET附加代码组成的。ikvmc.exe静态编译器, 被用来编译java类和jar使其成为.NET汇编 (静态模式) 。ikvmstub.exe一个从.NET汇编生成存根类的工具, 就如javap一样反编译.NET汇编。

以上的API或者开源代码都是本程序要用到的。

3 使用SQLite.NET设计数据操作类

程序在.NET使用的wrapper是SQLite 3.7.14., 命名空间为System.Data.SQLite, 它只需要一个dll, 接口符合ADO.Net的定义, 性能也不错, 支持集成VS2005、VS2008和VS2010, 支持.NET Framework 2.0-4.0, 而且Android系统已经集成了SQLite, 这是个亮点。。

下面详细介绍怎么使用SQLite.NET实现一个操作SQLite数据库的类。因为SQLite.NET符合ADO.NET的规范, 其使用方式基本和Ole Db、Odbc、Sql Client等一致。但是, 它的SQL语句略有区别, 如“udpate”语句的字符串连结操作符为“||”, 而不是有些数据库系统的“+”符号:

没有空间定位信息的SQLite事例数据内容如图3所示。

4 根据地图Web服务添加火车站点空间信息

程序中用到的测试数据是近期的部分铁道交通票价和主要城市名称, 由于这两种数据只有属性信息, 没有地理坐标信息, 也没有空间拓扑关系中的“包含于”那个城市的关系信息, 因此这些数据需要进行空间定位以获取这些信息。

程序利用.NET Framework类库中的Web Client类调用Baidu地图的Place Web服务来完成空间信息获取。百度地图Place服务是一个供程序员调用的、http形式的地图服务接口。它主要服务那些非网页程序的调用, 例如C#、C++、Java等开发语言都能发送http请求且能接收返回数据。用户只需在请求的url字串中拼接好关键词、检索区域和一些过滤条件, 即可获取到想要的POI点的信息, 包括该点的名称、地址、分类等信息。目前, Place API提供的功能包括:矩形区域关键词检索、周边区域关键词检索和城市内关键字检索。

Place Web服务地址及格式为:http://api.map.baidu.com/place/search?&query=关键词&bounds=查询区域&output=输出格式类型&key=用户密钥。

程序用到的两个地理信息检索为:

(1) 指定城市内检索 (返回xml数据)

如:http://api.map.baidu.com/place/search?&query=北京&re gion=北京&output=xml&key=37492c0ee6f924cb5e934fa08c6b1676

返回事例数据为:

(2) 周边区域检索 (返回xml数据)

如:http://api.map.baidu.com/place/search?&query=火车站&location=39.914889, 116.403874&radius=2000&output=xml&key=37492c0ee6f924cb5e934fa08c6b1676

返回事例数据如图4所示。

程序的Web Client对象从URI标识的以上的地图服务资源接收脱密变形后数据, 一边用城市内检索进行城市坐标定位, 一边用周边区域检索对火车站点定位并确定“包含于”关系, 程序具体实现如下。

得到坐标位置和站点位置“包含于”关系的样例数据, 如图5所示。

5 使用Jena创建本体的类、属性和个体

一般来说, 可以在Protege这样的编辑器里构建了本体, 但用程序操作本体是很有必要的, 因为在很多情况下如要从关系数据库中自动生成大量的本体, 靠人手通过Protege创建所有本体是不现实的。本应用程序里使用Jena创建OWL格式的本体。

Jena最基本的使用是处理RDF (S) , 但毕竟OWL已经成为W3C的推荐标准, 因此程序将使用com.hp.hpl.jena.ontology接口根据SQLite表的数据来创建本体。OWL核心是围绕三元组的, 即在很多资料中看到的陈述 (Statement) , 它的组成为:Statement= (Subject, Property, Object) , 其中Subject为主体, Property成为属性, Object成为客体。Individual称为个体。它是Subject、Object的一个实例, 例如在Statement= (Animals, Eat, Plants) 陈述中sheep是Animals的一个Individual, grass是Plants的一个Individual。一切的主体、客体、个体、类、属性等都可以称为资源 (Resource) 。在编程中OWL常用的是Ont Model, Ontclass, Ont Property, Individual。Ont Class可以用来创建主体、客体, Ont Propety用来创建属性, Individual用来创建个体, Jena结构如图6所示。

因此, 对应于关系数据库-本体, 在本应用程序中对应关系是:数据表-class (类) 、字段-属性 (Property) 、记录-个体

(Individual) 。

下面介绍代码具体实现:

6 结语

介绍了基于SQLite数据引擎、地图Web服务和C#环境中的Jena, 实现地理定位信息的网络获取和本体的类、属性等的构建。这一部分功能为利用语义网技术实现铁路交通的地理语义查询的实现进行了数据预处理和基本操作的准备工作。从本篇实现的功能可以看出, SQLite的执行效率高、地图Web服务能够方便提供有用的地理空间定位信息, 而使用IKVM, 可以使基于Java的开源程序很方便地集成到C#中使用。

参考文献

[1]董志.C#集成Google Map API进行地理空间的定位[J].电脑编程技巧与维护, 2011 (19) :47-53.

[2]Baader F, Horrocks I, Sattler U.Description Logics as Ontology Languages for the Semantic Web[M]//Lecture Notes inArtificial Intelligence.[S.l.]:Springer, 2005.

[3]http://www.ibm.com/developerworks/cn/java/j-jena/.

[4]http://www.sqlite.org/cintro.html.

[5]http://developer.baidu.com/map/.

上一篇:网络影视资源下一篇:企业资金回收管理研究