基于NET的企业进销存管理系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生毕业设计
摘要
传统企业的管理模式大部分主要还是采用手工记账的模式,其管理效率比较低。
随着社会的发展,人们的消费能力在提高,企业进货、销售和库存的信息量将会非常庞大。
如果能对这些数据进行统计分析,对商品的进销存进行全面的管理,将会给企业管理带来很大的帮助。
针对企业用手工完成进销存管理存在处理速度慢和容易出错等问题,本系统设计出集进货管理、销售管理、库存管理为一体的,基本上满足中小企业的进销存管理体统。
本系统采用C#.NET作为开发环境,选用SQL Server2008数据库为平台,采用三层架构中的隔离驱动模式,充分考虑到实际操作中出现的各种情况,结合计算机容量大、记忆力强和处理速度快等优点,在提高公司管理效率的同时,增加了毛利的计算,也为进销存管理系统的设计与应用提供了借鉴意义。
本文所设计的进销存管理系统,界面友好,操作方便、功能完整,使得企业管理合理规X,最大限度的满足了用户的需要。
关键词:进销存管理;SQL Server数据库;C#.NET;隔离驱动模式
ABSTRACT
The traditional enterprise management mode and most of the major or the use of manual accounting mode, the management efficiency is relatively low. With the development of society, people's consumption ability in raising, enterprise purchase, sales and inventory information will be very large. If the energy of these data for statistical analysis, to the modity Invoicing prehensive management, will be of great help to the enterprise management.
In view of the enterprise with plete manually Invoicing management existence the processing speed is slow and prone to error and other problems, the system design a set of stock management, sales management, inventory management as a whole, basically satisfies the small and medium-sized enterprises Invoicing management system. This system uses C#.NET as a development environment, using SQL Server 2008 database as
a platform, the three layer architecture of isolation driven pattern, give full consideration to the actual operation occurs in a variety of situations, bined with puter capacity, strong memory and processing speed, to improve management efficiency at the same time, increase the profit calculation, also for Invoicing management system design and application to offer draw lessons from a meaning.
The design of the Invoicing management system, friendly interface, convenient operation, plete functions, the management of enterprises has a reasonable standard, to maximize the satisfaction of user needs.
Keywords:inventory management; SQL Server; C#.NET; isolation driven pattern.
目录
1绪论1
1.1课题的研究背景1
1.2课题研究意义1
1.3本课题主要研究内容2
1.4本文的结构安排2
2 开发的相关技术3
框架3
框架介绍3
编译技术4
技术5
介绍5
中的主要对象5
2.2.3用连接SQL Server数据库6
2.3隔离驱动模式7
2.4开发工具介绍7
2.4.1SQL Server 2008数据库系统7
2.4.2C#编程语言8
2.4.3Visual Studio 2010工具软件介绍8
3 系统功能的架构与设计10
3.1系统功能描述10
3.1.1系统总体功能结构10
3.1.2系统功能实现流程12
3.2数据库设计13
3.2.1业务逻辑编码规则13
3.2.2数据库创建14
3.2.3数据库逻辑结构设计15
3.2.4数据表逻辑关系20
3.3Visual Studio 2010的设计21
3.3.1Visual Studio 2010项目的创建21
3.3.2添加模块22
3.3.3系统窗体汇总表23
4系统功能模块实现26
4.1用户登录模块的实现26
4.2系统主窗体27
4.3进货模块的实现28
4.3.1进货单与退货单28
4.3.2进货分析30
4.3.3进货统计(不含退货)31
4.3.4单位往来对账31
4.4销售模块31
4.4.1销售单、销售退货货单、销售统计31
4.4.2销售状况32
4.4.3商品销售排行33
4.4.4销售成本34
4.4.5往来对账35
4.5库存模块36
4.5.1库存状况36
4.5.2库存商品上限、下限报警38
4.5.3库存盘点39
4.6基础数据模块的实现40
4.6.1库存商品40
4.6.2往来单位41
4.6.3公司职员41
4.7系统维护41
4.7.1本单位信息设置41
4.7.2系统权限管理设置42
4.7.3数据库备份与恢复42
4.7.4系统数据清理43
5总结44
参考文献:45
翻译部分45
英文原文45
中文译文52
致谢56
1绪论
1.1课题的研究背景
随着企业规模的不断扩大,原始手工的管理方式已不能适应企业的发展现状,也无法满足企业高复杂、快速、准确的管理工作要求,企业的管理者并非固步自封,在现今竞争日趋激烈的市场环境下,企业的管理者在试图不断地巩固现有的资源基础上,一边摸索着管理经验,一边寻求可以帮助企业在管理上突破的新管理方式和新方法,提高企业管理上的灵活性,实现企业的稳步发展,迎接日益激烈的市场竞争,信息技术为他们提供了最好的途径[1]。
以计算机与通信技术为基础的信息技术已经进入了蓬勃发展的时期。
信息技术为人们创造了一种全新的不受时间、地域和计算机本身约束而实现信息交流、共享和协作的方式,这种新的处理方式给企业带来了新的机遇和挑战。
在企业信息化大背景的影响下,对企业经营活动中的进、销、存进行有效的控制和管理。
要实现企业的信息化,关键是要实现企业信息的集成和共享。
为了实现信息化,企业选择了进销存管理系统。
此系统利用计算机对企业的进货、销售及库存进行一体化管理,对库存商品进行查询和汇总,让管理者时刻对物资储做到心里有数;通过建立商品到货入库管理,对入库商品的采购时间、供应商及价格进行控制。
销售管理帮助企业掌握销售动向。
企业采用进销存系统来管理企业的进销存业务可以带来明显的经济效益和社会效益[2]。
它的优点主要体现在以下几方面:极大提高了员工的工作效率,大大减少了以往到货商品入库到销售出库流程繁琐,杂乱的弊端;基于计算机技术的进销存管理系统,可以减少入库管理、出库管理及库存管理中的漏洞,可以减少管理成本,增加企业收入;进销存管理的操作自动化和信息的电子化,全面提高了企业的管理水平。
因此,为进一步提高企业进销存业务处理效率,建立高效的进销存系统就变得十分重要。
1.2课题研究意义
信息管理是人类为了有效地开发和利用信息资源,以现代信息技术为手段,对信息资源进行计划、组织、领导和控制的社会活动。
简单地说,信息管理就是人对信息资源和信息活动的管理。
信息管理的根本目的是控制信息流向,实
现信息的效用与价值。
进销存的系统是一个企业进货同销售工作的核心,它的内容对于企业的决策者和管理者来说都至关重要,所以进销存管理系统应该能够为用户提供充足的信息和快捷的查询手段。
对一个从事商业活动的公司来说,都需要采购、存储、以及销售商品,对这样的工作流程,建立一个合适的信息管理系统,进行有效的管理和控制,是十分有必要的。
本软件系统是根据化妆品公司的特点,集进、销、存、分析于一体,可以实现对管理员管理、供应商管理、进货管理、销售管理、库存管理等管理,使得管理合理规X,实现对商品的进货、付款、销货、收款和库存统计等业务的计算机管理,大大减轻了公司工作员工的工作量,全面提高了管理的管理效率以及服务质量,使公司管理水平和业务水平跃上了一个新的台阶,系统操作方便及简单的界面给用户节省了不少宝贵的时间,提高了效率,也减少了人为出错的概率。
系统采用计算机这一现代化管理工具,不但可以提高工作效率和工作质量,而且还可以节省大量的人力、物力和财力。
计算机管理代替落后的手工管理后,原来几个人几天干的活,现在一个人就完全可以胜任。
只要在配一台普通台式计算机和一个操作人员就可以实现,完成对公司信息的管理。
1.3本课题主要研究内容
通过实际调查,要求本系统具有以下功能:
(1)软件设计以方便和全面为宗旨,入手快,操作简单;
(2)考虑到操作人员的计算机知识有限,因此本系统具有良好的人机界面;
(3)对于系统的使用对象较多,设计了较好的权限管理;
(4)方便的数据查询,支持多条件查询;
(5)库存报警的基点是可变的并增加了库存的折损模块;
(6)当外界环境(停电、网络病毒)干扰本系统时,系统可以通过备份和恢复来保护原始数据的安全。
1.4本文的结构安排
第一章介绍了本课题的背景及研究意义、课题设计任务。
第二章介绍了基于.NET进销存系统开发的相关技术分析。
第三章介绍了企业进销存管理系统的总体结构设计。
第四章详细介绍进销存管理系统的实现,如系统主页面界面、进货、销售、库存等模块的实现。
第五章总结了整个设计过程,并给出系统的改进方案。
2开发的相关技术
框架
框架介绍
.NET框架(Framework)简称.NET,是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。
.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。
NET包含许多有助于互联网和内部网应用迅捷开发的技术。
.NET框架定义了.NET应用程序的开发和运行环境,包括可在.NET应用程序中使用的类库,类类似与java的虚拟机。
开发人员可以在次平台或环境下为各种平台和设备编写应用程序。
.NET框架功能非常强大,主要体现在一下几个方面[3]:
提供了一个面向对象的编程环境,完全支持面向对象的编程。
在软件的可复用性、和扩展性、可维护性、灵活性方面都有很大是提高;
提供了支持多中编译语言的编译器,使应用程序可以在多种设备(从台式机到移动)上运行;
提供了许多开发人员可重复的基础类,包括线程、文件输入输出、数据库支持、XML数据分析、安全控制等,这些类库可用于所有.NET平台支持的语言;
对Web应用的强大支持。
可编写识别Internet并在Internet上也支持的应用程序,并且这些应用程序也接受诸如XML、HTTP、SOAP这样的开发标准。
.NET框架包括公共语言运行库(CLR)和统一的类库集两个主要组件[4]。
其中公共语言运行库是.NET框架的基础,它提供内存管理、线性管理和远程处理等核心服务。
公共语言运行库提取.NET应用程序.将其编译成本机的处理代码,同时进行安全性检查。
它能够自动处理对象布局,并管理对象应用,当不再使用对象时,释放它们。
这样有助于消除内存泄露和其他常见的编译错误。
.NET 框架的另一个重要组件类库集,它是一个综合性的、面向对象的可重用类型集合,包括类、接口和值类型组成的库,是建立.NET框架应用程序、组件和控件
的基础。
如图2-1显示了.NET框架的组件及其要素。
图2-1 .NET的组件极其架构
编译技术
为实现多语言开发,.NET所有编程都不是被直接编译为本地代码,而是编译成微软中间语言MSIL(Microsoft Intermediate Language)代码,再有即时编译器(JIT)转换成机器码[5]。
如图2-2。
图2-2 .NET编译原理
C#和.NET支持用其他语言编写代码的代码通过各自的编译器编译成MSIL,再通过JIT编译器编译成相应的额操作专用代码[6]。
这种编译方式实现了代码托管,提高了程序的运行效率。
技术
介绍
是由一系列的数据库相关类和接口组成的,它的基石是XML技术,所以通过不仅能访问关系型数据库中的数据,而且还能访问层次化的XML数据[7]。
提供了两种数据访问的模式[8]:一种是为连接模式(Connected),另一种为非连接模式(Disconnected)。
后一种模式是中才具有的。
相比于传统的数据库访问模式,非连接的模式提供了更大的可升级性和灵活性。
在该模式下,一旦应用程序从数据源中获得所需的数据,它就断开与原数据的连接,并将获得的数据以XML的形式存放在主存中。
在应用程序处理完数据后,它再取得与原数据的连接并完成数据的更新工作。
中的DataSet类是非连接模式的核心,数据集对象(DataSet)以XML 的形式存放数据[9]。
我们既可以从一个数据库中获取一个数据集对象,也可以从一个XML数据流中获取一个数据集对象。
而从用户的角度来看,数据源在哪里并不重要,也是无须关心的。
这样一个统一的编程模型就可被运用于任何使用了数据集对象的应用程序。
有效地从数据操作中将数据访问分解为多个可以单独使用或一前一后使用的不连续组件。
包含用于连接到数据库、执行命令和检索结果的.NET Framework数据提供程序。
用户可以直接处理检索到的结果,或将其放入 DataSet对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。
DataSet对象也可以独立于.NET Framework数据提供程序使用,以管理应用程序本地的数据或源自XML的数据。
中的主要对象
的对象主要包括DataSet,DataTable,DataColumn,DataRow和DataRelation[10]。
(1)DataSet
这个对象是一个集合对象,它可以包含任意数量的数据表,以及所有表的约束、索引和关系。
所有这些信息都以XML的形式存在,可以处理、遍历、搜索任意或者全部的数据。
(2)DataTable
这个对象可以在DataSet对象内找到所有表。
通过“Table”属性可以访问DataTable的集合。
类似地,通过DataSet的“Relations”属性可以访问到所有已经建立的数据集关系。
(3)DataColumn
表包含与列有关的信息,包括列的名称、类型和属性。
它在从一个数据表中得到数据的过程中起着重要的作用。
它还可以用来用于创建DataTable的架构的基本构造块,通过向DataColumnCollection中添加一个或多个DataColumn 对象来生成这个架构。
每个DataColumn都有DataType属性,该属性确定DataColumn所包含的数据的种类。
(4)DataRow
要填充一个表,可以使用命令的自动数据绑定功能,或者也可以手工添加行,方法是:创建DataRow对象,把DataRow对象插入到表,然后为该记录的各个字段填写数据。
可以通过Rows集合导航DataTable的元素,利用Rows集合实现一个顺序导航器,或者通过搜索或直接定位跳转到特定的记录。
DataRelation
DataRelation相当于数据表之间的关系,它作为整体和DataSet相关联,Relations集合中的每个DataRelation对象都包括了DataSet的Tables集合中两个DataTable的连接信息。
所以只要指定每一个表中用于连接的列,就可以连接到DataTable,这个关系比较类似于在指定关系数据库的关系时把一个表的外键关联起来。
2.2.3用连接SQL Server数据库
从连接到SQL Server数据库有三种方法,这里主要介绍在服务器资源管理器中连接到SQL Server。
打开.NET工作环境,在服务器资源管理器中的数据连接上单击鼠标右键,选择“添加连接”,弹出“数据连接属性”对话框。
提供程序默认为Microsoft OLE DB Provider for SQL Server,在“连接”选项卡中直接输入数据库名称或从自动检测到的结果中选择,输入用户名和密码,单击“测试连接”按钮,如果测试成功,则弹出“测试连接成功”对话框。
测试成功后,既“在数据库上选择数据库”的下拉列表中会出现这个连接
所对应的所有数据库,选择指定的数据库,即完成了连接数据库。
2.3隔离驱动模式
进销存管理系统的现实,主要用到三层架构中的隔离驱动模式,这在系统各个模块中都得到了体现。
通常所说的三层架构是指陈述(UI)、业务逻辑层(BLL)、数据访问层(DAL),其中陈述层负责界面的显示,用于显示数据和接收用户输入的数据,为用户提供交互式操作界面;业务逻辑层是表示层和数据访问层之间的桥梁,主要负责数据的传递和处理;数据访问层主要实现对数据的保存和读取操作[11]。
所谓隔离驱动模式,就是在开发项目时,陈述层和数据访问层被独立开发,常常平行开发。
这两层在设计时没有任何干扰,所以不会存在人为的约束和有害的设计元素。
当两层的设计都独立完成后,在设计业务逻辑层,业务逻辑层的责任就是在没有对数据层和陈述的需求变化的基础上完成所有的转换。
因为陈述层和数据访问层是完全独立的,当逻辑业务层需求改变的时候,它们都可以做相应的修改而不影响对方。
改变两个物理上不相邻的层不会直接对其他层产生影响或发生冲突,这就允许数据访问层结构的调整或者陈述层根据用户的需要做相应的变化,而不需要系统做更大调整或修改。
隔离驱动模式的设计图如2-3所示。
图2-3 隔离驱动模式
2.4开发工具介绍
2.4.1SQL Server 2008数据库系统
在毕业设计中我用到了Microsoft 公司的SQL Server 2008。
SQL Server 2008是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本该版本继承了SQL Server 2000版本的优点同时它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server 版本。
这个平台新功能有以下特点[12]:
(1)可信任的——使得公司可以以很高的安全性、
可靠性和可扩展性来运行
逻辑业务层数据访问层
陈述层
他们最关键任务的应用程序。
(2)高效的——使得公司可以降低开发和管理他们的数据基础设施的时间和成本。
(3)智能的——提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。
2.4.2C#编程语言
Microsoft是这样描述C#的:“C#是从C和C++派生来的一种简单、现代、面向对象和类型安全的编程语言。
C#主要是从C/C++编程语言家族移植过来的,C和C++的程序员会马上熟悉它。
C#试图结合Visual Basic的快速开发能力和C++的强大灵活的能力。
”[13]Microsoft C#是微软退出的与JAVA语言香抗衡的一种支持网络编程新的编程语言,它是为生成运行在.NET Framework[14]上的、广泛的企业级应用程序而设计的。
C#是专门用于.NET的编程语言,用C#编写的代码总是在.NET框架中运行[15]。
C#为开发者提供了以下主要方便特点[16]:简便性——不管是成员、类、名字空间还是引用,都统一简化到用点来表达;一致性——每种数据类型都视为一个对象,统一了类型系统;面向对象——抛弃了全局函数、变量和常量了概念;可升级性——类型声明和定义综合在一起,去掉无C和C++编译中需要的各种各样的头文件。
2.4.3Visual Studio 2010工具软件介绍
Visual Studio 2010是微软公司推出的开发环境。
是目前最流行的Windows 平台应用程序开发环境。
其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。
除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库。
与Visual Studio 2008相比新功能还包括[17]:
(1)C# 4.0中的动态类型和动态编程:C# 4.0的主题就是动态编程(Dynamic Programming)。
虽然C#仍然是一种静态语言,但是对象的意义开始变得越来越“动态”。
它们的结构和行为无法通过静态类型来捕获,或者至少编译器在编译程序时无法得知对象的结构和行为。
C#引入了一种新的静态类型“dynamic”,当你拥有了一个dynamic类型的对象后,你“对它做的事情”只会在运行时进行解析。
(2)多显示器支持:“一夫多器”,随着现代应用程序规模越来越大,开发工具越来越复杂,需要同时处理的信息也越来越多,多显示器已经成为我们开发
工作的实际需要了。
常常我们希望能够一边编写代码,一边能够直观地看到界面的变化,同时我们还想开着搜索引擎查找资料等等。
(3)使用Visual Studio 2010的特性支持TDD:TDD(Test-Driven Development)测试驱动开发:开始流行于20世纪90年代,是极限编程中倡导的程序开发方法之一,其主要思想就是先写测试程序,然后再实现代码使其通过测试。
无法高效地编写测试程序;困难:测试程序写好后,无法自动生成代码框架,开发人员还要用大量的时间来编写实现代码。
VS2010的“即用即产生”特性,可以让我们根据测试程序,根据代码的使用情况,快速地反向生成相应的代码。
(4)支持Office:
动态编程C# 4.0中引入了一种新的静态类型dynamic,这使得我们在使用进行Office开发的时候,无需再进行复杂而繁琐的对象类型转换。
可选参数Office函数有很多参数,C# 3.0不支持可选参数,每次调用函数都必须给定全部参数;C# 4.0支持参数使用默认值。
No-PIA部署以前Office开发要求目标机器(用户机器)安装特定版本Office,在VS2010的No-PIA部署中,将真正使用到的程序集嵌入到应用程序中。
(5)Quick Search特性:在VS2010中,我们可以通过在任何代码文件中使用快捷键“Ctrl + ”,(Ctrl键加上逗号键)调出“Quick Search”窗口,在搜索框中输入任意的字符作为搜索条件,VS就会替我们在项目中搜索相关联的符号,类型,成员名称等等,同时将搜索结果动态地显示在窗口下方的搜索结果列表中。
我们可以不断地更换搜索条件,直到找到我们想要的结果为止。
(6)C++ 0x新特性:C++的新标准C++0x已经进入了feature freeze的阶段。
Visual Studio 2010引入了TR1包含的部分特性外,还引入了4个重要的C++新特性:Lambda表达式,静态断言static_assert,auto关键字,右值引用。
(7)IDE增强:VS2000之后,VC++的IDE效率越来越低下。
VS2010中VC++增强主要包括:改进的项目系统支持,改进的VS用户体验,增强的MFC,VC++程序的发布与部署。
(8)使用Visual C++ 2010创建Ribbon界面:随着Office 2007的发布,它改变了以往传统的下拉式菜单用户界面,取而代之的是全新的被称之为“Ribbon”的固定式工具栏界面。
(9)新增基于.NET平台的语言F#:F#是由微软发展的为微软.NET语言提供
运行环境的程序设计语言。
它是基于Ocaml的,而Ocaml是基于ML函数程序设计语言的,用于显示.NET在不同编程语言间互通的程序设计。
微软计划将慢慢整合F#至.NET平台并使F#最终成为.NET平台的顶峰语言。
3 系统功能的架构与设计
作为一个企业进销存管理信息系统,其功能是实现公司进销存信息管理的系统化、规X化和自动化。
3.1系统功能描述
本系统属于中小型企业的数据库系统,可以对中小型企业的进销存进行有效控制。
通过本系统可以达一下目标:
(1)采用人机对话方式,界面友好美观信息查询灵活、方便,数据存储安全可靠。
(2)与供应商和代理商账目清晰。
(3)功能强大的营业额分析
(4)实施强大的后台监控功能。
(5)实现商品的进货分析与统计、销售分析与统计、商品销售成本明细等功能
(6)强大的库存警告功能,尽可能的减少商家不必要的损失。
(7)系统对用户输入的数据进行严格的数据检查,尽可能的排除人为的错误。
3.1.1系统总体功能结构
“进销存管理系统”的实现框图如图3-1所示。
主要功能包括以下六个方面:
(1)进货管理功能
进货管理模块是进销存管理系统中不可缺少的重要组成部分,它主要负责为系统记录进货单及其退货信息,相应的进货商品会添加到库存管理中。
进货管理包括:
1)进货单:进货单据的填写;
2)进货退货单:进货后退货单据的填写;
3)进货分析:查看分析进货的数量、价格、折合的金额;
4)进货统计:通过供应商、经手人或时间的选择对进货商品进行的统计;
5)单位往来对账:查看所有往来单位,并显示与单位的账目。
(2)销售管理功能
销售管理模块实现对商品销售过程进行全方位管理和全程监控。
进货管理包括:
1)销售单:销售单据的填写;
2)销售退货单:销售后退货单据的填写;
3)销售统计:对商品进行详细统计和所有综合统计;
4)销售状况:商品的销售状况进行详细统计,并可查询单月的销售和销售退货的明细账本;
5)商品销售排行:通过供应商、经手人或时间的选择对销售商品进行的排序;
6)商品销售成本表:查看销售商品的成本和毛利;
7)往来对账:进货和销售进行详细的对账(包括批量进价的差额)。
(3)库存管理功能
库存管理模块实现对商品库存进行全方位管理和全程监控。
库存管理包括:
1)库存状况:查看库存信息和进行库存商品的上下限报警设置;
2)库存商品上限报警:显示库存超过上限的商品;
3)库存商品下限报警:显示库存超过下限的商品;
3)库存盘点:查看并设置库存商品状况和损件数量。
(4)基础数据管理功能
基础数据管理模块实现对企业的基础数据进行管理。
基础数据管理包括:
1)库存商品:查看、修改和添加企业的所有商品的信息;
2)往来单位:查看、修改和添加单位的代理商和供应商的信息;
3)公司职员:查看、修改和添加公司员工的信息。
(5)系统维护功能
系统维护模块实现对系统进行全方位管理。
系统维护包括:
1)本单位信息:查看和修改企业的信息;
2)系统权限管理设置:实现登录本系统的用户进行权限设置;
3)系统数据备份/恢复:实现系统内数据的备份和数据的恢复功能;
4)系统数据清理:实现系统内的数据的清空。