进销存管理系统
一.学习阶段
二.系统开发阶段
三.总结与*****阶段
一.学习阶段
学习阶段:从2009-2-23至2009-3-10
1.熟悉VB.NET语言
2.熟悉HF程序员编程规范
3.了解界面统一方案
4.熟悉xpo编程原理
1.熟悉VB.NET语言
到*****的第一个星期,在指导老师的指导下,查阅VB.NET语言的书籍,和相关的资料.
了解到VB.NET的开发风格和编码特性
2.熟悉HF程序员编程规范
使用统一编码规范的主要原因,是使应用程序的结构和编码风格标准化,以便于阅读和理解编码。
好的编码规范可使源代码严谨、可读性强且意义清楚,与其它语言规范相一致,并且尽可能的直观。编码规范是编程准则,它注重于程序的物理结构和外观,而不是程序的逻辑结构。它们使编码更加容易阅读、容易理解而且容易维护。编码规范包括:
控件、类、变量及过程的命名约定。
标记和注释编码的标准化格式。
3.了解界面统一方案
统一界面统一控件子窗口内,不包含工具条及辅助工具条的区域,有GRID表格的界面设计制作步骤:所有控件尽量使用第三方控件,不能用VB.net自带控件,除非第三方控件没有的。查询框统一用Panel控件做,且在各界面默认隐藏。并做按钮点击打开,按钮放主工具条“关闭”前。显示为“查询”。“查询”按钮前必须要加上分隔号“关闭”按钮前必须要加上分隔号另:窗体名和菜单名要一致。 菜单的顺序依次是:新增,删除,保存,刷新。
4.熟悉xpo编程原理
一个持久类(Persistent Class)一般来说映射为一个表类型,该表的每一条纪录即一个持久类的实例。
持久类继承自XPObject或者XPBaseObject。Public Class Customer : Inherits XPObject
创建对象就创建了一条新纪录,调用基类的save就保存到库。
XPObject继承自XPBaseObject,已包含Oid属性表示表的唯一自增量字段。
检索一个表,实际就是检索一个同类对象的集合 XPCollection
支持一对一,一对多,多对多三种关系。
数据库的表间关系在框架内体现为持久对象之间的关系。一般我们在设计一些类似关系的类时,我们用数组或者其他集合表示方法IList等等,来为类之间建立关系。
XPO使用XPCollection来表示类之间的”对多关系”。并且附加属性来表示多对多还是一对多的关系。
二.系统开发阶段
系统开发阶段从2009-3-10至2009-5-10
1.系统分析
2.详细设计
3.代码实现
4.系统测试
1.系统分析
1.1 了解业务需求
1.2系统结构图
1.3数据流图
1.4业务功能分析
1.5实体联系图
1.1 了解业务需求
进销存管理系统是基于先进的软件和高速、大容量的硬件基础上的新的进销存管理模式,通过集中式的信息数据库,将企业的进、销、调、存、转、赚等企业的经营业务有机地结合起来,达到数据共享、降低成本、提高效率、改进服务等目的。
进销存管理系统的开发主要包括后台数据库的建立和维护以及前台的开发这两个方面。对于前者要求建立起数据一致性、完整性的库。对于后者则要求功能完备,方便使用。本系统应该满足进、销、存三大方面的管理。
1.2系统结构图
1.3数据流图(DFD )
数据流图:一种描绘信息流和数据从输入移动到输出的过程所经受的变换。
定货系统基本数据流图
以定货系统和进货系统为例子
1.3数据流图(DFD )
以定货系统为例子
定货系统功能级数据流图
1.3数据流图(DFD )
进一步分解定货系统
1.3数据流图(DFD )
进货系统基本数据流图
以进货系统为例子
1.3数据流图(DFD )
以进货子系统为例子
进货系统功能级数据流图
1.3数据流图(DFD )
进一步分解进货系统
1.4业务功能分析
1.4.1 系统管理
1.4.2 资料管理
1.4.5 采购管理
1.4.6 销售管理
1.4.7 库存管理
1.4.1 系统管理
“系统设置管理”用于管理使用本系统的用户,包括增加、修改、删改、查询用户资料,例如用户权限的修改,用户名和密码等的修改等。
1.4.2 资料管理
企业经营的基础资料是一个企业最基本和最重要的信息,脱离了基础资料,包括商品资料、供货商资料和客户资料等,进销存系统就无法运行。“资料管理”功能模块用于维护这些基础资料.
1.4.2 资料管理
1.4.3采购管理
采购管理功能模块用于管理企业的采购业务
1.4.4 销售管理
“销售管理”功能模块用于管理企业的销售业务,包含的子功能模块如图
1.4.6 库存管理
“库存管理”功能模块用于管理企业的库存信息,包含的子功能模块如图
1.5实体联系图
以用户,部门,角色,权限和商品为例子
用户,角色,权限,部门E-R图
1.5实体联系图
商品E-R图
2.详细设计
2.1登录设计
2.2系统主窗体设计
2.3系统管理设计
2.4采购管理设计
2.5销售管理设计
2.6库存管理设计
2.1登录设计
用户登陆时,判断他的权限,获取他的权限并集,然后设置功能菜单为灰,功能树不显示不具有权限有结点。
不存在的用户:d,123456
离休人员:a,123456
离职人员:c,123456
只有少量权限的用户:可以通过用户b,密码:123456进行测试。
没有设置登录选项的用户:f,123456
超级管理员(所有权限):admin,123456
采购员:cgy,123456
仓管员:cangy,123456,没有任何权限或没有分配任何角色。
2.1登录设计
通过输入账号和密码登陆系统
根据用户输入的账号判断是否存在,是否离职或离休。
这里讨论一个权限并集的概念,通过已知条件获取用户权限集合和用户角色的权限集合,然后再取两者的并集。接着对用户可操作的功能进行显示,否则置灰。
2.2系统主窗体设计
主界面采用上左右模式,上面是功能菜单。根据用户权限没有权限的功能菜单置为灰色。左边是功能树,功能树可以停靠在左边
功能树是根据用户权限集合的并集生成的。如果用户拥有该权限才生成。
不具有该权限则不显示。
2.2系统主窗体设计
在主界面添加了:选择软件风格的功能。对于不同的用户,对不同软件风格的需求都能够满足。
2.2系统主窗体设计
主窗体左下角状态栏控件会显示当前用户名称、角色等信息。
主窗体右下角状态栏控件会显示当前用户选择的功能名称提示信息。
界面显得更加友好,人性化。
2.3系统管理设计
2.3.1部门管理
2.3.2用户角色权限三者关系
2.3.4用户管理
2.3.5功能模块
2.3.6角色管理
2.3.7角色权限设置
2.3系统管理设计
2.3.8用户角色设置
2.3.9用户权限设置
2.3.10密码重置
2.3.11更新个人资料
2.3.1部门管理
部门的增加,修改,删除,预览,导出,打印。在保存数据的时候发现一个问题:无法达到提示重复信息的功能。对此,采用循环保存和循环删除的方法。
部门有各自的编码和名称。
2.3.2用户角色权限三者关系
通过对三者关系的分析:权限分散,角色集中,改变权限,增加角色
如果用户的的权限只是局限在角色内部范围内,则为单一角色;
如果改变权限增加后,则对用户的角色也相应改变,这里采用角色叠加的方法,就是说一个用户可以拥有多个角色。则为多重角色用户;但本系统限定为三个。方便讨论。
所以这里提出,单一角色与多重角色的管理。
2.3.3用户角色权限三者关系
用户表 用户编号,用户名,登陆名,密码,性别,电话,地址,部门
角色表: 角色编号,角色名,功能备注
权限表: 编号,权限名称,
用户权限表: 编号,用户编号,权限编号
角色权限表: 编号,角色编号,权限编号
用户角色表: 编号,用户编号,角色编号
持久类实体关系
用户权限(这个组合词重点权限两个字上面);权限功能
2.. 用户----用户权限表: 1:N
3. 用户---用户角色表: : 1:N
5 角色---用户角色表: N:1
4. 角色----角色权限表:1:N
6权限—用户权限表: N1
7权限---角色权限N1
说明:N1表示对应关系
2.3.4用户管理
用户的增删改,预览,打印,导出。
用户初始显示所有正式员工,可根据人员状态分类查看。
工号必填,用户自定义。密码非公开显示。
允许登陆功能指定用户的登陆能力。一旦选择则不可登陆。
2.3.5功能模块
功能模块的增加,修改,删除,预览,导出,打印。增加分为新增和新增下级,新增是同级功能模块,新增下级是下级功能模块.
系统根据功能模块名称,自动生成编号,类别是上级模块名称.
用户如果不喜欢系统生成的编号,可以手动输入非重复 的编号.
2.3.6角色管理
用户可以生成特定的角色.限定其角色范围.
不同角色范围的角色给予不同色调.
2.3.7角色权限设置
从角色管理中,获取所有角色,通过分配不同的权限,实现角色权限的管理.
2.3.8用户角色设置
用户无需多次分配权限,只要给予相应角色,就有相应的权限,这样十分方便
2.3.9用户权限设置
用于系统管理员设置用户操作本系统的权限。
实现了新用户的权限配置和原有用户的权限修改功能。
对角色来说,其对应的权限可以修改。
为了满足用户权限不同的需求,增加了用户权限设置功能,这样用户就可以不限制在用户角色权限范围内操作,大大加强了权限控制的灵活性.
2.3.9用户权限设置
为了满足用户权限不同的需求,增加了用户权限设置功能,这样用户就可以不限制在用户角色权限范围内操作,大大加强了权限控制的灵活性.
2.3.10密码重置
用于用户修改自己的密码信息。
旧密码验证
两次新密码的输入使密码修改流程更加规范.
2.3.11更新个人资料
用户可以修改个人资料,取消具有重置功能。
2.4资料管理设计
2.4.1商品管理设计
2.4.2其他基础资料(如业务员管理设计,供货商管理设计,仓库管理设计,客户资料管理设计)
2.4.3采购合同设计
2.4.4销售合同设计
2.4.1商品管理设计
2.4.1.1商品类别管理
2.4.1.2商品编码
2.4.1.3商品信息
2.4.1.1商品类别管理
商品资料包括货号,条码,拼音编码,品名等一些必填字段,直接在表格中添加或修改信息并保存即可
分大类,中类,小类,并具有三级联动功能。
2.4.1.2商品编码
商品类别,它将商品按一定的属性进行细分,方便对商品编码的设置。商品编码=日期+商品种类:大类+中类+小类(拼音)
2.4.1.3商品信息
主要是维护企业经营商品的基本信息。每一条商品信息都有一个编码,它是由商品类型和大类自动生成的,具有一定的规律,新增一条商品记录时必须先选择商品类型,删除记录先要判断该商品有没有被使用,如果有,则不能删除。
2.4.2其他基础资料
资料管理中还包含了供货商,客户,仓管员,业务员和仓库资料5个模块,分别对相应的信息进行管理
2.4.3采购合同设计
企业商业进货前一般会签订采购合同,指导采购流程。
这里有一个敏感的数据,那就是进价。
填写采购订单时,如果已经签订采购合同,可以根据合同的进价采购商品。
2.4.4销售合同设计
同样的,销售订单的销售价格也是根据销售合同产生
2.5采购管理
2.5.1采购订单与明细
2.5.2进货单与明细
2.5.3历史进货价格调整
2.5.4进退货管理
2.5.1采购订单与明细
采购订单的进价可根据采购合同确定,添加商品时,系统会自动获取合同的进价,用户决定是否使用合同进价。
2.5.2进货单与明细
用于登记进货的商品、数量、仓库、供应商、 进货日期等信息,它是根据采购单来进货的,分为主从表。
2.5.2进货单与明细
进货单的保存方式有两种:一是“草稿”形式;二是正式保存;这里会有一个确认的操作。以前者方式保存进货单,商品库存不会发生任何变化,用户可以随意调整进货单的数据。以后者方式保存,商品库存会相应增加,此时用户不能再对进货单作任何修改。(其他会影响库存的单据如进退货单、销售单、销售退货单等单据保存方式一样)
进货后: 库存增加…产生付款
进货入库后就不能再删除
进货入库后,不能再修改进货的数量
填写进货单明细的时候,进货数量可以参考采购订单明细的订货数量
填写进货单明细的时候,进价可以参考采购订单明细的进价,但不一定得一样
2.5.2进货单与明细
进货查询:可根据供货商,进货日期,商品货号,商品拼音,商品名称进行查询。
2.5.2进货单与明细
进货报表,根据进货单生成报表,基础信息在表头,商品详细在下方。销售报表类似进货报表。
2.5.3历史进货价格调整
“进货价格调整”用于调整历史进货单的价格,内容包括内部编号、编号、进货数量、原进价、新进价、调整日期、制单人等。
2.5.4进退货管理
退货单用于登记要退回的商品、数量、仓库、供应商等信息。它是根据已入库的进货单来退货的。
退货单是整个单退货的,由之前进货单生成退货单,退货单退货后不能再去修改数据,也不允许删除。
退货之后会有已退货标志。
2.5.4进退货管理
退货单上商品的退货数量不能大于进货单上该商品的数量。
以正式方式保存退货单时,退货单不能修改, 商品库存会相应减少,同时该进货单的商品数量也会减少。
2.6销售管理
2.6.1销售订单与明细
2.6.2销售单与明细
2.6.3历史销售价格调整
2.6.4销售退货单
2.6销售管理
销售管理模块包括三个子模块:销售订单、销售单、销售退货单,分别对应采购管理模块的采购单、进货单、进退货管理,实现方法类似,只不过采购的对象是供应商,销售的对象是客户,进货增加库存,销售减少库存。
2.7库存管理
2.7.1库存调拨
2.7.2库存查询
2.7.3报损
2.7.4报溢
2.7.5上下限设置
2.7.6库存报警
2.7.1库存调拨
用来管理两个不同仓库之间商品的调拨。
调拨前要确认,没确认是不会进行调拨的。调出仓库与调入仓库不能相同。
商品的调拨数量不能大于调出仓库中该商品的库存量。
调拨单以正式形式保存时,调出仓库的商品数量减少,
调入仓库中该商品的数量相应增加。
2.7.1库存调拨
2.7.2库存查询
分类选择查询每种商品的库存信息。
2.7.3报损
若发现商品的实际数量小于仓库库存量 ,则需要填写具体的商品报损单,这样可以有效的帮助管理者了解实际的库存信息,防止库存供应不足的情况出现。
2.7.3报损
2.7.3报损
报损商品的数量不能大于报损仓库中该商品的库存量。
以正式方式确认保存报损单时,商品的库存量会相应减少。
报损和报溢可以在进货时生成原始数据。这样就不用用户去查找要操作的商品了。
2.7.4报溢
发现商品的实际数量大于仓库中该商品的库存量则填写报溢单,以正式形式保存报溢单后,商品的库存增加。
2.7.5上下限设置
设置商品的上下警戒库存量。如果上下限都已设置,则最低库存不能大于最高库存。
2.7.6库存报警
查询仓库中上限或下限报警的商品信息。根据已设置的库存上下限,系统会判断该仓库有哪些商品超过最高库存或者小于最低库存,以便及时提示管理人员进行采购或销售 。
3.代码实现
编程实现上述设计
4.系统测试
4.1 角色管理测试
4.2用户管理测试
4.3商品类别管理测试
4.4测试修改密码时测试
4.5初始化超级用户测试
4.1 角色管理测试
角色管理:用户修改角色范围后,保存仍没有达到预期的修改结果,数据没有更新。
解决方法:通过设置验证方法,当编号和角色名称有重复时,用户点击修改时保存数据,点击否放弃修改。
4.2用户管理测试
用户管理:性别字段无法绑定下拉列表框。出现空值。
解决方法:再次手工绑定男和女字符。选择后保存,提示是编号已经存在,是否保存,逻辑上没有问题,因为是修改,不担心编号重复问题。。
4.3商品类别管理测试
商品类别管理:导出为excel文件时,发现已经有相同文件存在,提示的同时,出现另一个界面。。
解决方法:初步估计是因为在loginform设置全局变量引起的,尝试在另一文件中设置全局变量,问题依然出现。。。
隐藏登录界面,清空导出临时数据解决问题
4.4测试修改密码时测试
测试修改密码时,弹出原密码不正确,但是实际已经修改了旧密码?
原因:修改成功时没有提示,再次点击 再次修改,此时原密码发生变化。
解决:只要获取登陆用户g_user的password与输入的旧密码对比就可,另外增加修改密码成功提示。
4.5初始化超级用户测试
初始化超级用户失败,弹出数据验证:名称不能重复
原因:在初始化超级用户时,分配两个最重要的权限:一是权限管理,这是一个可以建立所以权限的功能,二是用户权限设置,这是一个分配给任何用户权限的功能。
因为,初始化时,查询数据库是否存在 相同登陆名和密码的用户,相同就不生成,由此出现问题
解决:查询登陆名admin不存在就初始化一个超级用户admin ,密码123456
三.总结与*****阶段
总结与*****阶段从2009-5-10至2009-5-14
1.编程总结与体会
2.工作总结
3.收获与体会
4.对*****认识
5.致谢
1.编程总结与体会
1.1 如何使gridcontrol更新无效。
1.2绑定主从表的类别
1.3在gridcontrol中出现未将对象设置为引用实例
1.4导出为excel文件
1.5如何设置报表
1.6其他
1.编程总结与体会
1.1 如何使gridcontrol更新无效。
不改变gridcontrol行,使更新无效。重载
Protected Overrides Sub endedit()
End Sub
1.2绑定主从表的类别
绑定主从表的类别
filedName:从表中与主表关联的类别字段
summaryItem->filedName同上
DisplayMember:主表中类别名
Colunm: :主表中类别名
注意:This不能写成this
1.3未将对象设置为引用例
在gridcontrol中出现未将对象设置为引用实例
有两个可能:
定义字段名出错:你可能会在filedName写上Supporters!其实定义的时候是Supporters!多了一个 S,也有可能是拼音输入法的原因!和字母的不一样
可能是没有定义get 和set
Private _GoodsKind As GoodsKind
<Association("SupporterToKind")> Public Property GoodsKind() As GoodsKind
必须加上下面的get和set才能正常显
Get
Return _GoodsKind
End Get
Set(ByVal Value As GoodsKind)
If Not _GoodsKind Is Value Then
_GoodsKind = Value
If Not Loading Then Modified = True
End If
End Set
End Property
3可能重复定义displaymember导致。.
4.可能是代码上出错,没有对应好gridview
1.4导出为excel文件
商品类别管理:导出为excel文件时,发现已经有相同文件存在,提示的同时,出现另一个界面。。
解决方法:初步估计是因为在loginform设置全局变量引起的,尝试在另一文件中设置全局变量,问题依然出现。。。
最后,采用隐藏HIDE登陆窗体方法,在导出新excel文件时,清空原来的数据。
1.5如何设置报表
如何设置报表:
建立一个数据文件 StocKDataset.xsd,主表和从表,属于数据层
建立报表文件:XtraReportStockList.vb。设置你要显示的字段。属于界面层、
建立代码文件:StockBusiness.vb。在你的程序中给字段给值
1.6其他
删除时出现:
原因:在建立级联关系时,两个实体类必须对应好,一个实体类有写关系,另一个没有则会出现这种情况。
1.6其他
无法将null值插入OID
将数据表OID设置为标识”是”
将字段设置为double出现预期结果.同理.如果不设置datetime,不会有正常的日期显示格式..
可以添置两个外键与同一个表相关。
如调出仓库与调入仓库可以同时关联一个仓库表
1.6其他
调拨单里 预览时无法清除上一个预览结果
当前调拨单清空还是不行。
代码有更新调拨单内容,但是无法显示。
原因: Dim report As New XtraReportTransferList 必须给打印和预览声明各自的变量,不能使用同一个且在方法体外面。这样会造成数据无法更新。
登录时,发现只是根据用户权限表判断是否可以打开菜单,这样对角色不利。
修改后,可以自由添加系统角色,然后给予角色权限,用户选择角色,就可以很快拥有多个权限。在登录时,先在用户权限表判断是否有权限,再角色权限表判断是否拥有对应角色的权限。这样不管是在用户权限中设置,还是在角色权限中设置权限,都能够轻松自由的分配权限。
2.工作总结
开发项目前先要熟悉项目的需求分析、详细设计等说明书。
站在用户的角度上考虑,界面具有易用性,界面风格要统一,代码书写要规范。
项目开发计划必须严谨,在开发之前应该完成概要设计和详细设计文档的制定
业务逻辑复杂繁琐时,必须深刻考虑软件的用户体验,可以通过理清逻辑,细分流程来规范用户的操作
代码规范要严格按照*****要求,精简代码,条理清晰,提高程序可读性
数据表格被更改过后未保存,点击关闭或刷新时应该弹出提示保存的消息框
重要数据不能让用户轻易删除
数据表格的文本应靠左显示,数字靠右显示
对影响较大的操作应给予确认提示,防止误操作
3.收获与体会
从数据库的设计、代码的完成到整个系统的测试,让我了解了系统的基本架构以及开发一个系统的基本流程。
对VB.NET语言以及测试的基本原理有了更深的理解。
初步养成了规范编程的习惯
掌握XPO 编程思想
熟悉第三方控件的使用
加深了对VB.NET和SQL的认识
加深对*****这个富有创造力和凝聚力的团队的了解
4.对*****的认识
*****科技*****是集软件产品开发、系统集成、顾问与服务为一体的专业化*****。
*****开发的*****.net信息管理平台在政府及事业单位得到了广泛应用,是目前国内最著名的软件供应商之一。
5.致谢
感谢*****给我一个学习和工作的机会
感谢经理对我的指导和关心
谢谢
——Thanks