商业销售系统建模.docx
《商业销售系统建模.docx》由会员分享,可在线阅读,更多相关《商业销售系统建模.docx(35页珍藏版)》请在冰点文库上搜索。
商业销售系统建模
商业销售系统建模
商业销售系统
次分析设计是针对一个商业销售系统中的几个主要业务进行建模。
我们的设计对象是一个商场的商业销售系统。
商场下设有业务部、仓库、若干柜台组及收银台等,业务部负责组织进货、保管及销售,仓库对购进的商品进行保管,而柜台则是进行商品零售的场所,收银台作为大厦财务出纳的收款点负责零售商品的收款。
1.现有系统描述
该商场现有部门如下:
家用电器经理部、家用电器大件柜、家用电器小件柜;
五金交电经理部、小五金柜、电气材料柜;
钟表眼镜经理部、钟表柜、眼镜柜;
文化用品经理部、文化用品一柜、文化用品二柜;
体育用品经理部、体育器材柜、体育服装柜;
服装用品经理部、妇女服装柜、儿童服装柜、男子服装柜;
大件商品仓库,服装用品仓库、精细商品仓库、普通商品仓库。
该商场的业务目前全部为手工处理,具体业务描述如下:
业务部从有关厂家和批发商订购商品;订购商品到货时,由业务部的制单人填写商品入库通知单,通知仓库进行行验收入库;仓库保管员按入库单对到货进行验收入库;无论验收情况如何,都要填写验收单,通知业务部及财务进行做账;
柜台需要库存商品上柜销售时,也由业务部的制单人填写商品调拨单分别通知仓库和柜台组;仓库按调拨单发货;柜台按调拨单提货到柜台;商品零售时,由售货员填写交款单给顾客,顾客拿交款单到收银台交钱,收款员按收款单的金额收款,然后在交款单上盖收款章,顾客凭盖章后的交款单到柜台取走商品;
而对批发业务来说,顾客直接到业务部进行洽谈,业务部的业务人员根据洽谈结果开售货单,顾客拿售货单到财务部出纳处交款,出纳收款后在售货单各联上加盖收款章;顾客交款后直接到仓库提货;仓库发货时按售货单发货,并将售货单的提货联留底。
2.对新系统要求
2.1经理业务部业务管理
业务处理要求:
要求新系统能支持各经理业务部通过开具入库单、调拨单、调价单商品批发销售单以及库存调整单来对商品流通各个环节进行管理和控制。
数据处理要求:
入库单、调拨单、调价单、销售单以及库存调整单都是属于原始凭证,在新系统中应保存这些原始凭证的如下基本信息:
凭证号、凭证名称、填制单位、接受单位、日期、制表人;以及,如下明细信息:
入库编号、单位、数量、单价、摘要。
2.2仓库业务管理
业务处理要求:
商品的入库、出库、盘点及查询。
商品入库主要是采购商品入库,入库时须按入库通知单对实物进行验收,并填写验收单。
出库有两种情况:
一种是按商品调拨单将商品调入柜台进行销售,另一种是批发销售,顾客拿提货联来提货。
盘点主要是按库存账对实物进行盘查,查出各种实物的盈亏情况。
商品入库、出库都要对库存账进行登记,盘点要做出盘点报表
数据处理要求:
仓库的商品库存账记录了仓库各种商品的库存数量及资金占用量等库存状态,应能反映如下信息:
入库编号、商品名称、单位、数量、单价、入库日期、库位
库存进出流水账记录仓库商品进出情况,这是一个随时间增加的流水账,应能反映如下信息:
凭证编号、进出(借贷)、数量、单位、单价、入库编号、商品名称、日期、摘要。
入库验收单记录入库验收情况,应能反映如下信息:
验收单编号、商品名称、入库编号、入库数量、验收数量、验收质量、单位、单价、入库单编号、验收日期、验收人、摘要。
盘点记录表记录盘点情况,应能反映如下信息:
盘点日期、入库编号、商品名称、账面数量、实际盈亏数量、单位、单价、摘要。
2.3柜台业务管理
新系统应对以下业务进行处理:
商品调柜处理、商品销售及柜台商品的统计查询。
商品调入柜台进行销售时,要按商品调拨单从仓库中领取商品,同时要登记柜台商品帐。
销售商品时先开售货单给顾客,顾客凭售货单去收银台交款后再将已盏收款章的售货单交给售货员并取走商品,售货员须将已售出的货物进行登记。
此外,查询主要查询柜台商品情况及销售情况。
统计主要统计每天的销售情况,毛利润等信息。
数据处理要求:
1.柜台商品的登记应该的两本账;一本是反映柜台商品状态的,另一本是反映柜台商品变动情况的流水账。
2.用于记录柜台现有各商品存货的情况的柜台商品账,应能反映如下信息:
入库编号、商品名称、单位、数量、进价。
3.用于记录柜台商品的入库情况的柜台商品入库流水账,应能反映如下信息:
凭证编号、入库编号、商品名称、数量、单价、单位、日期、摘要。
4.用于记录柜台商品的销售库情况的柜台商品销售流水账,应能反映如下信息:
凭证编号、入库编号、商品名称、销售数量、销售单价、单位、单位毛利、日期、摘要。
5.售货数据:
售货单编号、入库编号、商品名称、数量、售价、单位、有效否、柜台名称、日期。
6.商品价格数据:
商品名称、单位、价格、实行日期。
2.4收银台管理
收银台的主要工作就是按售货单收取现金。
系统应提供以下业务处理功能:
收款员联机管理、收款登记,收款查询、销售日报表及现金日报表的生成打印。
数据处理要求:
1.收款台账,记录了收款流水账,应能反映如下信息:
售货单编号、日期、柜台、入库编号、商品名称、数量、单位、单价、收款员、付款方式(现金、支票)。
2.销售日报,记录了每天统计的销售情况,应能反映如下信息:
日期、柜台号、入库编号、商品编号、数量、单位、金额。
3.新系统至少应记录收款员如下一些信息:
收款员姓名、口令、有效否、登记日期。
2.5商品三级账管理
商品三级账管理的主要有:
根据仓库验收单在商品账中登记入库记录,填调拨单时须检查库存是否有相应的商品,调拨单填完后要自动对商品账中的库存和柜台商品变动进行登记,根据销售日报表对柜台销售商品登账。
数据处理要求:
1.商品存货账,记录商场备部门的存货情况:
入库编号、商品名称、存货单位名称、单位、数量、单价。
2.商品变动流水账,记录商场各部门的存货的变动情况:
入库编号、商品名称、科目编号、借贷、单位、数量,单价、日期、凭证号、摘要。
3.商品销售流水账,记录商品的销售情况:
入库编号、商品名称、销售部门、销售数量、单位、售价、进价、毛利、日期。
2.6编码要求
新系统对诸如部门、人员、商品、厂家、各种凭证等分别制定一套简单易行的编码方案,以方便管理和使用。
商场方面还要求该系统应是一个多层体系结构的分布式系统。
系统设计说明
本文档设计中,是把以上部门按功能把他们进行抽象成为四个管理系统。
下图是UseCaseDiagramView中对系统的一个描述。
它虽然是个UseCaseDiagram,但里面的内容只是Package,不包含具体UseCaseDiagram的actor和UseCase.
图1。
系统的结构图
单据管理系统设计说明
UseCase应该是过程、操作而非一个实体的对象。
如图,UseCase的所有对象(商品入库单、库存入库单、商品调整单、商品批发销售单、商品调拨单)都是实实在在存在的实体。
它们不是一个过程,亦不是一个操作。
因而UseCaseDiagram如下:
图二、单据管理系统用例图。
在单据管理系统中要求新系统能支持各经理业务部通过开具入库单、调拨单、调价单商品批发销售单以及库存调整单来对商品流通各个环节进行管理和控制。
在画SequenceDiagram中,为了很好的对类和操作作很好的映射,提高SequenceDiagram的实际用途,采用了“二步法”来做。
如下图,先是对用户所关心的东西作一个描述性的说明。
在这里面,不对具体的实体对象任何的描象,也不对类进行映射。
图三、“二步法”画SequenceDiagram
(1)
图四、“二步法”画SequenceDiagram
(2)
图五、“二步法”画SequenceDiagram(3)
和SequenceDiagram一样,CollaborationDiagram也显示使用案例中特定的流程。
SequenceDiagram与CollaborationDiagram中的信息相同,但CollaborationDiagram显示了不同的流程视图。
在CollaborationDiagram中,更容易看出对象之间的关系。
CollaborationDiagram表示协作,在CollaborationDiagram中包含了一组由对象扮演的角色,以及一个特定的上下文中的关系。
对最终得出的SequenceDiagram作转化,成为如图六所示的CollaborationDiagram:
图六、SequenceDiagram转为CollaborationDiagram
C1ass框图显示系统中的类与类包,提供系统组件及其相互关系的静态图形。
类是包装信息和行为的项目。
习惯上,我们把系统的信息放在数据库”一方,行为放在应用程序一方。
面向对象方法的特点之—就是将一小组息和影响信息的行为连接在—起。
我们将一小组信息和影响信息的行为连接在一起,包装成类。
一个系统通常要生成几个CIass框图。
有些显示类及其关系的子集,有些显示类的子集,包括属性和操作,还有—些显尔类包及包之间的关系。
接着上面的这个制单例子,对图八中所映射的类添加一些必要的属性和操作,并反相关的类分类后打包为三个包:
图七、把类分类后打包
图八、包“界面”下属类
图九、包“后台数据库”下属类
图十、包“中间件”下属类
当然,也有对整个单据管理系统所有类及类之间关系的描述:
图十一、单据管理系统类及类之间的关系
组件是代码的物理模块。
组件可以包括代码闸和运行文件。
例如,如果使用C++,则每个个.CPP和.H文件是单独的组件。
编译代码后生成的EXE文件也是组件。
生成代码之前,将每个文件映射相应组件。
在C++中,每个类映射两个组件,一个表示类的.CPP义件,—个表示.H的文件。
组件生成之后,加进ComponentDragram中,并画出其间关系:
图十二、组件包之间的关系
图十三、组件之间的关系
其它功能模块设计
上面已对单据管理系统的设计进行了详细说明。
从技术角度来说,仓库管理系统、销售管理系统、账目管理系统的实现过程、步骤和方法都是一样的。
为了避免不必要的冗余,以下部份直接给出图例,不再加于累述。
图十四、仓库管理系统用例图
图十五、销售管理系统用例图
图一六、帐目管理系统用例图
图一七、报表管理顺序图
商业销售系统类图汇总
图一八、后台数据库类图汇总
图一九、界面类图汇总
图二○、中间件类图汇总
图二一、商业销售系统类图汇总
图二二、商业销售系统类图汇总组件图汇总
尚未解决的问题
1.若此高场有进出口贸易,刚对进出口商品的管理没有细分。
2.界面的完全实现。
3.高级管理者与普通用户拥有优先的权利没有体现出来。
附录一、数据库建表代码
usemaster
go
ifexists(select*fromdbo.sysdatabaseswherename='vendition')
dropdatabasevendition
GO
createdatabasevendition
go
usevendition
go
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'ZreceiverInfo')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'Dorder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'CcheckOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'ZgoodDailyOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'SgainTotal')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'CstorageInfo')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'CinStorage')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'CprepareOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'ZmoneyDailyOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'SpayforOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'SpayforOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'SgoodsTotal')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'DorderItem')=1)
droptable[dbo].[TravelService_Loan]
GO
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[TravelService_Loan]')andOBJECTPROPERTY(id,N'CpickUpGoodsOrder')=1)
droptable[dbo].[TravelService_Loan]
GO
CREATETABLEZreceiverInfo(
ReceiverIDINTEGERNOTNULL,
ReceiverNameVARCHAR(255)NOTNULL,
ReceiverPassWSMALLINTNOTNULL,
GenderSMALLINTNOTNULL,
ApplyDatedatetimeNOTNULL,
LastLoginDatedatetimeNOTNULL,
CounterIDSMALLINTNOTNULL,
OthersSMALLINTNOTNULL,
ZreceiverInfo_IDINTEGERNOTNULL,
CONSTRAINTPK_ZreceiverInfo11PRIMARYKEY(ZreceiverInfo_ID)
);
CREATETABLEDorder(
OrderNumberINTEGERNOTNULL,
OrderNameVARCHAR(255)NOTNULL,
OrderFillUnitVARCHAR(255)NOTNULL,
OrderRequreUnitVARCHAR(255)NOTNULL,
OrderDatedatetimeNOTNULL,
OrderFillDatedatetimeNOTNULL,
OrderListerVARCHAR(255)NOTNULL,
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_Dorder4PRIMARYKEY(Dorder_ID)
);
CREATETABLECcheckOrder(
CheckNumberINTEGERNOTNULL,
CheckPersonVARCHAR(255)NOTNULL,
CheckResultSMALLINTNOTNULL,
COL_0SMALLINTNOTNULL,
Dorder_IDINTEGERNOTNULL,
GoodNameVARCHAR(255)NOTNULL,
InStorageOrderIDINTEGERNOTNULL,
CONSTRAINTPK_CcheckOrder21PRIMARYKEY(Dorder_ID)
);
CREATETABLEZgoodDailyOrder(
ZmoneyDailyOrder_IDINTEGER,
SgoodsTotal_IDINTEGER,
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_ZgoodDailyOrder24PRIMARYKEY(Dorder_ID)
);
CREATETABLESgainTotal(
DatedatetimeNOTNULL,
GoodOrderIDINTEGERNOTNULL,
OrderIdINTEGERNOTNULL,
SgainTotal_IDINTEGERNOTNULL,
TotalCashSMALLINTNOTNULL,
CONSTRAINTPK_SgainTotal18PRIMARYKEY(SgainTotal_ID)
);
CREATETABLECstorageInfo(
GoodPlaceVARCHAR(255)NOTNULL,
Dorder_IDINTEGERNOTNULL,
CinStorage_Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_CstorageInfo19PRIMARYKEY(Dorder_ID)
);
CREATETABLECinStorage(
InStorageTimeSMALLINTNOTNULL,
CpickUpGoodsOrder_IDINTEGER,
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_CinStorage20PRIMARYKEY(Dorder_ID)
);
CREATETABLECprepareOrder(
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_CprepareOrder22PRIMARYKEY(Dorder_ID)
);
CREATETABLEZmoneyDailyOrder(
OrderIdINTEGERNOTNULL,
TotalCashDOUBLEPRECISIONNOTNULL,
DatedatetimeNOTNULL,
GoodOrderIdINTEGERNOTNULL,
ZmoneyDailyOrder_IDINTEGERNOTNULL,
SgainTotal_IDINTEGER,
CONSTRAINTPK_ZmoneyDailyOrder14PRIMARYKEY(ZmoneyDailyOrder_ID)
);
CREATETABLESpayforOrder(
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_SpayforOrder25PRIMARYKEY(Dorder_ID)
);
CREATETABLEZgatheringOrder(
PayFormVARCHAR(255)NOTNULL,
CounterIDINTEGERNOTNULL,
ZmoneyDailyOrder_IDINTEGER,
Dorder_IDINTEGERNOTNULL,
CONSTRAINTPK_ZgatheringOrder23PRIMARYKEY(Dorder_ID)
);
CREATETABLESgoodsTotal(