BillTypeCode 文本型(varchar) 是(自动递增) 否 单据类型编码 BillTypeName 文本型(varchar) 否 是 单据类型名称 BillWidth 整数型(int) 否 是 单据宽度 BillHeight 整数型(int) 否 是 单据高度 BillPicture 二进制数据类型(image)否 是 单据图片 BillCodeLength 整数型(int) 否 是 编码长度 Remark 长文本型(text) 否 是 标记快递类型 IsEnabled 文本型(char) 否 是 是否启用 (3)单据模版信息表用来存储快递单各属性的具体参数值,包括控制编码、单据类型编码、模板起点X轴坐标、模板起点Y轴坐标、模板宽度值、模板高度值、模板信息标记符、控制名、控制名的默认设置值、控制名的交换项10个字段。tb_BillTemple的逻辑结构如表3-3-3所示。
表3-3-3 单据模板信息表 字段名 数据类型 是否主键 是否允许空值 描述 ControlId 整数型(int) 是 否 控制编码 BillTypeCode 文本型(varchar) 否 否 单据类型编码 X 整数型(int) 否 是 模板起点X轴坐标 Y 整数型(int) 否 是 模板起点Y轴坐标 Width 整数型(int) 否 是 模板宽度值 Height 整数型(int) 否 是 模板高度值 IsFlag 文本型(char) 否 是 模板信息标记符 ControlName 文本型(varchar) 否 是 控制名 DefaultValue 文本型(varchar) 否 是 控制名的默认设置值 TurnControlName 文本型(varchar) 否 是 控制名的交换项 (4)快递单信息记录表用来存储快递单上各参数的具体信息内容,包括代号标记,单据类型编码、快递单号、控制编码、控制内容5个字段。tb_BillText的逻辑结构如表3-3-4所示。
表3-3-4 单据类型信息表 字段名 数据类型 是否主键 是否允许空值 描述 NoteId 整数型(int) 是 否 代号标记 BillTypeCode 文本型(varchar) 否 否 单据类型编码 ExpressBillCode文本型(varchar) 否 是 快递单号 ControlId 整数型(int) 否 否 控制编码 ControlText 文本型(varchar) 否 是 控制内容
11
第四章 系统设计与功能实现
4.1 操作类
为了便于系统的维护和管理,减少代码的冗余,同时增加代码的可复用性,本
软件定义了4个类,分别是DataOperate,CommClass,GlobalProperty,ReadFile。 新建文件夹DAL和Common,将DataOperator类归集到DAL文件夹中,其他三个类放入Common文件夹。
本系统自定义了一个数据操作类DataOperate,该类主要是用来封装应用程序与
数据库的连接,并实现对数据信息的添加、删除、修改以及读取等操作。在命名空间引人using System.Data.SqlClient命名空间,因为加了这个命名空间之后才可以使用该数据库操作。
在该类的主体代码中,(1)先声明数据库连接引用和数据库命令引用;(2)创建DataOperate构造方法,该构造方法主要用来读取和加载数据库连接信息,创建数据库连接对象和命令对象并设置数据库命令对象的连接属性,并对他们进行异常捕获;(3)为了获取数据库连接对象和数据库命令对象,定义Conn和Cmd两个只读属性,以方便在该类的外部操作数据;(4)定义ExecDataBySqls方法的作用是为了同时提交多条Transact-SQL语句,若该方法执行成功,则返回true值,否则返回false值;(5)定义GetDataReader方法来读取数据库中的数据,该方法封装了Command对象的ExecuteReader方法,最终返回SqlDataReader对象;(6)定义ExecuteScalar方法的作用是为了得到结果集中的第一行的第一列的数值,返回ExecuteScalar对象。(7)自定义GetDataTable方法来将数据绑定到界面上的DataGridView控件,该方法的返回值为DataTable对象。
4.2 GDI+绘图模型 本系统包含
5种类型的快递单,分别是丰速达快递单、申通快递单、天天快递
单、中通快递单、追封快递单,从快递单的外观上看,一张快递单由多种不同的字体和格式样的图案组成,考虑到快递单模板绘制的复杂性和快递单的打印需求,本系统采用面向对象的 .NET 应用程序绘图模型GDI+。
GDI+是与.NET Framework中的图形设备接口进行交互的入口,它有以下几方面的优点,(1)GDI+提供了一个与对象无关的模型,在GDI+中,程序员根据实际需要独立地创建和使用钢笔、画笔、图像或文字,并可以随时对它们修改,操作简易方便。(2)该应用程序可以在同一窗体上使用多种颜色和样式的钢笔绘制不同的图形对象。(3)程序员可以在GDI+编写与打印机、监视器或文件等图形设备进行交互的Windows和Web图形应用程序。
GDI+ 编程的核心System.Drawing.Graphics 类,它封装了一个GDI+绘图表面,
12
它可能是一个窗口,也可以是内存里的位图,本系统的快递单模板是通过创建System.Drawing.Bitmap类的一个实例来创建内存文件的位图。首先要确保using System.Drawing.Drawing2D和using System.Drawing命名空间被引用,然后创建实例bmp将绘制在窗口界面上的图形转化为24位RGB格式的图像存储到内存文件中,单位为像素,该对象需要指定图像的高度和宽度,主要代码格式:Bitmap bmp = new Bitmap(X, Y, System.Drawing.Imaging.PixelFormat.Format24bppRgb);然后引用System.Drawing.Graphics 对象来为图像创建GDI+绘图的上下文,使用静态方法Graphics.FromImage()在内存里的位图上绘制内容,主要代码格式: Graphics graphics = Graphics.FromImage(bmp);使用多个System.Drawing.Font 对象来呈现静态的标签信息,使用System.Drawing.Pen对象来创建画笔,使用System.Drawing. SolidBrush对象来创建画刷,接下来的部分就是使用Graphics类的方法绘制快递单上复杂的文本、形状等内容。
首先用GDI+库绘制出这些快递单的模板,然后导出转换为bmp格式,再通过绘图软件转换为jpg格式,通过窗体界面上的命令按钮添加到运行界面,GDI+库还提供了图形的打印功能,连接打印机设备后,这些绘制出的快递单图形是可以打印出来的。
4.3系统登录模块
系统登录是本软件的起点,也是程序的入口,本系统取名为“红太狼快递单打印软件”,只有指定的合法用户才可以登录,在这些用户中,有一个超级用户,其他为非超级用户,他们的权限主要体现在“操作员维护”模块。在空白框内填入指定的用户编码和登录代码,如果验证通过,用户将进入系统的主界面,“系统登录”模块的运行界面如图4-3-1所示。
13
图4-3-1 系统登录界面
新建一个Windows窗体,命名为FormLogin,该窗体中用到的主要控件和它们属性值的设置如下,最大化按钮(MinimizeBox)和最小化按钮(MaximizeBox)属性均为false,文本(Text)属性设为“系统登录”,在应用小图标(Icon)属性中加载图标
,表示系统登录的标志,背景设置(Background)属性中导入背景图片。
该窗体用到的主要控件如表4-3-2所示。
表4-3-2 “系统登录”窗体中用到的主要控件 控件类型 控件ID 主要属性设置 用途 Label Label1,Label2 Text属性分别设置为“用户显示标签文本 编码:”,“登录密码:”。 TextBox txtCode,txtPwd 接收用户编码和登录密码输入信息 Button picLogin, Text属性分别设置为“登创建登录、重置、picReset,picQuit 录”,“重置”,“退出”。 退出按钮 “系统登录”模块包括登录、重置、退出三个部分,该模块的流程图如图4-3-3所示。
软件提示请输入用户编码N软件提示请输入登录密码N登录用户编码Y登录密码Y登录主界面系统登录清空“用户编码”重置清空“登录密码退出退出界面
图4-3-3 系统登录流程图
4.4 主窗体菜单栏设计
“快递单打印通”窗体是登录本系统后的主窗体界面,它包含了该软件所有的
功能需求,用户可以通过该页面实施对快递单管理的各项操作。它主要是通过调用CommClass公共类中ShowFormByMdiParent方法来实现各模块的链接操作,该窗体的运行界面如图4-4-1所示。
14