论文二稿.doc

库存管理系统的开发与设计

收藏

资源目录
跳过导航链接。
库存管理系统的开发与设计.rar
10803080324-唐义富-库存管理系统的开发与设计
文档
程序
readme.txt---(点击预览)
Database
dbStockManage.mdf
dbStockManage_log.ldf
SQLQuery1.sql
StoreManageSystem
obj
SMSBLL
SMSDAL
SMSModels
StoreManageSystem
StoreManageSystem.sln
StoreManageSystem.suo
压缩包内文档预览:

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

库存管理系统的开发与设计,库存,管理,系统,开发,设计
编号:32868930    类型:共享资源    大小:4.98MB    格式:RAR    上传时间:2019-12-18 上传人:遗**** IP属地:湖北
25
积分
关 键 词:
库存 管理 系统 开发 设计
资源描述:
库存管理系统的开发与设计,库存,管理,系统,开发,设计
内容简介:
重 庆 理 工 大 学毕 业 设 计(论文)开 题 报 告题 目 库存管理系统的设计与实现 二级学院 计算机科学与工程学院 专 业 软件工程 班 级 108030803 姓 名 唐义富 学 号 10803080324指导教师 龙 华 系 主 任 张小川 时 间 2013.12.192014.2.28 1、本课题的研究目的及意义目的:实际经验表明,库存管理具有调节生产和销售的作用。管理不当会造成有形或无形的极大损失。合理的库存管理是把货物库存量控制在适当标准之内,既不造成物资积压浪费仓储空间、又能满足客户要求。库存管理是指企业为了降低企业的经营成本,提高企业的管理效率,而采取一系列有效的方法对存货进行决策、规划、控制,以保证企业生产经营活动正常运行以及企业用最低的成本获得最大利润等工作的总称。意义:库存管理对企业而言具有重要意义。首先,有利于满足市场需求,提高企业的市场竞争能力。其次,有利于供产销集合,保证企业生产经营活动顺利进行。再次,有利于帮助企业仓库管理人员对库存商品进行详尽、全面的控制和管理。最后,有利于减少存货资金占用,加速资金周转,提高企业的资金运转效率,更有利于企业降低成本,增加营业利润,提高企业的盈利能力。而开发从系统就是为了帮助人们更好的进行管理。2、本人对课题任务书提出的任务要求及实现目标的可行性分析任务要求:设计并实现库存管理系统,实现商务中的信息管理的基本功能及相关商品成本的计算,单据的设计与查询等。在设计中,应该注重系统的灵活性和可扩展性。可行性分析:目前关于库存管理系统的理论已经比较成熟,并且市面上已具有类似的作品,在这里理论的指导和其他作品的借鉴下,结合自己学习的知识,实现该系统的功能是可行的。 综上所述,本课题的可行性是有保障的。3、本课题的关键问题及解决问题的思路本课题的关键问题:1.如何设计才能保证设计的高效和合理2.单据的灵活配置和如何灵活的根据配置制成单据3.完成此系统所用的技术解决方案:1.利用 UML模型分析并设计,争取获得高质量的结果2.通过参考文献并结合库存管理的相关知识,对报表进行设计。3.使用C/S模式进行开发,以WindowsForm为主,结合T-SQL知识,用SQLServer2005做为数据库,来开发该系统。 4、完成本课题所需的工作条件(如工具书、计算机、实验、调研等)及解决办法工具书等资料参考互联网以及学校图书馆。软件环境要求:开发语言:C#开发平台: VS2010后台数据库:SQLServer2005绘图工具:Microsoft visio、StartUML解决办法:在电脑上安装所需软件 所需计算机:个人电脑5、工作方案分析及进度计划整个毕业设计工作方案包括需求分析、系统设计、系统实现、系统测试和论文编写五个阶段,具体进度计划安排如下:(一)需求分析阶段2013.12.19-2014.2.24 1资料搜集和整理,编写开题报告、文献综述和文献翻译2进行需求分析,制定开发计划(二)系统设计阶段2014.2.25-2014.2.231.根据需求分析,进行概要设计,详细设计和数据库的设计。(三)系统实现阶段2014.3.24-2014.4.301迅速搭建好开发环境,实现数据库的生成。2在VS进行程序的编码工作,完成既定的功能。(四)系统测试阶段2014.5.1-2014.5.71录入数据进行各模块程序、整个系统测试,修改完善程序(五)论文编写阶段2014.5.8-2014.6.97编写毕业论文以及幻灯片,准备答辩。报告人:唐义富 2014 年 1月6 日指导教师意见 指导教师: 年 月 日重 庆 理 工 大 学毕 业 设 计(论文)文献综述题 目 库存管理系统的设计与实现 学 生 姓 名 唐义富指 导 教 师 龙 华完 成 日 期 2014年2月24日【摘要】随着中国电子商务、互联网业务的迅猛发展,国内许多企业已跨入电脑网络管理时代,并因此提高了管理效率和市场竞争力。但目前仍有部分企业还停留在原始计账管理阶段。而随着全球经济信息化的进程和WTO的成功实现,企业面临着前所未有的机遇和挑战,在如此激变的社会形势和激烈的市场竞争下,愈来愈多的企业管理者意识到效率管理和科学管理的重要性,以及增强市场竞争力的迫切性,因此建立科学、规范、高效的管理制度和秉承富有竞争力的经营理念是每一个企业管理者的渴望,企业采用电脑管理进货、库存、销售等诸多环节也已成为趋势及必然。【关键字】库存管理、效率、科学一、库存管理的定义库存管理是指企业为了降低企业的经营成本,提高企业的管理效率,而采取一系列有效的方法对库存进行决策、规划、控制,以保证企业生产经营活动正常运行以及企业用最低的成本获得最大利润等工作的总称。二、库存管理的意义及内涵 库存管理对企业而言具有重要意义,首先,有利于满足市场需求,提高企业的市场竞争能力。其次,有利于供产销集合,保证企业生产经营活动顺利进行。再次,有利于帮助企业仓库管理人员对库存商品进行详尽、全面的控制和管理。最后,有利于减少库存资金占用,加速资金周转,提高企业的资金运转效率,更有利于企业降低成本,增加营业利润,提高企业的盈利能力。库存是指企业在正常生产经营过程中持有的、以销售的产成品或商品,或为了出售仍然处于生产过程中的产品,或在生产过程、劳务过程中消耗的材料、物料等。它是反映企业流动资金运作情况的晴雨表,往往成为少数人用来调节利润、偷逃国家税费基金的调节器。因为它不仅在企业营运资本中占很大比重,而且又是流动性较差的流动资产。库存管理就是对企业的库存进行管理,主要包括库存的信息管理和在此基础上的决策分析,最后进行有效控制,达到库存管理的最终目的提高经济效益。,这就是库存管理的内涵。三、中小企业库存管理存在的问题 (一)库存核算不实,导致账实不符 一些中小企业在核算购入材料的采购成本时,将能够直接计入各种材料的采购成本不直接计入,或将按一定比例分摊计入各种材料的采购成本,不按规定进行合理分摊只核算购入材料的买价,从而造成各种材料的采购成本核算不实。 材料领用记录是生产成本及费用归集的最原始记录,也是会计材料稽核的依据。因此要求填写要完整、准确。但是有的中小企业结转记录人为因素较多,比如:材料领料单的填制不规范,有的中小企业购入的材料已经领用消耗,购货发票未到,期末又没有按规定暂估入账,造成生产成本及应付账款的不真实。 (二)库存储量过多,资金占用过大 一方面中小企业在生产过程中没有充分利用残余的材料,使废品增多,生产成本增加,企业损失严重;另一方面,由于管理协调能力不佳,为了不使生产过程中断而大量储备库存,致使资金被占用。这往往会造成企业忽视库存管理,不在乎库存占用资金的多少,发展到企业库存的大量积压,流动资金严重紧缺,库存资金占用额过高,使企业资金的周转速度变慢,在一定程度上影响了企业的正常生产经营活动。 (三)库存管理的信息化建设相对落后 当前,大多数中小企业对库存管理还是传统模式,对库存管理的要求不高,缺少必要的技术手段。例如:仓库除了有一本账簿记载着库存的收入、发出、结存的数量外,货品其他方面的基本资料都不健全,而且库存信息的收集与交换主要依靠手工来进行,自动识别技术、网络技术等信息化建设方面都相对落后,造成库存管理的信息化程度低。如果企业一直采用传统的手工操作,那么在一定程度上就会降低工作效率,容易产生一些不利影响:首先,无法实时、动态、高效地了解各种信息,更无法实现库存信息资源在部门与部门间、部门与员工间、部门与供应商之间的共享,这会影响库存核算的及时性和准确性。其次,手工记录的形式与电算化相比,容易造成账面数据与实际库存数量不符的情况,产生大量的潜在损失,致使财务报表不能如实反映企业的资产状况。 四、加强中小企业库存管理的措施 (一)规范库存会计核算,保证账实相符 中小企业应根据企业会计准则第1号库存应用指南第六条规定,库存的采购成本,包括购买价款、相关税费、运输费、装卸费、保险费以及其他可归属于库存采购成本的费用。企业(商品流通)在采购商品过程中发生的运输费、装卸费、保险费、以及其他可归属于库存采购成本的费用等,应当计入库存采购成本,也可以先进行归集,期末根据所购商品的存销情况进行分摊。对于已销售商品的进货费用,计入当期损益;对于未售商品的进货费用,计入期末库存成本。企业采购商品的进货费用金额较小的,可以在发生时直接计入当期损益。因此,中小企业应按照此规定进行采购成本的归集与核算。 中小企业的财务部门要对库存的采购、入库、领用等情况及时进行核算、入账;对产成品的外购、自制、成品委托加工、原材料的直销、外购直销等情况应按规定做相应的账务处理;对外单位还要区分材料费、加工费,以正确反映其成本;对货到发票未到的库存,月末及时办理暂估入库手续;对票中有遗漏项目不能开具入库单,个别材料因质量等原因换货的,也要及时开出发票,待换回以后再冲回,保证做到账、卡、物三者相符。 (二)运用ABC控制法,降低库存,加速资金周转 中小企业应根据库存的重要程度,将库存分为ABC三种类型。A类库存虽然品种较少,但占用资金较多,据统计数据显示:A类库存的品种占全部库存的10%-15%,资金占全部库存总额的80%左右,是库存管理的重点。例如,珠宝首饰、名烟名酒等。B类库存为一般库存,品种数量相对较多,资金占用额一般,品种约占全部库存的20%-30%,资金占全部库存总额的15%左右,应对其进行适当控制,日常管理。例如,大众化的服装、鞋帽等。C类库存虽然品种繁多,但资金占用不多,品种约占全部库存的60%-65%,资金占全部库存总额的5%左右,一般可采取比较简单化的方法进行管理,例如,日常的卫生用品、小百货等。 对A、B、C三种库存进行分别控制如下: 对A类库存的控制,要计算每个项目的经济订货量和订货点,尽可能适当增加订购次数,以减少库存的积压,也就是减少其昂贵的存储费用和大量的资金占用;同时,还可以为该类库存分别设置永续盘存卡片,以加强日常控制。对B类库存的控制,也要事先为每个项目计算经济订货量和订货点,同时也可以分别设置永续盘存卡片来反映库存动态,但要求不必像A类那样严格,只要定期进行概括性的检查就可以了,以节省存储和管理成本。对于C类库存的控制,由于它们为数众多,而且单价又很低,库存成本也较低,因此,可以适当增加每次订货数量,以减少全年的订货次数。一般可采用一些较为简化的方法进的是“双箱法”。 (三)加强中小企业库存管理的信息化建设 中小企业要想使库存管理达到现代化管理的要求,就要使企业尽快采用先进的管理模式。例如,ERP系统,即企业资源计划系统是一种主要面向企业进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系统。ERP系统主要有三个方面的优势:首先,实现库存的动态监控管理,应用ERP系统,企业不仅可以对商品的运输、采购、储存、销售、出库直至退货和售后服务等所有环节的实现实时动态监控,而且还可以解决原来物资采购管理过程中存在的管理不集中、信息不对称、库存资源不共享、局部利益与整体利益矛盾等问题。其次,应用ERP技术进行库存盘点,大大简化了库存盘点工作,使库存的盘存变得简单明了,因为ERP系统能够扫描、接受和处理所有库存数量的价格信息,基本上能够自动完成库存盘点的工作,甚至不需要手工处理,这样就大大的降低了盘点成本,工作效率就会有所提高。再次,ERP系统可以更加准确的核算库存成本,通过此系统可以对所有的库存数量和价格信息进行贮存,可以采用个别计价法来计量库存的成本,因此可以更准确地核算库存的发出成本和期末结存成本,大大提高了库存管理的精确性和正确性。参考文献:1王廷丽.JIT与零库存J.兰州学刊,2004,(6).2 财政部会计资格评价中心.中级会计实务M.北京:经济科学出版社,2007.3王利平.管理学原理(修订版)M.北京:中国人民大学出版社,2006.4熊胜绪.丰田生产方式的特点及其科学性评析J.湖北社会科学,2002,(11).5韦波,祥建.基于JIT的存货管理策略探讨J.企业活力,2004,(8).6刘渝妍.ERP在中小企业管理中的实施及应用研究.昆明理工大学硕士学位论文.2005:20-207李贺.仓储部门物料入库管理系统设计概要.J.上海大中型电机.2008-06-158陈华.库存管理系统中数据库的设计与实现.电脑开发与应用.2009.22:61-719李伟超.我国中小企业信息化模式问题研究.情报科学.2006,(2):200-20310吴洁明.软件工程应用实践教程.北京:清华大学出版社,2004.4重 庆 理 工 大 学文 献 翻 译二级学院 计算机科学与工程学院 班 级 108030803 学生姓名 唐义富 学号 10803080324 译 文 评 阅导师评语 指导教师: 年 月 日翻译译文:轻量级事务管理器在计算机领域,事务是一种离散的动作它的动作要么全做要么全不做。如果在某个资源上发起的是事务没有全部完成,则有资源管理器确保资源恢复到事务开始之前的状态。分布式事务会跨越多个资源,所以会涉及多个资源管理器。Windows操作系统在多年前就已经加入了一个分布式事务管理器,即Microsoft分布式事务协调器(Microsoft Distributed Transaction Coordinator)。.NET Framework1.0和1.1版本提供了两种事务编程的方法。其中一种方法是由ADO.NET提供的,抽象类System.Data.Common.DbConnection中定义了一个BeginTransaction()方法,通过该方法可以启动一个事务,而该事务是由DbConnection的具体实现所提供的资源管理器来控制的。另外一种方法是由Enterprise Services提供的,它提供了System.EnterpriseServices.Transaction的特性,任何的System.EnterpriseServices.ServiecedComponent的子类都可以添加这个特性,借助这个特性,将这个子类的任何方法中的任何正在执行的代码添加到一个由Microsoft分布式事务吃力协调器管理的事务中。ADO提供了一种显示的事务编程方式,而Enterprise Service提供了一种声明式的方法。然而,在这两种方式之间选择的同时,开发人员还需要选择事务应该如何处理。使用ADO.NET的方法,事务由单一的资源管理器来处理,而使用Enterprise Services的方法时,无论事务是否为分布式,Microsoft分布式事务协调器总是会被使用,从而增加了额外开销。.NET2.0引入了轻量级事务管理器(Lightweight Transaction Manager),即System.Transactions.TransactionManager.就像它的名字说的一样,轻量级事务管理器具有最小的开销。“在微软对SQL Server2005所进行的标准性能测试中,在对比使用轻量级事务管理器和直接使用本地事务事,没有发现这2者在统计上面有性能的差别。”如果一个事务里只有一个资源管理器,轻量级事务管理器可以让资源管理器来管理该事务,而它自己只负责监视它。如果轻量级事务管理器发现有其他的资源管理器被加入到事务中,轻量级事务管理器会让原来的那个资源管理器放弃控制权,并且将控制权移交给分布式事务协调器。将控制权在事务还在进行时转移给分布式事务处理协调器额这个过程就叫做事务升级(promotion of a transaction).System.Transaction这个命名空间允许显式或者隐式的使用轻量级事务管理器进行事务编程,下面的例子展示了如何显示的使用Systtem.Transaction.CommitableTransaction类:CommitableTransaction transaction = new CommittableTransaction();using(SqlConnection myConnection = new SqlConnection(myConnectionString)myConnection.Open();myConnection.EnlistTransaction(tx);/Do transactional work/Commit the transaction:transaction.Close();隐式的方式会使用System.Transactions.TransactionScope这个类。using(TransactionScope scope = new TransactionScope)/Do transactional work:/Since no errors have occurred, commit the transaction:scope.Complete();在System.Transactions.TransactionScope实例的using快中执行的代码会隐式的包含到一个事务中,这也是这个事务编程方式被称之为隐式的原因。System.Transactions.TransactionScope市里的Complete()方法只能被调用一次,如果它被调用了,事务就会被会被提交。System.Transactions命名空间还提供了一种编写自己的资源管理器的方法。但是对于学习WCF,我们只要知道轻量级事务管理器的目的和System.Transactions.TransactionScope类提供的隐式事务编程方式就已经够了。泛型泛型是一些类、结构、接口和方法,他能够为使用或者存储它的一个或者多个类型提供占位符”(微软2006),这就是他的定义吧。在.NET Framework 2.0的类库中有一个泛型类 的例子:Public class List在它的方法中有这样的一个方法:Public Add(T item)其中,T就是一个泛型类System.Collections.Generic.List的实例所存储的类型的的占位符。在泛型类的实例定义中,必须指定这个实例存储的实际类型:List myListOfStrings = new List();然后就可以像下面这样使用泛型类实例的Add()方法了:myListOfStrings.Add(“Hello, World”);很显然,泛型使List类的设计者可以wield同一个没有指定类型的实例定义一个集合。换个意思表达就是可以为一个类型安全集合提供模版。List的用户可以用它来放置他所选择的类型的实例。而它的设计者并不需要知道用户选择的是什么数据类型。需要主要的是,尽管一个类型继承了他的父类,也就从父类那里继承了一些需要的功能,但是其余的功能仍然需要它增加去实习。然而,List却具有了List的所有功能。System.Collections.Generic.List类被称为泛型类型定义,占位符T被称之为泛型类型形参。例如下面这个声明:List myListOfStrings将System.Collections.Generic.List变成已构造类型(Consstruction type),而string则成为了一个泛型类型实参。泛型可以有任何输了的泛型类型形参,例如System.Collections.Generic.Dictionaty就有2戈类型形参。泛型的设计者可以使用约束来现在作为泛型类型实参的类型。下面这个泛型类型定义:Public class MyGenericType where T:new(),IComparable将泛型类型实参的类型限制为具有公共的无参构造函数并且实现了IComparable借口的类型。而下面这个限制更加宽松的泛型定义:Public class MyGenericType where T:class其他的没变,只是见泛型类型实参限制为引用类型。泛型和非泛型类型都可以具有泛型方法,下面是一个具有泛型方法的非泛型类型的例子在泛型编程中,经常需要判断替代泛型类型形参的泛型实参的类型。下面的代码修改了前面的例子,展示了如何进行这样的判断:public class Printerpublic void Print(T argument)if(typeof(T) = typeof(string)Console.WriteLine(argument);elseConsole.WriteLine(argument.ToString();static void Main(string arguments)Printer printer = new Printer();printer.Print(“Hello, World”);Console.WriteLine(“Done”);Console.ReadKey();一个泛型接口可以由泛型类型和非泛型类型实现。同样,泛型类型和非泛型类型都可以继承泛型基类型。public interface IMyGenericInterfacevoid MyMethod();public class MyGenericImplementation: IMyGenericInterfacepublic void MyMethod()public class MyGenericDescendant : MyGenericImplementationpublic class MyNonGenericImplementation : IMyGenericInterface10 CHAPTER 1 Prerequisitespublic void MyMethod()public class MyNonGenericDescendant : MyGenericImplementation可空值类型根据CLI(公共语言基础设施)的定义,在。NET中表示数据的方法有两种:值类型或者引用类型。值类型的实例一般分配在线程栈中, 引用类型的实例分配在托管堆中,引用的值就是所分配内存的地址。引用类型变量的默认值是null,表示它还没有知道任何已分配内存的地址;值类型变量总具有一个该类型的值,并且永远不肯是null.所以,虽然可以通过检查一个引用类型的值是否是null来判断它是否已经初始化,但却不能用同样的方法来判断值类型。但是,在两种常见的情况下我们希望知道一个值类型的实例是否被赋值过。第一种情况是当实例是在表示数据库中的值时,在这种情况下,我们希望能够检查实例以判断这个值是不是确实存在于数据库中。另外一种情况则和 本书内容更相关。当实例表示一个从其他远程数据源接受到数据的时候,我们希望根据这个实例判断相应的数据项是否接受到了值。.NET Framework 2.0包含了一个泛型类型定义,它满足这2中情况的要求:可以将一个值类型的实例赋值给null,并且可以判断该实例的值是否为null.该泛型类型定义就是System.Nullable,其中T被限制为值类型。从System.Nullable构造而来的类型实例可以赋值给null,实际上,他们的默认值就是null.所以,从System.Nullable构造而来的类型称为可空值类型。System.Nullable有一个属性Value,当一个可空值类型实例的值不为null时,可以通过这个属性获得该类型实例的值。所以,我们可以写出来下下面的代码:System.Nullable myNullableInteger = null;myNullableInteger = 1;if (myNullableInteger != null)Nullable Value Types 111Console.WriteLine(myNullableInteger.Value);C#提供了一种简化语法来声明从System.Nullable构造的类型,该语法允许将System.Nullable myNullableInteger简写成:Int? myNullableInteger编译器不允许将一个可空值类型的值直接赋值给普通的值类型,例如下面的代码是不能通过编译的:int? myNullableInteger = null;int myInteger = myNullableInteger;因为可空值类型的值可以是null,这个值不可以赋给普通值类型。虽然编译器允许下面这样的代码:int? myNullableInteger = null;int myInteger = myNullableInteger.Value;但是第二行代码的允许将会抛出异常,因为当从System.Nullable构造的类型没有赋予一个一个的T类型值时,任何对其System.NullableValue树形的访问都是无效操作,上面的这个例子就是事先没有赋值。将一个可空值类型的值赋给普通值类型的方法就是先用System.Nullable.HasValue属性判断这个可空值类型是否被富国一个类型为T的有效值:int? myNullableInteger = null;if (myNullableInteger.HasValue)int myInteger = myNullableInteger.Value;另外一种就是使用下面这样的语法int? myNullableInteger = null;int myInteger = myNullableInteger ? -1;如果后者被赋予游戏的整型值,那么普通整型myInteger将被赋予可空整型值myNullableInteger,否则myInteger将被赋值为-1.文章出处:Windows.Communication.Foundation.Unleashed 第814页即WCF揭秘英文原文:The Lightweight Transaction ManagerIn computing, a transaction is a discrete activityan activity that is completed in itsentirety or not at all. A resource manager ensures that if a transaction is initiated on someresource, the resource is restored to its original state if the transaction is not fullycompleted. A distributed transaction is one that spans multiple resources and thereforeinvolves more than a single resource manager. A manager for distributed transactions hasbeen incorporated into Windows operating systems for many years. It is the MicrosoftDistributed Transaction Coordinator.NET Framework versions 1.0 and 1.1 provided two ways of programming transactions.One way was provided by ADO.NET. That technologys abstractSystem.Data.Common.DbConnection class defined a BeginTransaction() method by whichone could explicitly initiate a transaction controlled by the particular resource managermade accessible by the concrete implementation of DbConnection. The other way ofprogramming a transaction was provided by Enterprise Services. It provided theSystem.EnterpriseServices.Transaction attribute that could be added to any subclass ofSystem.EnterpriseServices.ServicedComponent to implicitly enlist any code executingin any of the classs methods into a transaction managed by the Microsoft DistributedTransaction Coordinator.ADO.NET provided a way of programming transactions explicitly, whereas EnterpriseServices allowed one to do it declaratively. However, in choosing between the explicitstyle of programming transactions offered by ADO.NET and the declarative style offeredby Enterprise Services, one was also forced to choose how a transaction would behandled. With ADO.NET, transactions were handled by a single resource manager,whereas with Enterprise Services, a transaction incurred the overhead of involving theMicrosoft Distributed Transaction Coordinator, regardless of whether the transaction wasactually distributed.NET 2.0 introduced the Lightweight Transaction Manager,System.Transactions.TransactionManager. As its name implies, the LightweightTransaction Manager has minimal overhead: “performance benchmarking done byMicrosoft with SQL Server 2005, comparing the use of a Lightweight TransactionManager transaction to using a native transaction directly found no statistical differencesbetween using the two methods” (Lowy 2005, 12). If only a single resource manager isenlisted in the transaction, the Lightweight Transaction Manager allows that resourcemanager to manage the transaction and the Lightweight Transaction Manager merelymonitors it. However, if the Lightweight Transaction Manager detects that a secondresource manager has become involved in the transaction, the Lightweight TransactionManager has the original resource manager relinquish control of the transaction andtransfers that control to the Distributed Transaction Coordinator. Transferring control of atransaction in progress to the Distributed Transaction Coordinator is referred to as promotionof the transaction.The Lightweight Transaction Manager 131The System.Transactions namespace allows one to program transactions using theLightweight Transaction Manager either explicitly or implicitly. The explicit style uses theSystem.Transactions.CommitableTransaction class:CommitableTransaction transaction = new CommittableTransaction();using(SqlConnection myConnection = new SqlConnection(myConnectionString)myConnection.Open();myConnection.EnlistTransaction(tx);/Do transactional work/Commit the transaction:transaction.Close();The alternative, implicit style of programming, which is preferable because it is more flexible,uses the System.Transactions.TransactionScope class:using(TransactionScope scope = new TransactionScope)/Do transactional work:/Since no errors have occurred, commit the transaction:scope.Complete();This style of programming a transaction is implicit because code that executes within theusing block of the System.Transactions.TransactionScope instance is implicitly enrolledin a transaction. The Complete() method of a System.Transactions.TransactionScopeinstance can be called exactly once, and if it is called, then the transaction will commit.The System.Transactions namespace also provides a means for programming ones ownresource managers. However, knowing the purpose of the Lightweight TransactionManager and the implicit style of transaction programming provided with theSystem.Transactions.TransactionScope class will suffice for the purpose of learningabout the Windows Communication Foundation.Generics“Generics are classes, structures, interfaces, and methods that have placeholders for one ormore of the types they store or use” (Microsoft 2006). Here is an example of a genericclass introduced in the System.Collections.Generic namespace of the .NET Framework2.0 Class Library:public class ListAmong the methods of that class is this one:public Add(T item)Here, T is the placeholder for the type that an instance of the generic classSystem.Collections.Generic.List will store. In defining an instance of the genericclass, one specifies the actual type that the instance will store:List myListOfStrings = new List();Then one can use the Add() method of the generic class instance like so:myListOfStrings.Add(“Hello, World”);Evidently, generics enabled the designer of the List class to define a collection ofinstances of the same unspecified type; in other words, to provide the template for a8 CHAPTER 1 Prerequisitestype-safe collection. A user of List can employ it to contain instances of a type of theusers choosing, without the designer of List having to know which type the usermight choose. Note as well that whereas a type that is derived from a base type is meantto derive some of the functionality it requires from the base, with the remainder stillhaving to be programmed, List comes fully equipped from List.The class, System.Collections.Generic.List, is referred to as a generic type definition.The placeholder, T, is referred to as a generic type parameter. DeclaringList myListOfStrings;yields System.Collections.Generic.List as a constructed type, and string as ageneric type argument.Generics can have any number of generic type parameters. For example,System.Collections.Generic.Dictionary has two.The designer of a generic may use constraints to restrict the types that can be used asgeneric type arguments. This generic type definitionpublic class MyGenericType where T: new(), IComparableconstrains the generic type arguments to types with a public, parameter-less constructorthat implements the IComparable interface. This less restrictive generic type definitionpublic class MyGenericType where T: classmerely constrains generic type arguments to reference types.Both generic and nongeneric types can have generic methods. Here is an example of anongeneric type with a generic method:using System;public class Printerpublic void Print(T argument)Console.WriteLine(argument.ToString();static void Main(string arguments)Printer printer = new Printer();printer.Print(“Hello, World”);Console.WriteLine(“Done”);Console.ReadKey();Generics 91In programming a generic, it is often necessary to determine the type of generic argumentthat has been substituted for a generic type parameter. This revision to the precedingexample shows how one can make that determination:public class Printerpublic void Print(T argument)if(typeof(T) = typeof(string)Console.WriteLine(argument);elseConsole.WriteLine(argument.ToString();static void Main(string arguments)Printer printer = new Printer();printer.Print(“Hello, World”);Console.WriteLine(“Done”);Console.ReadKey();A generic interface may be implemented by a generic type or a nongeneric type. Also,both generic and nongeneric types may inherit from generic base types.public interface IMyGenericInterfacevoid MyMethod();public class MyGenericImplementation: IMyGenericInterfacepublic void MyMethod()public class MyGenericDescendant : MyGenericImplementationpublic class MyNonGenericImplementation : IMyGenericInterface10 CHAPTER 1 Prerequisitespublic void MyMethod()public class MyNonGenericDescendant : MyGenericImplementationNullable Value TypesAccording to the Common Language Infrastructure specification, there are two ways ofrepresenting data in .NET: by a value type or by a reference type (Ecma 2006, 18).Although instances of value types are usually allocated on a threads stack, instances ofreference types are allocated from the managed heap, and their values are the addresses ofthe allocated memory (Richter 2002, 1345).Whereas the default value of a reference type variable is null, indicating that it has yet tobe assigned the address of any allocated memory, a value type variable always has a valueof the type in question and can never have the value null. Therefore, although one candetermine whether a reference type has been initialized by checking whether its value isnull, one cannot do the same for a value type.However, there are two common circumstances in which one would like to know whethera value has been assigned to an instance of a value type. The first is when the instancerepresents a value in a database. In such a case, one would like to be able to examine theinstance to ascertain whether a value is indeed present in the database. The other circumstance,which is more pertinent to the subject matter of this book, is when the instancerepresents a data item received from some remote source. Again, one would like to determinefrom the instance whether a value for that data item was received.The .NET Framework 2.0 incorporates a generic type definition that provides for cases likethese in which one wants to assign null to an instance of a value type, and test whetherthe value of the instance is null. That generic type definition is S
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:库存管理系统的开发与设计
链接地址:https://www.renrendoc.com/p-32868930.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!