从开发的软件《备件仓库管理系统》总结的一些经验

简介:

最近做了一个备件仓库管理软件,虽然只是一个不太复杂的仓库管理业务的软件,附带产出一些相关的报表,而且有之前做过的送水管理系统、酒店管理系统等软件的基础及技术储备,不过做起来发现还是有很多细节及新的东西,在客户不断提出修改意见以及改进建议的同时,逐步吸收优化新的知识,现大概总结一些相关的开发心得,以飨读者。

首先来看看整个软件的主体界面,如下所示,软件的功能主要集备件信息管理、备件入库、备件出库、库存查询、库房管理、业务报表、权限管理、数据字典管理、备件及库存导入等功能于一体。

 
现大致就主体界面介绍一些相关的知识:

1、使用OutLook样式的工具栏,提高界面的美观及易用性,这个在我的早期文章中已经有介绍,该控件集成美观的图标,可能很好提高界面的友好性及可操作性,可以令界面增色不少,详细请查看《WinForm界面开发之“OutLookBar”工具条》 在此不再赘述,只是介绍下并略为带过即可。

 

2、使用“WeifenLuo.WinFormsUI.Docking”控件来设计多文档界面效果,可以方便多个界面进行操作,这个控件也有相关的文章进行介绍使用了,请参考《WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用》 和《再谈布局控件"WeifenLuo.WinFormsUI.Docking"的使用--如何控制自动停靠窗口的大小》。

 

3、 尽可能使用已经在共享软件中广泛性使用我自己的分页控件,该分页控件集成了数据分页、内容提示、数据打印、数据导出、表头中文转义等很多功能,由于集成性很好,省却很多功夫,专注客户的业务及变化即可,否则一项表头的中文转换就够呛,还不说数据的分页,由于整合性、一致性、稳定性等特点,客户使用感觉比较好。最新的版本整合了优秀的Aspose.Cell控件来进行Excel数据的导出,速度非常快,而且默认表头冻结,非常方便。

 

4、 使用Apose.Cell控件的强大功能,实现自定义模板报表的定制导出。

使用普通的二维表,虽然能满足大多数的情况,不过在一般的业务中,自定义模板的报表根据贴近实际,符合客户的要求,虽然自定义模板的报表,比普通的二维报表复杂一些,不过利用Apose.Cell控件,并在预设模板中预设变量,可以生成很复杂的报表。详细历程可以参考我介绍Apose.Cell控件的使用文章,《使用Aspose.Cell控件实现Excel高难度报表的生成(一)》、《使用Aspose.Cell控件实现Excel高难度报表的生成(二)》。利用Apose.Cell可以生成下面几类自定义模板的报表:

 

  
 其他 设计模板如下所示:

 
实际生成的报表如下所示:

 

5、利用现成独立的数据字典模块代码。由于一般复杂一点的系统,都需要有数据字典的模块,由于我在较早已经在这块已经做了一些开发,因此直接拿过来使用即可,该数据字典模块功能相对比较独立,因此是一个非常使用的模块,数据通过字典排序可以实现合理的排序,支持无限多级字典分类。

 

 实际使用的时候,也是非常方便,首先我们封装一下获取字典项目的方法如下所示:

         /// <summary>

         ///  根据字典类型获取对应的CListItem集合
        
///   </summary>
        
///   <param name="dictTypeName"></param>
        
///   <returns></returns>
         public   static  CListItem[] GetDictByDictType( string  dictTypeName)
        {
            List
< CListItem >  itemList  =   new  List < CListItem > ();
            Dictionary
< string string >  dict  =  BLLFactory < DictData > .Instance.GetDictByDictType(dictTypeName);
            
foreach  ( string  key  in  dict.Keys)
            {
                itemList.Add(
new  CListItem(key, dict[key]));
            }
            
return  itemList.ToArray();
        }

 然后再窗体初始化的时候,添加字典的初始化代码即可,如下所示:

         private   void  InitDictItem()
        {
            
this .txtManufacture.Items.Clear();
            
this .txtManufacture.Items.AddRange(DictItemUtil.GetDictByDictType( " 供货商 " ));

            
this .txtBigType.Items.Clear();
            
this .txtBigType.Items.AddRange(DictItemUtil.GetDictByDictType( " 备件属类 " ));

            
this .txtItemType.Items.Clear();
            
this .txtItemType.Items.AddRange(DictItemUtil.GetDictByDictType( " 备件类别 " ));

            
this .txtUnit.Items.Clear();
            
this .txtUnit.Items.AddRange(DictItemUtil.GetDictByDictType( " 单位 " ));

            
this .txtSource.Items.Clear();
            
this .txtSource.Items.AddRange(DictItemUtil.GetDictByDictType( " 来源 " ));

            
this .txtUsagePos.Items.Clear();
            
this .txtUsagePos.Items.AddRange(DictItemUtil.GetDictByDictType( " 使用位置 " ));
            
this .txtUsagePos.SelectedIndex  =   0 ;

            
this .txtBelongDept.Items.Clear();
            
this .txtBelongDept.Items.AddRange(DictItemUtil.GetDictByDictType( " 部门 " ));

            
this .txtBelongWareHouse.Items.Clear();
            
this .txtBelongWareHouse.Items.AddRange(Portal.gc.ManagedWareHouse.ToArray());
            
this .txtBelongWareHouse.SelectedIndex  =   0 ;
       } 

