本系统的开发平台是Windows Visual Studio 2005,而考虑Nc#与W'mdows
Visual Studio 2005的完美结合性,选择C捍作为编码语言,也是无可非议的了。
C撑是一种现代的面向对象的程序开发语言。.NET提供了大量的工具与服
务,能够最大限度的发掘和使用计算及通信能力。它使得程序员能够在.NET平 台下快速开发出所需要的应用程序。并且它的面向对象设计和从构建组件形成 的高层商业对象到高级系统级的应用程序都是一流的。与C和C++相比较,C捍比 它们更加简洁,更加高效。C群没有丢失C和C++的基本特征_÷强大的控制能力和
高度的灵活性瞄】【26】。
C群是专门为.NET的应用而开发的语言,这从根本上保证了C群与.NET的完 美结合。C撑具有语法简洁、面向对象设计、完善的安全性和错误处理和高度的 灵活性和兼容性等优点。
C撑保留了对底层操作系统API的直接调用和指针,普通应用都是调用.Net的 程序集,对于速度敏感,或者平台相关型应用,直接通过特定声明来调用
Windows API,开发效率和速度都兼顾,解决了各种各样的应用层问题和系统层
问题;C群与Java有着明显的不同,它借鉴-j\的一个特点,与COM(组件对 象模型)的直接集成:在W'mdows平台上.Net CLR比Java的JRE速度快;基于C撑语 言的Visual.Net Studio开发工具IDE功能齐全,更加优秀;企业开发方面,C群需
要SQL Server,I【s和MTS的配合。由于剑只管SQL ServergIIS,甚至只管IE浏
览器,所以Visual.Net Studio更加便捷,整个开发过程一体化.不用考虑其它的 实现。综合考虑采用c#语言Net环境开发周期短.功能齐全,符合我们的要求
拉1【蚓f矧。
5.2数据存取层设计与实现
如前文所述,在本系统的体系结构上,数据存取层位于数据存储层和业务 服务层之间,通过对ADONet数据访问类的封装,实现了对数据库中的数据的 访问。在表现形式t,该层表现为Net类库项目,该项目编译后生成动态链接 库(d11)。其他项目蔫要调用此类库时.只要将该动态链接库文件复制到相应 bin文件中,就可进行使用了。
该系统中数据存取层完成对数据库表的操作,由类DataAeeess实现,其类
圈如图5-I所示。
图5.1类DataAccess
其中类DataAccess主要方法的实现如下:
(1)GetConuectionO方法
功能:获取数据库连接对象。
具体代码实现如下:
public staticSqlConneetionGetConnection0
f
My con=newSqlConnection(”Server=t270 0l;uid=sa;pwd=:
database曷dangdang”X驯喟sqlco吼酬ion对象与指定的数据库相连接
My_con.OpenO;,/打开数据库连接
i℃OJrn My_con;,,返回SqIConnection对象的信息
}
(2)GetDataSet方法
功能:从数据库表中获取数据集。
.Net环境下图书销售系统的设计与开发
实现步骤:
①创建DataSet对象Ds:
②调用SqlDataA蛳方法获取SqlD稚嘶ter对象sda:
③为SqlDataAdapter对象添加相应参数; ④执行sda.Fill,将数据填充到Ds; ⑤释放所占用的系统资源。
public DataSet GctDataSet(string Sql,string tablename)
{
SqlConnection Con=this.GetConnectionO: SqlDataAdapter sda=new SqlDataAdapter(Sql,Con); DataSet Ds=new DataSetO;
sda.Fill(Ds,tablename);
return Ds:
(3)ExcuteSql方法
功能:执行Sql操作。 实现步骤:
①调用GetConnection方法获取SqlConnection对象: ②调用SqlCommand方法获取SqlCommand对象; ③为SqlCommand对象添加相应参数; ④循环添力ISql语句查询条件变量: ⑤返回查询结果。
public int ExcuteSql(string Sql,SqlParameter[]paras)
{
SqlConnection Con=this.GetConnection0; SqlCommand Cmd=new SqlCommand(Sql,Con);
foreach(SqlParameter P in paras) {
Cmd.Parameters.Add(p);
}
Con.Open0;
int Count=Cmd.ExeeuteNonQuerYO;
Con.CloseO;
retum Count;
}
5.3业务逻辑层设计与实现
从该系统的体系结构上,业务逻辑层位于数据存取层和表示层之间,其主
要任务是负责接收表示层的数据请求,将这此请求进行必要的业务逻辑检查,
然后将请求分解成不同的数据层操作,由数据层中的相应模块进行处理,处理后.将处理结果返回给表示层。业务服务层封装了系统的核心业务逻辑,在系 统中起着承上启下的作用,其良好的设计是系统成功的保证。
业务逻辑层操作基本和相应数据库表的操作相对应。和某个表相关的查
询、删除、更新方法都封装在该表对应的业务逻辑类中。下面以操作员登陆、 采购业务综合查询为例说明业务逻辑层类的设计。
1、登陆身份验证
操作员登陆要进行身份验证,需要对操作员表Role设计业务逻辑类
RoIeDB.该类提供GetRolcs、VefifyCi№dentials方法,功能分别为获取操作员信
息、身份验证。操作员登陆窗体Login通过调用业务层RoleDB类来实现登陆操 作。RoleDB该类如下图5-2所示。
国5-2类RoIeDB
GetRoles方法实现过程:调用数据存取层DataAccess类GetDataSet方法获 取数据集信息。
VerifyCrcdendals方法实现过程:调用数据存取层DalaAceess类Excute— scale方法进行身份验证。VeilfyCredentials方法代码如下:
public beolVerifyCredentials(stringttserName,stringpassword)
{
DataAccessda=newDstaAccessO.J/g,J建DataAcccss实例
stringSql=”select count(-、fromRoleswhereUserName=@usemame”+”and
Password=@pwd”,借ql查询语句
SqIPararaeter[1 paras_ncw SqlP曲ameter[2];//查询条件变{i}赋值
pamsl0]=new
Sqlp㈣nc”
@uscmante\;
paras[1卜new SqlParamelcr(”@pwd\;
intflag=(int)d&ExcuteSeale(Sql,paras)J/该方法查询数据库核对
if(flag—n
{
mmmtrue;//正确返同真值
1
Net环境下圈书销售系统的设计与开发
else
{
lttom铷se; ) }
2、采购业务综合查询
采购业务综合查询操作需要查询数据库进货单明细表(tbwarehouse_
detailed)。可对进货单明细表设计业务逻辑类Warchousc_DctailDB,该类提供
GetWarehouseDetail、CreateWatehouseDetail,功能分别为得到进货单明细表数
据集或符合条件的进货单明细表数据集、插入进货单明细表信息。操作员操作 今日盘点窗体模块、采购业务综合查询窗体模块时通过调用业务层
Warehouse_DctailDB类的GetWarehouseDetail方法来实现盘点信息、信息采购 业务查询,图书商品信息录入模块通过CreateWatehou∞Detail方法完成对进货 单明细表信息的插入。Wafehouse DetailDB该类如下圈5-3所示。
图5-3 类Warehouse_DetialDB
(1)Ge!tWarehouseDetail方法
功能:得到进货单明细表数据集。 实现步骤:
①获取数据存取层DataAccess实例对象; ②创建Sql查询语句;
@调用数据存取层DataAcccss实例方法GetDataSet获取数据集 代码实现如下:
public Dans札GetWarehouseDetai]0
{
DalaAcccssda=ncwDataAcce《);
stringSql 2。select+fromtb warehouse_detailed”:
DataSetDs=da.GetDataSet(Sql,’tb_warchcuse_detailed”);
/℃*dlmDs;
.Net环境下图书销售系统的设计与开发
(2)GetWarehouseDetail方法,重载方法(1)。 功能:得到符合条件的进货单明细表数据集。
实现步骤:
①获取数据存取层DataAccess实例对象; ②创建Sql查询语句:
③Sql查询语句条件数组,依次赋值;
④调用数据存取层DataAccess实例方法GetDataSet获取数据集。 代码实现如下:
public DataSet GetWarehouseDetail(string barCode,string book,string supplier, string type)
{
DataAccess da=new DataAccess0;//获取数据存取层DataAccess实例
string Sql=”select·from tb_warehouse_detailed where BarCode=@barCode”+”and
Book--@book”+I.and SuppJieF@supplier’’+I.and Type=@type”;//Sql查询语句
SqlParameter[】paras=new SqlParameter[4];//Sql.查询语句条件数组,//依次赋值 paras[0】=new SqlParameter(”@barCode”,barCode); paras[1]=new SqlParameter(”@book\;
paras[2】=Hew SqlParameter(”@supplier”,supplier); paras[3]=new SqlParameter(”@type”,type);
DataSet Ds=da.GetDataSet(Sql,”tb_warehouse detailed II,paras);
//调用数据存取层DataAccess实例方法GetDataSe获取数据集。
return Ds;
}
(3)CreateWarehouseDetail方法
功能:插入进货单明细表信息。
实现步骤:
①获取数据存取层DataAccess实例对象; ②创建Sql查询语句;
③Sql查询语句条件数组,依次赋值;
④调用数据存取层DataAccess实例方法ExcuteScale完成Sql操作,并返回
flag标志。
代码实现如下:
public void CreateWarehouseDetail(string wareDetailFlowlD,string barCode,string booL string publisher,string type,string supplier,int amount,float prchasingPrice,float
price,datetime dateTime)
{//Sql查询语句
string Sqi=”Insert into Orders(WareDetailFlowlD,BarCode,Book,Publisher,Type,
Supplier,Amount,Prchasing,Price,DateTime)”+It values(@wareDetailFlowlD,
@barCode,@book,@publisher,@type,@supplier,@amount,@prchasingPrice,
@price,@dateTime)”;
SqlParameter[】paras=new SqlCeParameterfl0];//Sql杏.询语句条件数组,,,依次赋值 paras[0】=new Sc IParameter(”@wareDetailFIowlD”,wareDetailFIowlD); par4s【l】=new Sc IParameter(”@barCode”,barCode);