通过数据字典大类无限级分类以及对字典内容的管理,基本上可以满足绝大多数的需要。

6、使用独立又具整合性的权限管理系统,既相互独立,有相互整合,方便重用,又不需重新开发,非常方便、更提高效率。 由于权限系统精简而又能满足日常绝大多数的需要,不会复杂的难于管理,而且也是基于角色的授权访问机制(RBAC),最重要是非常适合软件的整合使用。

 


用户角色功能维护界面如下:

 

编辑角色对应的权限界面如下:

如果我们在开发的系统中要集成现有的权限系统,操作代码如下所示:

         ///   <summary>
        
///  从数据库中列出相关用户
        
///   </summary>
         private   void  InitLoginName()
        {
            User userBLL 
=   new  User();
            List
< UserInfo >  userList  =  userBLL.GetAll();
            
this .cmbzhanhao.Items.Clear();
            
foreach  (UserInfo info  in  userList)
            {
                
this .cmbzhanhao.Items.Add(info.Name);
            }
        }

登录的时候,只需要把该客户能操作的功能点放到内存列表中,如下所示:

                string  loginName  =   this .cmbzhanhao.Text.Trim();
                User userBLL 
=   new  User();
                
string  identity  =  userBLL.VerifyUser(loginName,  this .tbPass.Text, Guid.NewGuid().ToString());
                
if  ( ! string .IsNullOrEmpty(identity))
                {
                    UserInfo info 
=  userBLL.GetUserByName(loginName);

                    
#region  获取用户的功能列表

                    Function functionBLL 
=   new  Function();
                    List
< FunctionInfo >  list  =  functionBLL.GetFunctionsByUser(info.ID,  " WareMis " );
                    
if  (list  !=   null   &&  list.Count  >   0 )
                    {
                        
foreach  (FunctionInfo functionInfo  in  list)
                        {
                            
if  ( ! Portal.gc.FunctionDict.ContainsKey(functionInfo.ControlID))
                            {
                                Portal.gc.FunctionDict.Add(functionInfo.ControlID, functionInfo);
                            }
                        }
                    }

                    
#endregion
               }

 用户对某个功能点授权判断,只需要判断某功能点是否在已有集合中即可,如下所示:

         /// <summary>

         ///  根据权限屏蔽功能
        
///   </summary>
         private   void  InitAuthorizedUI()
        {
            
this .tool_Report.Enabled  =  Portal.gc.HasFunction( " Report " );
            
this .tool_Dict.Enabled =  Portal.gc.HasFunction( " Dictionary " );
            
this .tool_ItemDetail.Enabled  =  Portal.gc.HasFunction( " ItemDetail " );
            
this .tool_Purchase.Enabled  =  Portal.gc.HasFunction( " Purchase " );
            
this .tool_StockSearch.Enabled  =  Portal.gc.HasFunction( " StockSearch " );
            
this .tool_TakeOut.Enabled  =  Portal.gc.HasFunction( " TakeOut " );

            
this .menu_WareHouse.Enabled  =  Portal.gc.HasFunction( " WareHouse " );
            
this .menu_Dictionary.Enabled  =  Portal.gc.HasFunction( " Dictionary " );
            
this .menu_run_systemLog.Enabled  =  Portal.gc.HasFunction( " LoginLog " );
            
this .menu_Parameters.Enabled  =  Portal.gc.HasFunction( " Parameters " );
            
this .menu_MonthlyStatistic.Enabled  =  Portal.gc.HasFunction( " MonthlyStatistic " );
            
this .menu_AnnualStatistic.Enabled  =  Portal.gc.HasFunction( " AnnualStatistic " );
            
this .menu_ClearAll.Enabled  =  Portal.gc.HasFunction( " ClearAllData " );
            
this .menu_ImportItemDetail.Enabled  =  Portal.gc.HasFunction( " ImportItemDetail " );
        }

因此,文章到这里先小结一下,就是利用现有成熟、稳定、集成性好的控件或者模块,或者利用合适易用的控件,既能事半功倍的完成任务,又能快速响应客户的需求变化 ,还能在界面整体上给客户留下好的印象,一举三得,何乐不为? 欢迎与大家一起探讨Winform开发的点点滴滴或者相互合作交流。 

本文转自博客园伍华聪的博客,原文链接:从开发的软件《备件仓库管理系统》总结的一些经验,如需转载请自行联系原博主。



目录
相关文章
|
6月前
|
项目管理
「软件项目管理」一文了解软件项目团队计划
该文章全面介绍了软件项目团队计划的制定,涵盖人力资源规划、项目组织结构设计、责任分配矩阵(RAM)的应用、干系人管理策略及项目沟通计划的编制等多个方面,帮助项目经理有效地组织和管理项目团队。
|
8月前
|
移动开发 监控 物联网
无代码平台也能实现园区物业管理系统 让普通人成为开发者 常见的软件盘点
- **草料二维码**:适用于中小物业,提供设备至访客管理的多种场景,免费但无财务催收功能。 - **优房物业管理系统**:专注物业费收缴,有员工工作台,适合需高效催缴的物业。 - **诺怀云物业**:全场景云系统,适合大型机构如商业资产和医院后勤,提供一体化解决方案。 - **OPark智慧园区**:全面的园区管理平台,强调招商与运营管理,适合预算充足且需定制服务的园区运营者。 - **明源云数智**:侧重招商与渠道管理,自动化任务执行,适合大型园区的财务管理和服务优化。
|
10月前
|
安全 运维
软件公司为什么很少接二开项目?
软件公司为什么很少接二开项目?
2049 0
|
10月前
|
新零售 搜索推荐 UED
九星创客互助排位系统开发|技术成熟|源码搭建
新零售模式是一种融合线上、线下商业以及物流,打破传统零售业的边界,通过技术创新和数据驱动来改善用户体验和效率的零售模式。
|
10月前
|
存储 前端开发 JavaScript
疫情下智慧社区管理系统开发与实现
疫情下智慧社区管理系统开发与实现
246 0
|
移动开发 JavaScript Java
开发拍卖软件源码选择公司要点和推荐
随着在线拍卖市场的不断增长,越来越多的企业和创业者考虑进入这个潜力巨大的市场,开发拍卖APP。在着手开发之前,必须仔细考虑所需的功能,并选择适合项目需求的拍卖APP源码。本文将讨论选择和开发拍卖APP源码的关键要点,并介绍一款备受推荐的拍卖APP源码,即"东莞梦幻网络科技"的拍卖直播系统源码,这是一个快速启动的解决方案。
|
Web App开发 存储 缓存
5款精挑细选的软件,助你事半功倍
在工作的时候,大家都喜欢通过一些好用有效率的工具,来让工作更加快速地完成,今天给大家带来的这5款软件,更是一款比一款还要惊喜!
121 0
|
数据采集 小程序 数据管理
智慧校园系统源码,实现智慧环境、智慧学习、智慧服务、智慧管理
用于管理平台的组织构架、学校信息、教师数据、学生数据、学科设置、教室管理、权限管理。 平台基于互联网,主要将贯穿在教育日常工作中的学生、教师、资产和管理等基础数据,按规范格式统一保存在数据中心。在技术支撑服务平台基础上,统一建设各类教育信息化应用,实现标准化、规范化的统一数据管理,便于各级教育主管部门进行数据管理和统计分析。
252 0
智慧校园系统源码,实现智慧环境、智慧学习、智慧服务、智慧管理
|
存储 区块链 数据安全/隐私保护
Metaforce/Forsage/佛萨奇2.0开发稳定版,Metaforce/Forsage/佛萨奇2.0系统开发(开发案例)丨成熟技术
Plasma是通过创建区块链的“树”来提高可扩展性的另一种方式,主链是树的根,而“子”区块链尽可能少地与更高级别的链互动。例如Loom的PlasmaChain和OmigeGO Plasma
免费OA系统:企业信息化发展的神器
点晴免费OA办公系统是企业信息化建设道路上不可或缺的工具,可以帮助企业顺利处理日常工作,保持各部门之间的沟通、交流,为管理层提供随时掌握企业运转状况的有效平台,并依据相关数据,对员工作进展给予相应指导,也能够提高全员的协作能力,打造企业核心竞争力。那么,免费OA办公系统从哪些方面实现将企业利益增值?
151 0