精华内容
下载资源
问答
  • 仓库管理需求分析

    2018-06-02 22:25:37
    仓库管理系统需求分析随着时代的不断发展,社会正在不断向信息化时代迈进。由于能够有效地收集和处理各种信息,提高办事效率,电子自动化办公越来越被重视。而随着互联网技术的不断发展,又为电子自动化办公的发展...
  • 现代仓库管理在公司发展的全过程中起着极其重要的作用。它能反映一个公司仓库管理的智能化水平。良好的仓库规划可以提高公司的整体运营率,进一步加强公司的服务项目。因此,怎样搞好仓库规划是危害公司发展的主观...

    现代仓库管理在公司发展的全过程中起着极其重要的作用。它能反映一个公司仓库管理的智能化水平。良好的仓库规划可以提高公司的整体运营率,进一步加强公司的服务项目。因此,怎样搞好仓库规划是危害公司发展的主观因素之四。本文共享了涉及仓库计划的几个层次,使公司的仓库管理更强,运营更顺畅!

    依据库房生产制造和管理方法的必须,对全部库房全部设备开展主要用途整体规划,确认生产制造、辅助生产、行政部门等场地,库房、安全作业、路面、门卫等遍布和确认,并对各种设备和工程建筑开展差别。例如:能够设定专做的重型货架地区、拣货地区、办公室地区等!

    库房的系统化职责分工

    对全部的主要用途和作用已具技术专业整体规划的标准开展主要用途确认,通常依照仓储管理种群开展归类系统分区,针对系统化的库房能够依照不一样的安全作业方法开展区划。例如,种群必须考虑先进先出法和先进后出的开展差别分离,进而提升库房的高效率。

    依照库房职工的管理幅度必须确认班、组管理方法范畴,确认库房岗位和岗位工作职责。库房储位的分配和主要用途,安全作业路面和库房的安全作业路途。

    包含库房的战略定位和经营规模(库房的改建、更新改造、库房吞吐量、储存工作能力的提高等)及其库房专业化发展趋势水准和技改项目方位,如库房的专业化、自动化技术水准等。

    库房的关键经济数据。

    如库房的关键设备使用率、产出率、库房吞吐量储存工作能力、物资供应周转率、存储工作能力使用率、贮运质量标准等。

    仓库规划我觉得就是说在库房布局合理和恰当挑选的基本上对库区的详细设计,而这一设计方案能够危害以至于决策1个公司的智能化仓储管理水准及其公司发展的方位。

    讯商科技仓储物流管理系统-智能仓储线上线下一体化解决方案的专业提供商

    以上内容由讯商WMS软件整理提供,如需转载请备注出处。讯商科技,致力于提供全面、高效的全渠道营销+WMS仓储管理等信息化解决方案,是中国服装ERP管理软件产业的先驱者、全渠道信息化供应商及WMS仓储管理解决方案高端服务商。

    转载于:https://my.oschina.net/u/4144989/blog/3059271

    展开全文
  • 企业的各项管理都将向信息化方向扩展,仓库管理对于企业来说尤为重要,也正是基于这个原因我把毕业设计的方向定在了企业的仓库管理上。 仓库管理系统是一个企业不可缺少的部分,它的内容对于企业的决策者和管理者来...
  • 2016年,“工业4.0”成为热词,而我国称为“中国制造2015”,核心为智能制造。其实,德国政府率先提出“工业4.0”战略。一向严谨务实的德国人,突然...幸运的是,新一代云ERP管理系统的出现,为我们带来了转型升级的...

    2016年,“工业4.0”成为热词,而我国称为“中国制造2015”,核心为智能制造。其实,德国政府率先提出“工业4.0”战略。一向严谨务实的德国人,突然任性地将“工业4.0”定为国策,足见工业界未来变迁之深刻。然则如何进行相应的战略调整,对于信息化平均水平不高的中国企业而言,又是新的一轮考验。幸运的是,新一代云ERP管理系统的出现,为我们带来了转型升级的利器。

    20160623035743800.jpg

      1、未来ERP管理系统技术的发展方向和趋势

    宇博ERP与客户关系管理CRM的进一步整合ERP将更加面向市场和面向顾客,通过基于知识的市场预测、订单处理与生产调度、基于约束调度功能等进一步提高企业在全球化市场环境下更强的优化能力;并进一步与客户关系管理CRM结合,实现市场、销售、服务的一体化,使CRM的前台客户服务与ERP后台处理过程集成,提供客户个性化服务,使企业具有更好的顾客满意度。

    2、ERP管理系统与工作流管理系统的进一步整合

    全面的工作流规则保证与时间相关的业务信息能够自动地在正确时间传送到指定的地点。宇博ERP的工作流管理功能将进一步增强,通过工作流实现企业的人员、财务、制造与分销间的集成,并能支持企业经营过程的重组,也使ERP的功能可以扩展到办公自动化和业务流程控制方面。加强数据仓库和联机分析处理OLAP功能:为了企业高层领导的管理与决策,ERP将数据仓库、数据挖掘和联机分析处理OLAP等功能集成进来,为用户提供企业级宏观决策的分析工具。

    本文转自d1net(转载)

    展开全文
  • 中国数据质量管理现状及发展趋势

    千次阅读 2020-09-29 10:14:49
    本文根据谭海华先生在【DQMIS 2020第四届数据质量管理国际峰会】现场演讲内容整理而成。 图1.1 华矩科技创始人及董事长 CEO 谭海华 演讲嘉宾介绍 - 谭海华 华矩科技创始人及董事长 CEO 中国管理科学...

    本文根据谭海华先生在【DQMIS 2020第四届数据质量管理国际峰会】现场演讲内容整理而成。

    图1.1

    华矩科技创始人及董事长 CEO 谭海华

    演讲嘉宾介绍 - 谭海华

    • 华矩科技创始人及董事长 CEO

    • 中国管理科学研究院创新所大数据共享技术委员会主任及学术委员

    • 数据质量国际峰会 DQMIS的发起人及执行负责人

    • 数据共享联盟-数享汇创始人

    • 国家发改委培训中心特聘大数据专家讲师

    • 工业大数据应用技术国家工程实验室《工业企业大数据治理实践指南》编委会成员

    • 中国保信《保险大数据》、《中国保险报》、中保⽹特约撰稿人,是中保信特聘技术专家

    • 中国电子技术标准化研究院等创办的数据标准化与治理专家库首批成员

    • 广州市工业和信息化委员会大数据及人⼯智能专家团首批入库专家成员

    • 曾任职IBM,埃森哲咨询,微软,致力企业管理咨询,信息化建设,大数据治理及相关行业信息化解决方案研究和实施。

      - 作为IBM资深顾问及SIC项目负责人参与实施华为IPD咨询项目

      - 作为IBM资深顾问参与管理及实施国内金融业最早一批的数据仓库项目策划

      - 作为埃森哲资深顾问参与管理及实施国内最早一批的大型企业数据治理项目

    演讲目录

    • 国内数据质量管理的现状

    • 数据质量管理的历史与发展趋势

    • 数据质量管理中的方法、技术、数据三者关系

    • 数据质量管理的新视角

     

    谭总:各位来宾好,各位领导、各位老师好,今天非常高兴能够在这里跟新老朋友相聚,这是我们这个峰会的第四届了,刚才也看到非常多熟悉的面孔。

     

    本次峰会我们选用了一个主题,叫做“跨越周期,回归本质”,这个“质”也是我们数据质量的质,为什么是跨越周期呢?其实这也反映了我们过去4年的探索。

     

    刚才我们张老师有讲到,在2017年的时候,在北大,在我们系的一个会议室里面,当时我们在探讨数据质量的一些问题,就说怎么去看待这个问题。在2018年的时候,我们看数据治理的路径是什么,怎么建设一个数据质量管理,包括数据治理。在去年,我们重点讨论的是数据质量怎么驱动业务创新。可能在去年这个话题还是有点超前,但是从今年整体的情况来讲,可以说我们的视野看的比较远一点,但还是觉得要脚踏实地,我们要回归本质,这也是我在过去这4年里面看到的情况,所以今年我们的主题是叫做“跨越周期,回归本质”。

     

    我自己是从做代码开始成长起来的,前面几位嘉宾包括汪主席、潘老师,他们谈高瞻远瞩的框架,这是非常重要的,因为有理论依据我们才知道怎么做下去。那我今天跟各位分享的内容,主要是我们国内的数据质量管理实践面临的问题以及具体的一些技术落地工作。

     

    首先谈谈国内的数据质量管理现状,主要结合华矩科技这几年来与多达40多个企业的互动记录跟大家分享。今年我们为什么会讲现状,这个现状可能不一定是我们的市场分析报告,而是我们看到的很实在的问题。这些问题我相信也是很多数据治理部门负责人经常碰到的情况,我们在做数据治理,虽然我们都有很好的蓝图,但是我们要落地的时候,这些问题无处不在。

     

    不管是我们从数据应用上看到的问题,还是我们真正看到的数据质量的问题,或是我们反追管理时发现的问题,这些都是我们在数据治理往下走的时候不得不面对的,这个情况我不会展开但是我非常欢迎大家可以跟我交流你们遇到的问题,这里面比如标准与规范的问题,多头发布,多头应用的问题,还有我们的录入不规范,包括来源不精准等等问题,我相信这些问题大都会见到。

     

    另外是大家在做数据治理时候的一些常规性看到的问题,前面潘老师有一个很好的方法论,不管是自下而上、自上而下,我相信我们都会遵循一个很好的标准去做。

     

    在我们往下去做的时候,我们要建立很多东西,但是怎么去管理?我们跟很多客户朋友去交流的时候,我们做了很多数据治理框架搭建的工作,但是往往我们的CIO、CEO就会问了,究竟数据治理的价值在哪里。也就是我们数据治理的ROI是怎么去分析的,怎么去体现数据治理的价值,尤其是专注做大数据的人,包括我们企业里面数据部的同事,这是需要你们去回答的,究竟我们的工作价值在哪里,能不能衡量出来,这是我看到的情况。

     

    图1.2

     

    这些都是我们在工作里面碰到的一些问题,跟大家去分享,我不逐一去过了,但是这里面有几个很明显的,包括我们DAMA数据治理体系,其实上面对于怎么做都讲的很清楚了,但是我们在做的过程中还是会面临一些问题,比如说组织架构权力不清楚,这是第一步没办法迈过的坎,因为当这个企业里面看到这个数据质量的时候,首先是追责,究竟是谁来负责,这个问题不解决的话就没办法走下去。毕竟不是说只搭一个框架,这是要真实去问责的,问谁的责,应该怎么做,这是我们会碰到的问题。

     

    还有一个是行动计划的碎片化,等一下我们会看到一个案例,它的行动计划碎片化产生的结果,这里有一个统筹观的问题,我们怎么统筹,在我们所有的建设里面,它是环环相扣,但是怎么能够同步并行?这是我们看到的一个问题。

     

    还包括全局观的概念,我们做数据治理的全局观在哪里,我们数字化转型的定位在哪里。也就是说数据治理本身也有相对的目标,有相对阶段的目标。刚才杨部长提到的,我觉得他有一个词还蛮精准的,说“合适就好”。你看到就是说我们是要完备性,在你做这件事情的完备性“合适就好”,我觉得我们要有这样一个观念。

     

    这也是我们看到的一些典型的问题,就是我们任务分解的合理性。大家都知道我们在方法论里面是有相对比较完整的思路,刚才汪主席那个表,我觉得分解的已经比较细了,但是在我们真实的工作里面,我们还是会面临分解的合理性问题,怎么样是更合理的,这个合理性决定了我们做的顺不顺畅。

     

    另外有一点,我觉得很深的一个体会,即怎么样建立你的起点,我相信我们每一个企业或者说每一个数据治理项目都不是无中生有的,它肯定是有一个现状,你的起点决定了你的方向。我在后面会讲到我们对起点的理解。

     

    还有一个是说我们在看这些情况的时候,我们要用动态的观点看待企业的数据治理工作,这点非常重要。杨部长也讲到,为什么在经济学里面没有办法很精准地把数据作为生产要素,因为它确实太复杂了,因为数据有增量的,它不是静止的,它是动态的。比如我是从广州来,这次来北京才发现我们的北京健康码是一天有效,我第二天再去看,没有了,要重新登记,为什么?数据的特点就是这样子,你当时是有效的不代表你明天是有效的,你必须要有动态的观点去看待数据的问题。

     

    另外一个问题,现在我们很多不是基于准确的、量化的数据质量的一个诊断结果去做的判断。我觉得这个原理大家不陌生,假如说你对自己都不了解的话,你怎么往下走,当然这里用的是一个诊断的概念,我相信各位都有看病的体验,第一步首先是了解你自己,了解你本人,了解你的身体,了解你的状况,再来谈你应该用什么方案。

     

    刚才提到了几个观点,一个是动态的观点,第二个是你必须要了解自己,你才能知道你的起点在哪里,在这个起点下面你才能知道你应该往哪个方向走,这就是我们的观点。

     

    回到这里,还有一个现状,也是我们这次的会议为什么讲回归本质。前面提到我们在建设数据治理的时候有很多种路径,大家对这个步骤不会有太多的疑义,但是首先咨询导向得是对的,像我们去医院导诊很重要,究竟我看哪个科,这个是很重要的。

     

    图1.3

     

    A类:有些做完管理咨询之后就工具选型了,第三步就是实施落地。

    B类:我做完管理咨询了,先别着急的选工具,先制订标准,标准是刚才讲的究竟站在哪里,现状是什么,所以有些就会说首先要先做标准规范,做完标准规范再看怎么能支撑我的管理。

    C类:我在做管理咨询的时候,第二步我先做基础搭建,把主数据先做好了,接下来再看标准规范,但是这个有前有后,然后做工具选型再做实施落地。

     

    我相信在业界这个不能说它已经穷尽了100%,有可能是80%,都离不开这三种模式。我想大家在做真正落地的时候有很多企业可能就是A类,A类他很快在第二步就感觉到痛苦,更不要说第三步。因为我们在做数据治理时毕竟它还是一个管理跟工具配合包括验证结果的一件事情,它不纯粹是一个过程,比如我们做个OA,我不是把流程跑下来就OK了,因为你的数据如果不能给你这个企业带来价值的话,企业就会认为你的投入都是白费的。我相信在做数据治理的朋友都会有这样压力的,究竟怎么讲清楚我们的价值在哪里。

     

    左边是我们普遍认同的方法、内容和平台。我们得先有方法,方法很重要,要是方法都不知道我们就不知道从何讲起。但是第二个内容最重要我们往往却忽略了,直接就到平台了,究竟是什么样的内容,用什么样的平台,合适就好。刚才杨部长讲到,你的数据质量,你做的事情是针对你这件事情的一个完备性,所以内容这个问题也是在我们过去做了好多这种项目后,回过头来看我们怎么把内容做好,也是本次峰会的主题,我们要回归本质,因为这个才是我真正要的,才能让我们真正发挥价值的。至于我用什么样的平台,什么最合适我,包括我最终能够产生什么效果,取决于内容讲什么,具体什么是内容。

     

    图1.4

     

    这是一个很简单的例子。这个统一视图,我们叫Single View,大数据做数据质量最能考验的就是这个,假如说人家在你的企业系统里面搜索“李明”,有100个李明出来,就不知道这是谁。我相信在座的有很多银行的朋友、保险的朋友、大零售的朋友,对我们的Single View都有很深的体会,精准营销是我们最核心的一个应用点。

     

    那么怎么做好这个最基础的工作?别小看左边这么简单的一个事情,右边你会面临那么多问题,你是怎么样知道你的什么标准是正确的。我跟我们的合作伙伴,也包括我们的客户,讲过一个很简单的道理,苹果手机的名字叫苹果,它也叫iPhone、苹果11或者iPhone11,在你们的公司,哪个是标准的?他们都是对的,它可以叫iPhone11,也可以叫苹果11,但究竟你选用哪个作为你的标准,这就很考验人了。

     

    你首先要知道这个标准对你的意义在哪里,为什么要做选择,要是不得不做选择,这就要回到我们讲的标准化的问题。那么你首先要知道哪个是正确的,在正确里面还要挑哪个是最符合你们企业要的,它正确不代表是你需要的,有很多是正确的,你要选哪个。再就是怎么保证它语义的一致性问题,我怎么证明我讲的这件事跟那件事是一回事,这些都是我们做的很核心的工作,包括代码规范、异构系统集成等,大家看这虽然是小小的一件事,但是这背后,数据治理部门可能要解决很多问题,包括主数据管理问题,包括我们定义一致性的问题,这都是需要我们去做的。

     

    图1.5

     

    我想通过几个场景,从我们的方法论拉到我们现实的情况,我们所面对的问题,在这里面我还是简单讲一下发展趋势,因为这跟我们后面的理解有关。有关数据质量,在去年我也用了这张片子,我觉得这能够反映我们对数据质量颗粒度的一些看法,因为数据质量不是一个不可分解的东西,它的颗粒度是决定你怎么去看问题的关键,包括数据、信息、语义、业务规则等。

     

    在谈数据质量的时候,我们会面临一个语义的理解问题,语义理解问题要是没有办法做好的话,我们很多标准做不出来。但是我们大部分时候怎么做呢?人工做。这次我知道百度有一个很好的产品,也获奖了,就是自动标注的那个。我没有细看,我觉得这个为我们未来做自动化处理规则,已经迈出了很关键的一步,我找时间还是再请教,我觉得这个主题非常好,因为它涉及到数据、信息语义和业务规则,每一个环节都构成了我们未来对数据质量的影响,这个我想等一下会看到这个概念。

     

    图1.6

     

    回到这个,我一直还是非常认同,在数据质量里面我们看什么,我们讲固本清源,固本清源讲什么?包括定义、分析、度量、提升,这是我们在讲数据质量时候的4个角度。什么叫定义?刚才我们提到了规范性的问题,这放在第一个,要是定义不准,标准不准,你去做数据质量,再好的技术也没用。

     

    图1.7

     

    我们再看另外一个角度,我们讲这个是业界的角度,我们关注数据、规则、监控、遵从、可追溯、剖析,这是来自业界的一些理解。

     

    图1.8

     

    这个是来自我们对一些工具的理解,这里面我把工具名称给隐掉了,我相信大家也接触很多工具,这个工具我们看什么呢?我们讲剖析、集成、匹配、规则发现、数据补充、集成架构,这些都是我们在谈数据质量的时候,在不同的角度去理解这个问题。

     

    图1.9

     

    我想重点讲一下这张图,其实我们在谈整个数据质量的管理,当然这里不是我的总结,是业界的知识,在60年代、80年代的时候,谁最关注数据质量?基本上是统计的领域。然后到信息时代,80年代到2000年,我们号称信息时代。再就是2000年以后,我们讲这个阶段我们在看的事情。左边有很多方法论,当然这里不全,大家去研究数据质量的时候有这些流派,你们都能看的到。时间轴上也是这么走的,ISO 9000,最新的38505,包括一些大的企业方法论。

     

    横向的,这是我们的数据积累,整个结构跟技术的发展是有关的,就是说数据质量的管理跟技术的发展会影响我们,当然我相信未来对我们方法论的一些反哺也会对我们现在整个数据质量发展的技术,包括我们做的事情是有影响的。

     

    上下两个板块,下面板块就是数据质量衡量的维度。最早的时候我们看的是准确性,当时的场景,包括我们的技术手段,包括我们能做什么,包括我们关心什么,这个是准确性,接着是及时性,我们考虑的深度会越来越往这个方向走。

     

    前面我们讲数据质量的管理是以人为中心的,为什么以人为中心呢?其实就是究竟怎么能够让我的企业用在最恰当的时候,我的感知是很重要的,要是我的感知没有办法有,我就没有办法知道具体这个事情做的好还是不好,所以在前面我们会做定义测量分析提升,再往后我们会看以应用为中心,以数据为中心,以服务为中心。

     

    再往下我们现在讨论成本与效益,我们现在做很多事情的时候离不开成本、效益,以前我们可能不讨论,但是现在必须要讨论成本,现在是大数据时代,这是非常重要的情况。

     

    未来的发展,这里面有几个技术,一个是数据探查的技术,包括我们刚才提到的NLP的技术,非结构化跟结构化数据,我们怎么把它们集成在某些共性上进行数据处理。自动标注技术,我刚才讲到了。还有一个规则发现技术,还有我们自动化处理技术。这些技术都会影响我们在整个数据质量的方法或者实施的路径,包括我们的效果。

     

    图1.10

     

    以数据探查能力为例,这里面我们有三个板块。最早的板块在我们人工的时候我们会做到浅色的这部分,比如说在早期的时候我们去体检可能只是X光就OK了,因为你没有太多手段,你们X光看到什么你就做什么。但是现在有CT了,现在还有无痛治疗的方法,非常多的技术,它会让你的探查越来越深,它会对你的数据脉络越来越清楚,这个也为我们未来做数据治理带来更多的技术支持。

     

    数据探查包括我们的数据信息,包括我们的业务规则,都是支持怎么让这些东西做的更加通透,了解我们自己是什么,了解我们数据是什么,这是决定我们下一步应该怎么做的关键。

     

    图1.11

     

    第二个技术是自动化处理技术,我们现在也是在做这个领域的探索,这个自动化技术我们希望整合自然语言处理,包括结构化处理,包括我们现在迭代跟完善的规则,这些规则更好地让我们在整个数据处理过程中降低我们的成本,缩短我们的时间,这是我们讲数据治理的一些考虑点。

     

    图1.12

     

    另外我们要提出的是你在做数据质量,包括数据治理的时候其实有三个维度,首先你有什么样的技术,你有什么样的探查能力,有什么样的理解数据的能力,决定了你数据处理的效能,包括他的效益,也反哺告诉我们在做咨询的时候,在做管理制度的时候,哪些是我们的痛点,哪些是我能够得到的,哪些是不能够得到的。

     

    中间这个是我们的技术,怎么去处理我们的数据,能够让数据更加清晰。上面是来指导我们在咨询里如何获得量化的结论,让我们的咨询能基于一些量化的基础进行一些预测,而不是仅凭一种理解或者一种经验,我觉得这是我们现在面对的主要问题,因为数据本身就实实在在存在那里,我们应该怎么去理解数据。

     

    图1.13

     

    我们企业管理有几个维度,包括考核、管理、方法、路径、模型,这是我们都要做的。这是我们相对的一些优先级, 包括我们的组织机构更重要,还是我的规范更重要,还是我们的支撑平台更重要,这个取决于我们每个企业他的特点,但是这跟三者是离不开的,我们应该怎么样比较好地综合这三种元素,来决定我们整个企业建设的方法。

     

    图1.14

     

    最后一章,我们要考虑的是时间、成本、质量,我们后续做数据质量、数据治理的时候离不开这三个维度,因为我们要落地,我们要真正为企业赢得效益,所以时间、成本、质量是我们的三个维度。

     

    图1.15

     

    最后给各位关于数据治理的建议:

    第一,找到自己的起点。

    第二,怎么解决标准问题。因为它是我们花最多时间,也最容易产生漏洞地方。

    第三,一定要考虑时间与成本。它不是一个科研的项目,是一个企业真实的效能项目。

     

    谢谢各位。

    展开全文
  • 对于未来数据库产品的发展方向,Sybase认为,新一代的数据管理技术将会呈现以下几个特征:降低管理成本、数据库引擎的整合、支持XML。最后还有一点,在功能上,数据库将增加对XML的支持、整合BI功能、降低管理成本等...
  • 基于Web的仓库管理系统的设计与实现

    万次阅读 多人点赞 2019-07-02 20:27:48
    随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万万不行的,仓库管理的全面信息化、自动化则是在其中占有极其重要的...

    摘 要
    仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万万不行的,仓库管理的全面信息化、自动化则是在其中占有极其重要的地位。仓库管理信息系统则是在此需求背景下开始研制并开发的。在此篇文章中严格按照软件工程思想,设计并实现了一个仓库信息管理系统。介绍了系统从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果,包括系统结构图、业务流程图数据流程图、物理表实现及其关系、功能模块算法流程、界面设计等等。
    关键字 仓库; 软件工程; 系统开发

    Design and implementation of warehouse management system based on Web
    Abstract
    Warehouse management is a major issue is closely related to our daily life. With China’s rapid economic development and the deepening of reform and opening up, the enterprise to be in an invincible position in the fierce market competition, want to continue development and survival, no modern management methods and methods is absolutely out, warehouse management and comprehensive information, automation is where you play a very important role. Warehouse management information system is started research and development in the context of this demand. This article strictly according to the software engineering, design and implementation of a warehouse management system. Introduced from requirements analysis, logic design, General design, detailed design and system testing, implementation of the content and results of each stage, including charts, business process data flow chart, functional modules algorithms, physical form and its process, interface design and so on.

    Key warehouse Software engineering; System development

                      目  录
    

    摘 要 i
    Abstract ii
    目 录 iii
    1. 绪论 1
    1.1 系统背景 1
    1.2 开发目的 1
    1.3 开发工具 2
    1.3.1 Eclipse 2
    1.3.2 Oracle 2
    1.3.3 PowerDesigner 2
    1.4 相关技术介绍 3
    1.4.1 JSP技术 3
    1.4.2 JavaScript技术 5
    1.4.3 Tomcat 5
    1.4.4 软硬件需求 6
    1.5 可行性研究分析 6
    1.5.1 系统目标可行性分析 7
    1.5.2 系统的经济可行性 7
    1.5.3 系统的技术可行性 7
    1.5.4 系统的法律可行性 7
    2. 软件需求分析 8
    2.1 需求分析 8
    2.1.1 用例图 8
    2.1.2 类图 9
    2.2 功能需求分析 9
    2.3 业务流程分析 10
    2.3.1 管理员模块业务流程 10
    2.3.2 客户模块业务流程分析 10
    2.4 数据流程分析 11
    2.4.1 顶层数据流 11
    2.4.2 一层数据流图 11
    2.4.3 二层数据流图 12
    2.5 数据字典分析 13
    2.5.1 数据存储条目 13
    2.5.2 加工条目 14
    3. 软件总体设计 16
    3.1 软件结构设计原则 16
    3.1.1 软件的结构体系 16
    3.1.2 软件模块设计原则 16
    3.1.3 软件的模块化 17
    3.2 系统任务概述 17
    3.2.1 系统的功能设计 17
    3.2.2 系统功能结构 18
    3.3 系统架构 18
    3.4 系统主要子模块设计 19
    3.4.1 用户登录子模块设计 19
    3.4.2 商品入库子模块设计 19
    3.4.3 商品出库子模块设计 19
    3.4.4 用户注册子模块设计 19
    4. 数据库设计 21
    4.1 数据库概念 21
    4.2 数据库分析 22
    4.2.1 数据库的完整性分析 22
    4.2.2 数据库的安全性分析 22
    4.3 数据库的设计 23
    4.3.1 概念结构设计 23
    4.3.2 逻辑结构设计 23
    4.4 数据库的连接 25
    4.4.1 连接工具 25
    4.4.2 工厂类配置文件主要内容 26
    4.4.3 Mapper类配置文件主要代码 26
    5. 软件详细设计 28
    5.1 登录模块 28
    5.2 入库模块 30
    5.3 出库模块 31
    5.4 用户注册模块 32
    5.5 个人信息管理模块 34
    6. 系统的测试 38
    6.1 测试简述 38
    6.1.1 测试目的及重要性 38
    6.1.2 测试原则 39
    6.2 测试方法 40
    6.2.1 黑盒测试 40
    6.2.2 白盒测试 40
    6.2.3 单元测试 40
    6.2.4 集成测试 41
    6.3系统模块的测试 41
    6.3.1 登陆模块测试: 41
    6.3.2 出库模块测试 41
    6.4.3 用户信息模块测试结果 44
    总 结 45
    致 谢 46
    参考文献 47
    附件1:外文文献(原文) 48
    附件2:外文文献(译文) 57

    1. 绪论
    现如今,计算机技术飞速发展,社会经济也在伴随着不断发展,各行各业也面临着各种各样的挑战与困难。为了能够在这个信息化的时代继续发展下去,就必须紧跟上时代的脚步。在这个计算机技术飞速发展的年代里,智能化的商品存储管理技术也在随着不断地发展。之前的那些古老的仓库管理化的方法已经难以满足现代化发展的需求,因为许多些原因,企业要想在这个现代化的社会中生存下去都必须有一个良好的仓库管理系统。仓库是每个企业都必须谨慎管理的地方,一个企业的最基本是货物,所以一个企业的货物必须得得到很好的保管,在这片竞争激烈的土地上面才能谋得一块生地。本课题正是根据这一理念,开发了一个功能比较完善,基本能满足企业要求的仓库管理系统。
    1.1 系统背景
    在这个科学技术不断发展的年代里,世界已经变的越来越高科技化越来越智能化,一个智能化的时代已经到来。到现在为止,在我们生活的周围你可以随处见到各种各样的智能化管理的系统[7]。
    一个企业所拥有的商品是他所生存发展的根本,而仓库是企业用来保存商品的所在。所以说,一个好的仓库对于企业来说占有举足轻重的地位。总而言之,一个成功的企业必定会有一个好的仓库,但是一个好的仓库没有一个合理的管理系统是不完美的[7]。可是一个静态化的简单的仓库管理的系统,因为他不具备信息共享的功能,而且还不能够保证货物的正常运转中所遇到的一些问题,还不能保证企业所拥有资源的正常的运转与利用;还有一些传统的仓库管理系统在维护时非常的困难开发起来也是十分复杂,所以在人力物力上有极大的浪费,已经远远的脱离了时代的轨道。因此,一个成功的企业,如果拥有了一个现代化的仓库管理的系统,会大大的提高企业生产的效率,降低使用的成本。
    1.2 开发目的
    仓库是所有企业都不可缺少的部分,对于一个成功的企业来说,想要在未来的市场中获得发展得优势,拥有一个完善的仓库管理系统是十分重要的。可是企业中的商品总是在不断地流动的,仓库中的商品也随之不断变化。所以,商品就需要不停的被记录保存。在使用传统的人工记录时存在着各种各样的问题,查询的效率低下,而且保密性不高。因此,对于一个想要不断发展的企业来说,这种人工记录的方式必须淘汰。
    在现代化科技的不断发展前景之下,智能化的东西已经遍布各地,电脑更是遍布在各个角落。计算机技术的应用对库存信息进行管理与人工管理技术相比较拥有无可比拟的优势,如:添加删除快捷、安全性高、查询便捷等。
    在以上这些社会与技术的背景之下,我决定开始开发了这个系统。在开发的这个系统能够保证对货物进行正确的出库与入库擦偶哦、库存控制和发货。而且,这个系统比较小维护起来简单,能够节省一定的人力物力,对企业中仓库的管理是百利的。
    1.3 开发工具
    1.3.1 Eclipse
    Eclipse 开发工具是一款源代码完全开放的、主要用于可扩展性开发Java语言的一种开发工具。对Eclipse本身来说,他仅仅只是一种服务和框架,主要是通过一些插件与组件来组成开发的环境。主要的优势有Eclipse自身带有一种标准化的组件集合,含有Java的主要开发工具JDK。Eclipse具有十分丰富的开发环境,主要包括有超强的编码能力、拥有玩备的调试功能、发布能力与测试功能等,全部支持了Hibernet、Struts、Mybatis、JSP、Spring、SQLPlus等等的一系列的框架。
    1.3.2 Oracle
    oracle是一家公司的名字(甲骨文公司),世界上屈指可数的,是国际上非常大的巨型IT公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司最有名的产品是DB,database,RDBMS,关系型数据库系统。
    1998年9月,ORACLE公司正式发布ORACLE 8i。“i”代表Internet,这一版本中添加了大量为支持Internet而设计的特性。这一款版本为数据库的用户提供了更加全面的全方位的Java技术支持。ORACLE 8i成为第一个完全整合了本地Java运行时环境的数据库。
    然后有9i,10g。在这个版本更新的最佳看点是一起加入了网格,然后是11g,现在发展到12c,c代表cloud,也是现在炒的非常火的概念。
    1.3.3 PowerDesigner
    在数据库的设计过程中,运用Power Designer作为数据库模型的主要的建模工具。在庞大的赛贝斯公司旗下的主要的CASE开发工具集之一就是PowerDesinger,运用这个工具的最大看点是更加快捷并且方便的对仓库管理系统进行开发,数据库开发所需要的模型与需要的经历基本全部都能实现。例如数据流程图、概念数据模型、物理数据模型等一系列的模型都可以通过使用PowerDesigner来实现,可以生产出各种各样的PC端开发出来的应用软件,也可以给系统的设计制作出系统的结构模型,也能够为一些开发团队的系统模型进行调控。Power Designer还可以跟各种现如今使用比较多的用来设计数据库的软件,比如:Power Builder,StartUML,VB等相互配合来使用,以便于用来减少开发的时间与优化系统的设计。

    1.4 相关技术介绍
    1.4.1 JSP技术
    JSP技术使用起来是非常灵活的,可以用来便携JAVA程序的。本技术还可以用来对一些编程的动态的网页来进行封装。网页还可以访问一些在服务器端的各种资源的一些逻辑应用。JSP技术还可以将一些网页的逻辑与网页的设计和还有显示进行分离,对于一些可重用的基础的组件的开发进行支撑,更加容易的对基于Web的应用程序进行设计。
    在现今,计算机技术在不断发展,Web 技术也随之不断的发展,产生了许多方法来解决动态页面的生成问题,目前用于声称动态网页的技术有CGI、ASP、PHP及JSP。JSP技术可以为做动态网页的创建提供一个更加方便快捷的方法。JSP 是Java Server Page 的缩写,是Sun 公司于1999年6月推出的新技术,该技术由Sun 公司主导,采取了了一些在电脑的软件与硬件、数据库、还有通信等领域的多个家厂家的建议与意见而一起制定出来的一种在Java与Web基础上的一种动态的网页技术。
    JSP技术与之前传统的网页制作技术相比较,它有着明显的优点。JSP 不像CGI、ISAPIH 和NSAPI 那样难于编写和维护,不像PHP 那样只能适应中小流量的网站,也不像ASP 那样受到跨平台的限制,JSP 体现了当今最先进的网站开发思想。
    在服务器端接收到客户端发送出来的请求时,开始运行的程序段,接下来将JSP文件中的代码还有代码在运行之后效果同时回馈给用户。通过Java文件的插入能够对数据库、网页的一系列多重的定向等运行,从而满足构建动态网页所需要的程序。JSP是Servle的一种动态表现,而且都可以通过服务器端来运行。由于能够将一个HTML文本返回给用户端,所以用户端具备浏览器就可以进行浏览。HTML程序与穿插在其内部的Java程序可以共同构建动态的JSP网页。在服务器被用户的客户端访问的时侯,能够同时处理相应的Java代码,然后将产生的HTML页面再返回给用户端的浏览器。JSP的设计关键是Servlet,通常大型的Web应用程序的设计成果也通过Java Servlet与JSP相结合来实现的。JSP既拥有了方便快捷的Java程序,又统统的面向用户,既实现了平台的无关性危险还比较小,可以具备互联网的全部优势。JSP技术的优点:
    (1)能够一次性完成编写,到处运行。不包括系统在内,代码基本不需要在写。
    (2)系统的多平台支持。通常情况下,能够在所有情况下的全部平台上进行设计,能够安排在任一情况中,也能够在所有的情况下进行发展。相比ASP/.net来说,优点是十分明显的。
    (3)强大的可塑性。通过一个不大的Jar程序能够对Servlet/JSP进行运行,也能够通过很多服务器进行集群和负载平衡,甚至能够通过多台Application解决问题。单个的服务器到多个的服务器,Java展示了一个强大的功能。
    (4)Java已经有了很多的设计方法,何况大部分工具都是没有花费的,这中间有很多都在多种平台之下顺畅的进展。
    (5)支持服务器端组件。只有很有力的服务器端组件才能支撑web运行,因此开发者可以在调用web页面时通过另外的开发工具来达成纷乱效用的组件,来加强系统的可操作性。JSP可以通过完善的JAVA BEANS 组件来达成纷乱的商务功能。
    在JSP的内部对象中会表现出来:客户端发送请求使用request,这个请求会涵盖到来自于GET/POST参数的请求; 服务器端传回客户端的回馈使用response;管理pageContext 网页的属性;session 与请求相关的会话;application servlet正在进行的内容;输送响应的输出流使用out;config代码片段配置对象;page JSP网页本身。
    JSP 与ASP(Active Server Page) 的区别
    从上面的基本介绍中,乍一看觉得JSP 与微软的ASP 十分相似,但事实上,两者有着本质的不同,我们主要从以下几个方面对其进行比较:
    1、Web 服务器的支持
    大部分的支持WEB的服务器段例如:Apache、IE、Netscape 和Microsoft IIS 等一系列服务器都可以运行JSP 。ASP的却很难再除了微软之外的平台上继续的运行与移植。
    2、平台的支持
    平台具有一定的独立性,所有的能够支持java程序的平台,都可以支持JSP的运行。Windows 平台可以很好的支持ASP, 但ASP 难于移植到其它平台上。
    3、组件模型
    JSP 所在的平台是建立在跨平台的、这上面的所有的组件都是可是重新利用的。而ASP 使用的平台却是建立在Win32的COM 组件模型之上的,所使用的组件没有JSP的灵活。
    4、脚本语言
    JSP是比较万能的能够灵活的使用JAVA语言或着与其他的脚本语言如javascript相互配合使用。可是ASP使用起来比较局限,只能使用Jscript 或者是VBScript两种语言来作为脚本语言,不够灵活。
    5、安全性
    JSP的安全模式是使用Java 的安全模型,但是ASP的安全模式使用的是Windows NT的安全模式两者各不相同。
    6、与Access数据库的连接
    Access 数据库在与JSP 相连接的时候使用的连接方式是JDBC连接,而Access 数据库与ASP相连接的时候使用的是Data Active Objects。
    7、用户定制的标签
    JSP有一个很好的功能是用户可以自己定义一个属于自己的标签库,并且可以灵活运用。然而ASP 中用户却不能自己定制标签库,原因是在 ASP 中用户是不可以对标签库进行扩充的。
    8、JSP 与Servlet 的区别
    从某种意义上讲,JSP 并不是一种新技术,因为JSP 可以完成的工作,都可以通过编写Servlet 程序来实现。而且,JSP 页面中动态的、交互的部分最终也都是需要再编译为相对应的Servlet程序来实现。所以,可以说,JSP其实是Servlet 的一种抽象,它提供了更加方便有效的方式来编写Servlet。
    9、JSP 与CGI 的区别
    JSP 与CGI 两者之间有一个很明显的最大的差异点,JSP在编写时与编译HTML时是很相似的两者的差异不大,在语法上有些不同只要了解JSP的语法即可,不需要对JAVA、JScripety等语言有过多的了解。而编写CGI 程序要求对脚本语言十分熟悉,因为CGI 程序基本上是用脚本语言直接写的。除此之外,在使用CGI 程序的时侯,对每一次的访问他都会进行处理,可是这样的结果会造成在多个用户的请求被处理时,会造成力不从心的局面,不会得到满意的结果。可是JSP在编译时只能编译一次,在此之后会驻留在内存中,再次调用时,不必重新处理,适于应付多用户情况。
    1.4.2 JavaScript技术
    JavaScript语言是脚本语言中直译式的一种,属于动态类型、弱种类型、原型为基础的语言,支持类型的语言。JavaScript引擎是他的解释器语言,属于浏览器中的内容,常常用在客户端的一种脚本的语言,早期常常在HTML所编译的网站上面运用,主要的功能是在HTML的基础之上增加一些动态的功能。 在1995年时,由Netscape公司的Brendan Eich,在一个叫做网景导航者的浏览器上第一次实现而成。由于Netscape的合作者是SUN,所以在Netscape的管理层们希望把他的外观做起来像JAVA,出于种种的原因给他取名叫做JavaScript。可是在实际上多了解了解它的语法风格会发现是与Self及Scheme比较接近的。为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。
    为了能够将规格得到统一,因为JavaScript兼容于ECMA标准,因此,也称为ECMAScript。
    JS技术特征:1、脚本语言2、解释性语言3、弱类型语言4、事件驱动5、动态性6、安全性7、跨平台性(兼容性)。
    1.4.3 Tomcat
    Tomcat 从一定的意义上面来说他并不只是一个APP Server, 它仅仅只是一个可以支持并且运行Serlvet/JSP 的Web 的容器,而且他还具有一些传统的Web 服务器所具有的一系列的功能。可是他跟Apache 相对比,Tomcat处理静态的HTML 的能力就比不上Apache。 因此,我们可以把Tomcat与Apache 集成到一块,然后运用Apache 处理静态HTML, 最后在利用Tomcat 处理JSP 还有Servlet。这几种技术之间相互配合。这种集成只需将Apache 和Tomcat 的配置文件作出修改就可以了。
    Tomcat 也扩展了一些App Server 的功能,如JNDI, 数据库连接池,用户事务处理等等。Tomcat 被非常广泛的应用在中小规模的Java Web 应用中。在Tomcat5中,在Servlet2.3 中拥有一些事件监听器的功能我们可以利用这些功能来对事应用或者Session 等进行一些列的实行监听。Tomcat 还有好多其他的一些特征,如与SSL 集成到一块,实现安全传输。很多中小应用不需要采用EJB 等技术,JSP 和Servlet 已经足够,这时如果用应用服务器就有些浪费了,我们自然会选择Tomcat。
    JSP 和Servlet的开发主要是在Tomcat的基上来进行开发的,JSP 与Servlet的开发并没有想象中的麻烦,一般的一些文本编辑器或着IDE都是可以开发的, 最后,把这些东西压缩为成WAR格式的就可以了。另外,也可以利用标签库实现Java 代码与HTML 文件的分离,使JSP 的维护更方便。
    Tomcat 也可以与其它一些软件一起来实现更多的功能,如与JBoss 集起来开发EJB, 与Cocoon 集成起来开发基于XML 的应用,与OpenJMS 集成起来开发JMS 应用,除了这几种,可以与Tomcat 集成的软件还有很多。
    1.4.4 软硬件需求
    硬件需求:
    CPU:Pentium以上计算机
    内存: 512M以上
    软件需求:
    操作系统版本:Windows XP /vista/Win7
    开发工具:MyEclipse 6.0.1
    后台服务器:Apache Tomcat 6.0
    开发语言:Java
    浏览器:F6.0

    1.5 可行性研究分析
    可行性分析能够让系统用最低的开发成本来获得最高的经济效益。可行性分析目的是根据所开发系统的用户需求,明确研究方向,明确目标[1] 。通过一些社会上的调查以及一些系统的框架设计功能模块的分析,找到可行的方法。对要设计实现的仓库管理系统从技术上、经济上、操作上、法律上进行可行性研究调查,这样既能够保证信息资源的合理利用,也能够避免在设计程序过程中因失误而导致的系统错漏问题,协助我们对设计做出更加合理和可惜的抉择[6]。
    对所有系统完成设计,都可能受到时间以及空间上的制衡。因此,在开始设计每一个项目的时候,我们必须对系统进行可行性需求分析,只有这样才能够降低项目所带来的危害,减少人力、物力以及财力方面的损耗。在这里简单了解一下对技术、经济、系统和发展方面的可行性分析。
    可行性研究这一部分的主要目的是探讨问题是在定义阶段所确定的问题有没有可行的解,可行性研究是必须的。在这个主要的阶段是从经济可行性、技术可行性、操作可行性和法律可行性等几个可行性来讨论项目是否能够解决及是否值得去解决。通过可行性研究可以减少一些不必要的损失。

    1.5.1 系统目标可行性分析
    本系统可以用最小的时间、经费充分帮助仓库管理人员进行仓库货品的数量进行管理,可以对商品的类型、出入库时的数目、还有时间方面进行查询。也可以对客户使用货物查看货物,货物与供应商之间进行辅助。
    1.5.2 系统的经济可行性
    仓库管理系统是基于JSP技术来开发,采用的软件都是开源的,这样能够削减很多的精力和资源,降低开发成本,同时也能够提升设计的作用,所以系统在开发人力、财力要求不高,具有经济可行性。
    1.5.3 系统的技术可行性
    在本系统的开发包含有前端的程序开发与后台的数据库的连接与数据库的维护。对于应用程序的开发则是要使用起来比较简单上手而且要兼具各方面的功能,而对于数据库的建立和维护必须要求有一套完整的数据库、数据必须要安全稳定。本系统开发的重点就是对数据库的设计和操作。在大学对软件工程,软件测试,UML统一建模语言等课程进行过系统的了解,也能够对这些课程进行开发,能让我们能够进一步辨别、开发与检验系统。所以,本仓库管理系统系统的开发在技术方面必定是高效的。
    仓库管理系统是一个数据库的管理查询系统,要求运行环境、硬件、软件不高,操作简单,完全可以运用我们的技术实现系统的功能。
    1.5.4 系统的法律可行性
    本系统完全是自己设计的管理系统,对于本人来说具有重大的实际意义。开发环境软件和使用的数据库都是开源代码,因此对这个系统进行开发与普通的系统软件设计存在很大不同,没有侵权等问题,在法律上完全具有可行性。
    综上所述,设计一个仓库管理系统具有效率高,操作简便,降低成本等优点,是必要可行的。

                     2.  软件需求分析
    软件需求分析是开发的第一个阶段,也是软件开发周期中的一个非常重要的阶段,根本任务是确定用户对软件系统的需求。它是项目开发的基础,它确定软件系统做什么,具有什么功能性能,有什么约束条件等。在软件的需求分析阶段所得到的结果在后期的软件开发的过程中是十分重要的,经过严格评审并得到用户确认是必须经过的。
    

    2.1 需求分析
    需求分析是系统开发的首要步骤,直接影响系统整体性能和功能的最主要的步骤。系统的需求分析最重要的是对系统的可行性、性能和功能等方面进行具体地分析。不合理的需求分析,会使系统的开发环节出现许多错误和走许多弯路,导致系统开发时间长,效率低,系统质量受到影响[8]。
    2.1.1 用例图
    仓库管理系统分为系统管理员和客户等不同种类的用户角色。在本系统的整个的用例功能模块包括管理员管理、用户管理等模块,管理员模块的主要功能包括查看库存信息,修改信息,用户管理,产品入库,产品出库等功能,如图2-1所示为仓库管理员用例图。

    图2-1 管理员用例图

    用户模块的功能主要包括有库存信息的查找,用户信息的修改,用户管理等功能,如图2-2所示为客户用例图。

    图2-2 客户用例图
    2.1.2 类图
    仓库管理系统中有管理员、客户、还有货物三大类。如图2-3所示为仓库管理系统的三大类之间的类图关系。

    图2-3 系统类图
    2.2 功能需求分析
    1、登录验证功能:为了保证仓库管理系统信息的安全性,进入系统时需要对用户身份进行验证,如果验证无误可成功进入系统,如果用户名或者密码不正确将返回错误提示要求重新输入。
    2、管理员管理功能:此功能属于系统的管理员功能,他实现了对所有用户的管理操作,可以添加一个新的用户,也可以对已经添加的业务员进行删除的操作。
    3、用户的查询功能模块:此项功能属客户管理员功能,用户可以根据条件查询客户信息,也可以对客户信息进行修改。
    4、仓库存储的查询管理功能:此功能属系统管理员与客户共有的功能,客户可以实现查看、入库以及出库等功能,两者都可以查看库存信息。
    5、用户的信息管理模块:此项功能属于用户管理员的功能,业务员可以对自己的客户信息进行管理与修改。
    2.3 业务流程分析
    仓库管理系统主要分为两大用户功能,两种功能所实现的功能流程如下所示。
    2.3.1 管理员模块业务流程
    仓库的管理员可以通过帐号和密码验证之后进行登录,登录到系统之后主要的功能是对商品与用户的信息进行管理,主要流程如图 2-4 所示。

    图2-4 管理员程序流程图
    2.3.2 客户模块业务流程分析
    管理员可以通过帐号和密码进行登录,登录后的主要功能是对用户与品信息的管理,主要的功能包括查看用户信息、修改用户信息、对库存商品进行查看等。主要业务流程图如图 2-5 所示。

    图2-5 客户程序流程图
    2.4 数据流程分析
    基于对业务流程的分析,对数据流分析。
    2.4.1 顶层数据流
    现行的顶层数据流图如图2-6所示。

    图2-6 顶层数据流图

    2.4.2 一层数据流图
    具体分析第一层数据流图,包括有商品的管理、用户信息的管理。商品管理,主要包括用户对产品的入库操作、查询操作、出库操作等一系列的处理以及管理员对产品的管理。用户管理,管理员能对用户的信息来操作。详细流程图如图2-7所示。

    图2-7 一层数据流程图

    2.4.3 二层数据流图
    具体分析第二层数据流图,包括的功能信息有用户注册、用户登录,产品入库,产品查询,产品出库等功能。
    用户注册模块数据流图如图2-8所示:

    图2-8 用户注册功能的数据流图

    用户登录功能的数据流图如图2-9所示:

    图2-9 用户登录功能模块的数据流图

    商品入库功能模块的数据流图如图2-10所示:

    图2-10 商品入库模块
    如图2-11所示为商品查询功能模块的数据流图:

    图2-11  商品查询模块
    

    如图2-12所示为商品出库模块的数据流图:

                       图2-12  商品入库模块
    

    2.5 数据字典分析
    2.5.1 数据存储条目
    文件名:用户信息表
    组成:本次刚刚注册用户 + 之前注册过的用户
    组织方式:索引类型的文件,以用户名为索引
    文件名:商品库存表
    组成:本次新入库商品+以前入库商品
    组织方式:索引文件,以商品编号为索引
    2.5.2 加工条目

    加工名:商品存储处理
    编号:无
    输入:商品信息
    输出:库存信息表

    加工名:商品入库处理
    编号:无
    输入:商品信息
    输出:库存信息表

    加工名:商品出库
    编号:无
    输入:商品信息
    输出:库存信息表

    加工名:用户信息存储
    编号:无
    输入:用户信息
    输出:用户信息表

    加工名:用户查询处理
    编号:无
    输入:用户名
    输出:用户信息表

    加工名:用户信息验证
    编号:1.1
    输入:用户信息
    输出:用户信息表

    加工名:验证用户是否存在
    编号:1.2
    输入:用户名
    输出:用户信息表

    加工名:录入用户信息
    编号:1.3
    输入:用户信息
    输出:用户信息表

    加工名:登陆系统时的信息验证
    编号:2.1
    输入:用户名、密码
    输出:用户信息表

    加工名:个人信息查询
    编号:2.2
    输入:用户名
    输出:用户信息表

    加工名:审查商品信息
    编号:3.1
    输入:商品名称
    输出:商品信息表

    加工名:验证是否为新商品
    编号:3.2
    输入:商品名称
    输出:库存信息表

    加工名:录入商品
    编号:3.3
    输入:商品信息
    输出:库存信息表

    加工名:查询商品
    编号:4.2
    输入:商品名称
    输出:库存信息表

    1. 软件总体设计
      软件系统的设计是在整个系统在实现软件开发过程中的十分重要的一个环节。本章将主要介绍一下仓库管理系统的总体结构与系统的架构[2]。总体设计的结构实际上介绍了各个模快相互产生的关系,数据库的设计主要说明了表的建立与数据之间的关系。
      系统怎样实现是在总体设计阶段的阶段的基本目标。所以总体设计又被叫做为概要设计。在经历过这个阶段的工作,开发人员又将可以组成系统的物理元素,例如有文件、程序、还有数据库等。但是这些物理元素还处于黑盒子的形式。总体设计的另一项任务是设计软件的总体结构,即为了找出系统中的每一样程序都是由那些模块组成的,每个模块的功能及模块和模块之间的接口、调用关系等,但所有这些都不要求设计模块的内部过程的细节。
      容易看出,软件设计的结构是基于模块之上的,根据分析阶段得到的数据流图来设计软件结构。数据流图是设想各种可能方案的基础。首先,分析员从提供的方案中选出若干个设计方案,然后对这些方案进行筛选,从而选出一个合理方案。对于复杂的大型系统要进行功能分解,为确定软件结构,把一些设十分复杂的处理功能适当地分解成一系列比较简单复杂的功能,然后在进行软件结构设计。最后制定测试计划,书写文档并复审。
      3.1 软件结构设计原则
      软件总体设计的任务是软件的结构体系设计与软件的模块化设计。为了提高软件设计质量,人们在长期的计算机软件开发过程中积累了丰富经验,对这些经验做出总结会进一步得出一下软件设计准则。
      3.1.1 软件的结构体系
      软件的体系结构是在整个软件系统中最基层的。设计准则如下:
      1.体系结构是一种抽象的结构。
      2.软件的体系结构能够保持一定时间的稳定。
      3.良好的体系结构意味着普通、高校和稳定。
      3.1.2 软件模块设计原则
      在软件开发过程中,软件的模块化式设计关键,软件模块化设计需要遵循的总则如下:
      1.模块的耦合性降低,模块的内聚性要提高。
      2.模块的作用范围需要能够控制。
      3.模块接口设计要简单,以便降低复杂程度和冗余度。
      4.设计功能可预测并能得到验证的模块。
      5.适当划分模块规模,已保持其独立性。
      3.1.3 软件的模块化
      模块是软件结构的基础,是软件元素,是能够单独命名、独立完成一定功能的程序语句的集合,如高级语言中的过程、函数、子程序等。广义的将,在面向对象的方法学中其中的对象也属于模块,模块是构成程序的基本构件,在程序设计中有很重要的地位。
      模块化是使得软件能够对付复杂问题所具备的属性。使用模块化是为了使软件的复杂性能够降低,能简单的操作软件的设计、维护、还有测试。模块化技术的运用还可以防 止错误蔓延,从而可以提高系统的可靠性。关于模块可以降低软件复杂性的事实。
      3.2 系统任务概述
      一个成功的网站应明确为什么要建立这个网站,确定网站所拥有的功能,明确网站所有的规模、投资花费的费用等[8],了解这些都需去市场进行调查。只有经过详细的策划,才能够免去在网站的建设中出现的很多问题网站的建设才会顺利[4]。同时,一个大型的计算机网站系统,需要有一个十分明确的思想做指导,并且通过一系列合理的结构设计,就能够充分发挥出仓库管理系统的巨大优势。
      在仓库管理系统系统的实现时首先我们要考虑下面几点:
      安全性。现在社会是一个信息的社会,信息就是宝贵的财富,保证信息的安全,特别是个人信息更加的需要安全性。
      先进性。结合当前流行趋势,开发要符合用户的需求,适合用户进行网上预约挂号的系统。本系统采用的这些技术完全基于微软平台进行开发,从来有效的降低了系统的运营成本,大大提高了该医院预约挂号系统的稳定性和易维护性。
      可扩展性。本系统给用户带来了极大的便利,提高了网站的管理效率,因此在开发系统的功能过程中,我们要考虑到系统的可扩展性,便于将来系统的升级、更新。
      有效性。实际上这里所说的有效性包括了两个方面的意思,即有用性和可用性。其中有用性是指的是站点能满足用户需求的潜在功能,而可用性指的是能够通过站点来操作实现系统的体现功能。所以实现在仓库管理系统的功能时一定要尽最大的可能满足用户的需求。
      3.2.1 系统的功能设计
      仓库管理系统主要分为两个个用户角色,主要是管理员角色与用户角色,其功能如下:
      1.管理员
      管理员可以通过帐号和密码进行登录,登录到系统后主要功能是对库存信息的管理,主要包括个人信息管理、商品进行入库、出库、查询操作、客户的信息进行查看修改、退出系统等功能。
      2.用户
      用户可以注册登录成为会员,其中的系统功能包括系统首页,查询库存,注册登录,我的信息,退出系统等一些功能。
      3.2.2 系统功能结构
      根据上述分析,得出的功能结构图有,如图3-1所示。

    图 3-1 系统总体结构图
    3.3 系统架构
    B/S系统对客户机的工作量做了极大的简化,对数据库的访问以及应用程序的执行都将由服务器来完成。B/S架构主要使用WWW浏览器技术,根据各种基于浏览器的脚本语言。在B/S架构基础上软件结构的安装、修改与维修的需要在服务器端解决。使用该系统时,只需要一个浏览器用户可以运行所有的模块,从而实现了“零客户端”功能,很容易在运行时自动升级。B/S架构也有一个均质机,网上异构网络,异构应用服务的联机[10]。
    B/S系统由以下三层构成,三层是相对独立又相互关联,在这里我们在三个层面上做一个介绍:
    1.表示逻辑层提出一个服务请求到网络上的Web服务器,并且开始验证身份,主页信息被HTTP给传送给客户端,主页文件会被客户机收到,并将主页文件信息显示在Web浏览器上。
    2.用户的数据请求会被控制逻辑层接受到,数据库与程序相互连接,并进行数据处理请求的数据库服务器,然后Web服务器开始接受数据库服务器的数据处理的结果,最后再返回给客户端。
    3.数据表示层接受Web服务器请求的数据库操作,以实现对数据库操作的一系列的功能, Web服务器来接收操作结果。
    3.4 系统主要子模块设计
    在对系统的功能设计进行分析,在对系统的小模块在进行划分,即系统的模块化。建立系统的整体的结构了解模块之间的关系如何。系统的功能需求分析和企业仓库管理的有各自不同的特点。
    3.4.1 用户登录子模块设计
    系统中用户登录验证相对比较简单,可以将其流程概括如下:
    在用户登录时,系统要求在用户名的输入框与密码的输入框输入相应的信息,然后再由系统将其传送至相应的服务器端。服务器端处理程序时,服务器会根据提交的内容将用户名中的内容以及密码框的内容进行分离,再与数据库中的数据进行比对判断。如果输入的内容能够相互匹配会进入到登录首页;若不能正常匹配则系统会跳转到报错界面。
    3.4.2 商品入库子模块设计
    首先,入库申请人需要向仓库管理员提交一份入库申请单和相应的货物,仓库管理员会根据所提交的清单进行对比。如果发现货物与入库申请单中的数据有所差异,那么则拒绝货物入库操作;如果发现库存中有该商品存在,还需考虑入库货物的数量加上现有的库存量是不是超过了该仓库的最大库存量,若超过则暂时禁止入库。没有超过的话,仓库的管理员进行入库操作。如果该库存中没有该商品存在,则需要重新添加该商品,计算该商品可在库存中所能存放的最大库存量,重新考虑入库货物的数量加上现有的库存量是不是超过了该仓库的最大库存量,若超过则暂时禁止入库。货物存入仓库之后,该仓库管理员需要给入库申请人开具一份货物入库单,入库单中的内容必须严谨。至此该系统的入库流程全部完成。
    3.4.3 商品出库子模块设计
    在进行出库操作时,首先,出库申请人需要向仓库管理员提交一份申请单。若申请单不真实,则取消出库操作,不再继续进行出库。对真实有效的出库单,仓库管理员再对照其要求出库的货物名称查询该货物的信息和库存量。如果此货物的库存量达未到所需要数量则取消出库操作。如果此货物的库存量达到所需要数量,可以执行出库操作并且记录。随后仓库管理员给该申请人开出库单据,仓库管理系统出库流程全部完成。
    3.4.4 用户注册子模块设计
    系统中用户登录验证相对比较简单,可以将其流程概括如下:
    在用户注册时,需要在注册的页面各框中输入用户名、密码、姓名、性别、年龄、联系方式、email、联系地址等一系列信息,系统将其提交至服务器端。服务器端处理程序时,服务器根据提交的内容将用户名与其他信息进行分离判断。如果没有找到所注册的用户名,系统会进一步进行注册;当在注册的过程中有空的情况下系统会有相应的提示。在进行email注册时,在注册的栏中输入的不正确时,系统会提示出错误。当输入的内容符合要求时会继续注册。还可以选择清空,从头开始在注册一遍内容。

    1. 数据库设计
      数据库的设计在开发的过程中占有一个十分关键的作用,在这里强调数据库重要性的作用,原因是数据库是软件开发过程的根基,前期的建设不牢固,会使得后期的建设出现大批量的问题,在后期的处理过程中会非常的困难。
      通常概念设计的主要目标是设计并反映出某一个组织部门的信息需求中的要求,数据库系统通常是独立的并主要存在于:数据库系统的逻辑结构、DBMS即数据库管理系统、计算机系统等模式。
      概念模式的设计方法是在需求分析的基础上,通常使用E-R模型来表示数据以和数据之间的联系,开发出能够解决用户信息要求和处理要求的数据库的模式。数据库概念设计的主要目标是能够准确的描述应用领域的信息模式,并且支持用户的不同应用,并方便转换为数据库系统逻辑模式以及方便用户理解。该模型是不能够直接的用于数据库系统的实现的,因为它主要是面向现实世界的数据模型。在此阶段,用户可以参与和评价数据库系统的设计,从而有利于保证数据库系统的设计能够满足用户的需求。
      4.1 数据库概念
      数据库技术从年代中期至今只有不到年的历史,但其发展速度之快是其它技术所不及的。数据库的发展已经从刚开始的网状型数据库发展到后来的的关系型数据库现如今已经变为以面向对象为主要模型的数据库。数据库技术现如今已经与网络的通信技术、现如今流行的人工智能技术以及面向对象的编程思想等技术之间互有融合,并且使得其得到了广泛的发展与应用。
      数据库的原理管理方式根据的是数据结构的方式进行的管理还有存储数据的数据仓库,在本次系统中的作用主要是用来查询仓库管理系统的系统设计与实现数据的存储。使用数据库可以带来许多好处:使得数据的冗余度得到了减少,而且在一定的程度上使得数据的存储的空间得到了充分的利用,让数据资源能够最大程度的得到共享等等。尤其在最近的一些年中计算机的关系数据库的不断地发展,使得编程方面更大限度的得到便利,在处理数据的过程中更加方便快捷,操作更容易上手。
      数据库设计的目的是指在特定的环境下能够在建立好的应用模式与好的应用环境之下使得用户的各种需求得到满足。
      数据库在一个完整的网站中是必不可少的,原因是在网页被访问的过程中都会有数据保存下来,网站会是这些数据保存在一个文件中。可是在实际的网站建设当中,这些文件所能保存的数据往往是不够的,无法满足各种数据的需求[5]。因此一个完美的网站的建设必须拥有一个完美的数据库。我们现在可以使用的数据库有很多种,如数据库、数据库等等,在本次设计中,选择了ORACLE数据库作为后台数据库工具。自从ORACLE数据库推出一来,得到了快速的发展,很快便在应用市场中占有了十分重要的地位。在时代的不断发展过程中,ORACLE数据库已经在发展的过程中占据了牢固的地位,在下如今工作的前景之下,以数据库为背景的应用发展,为用户的应用提供了款完善的数据管理和数据分析解决方案。数据库是一种具有属于自己的结构与管理的方式数据的仓库。数据库简单来说是是属于一种文件柜电子化的一种存储工具(主要用于电子文件的存储),用户可以对其中的文件进行一定的操作。它能够把以一种属于自己的方式进行存储、而且能够使得多个用户之间的数据相互的分享、还能使得用户数据的冗余度能够最大程度的减少、在应用程序之间的各种数据能够分离。
      4.2 数据库分析
      数据的模型属于在数据库当中中用来存储数据的一种方式,是数据库系统的基础。
      数据模型经历了:
      1、层次模型:是数据库系统中最早使用的一种模型,它的数据的结构是一棵“有向树”
      2、网状模型:网状模型以网状结构表示实体之间的联系。网中的每一个结点代表一个记录类型,联系用链接指针来实现。网状模型可以表示许多不同的联系,还能表示不同的数据之间的交流,即数据间的横向关系与纵向关系,属于扩展之后的层次模型。网状模型可以方便地表示各种类型的联系,但结构复杂,实现的算法难以规范化
      3、关系型:在关系模型中基本数据结构就是二维表,不用像层次或网状那样的链接指针。
      4.2.1 数据库的完整性分析
      数据的正确性与数据之间的相容性即为数据哭库的完整性。用来管理数据库的系统,需要用一定的机制来检查现存的数据库中的数据是否满足规定的条件,数据的约束条件是基于仓库管理系统设计与实现语义的体现,会作为模式的一部分存入数据库之中。本系统中定义了表与表之间的联系有助于实现完整性规则,一般在程序中实现具体的完整性控制。数据库的完整性约束能够在一定的程度上防止终端的用户输入一些错误的数据,以此来保证所有的数据库中的数据都是合法的、完整的。
      在设计数据库表时采用数据库完整性约束,它是数据库完整性的一种机制,他会在之前用来定制一些规则,用来约束数据库,而这些数据规则存放于数据库中,具体来说,这种约束有以下几种非空约束缺省值约束唯一性约束主键约束外部键约束规则约束。由于这种约束是加在数据库的表的定义上的,因此,不需要有大的代价便可以取得一些高的性能。
      4.2.2 数据库的安全性分析
      能够保证数据的网整性、合法性还有安全性是数据库重要的安全性能的指标。数据能够在数据库中大量的存放并且能够实现数据之间的共享,这都属于数据库的宝贵的资源。
      数据库的安全和服务器的安全是仓库管理系统安全的重要性能。采用管理员表示和鉴定的方法实现数据库的安全,此安全管理措施并不在前台开发工具中实现,而是在后台数据库中实现。在登录数据库时,系统让管理员户表示自己的身份,不同的管理员权限不同,系统进行核实,分辨出此管理员是否能够与系统匹配,若是,系统进一步核实用户,通常要求重新输入,系统和用户重新输入的信息用来鉴别用户的身份。服务器的安全也是通过判断用户在登录服务器时输入信息是否与数据库中的信息相匹配来验证的[3]。这种方法比较容易实现,实现起来也比较方便。没有采用更加复杂的系统安全管理措施是因为本管理系统一般是应用在校园网中,采用安全管理措施主要是为了防止没有修改权限的用户无意间修改了数据,因此采用用户标识和鉴定的安全管理措施就能够保障数据库的安全性。
      4.3 数据库的设计
      4.3.1 概念结构设计
      在次结构的设计过程当中,E-R模型法是最常见的设计方法。
      在次结构设计当中中,有以下几种方法方法:
      自下往上、从上往下、逐步扩张、相互结合,以这种方式为模型然后烦别实现各个结构的模型。
      在物理结构设计阶段首先分两步走:
      确定数据库的物理结构,是用来说明数据在数据库中怎么样存储的。
      选取正确的关系模式存取方法有好多种方法进行选择。
      概念设计通常是从系统的需求出发,常常将对象使用数据流的形式表达成为完整的抽象实体。而与模块内部的细节无关。E-R图为主要的工具,如下图4-1。

    图4-1 系统E-R图
    4.3.2 逻辑结构设计
    (1) 管理员信息关系模式,里面的主键是管理员ID。
    管理员(管理员ID、用户名、email、密码、联系方式、姓名、联系地址、性别)
    (2) 客户信息关系模式,里面的关系主键是客户ID。
    客户(客户ID、用户名、email、密码、联系方式、姓名、联系地址、性别)
    (3) 商品信息关系模式,里面的关系主键是商品编号。。
    商品(商品编号、商品价格、商品名、类别、生产产地、商品数量)

    表3-1 管理员信息表
    列名 数据类型 可否为空 说明
    id number NOT NULL 管理员编号
    account varchar NOT NULL 帐号
    Password varchar NOT NULL 密码
    name varchar NOT NULL 姓名
    sex varchar NOT NULL 性别
    age varchar NOT NULL 年龄
    phone varchar NOT NULL 联系方式
    email varchar NOT NULL E-mail
    address varchar NOT NULL 地址

    表3-2 客户信息表
    列名 数据类型 可否为空 说明
    id number NOT NULL 客户编号
    account varchar NOT NULL 帐号
    password varchar NOT NULL 密码
    name varchar NOT NULL 姓名
    sex varchar NOT NULL 性别
    age varchar NOT NULL 年龄
    phone varchar NOT NULL 联系方式
    email varchar NOT NULL E-mail
    address varchar NOT NULL 地址

    表3-3 商品信息表
    列名 数据类型 可否为空 说明
    id number NOT NULL 库存编号
    name Varchar NOT NULL 商品名称
    goodsid varchar NOT NULL 商品编号
    price varchar NOT NULL 商品价格
    sort varchar NOT NULL 商品分类
    num varchar NOT NULL 商品数量
    address varchar NOT NULL 生产厂商
    4.4 数据库的连接
    本系统与数据库的连接方式,包括对数据库中的信息进行添加、删除、修改,都使用的数据持久化层(persistence layer)的开源框架Mybatis,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。以便仓库管理人员在计算机上运行本系统时,对数据库进行必要的操作.
    4.4.1 连接工具
    本系统采用mybatis数据持久化层的开源框架与数据库进行连接,包括对数据库中的信息进行添加、删除、修改. MyBatis简化与实现了在变成中的数据的持久化层(persistence layer),并且它抽象出了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的另一个版本,而且支持注解还有Mapper。
    MyBatis具有简单性和易使用性,所以,才会开始流行起来。在Java应用程序中,将从数据库查询到的数据生成所需要的Java对象;将Java对象中的数据通过SQL长期保存到数据库中,都是数据库的设计中所涉及到的。MyBatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象、Java对象的数据持久化数据库中的过程使得对SQL的使用变得容易。
    使用Mybatis的具有一下几点的优势:

    1. 它消除了大量的不必要的重复代码。

    2. 学习和使用起来非常简单。

    3. 能与其他的一些数据库在一起共同使用。

    4. 它可以接受SQL语句。

    5. 具有与其他的一些框架一起使用的集成支持。

    6. 提供了与第三方缓存类库的集成支持。

    7. 引入了更好的性能
      4.4.2 工厂类配置文件主要内容



















      4.4.3 Mapper类配置文件主要代码


      select * from admin
      where account=#{account}


      select * from admin
      where id=#{id}



      select admin_seq.nextval from dual

      insert into admin values(#{id},#{account},#{password},#{name},#{sex},#{age},#{phone},#{email},#{address})


      update Admin set account=#{account},password=#{password}, name=#{name}, sex=#{sex}, age=#{age}, phone=#{phone}, address=#{address}, email=#{email}
      where account=#{account}

    8. 软件详细设计
      在软件的详细设计的这个阶段确定应该使用什么样的方式来实现整个系统使这个阶段的根本目的,通过这一阶段的具体的努力基本上能够明确整个系统所需要实现的所有的功能,具体的就是微软件结构图中每个模块确定采用的算法和块内数据结构,用某种选定的详细设计工具更清晰的描述。经过这一阶段的努力可以在编码阶段直接翻译成为源程序。
      在这个阶段中,考虑到的程序代码的质量时必须注意,程序的“读者”有两个,即计算机和人。在整个软件生存周期中,软件的测试与诊断出的程序的错误还有程序错误的修改等都必须先读程序。实际上对于任何一个经常使用的软件系统,程序员在之后的过程中,读程序所花费的时间可能比写程序所花费的时间还要长的多。因此,衡量程序的质量不仅仅看他的逻辑是否正确,性能是否满足要求,更重要的是看他是否一度易理解。详细设计的目的不仅仅看他的逻辑上是否正确,性能是否满足于要求,更重要的是看他是否易读、易理解。结构化的程序设计技术是实现这些问题所使用的关键性技术,更是详细设计的基础。
      在本次仓库管理系统说实现的这些基本功能。仓库管理的人员或者是客户在登录后可以进入系统使用主界面进行相应的操作。
      5.1 登录模块
      在本次的仓库管理系统中有两个不同的入口。仓库管理人员使用用户名和密码之后可以对应有相应的操作。用户的登录所需的用户名和密码已经在之前的用户信息表中建立,用户的个人信息由管理员提前录入或者自己注册。由于用户信息需要先从所对应的数据库中进行读取,所以在读取之前需要先于数据库进行连接。在本系统当中,有两个登陆模块的入口。如下图所示确认文件审核用户提供的用户名和密码。
      管理员登录图片如下:

                    图5-1  管理员登录
      

    管理员登陆模块主要逻辑代码如下:
    AloginServlet.java文件主要代码如下:
    String account = request.getParameter(“in_be”);
    String password = request.getParameter(“pass”);
    HttpSession session = request.getSession();
    session.setAttribute(“account”, account);
    AdminService adminService = new AdminService();
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    List fadmin = aDaoImp.findAdminByName(account);
    sqlSession.clearCache();
    sqlSession.commit();
    //session.close();
    System.out.println(“用户名不存在,ADS开始注册”+fadmin);
    for(Admin fAdmin2:fadmin)
    {
    if( password.equals(fAdmin2.getPassword()))
    {
    response.sendRedirect(“AFirstLog.jsp”);
    session.setAttribute(“Admin”, fAdmin2);
    //System.out.println(“帐号密码正确!”);
    find=true;
    }
    }
    if (fadmin.size()==0) {
    System.out.println(“用户名不存在,ADS开始注册”+fadmin);
    response.sendRedirect(“AloginFail.html”);
    throw new AdminServiceException(“用户名不存在!”);
    }

    	 else {
    		 if(find==false){
    			 response.sendRedirect("AloginFail.html");
    			 throw new AdminServiceException("密码错误!");
    		 }
    	       }
    		   
    	 } catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	 }
    

    5.2 入库模块
    商品入库模块这是系统设计得最好最完善的模块之一。系统提供两种入库方式可供选择一次是录入库存中已经录入的商品,或者录入库存中没有录入的商品
    ,另外添加新商品。录入已存在商品方式时,可自由选择录入某种商品。己录入的商品的信息会在相应的信息的框中显示出来。在此模块的编程中,使用了非常多的编程技巧来提供上述功能做到了与完美的配合。此种方式便于管理员掌握相应商品的情况。按商品名查询可以在选定撒谎能够品后,查询某一次或多次商品信息。
    添加已有上商品模块如图5-2所示:

    图5-2 添加已有商品图片
    当有新的商品进入仓库中时,仓库管理人员需点击入库界面的“添加新商品”选项。在对现有的商品进行入库操作时,商品的信息都是重新输入的。当将新入库的商品的信息填写完毕之后,系统会自己将新入库的一些商品的信息添加到管理商品信息的数据表“goods”中。
    添加新商品模块如图5-3所示:

    图5-3 添加新商品模块
    5.3 出库模块
    商品出库模块这是系统设计得最好最完善的模块之一。系统提供出库方式是在库存表中已经储存有商品基础上才能可以出库的。若是在库存中商品品的数量小于所要出库的输了时,系统会显示出库存数量不足。在进行出库的操作过程时,若是出库的商品在库存中的数量小于0时,系统会报出出库商品出错。此时都不可以正常出库。在正常出库之后,库存中商品的数量会发生改变。

    图5-4 出库管理模块图片
    在出库商品的管理模块中的主要逻辑代码如下:
    GoodsDaoImp goodsDaoImp = new GoodsDaoImp();

          OutGoodsDaoImp outGoodsDaoImp = new OutGoodsDaoImp();
          for(Goods goods2:goods){
        	  String GoodsNum =  goods2.getNum();
        	  System.out.println("goods2值为:"+goods2);
        	  Integer IntGoodsNum = Integer.valueOf(GoodsNum);
        	  Goods goods3 = goods2;
        	  System.out.println("IntGoodsNum :"+IntGoodsNum);
        	  if (IntOutNum>IntGoodsNum) {
        		 System.out.println("出库数量不足!");
    			response.sendRedirect("OutStockFail.jsp");
    		   }else{
    
    			goods2.setNum(String.valueOf(IntGoodsNum-IntOutNum));
    
    			try {
    				//goods3.setNum(String.valueOf(IntOutNum));
    				goodsDaoImp.updateGoods(goods2);
    				sqlSession.commit();
    				goods3.setNum(String.valueOf(IntOutNum));
    				outGoodsDaoImp.saveOutGoods(goods3);
    				sqlSession.commit();
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    			response.sendRedirect("Goods.jsp"); 
    			System.out.println("出库成功!");
    		   }  
          }
    

    5.4 用户注册模块
    在用户需要访问此系统时,用户需要在登录框中输入相应的信息,然后系统在后台服务器中与数据库进行匹配。所以在进入系统之前需要进行帐号密码的注册,在注册的过程中需要输入输入用户名、密码、姓名、性别、年龄、联系方式、email、联系地址等一系列信息,系统将其提交至服务器端。服务器端处理程序时,服务器会获取到系统提交的内容,然后系统会将获取的信息与数据库中所存储的表格中的信息进行对比,得出相应的结果。若是输入的用户名是在数据库的库存中已经存在的,系统会终止注册,然后系统会提示用户名已经被使用,请重新注册的提示。如果在进行继续注册的过程中出现某一项信息没有填写时,系统会发出此项信息没有填写请重新填写的提示。在进行email注册时,若输入的格式与系统定义的格式不匹配的情况下,系统会作出相应的警告在重新注册。若注册的信息不满足要求时,可以将信息清空再重新注册。

    图5-5 用户注册系统

    用户注册模块的逻辑代码如下:

    String account = request.getParameter(“in_be”);
    String password = request.getParameter(“pass”);
    HttpSession session = request.getSession();
    session.setAttribute(“account”, account);
    //System.out.println(“账户为:”+account);
    //System.out.println(“密码为:”+password);
    AdminService adminService = new AdminService();
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    List fadmin = aDaoImp.findAdminByName(account);
    sqlSession.clearCache();
    sqlSession.commit();
    //session.close();
    // /session.flush();
    for(Admin fAdmin2:fadmin)

    {
    if( password.equals(fAdmin2.getPassword()))
    {
    response.sendRedirect(“AFirstLog.jsp”);
    session.setAttribute(“Admin”, fAdmin2);
    //System.out.println(“帐号密码正确!”);
    find=true;
    }
    }
    if (fadmin.size()==0) {
    System.out.println(“用户名不存在,ADS开始注册”+fadmin);
    response.sendRedirect(“AloginFail.html”);
    throw new AdminServiceException(“用户名不存在!”);
    }

    	 else {
    		 if(find==false){
    			 response.sendRedirect("AloginFail.html");
    			 throw new AdminServiceException("密码错误!");
    		 }
    	       }
    		   
    	 } catch (Exception e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    

    }
    、}
    5.5 个人信息管理模块
    当管理员或用户进入到主界面之后,管理员可以选择信息管理选项,会进入到用户信息的管理模块。管理员或者用户在系统中具有两项功能,第一项功能是可以对管理员或用户的个人信息进行一些列的操作。在此界面上面可以查询到用户全部的个人信息。第二项功能是能够管理全部的用户的信息。在进入信息管理模块对个人的信息可以进行查看,可以修改自己的信息。在点击修改之后会完成所对应的个人信息。
    管理员信息模块图片如图5-6所示:

    图5-6 管理员信息
    此信息模块的主要逻辑代码如下:
    request.setCharacterEncoding(“UTF-8”)
    response.setCharacterEncoding(“UTF-8”);
    String account = request.getParameter(“userid”);
    String password = request.getParameter(“password”);
    String name = request.getParameter(“name”);
    String sex = request.getParameter(“sex”);
    String age = request.getParameter(“age”);
    String phone = request.getParameter(“phone”);
    String email = request.getParameter(“email”);
    String address = request.getParameter(“address”);
    Admin admin = new Admin();
    admin.setAccount(account);
    admin.setPassword(password);
    admin.setName(name);
    admin.setSex(sex);
    admin.setAge(age);
    admin.setPhone(phone);
    admin.setEmail(email);
    admin.setAddress(address);
    System.out.println(“AInfServlet获取的信息:”+admin);
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    HttpSession session = request.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    aDaoImp.updateAdmin(admin);
    sqlSession.commit();
    session.setAttribute(“admin”, admin);
    response.sendRedirect(“AInf.jsp”);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    在这个模块当中,管理员可以对所有的信息进行修改,所有的用户的信息也可以被查询到。在客户的需求之下,管理员可以随意的进入到某一位客户的信息界面之下,可以对所有的信息进行管理。修改之后用户可使用最新一次更新的信息进行登录,进入主界面之后可以更新自己信息。
    系统中全部的用户信息块如图5-7所示:

    图5-7 管理员对客户信息管理
    实现此模块的主要逻辑代码如下:

    String password = request.getParameter(“password”);
    String name = request.getParameter(“name”);
    String sex = request.getParameter(“sex”);
    String age = request.getParameter(“age”);
    String phone = request.getParameter(“phone”);
    String email = request.getParameter(“email”);
    String address = request.getParameter(“address”);

      	   Customer customer = new Customer();
      	   customer.setAccount(account);
      	   customer.setPassword(password);
      	   customer.setName(name);
      	   customer.setSex(sex);
      	   customer.setAge(age);
      	   customer.setPhone(phone);
      	   customer.setEmail(email);
      	   customer.setAddress(address);
    
    	   System.out.println("AInfServlet获取的信息:"+customer);
    	   SqlSession sqlSession = MybatisSessionFactory.getSession();
    	   HttpSession session = request.getSession();
    	   CustomerDaoImp customerDaoImp = new CustomerDaoImp();
    		try {
    			customerDaoImp.updateCustomer(customer);
    			sqlSession.commit();
    			//response.sendRedirect("ACInf.jsp");
    			session.setAttribute("customer",customer);
    			response.sendRedirect("ACInf.jsp");
    		} 
    

    catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    1. 系统的测试
      系统测试是软件设计过程中最后的一部分,也是非常重要的一步。用于检查软件的质量、性能、可靠性等是否符合用户需求。一套严谨的、规范的、完善的测试过程将大大提高软件的质量、可信度、可靠性,降低软件的出错率,降低用户风险系数。
      软件测试就是用户希望能够通过软件测试寻找出软件当中的一些错误,以考虑该产品能不能被广大的用户所接受。而软件测试者则是替用户受过。而今,人们已认识到,用户能够得到最为满意的产品是软件测试的最终的目的,尽可能多的发现系统的问题并改正,然后交给客户使用。
      在测试的过程中主要需要实现一下几点要求:
      1)要完成并实现在前期承诺所需要实现的功能,并且在系统中的每一项功能都需要有说明书。
      2)所做出来的产品的性能要得到满足。
      3)产品应该能够适应所有的用户的环境。
      总之,软件测试的最终的目标是希望能够找出系统中所存在的一些不足与缺陷,而且要求与软件需求阶段所提出的要求相匹配。要注意的是:软件的测试并不能说明软件中没有错误,只能发现并尽可能的减少错误。
      6.1 测试简述
      软件测试,是在软件的完整性、安全性、正确性以及质量是否过关的一种描述。也可以说成是输出比较的一种过程。软件测试的经典定义是:在一定的条件之下来操作并使用软件,在这个过程中来发现并且找出软件自身的错误,以此来评价一个软件的质量。
      在经过查询一系列的资料表明出,软件的测试工作在软件的整个开发的过程当中占有极其重大的一部分。在一些情况表明之下,如果所设计的软件关系到人的生命安全的情况下,软件的测试会变的即为的重要,并且还需要有成倍的工作量来增加测试的目的,以此来说明程序能正确的执行它应有的功能,还有表明程序没有错误。如果抱有这样的目的,就不会轻易地发现错误,从而导致选择一些不易暴露错误的例子。
      6.1.1 测试目的及重要性
    2. 测试目的
      系统的测试是一个在开发过程中十分重要的一个阶段。在系统的测试阶段找出程序的错误,并提高系统的性能是测试阶段的主要任务。主要目的是检验系统“做得怎样”。通过软件的测试会发现一系列的问题,还能找出问题的原因,然后再对这些问题进行修改。
      Grenford J.Myers在以前提出过一下的软件问题:
      1.找出程序中尽可能多的问题。
      2.设计出一个非常好的测试方案,有可能发现一些到目前为止没有能发现的错误。
      3.如果能够找出之前并未发现的错误,算是设计出了一个成功的方案。
      4.测试不是单独的找出错误。而是通过分析错误,来找出产生错误的原因,来避免发生错误,帮助程序员找出软件开发过程中的缺陷,以便及时进项改正。
      2.测试重要性
      不管是什么技术,以及如何使用的方法,但该软件,该软件将仍然是放错了地方。为了减少引入的错误,您可以使用最新的语言,最领先的开发方法,详细的改进开发过程,可是就算是这样也不能够完全的消除软件上面的错误,还要进行详细的测试过程,以找出引入的错误,你必须通过测试误差估计密度在软件中。所有工程学科最根本的所在是一个测试,是在软件开发中占有很重要的一个部分。测试陪同,从编程本身的日子。统计显示,软件测试这个阶段所花费的成本为这个测试是30%至50%的软件开发总成本的。要是也考虑了维护的阶段,在软件开发的整个周期中,有所降低的也许是测试的成本比例,可是维护的工作,实际上是相当于对软件进行了第二次的开发,还有可能是多次,许多测试工作也一定包含在其中。
      在实践中,因为还有一个感知测试这是不正确的和错误的态度,后导致一系列的问题,主要包括有:
      假设测试,也很难带来成就试验人员从某种意义上说,作为设计和编码一样容易取得进展:
      那个戒指是不是建立在自然破裂,找到软件错误作为测试的目标,他们负责的负面测试工作中发现错位;
      测试工作是一种比较乏味、缺少技术性的工作;
      有时候开发人员在开发出软件之后自信心会比较强大,在发现错误后,所表达的意见与他们的自尊心会有所冲突、矛盾。
      软件测试,不赚钱、技术含量低不需要专门去做的错误认知。

    6.1.2 测试原则
    在软件测试中人们所具有的经验非常重要,但人们的心理因素也更加的很重要的。根据软件测试的目标确定一些测试原则,将一些容易被人们忽视的、实际上又是显而易见的问题作为原则来加以重视,所以测试有以下几大原则。
    1.测试用力既要有合理的数据的输入,又需要有一定合理的输出结果。
    2.合理的用例固然重要,但是却不能忘却一些不合理的用例。
    3.检查程序时,需要检查程序该做的与不该做的事情。
    4.测试的计划需要早早的开始制定。
    5.测试计划、测试用例、测试报告需要进行长期的保存,以免以后出问题可以解决。
    6.遵守二八原则。
    7.软件的开发人员应该尽量避免不要亲自去进行测试。
    6.2 测试方法
    测试的过程是一个执行程序的过程,即要求被测试程序能够在各种环境下运行。其实,不再记起上运行也可以发现程序的错误。为了便于区分,一般把被测程序在机器上运行称为动态测试,不再机器上运行称为静态测试,广义上讲都属于软件测试。动态分析方法又分为黑盒测试和白盒测试两种方法。以下的两种方法是即为典型的测试方法。
    6.2.1 黑盒测试
    黑河测试,即功能测试。他的工作重点不是考虑程序应该是怎么编写的。往往将被测试的程序看成一个黑盒,只是在软件的接口处开始进行测试,根据前期制定的需求说明,来检查所做出来的程序是否满足了所有的功能要求。程序梭边写出来的每一项功能,都能不能满足用户在输入数据之后所要达到的目的与要求。并且保持外部信息的完整性。在黑盒测试中会有以下的错误。
    1.发现一些没有实现的功能。
    2.在接口上,数据能不能正确的别接收,结果是否合理。
    3.性能上是否满足要求。
    4.所做出来的界面是不是很清晰、美观。
    6.2.2 白盒测试
    白盒测试,即结构化的测试,主要测试程序的内部组成。白盒测试与黑盒测试法不同,测试人员将程序视为一个透明的盒子,测试人员需要检查处理过程的中一些细微的程序,要求对程序的结构性做到一定程度的覆盖,以此来检验程序内部的一些组成。
    白盒测试法也不可能完全测试,也做不到对所有的路径都挨个测试一遍。例如要测试一个循环20次的嵌套if语句,循环体中有5条路径,这样的测试程序会产生很多种情况。如果每1ms完成一条路径的测试,测试完这样的一个程序需要花费很多的时间,因此可能做到完全覆盖。
    总之,无论哪种测试的方法,对于一个大的软件系统完全测试是不可能的,所以我们要找出更多更合适的方法进行测试,使得软件产品达到一定的质量标准的要求。
    6.2.3 单元测试
    单元测试(unit testing),对软件设计中的一些细小的结构单元进行测试。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的测试单元与其他部分相隔离的情况下进行测试。
    6.2.4 集成测试
    集成测试,即软件的联合测试。以单元测试为基础,把系统中所做出来的一些模块结合起来进行测试。
    6.3系统模块的测试
    6.3.1 登陆模块测试:
    在首次进入系统时,首次进入的是登陆注册的界面,在输入的信息有效的情况下会进入到首界面。如图6-1所示为系统的登录界面的测试:

    图6-1 管理员登录测试
    在当帐号密码出错时,系统会自动跳转到一个报错的页面如图6-2所示:

    图6-2 登录出错界面
    6.3.2 出库模块测试

    系统在进入主界面之后会有一个出库模块的入口,在进入到出库模块时,在输入的出库数量小于库存数量商品能够进行正常出库操作,查询库存结果随之更新。出库的数量比库存中的数量躲得情况下,会跳转一个出库出错的界面,提示库存数量不足。该模块之下的测试用例如下:
    库存中的信息如图6-3所示:

    图6-3 出库前库存信息
    以华为手机出库为例先存量为103,出库数量20(如图6-4所示):

    图6-4 出库信息图
    在进行完出库的操作之后,如图6-5所示:

    图6-5 出库后库存信息图

    出库数量超出库存数量,以铅笔为例,出库25个如图6-6所示:

    图6-6 铅笔出库信息图
    铅笔进行出库操作后库存中的信息图如图6-7所示:

    图6-7 库存不足出库后信息图
    用户信息模块测试:
    此模块的信息如图6-8所示:

    图6-8 用户信息图
    修改后信息图如图6-9所示:

    图6-9 修改后用户信息图
    6.4.3 用户信息模块测试结果
    当在操作中,进入到系统中的这个模块时,可以查看到本人的所有登录信息。可以对此模块中的所有的信息都进行修改操作,然后在对所作出的操作进行更新。

    总 结
    基于Web的仓库管理系统在之后的市场发展中有着非常广阔的前景,会对传统的一些理念造成巨大的冲击。本文是运用了计算机学科中的两项重要的技术即计算机网络技术和数据库技术出发,分析了Web数据库及JSP技术在本次仓库管理系统中的应用。本文的主要工作如下:
    1、探讨了数据库应用系统所经历的主机/服务器—浏览器/服务器模式,重点讨论了三层结构的工作原理及其特点,其中有中间件技术(CGI和API), Java技术、JSP技术、JScript技术、Mybatis技术、PowerDesiner技术等,而且还从一定的方面评价分析了其中的优缺点。
    2、探讨了怎么合理的运用在软件工程中所学习的一些基本原理去分析和设计实现仓库管理系统的过程。并对系统的开发原理、功能设计和模块的设计做出系统的分析。
    3、论文中详尽的介绍了仓库管理系统的总体框架和使用的主要技术、以及功能的实现。
    本文通过理论联系实际,对三层架构结构上的Web数据库的不同实现方法作了详尽的分析,同时使用JSP技术开发的一个仓库管理系统。

    致 谢
    衷心感谢我的指导老师,老师渊博深厚的学识,敏锐的眼光,精辟的见解,创新的开拓精神,严谨认真的治学风范,勤奋谦逊的工作态度,以及忘我的工作精神是我终身的学习楷模,导师对我耐心的指导和严格的要求使我的学习有了不断提高和许多收获,并将继续激励我在今后的工作中克服困难,迎接挑战。真诚的向尊敬的老师致以崇高的敬意!
    本人的论文得以完成,与所有的授课老师以及全体同学的启发和帮助是密不可分的,在此向他们表示衷心的谢意!
    特别要感谢我的家人对我学习期间的理解、支持与鼓励!
    随着科学技术的不断发展,计算机技术和网络技术也在日新月异地飞速发展,人们总是处在不断学习阶段,再加上作者水平有限,所以本文肯定存在不少错误和不尽如人意之处,欢迎广大老师和同学批评指正,在此深表感谢。

    参考文献

    [1] 郑人杰等编著,软件工程[M].清华大学出版社,1999
    [2] DAVID A. GUSTAFSON,Schaum’s Outline Series -Theory and Problems of SOFTWARE ENGINEERING[M].McGRAW-HILL Companies.Inc,2002
    [3] 唐东,《Web数据库开发进阶》,人民邮电出版社
    [4] Jeffrey D.Ullman.Fundamental Course of Database System[M].TsingHua Press,2001.
    [5] DAVID A. GUSTAFSON,Schaum’s Outline Series -Theory and Problems of SOFTWARE ENGINEERING[M].McGRAW-HILL Companies.Inc,2002
    [6] 张海藩.软件工程导论[M]. 北京:清华大学出版社,2003.
    [7] 李习文,李斌.库存控制与管理 [M].北京:机械工业出版社,2007:43-120
    [8] 周之英编著,现代软件工程[M].科学出版社,2000
    [9] 徐娟.网页制作实用技术[M].北京:清华大学出版社,2003:21-52.
    [10] 元燕辉等,《浏览器/服务器应用开发》,科学出版社

    附件1:外文文献(原文)
    Java Technical Description
    Java as a Programming Platform
    Java is certainly a good programming language. There is no doubt that it is oneofthe better languages available to serious programmers. We think it could potentially have been a great programming language, but it is probably too late for that. Once a language is out in the field, the ugly reality of compatibility with existing code sets in."
    Java was never just a language. There are lots of programming languages out there, and few of them make much of a splash. Java is a whole platform, with a huge library, containing lots of reusable code, and an execution environment that provides services such as security, portability across operating systems, and automatic garbage collection.
    As a programmer, you will want a language with a pleasant syntax and comprehensible semantics (i.e., not C++). Java fits the bill, as do dozens of other fine languages. Some languages give you portability, garbage collection, and the like, but they don’t have much of a library, forcing you to roll your own if you want fancy graphics or networking or database access. Well, Java has everything—a good language, a high-quality execution environment, and a vast library. That combination is what makes Java an irresistible proposition to so many programmers.
    Features of Java
    1.Simple
    We wanted to build a system that could be programmed easily without a lot of esoteric training and which leveraged today’s standard practice. So even though we found that C++ was unsuitable, we designed Java as closely to C++ as possible in order to make the system more comprehensible. Java omits many rarely used, poorly understood, confusing features of C++ that, in our experience, bring more grief than benefit.
    The syntax for Java is, indeed, a cleaned-up version of the syntax for C++. There is no need for header files, pointer arithmetic (or even a pointer syntax), structures, unions, operator overloading, virtual base classes, and so on. (See the C++ notes interspersed throughout the text for more on the differences between Java and C++.) The designers did not, however, attempt to fix all of the clumsy features of C++. For example, the syntax of the switch statement is unchanged in Java. If you know C++, you will find the transition to the Java syntax easy.
    If you are used to a visual programming environment (such as Visual Basic), you will not find Java simple. There is much strange syntax (though it does not take long to get the hang of it). More important, you must do a lot more programming in Java. The beauty of Visual Basic is that its visual design environment almost automatically provides a lot of the infrastructure for an application. The equivalent functionality must be programmed manually, usually with a fair bit of code, in Java. There are, however, third-party development environments that provide “drag-and-drop”-style program development.
    Another aspect of being simple is being small. One of the goals of Java is to enable the construction of software that can run stand-alone in small machines. The size of the basic interpreter and class support is about 40K bytes; adding the basic standard libraries and thread support (essentially a self-contained microkernel) adds an additional 175K.
    2. Object Oriented
    Simply stated, object-oriented design is a technique for programming that focuses on the data (= objects) and on the interfaces to that object. To make an analogy with carpentry, an “object-oriented” carpenter would be mostly concerned with the chair he was building, and secondarily with the tools used to make it; a “non-object-oriented” carpenter would think primarily of his tools. The object-oriented facilities of Java are essentially those of C++.
    Object orientation has proven its worth in the last 30 years, and it is inconceivable that a modern programming language would not use it. Indeed, the object-oriented features of Java are comparable to those of C++. The major difference between Java and C++ lies in multiple inheritance, which Java has replaced with the simpler concept of interfaces, and in the Java metaclass model. The reflection mechanism and object serialization feature make it much easier to implement persistent objects and GUI builders that can integrate off-the-shelf components.
    3. Distributed
    Java has an extensive library of routines for coping with TCP/IP protocols like HTTP and FTP. Java applications can open and access objects across the Net via URLs with the same ease as when accessing a local file system.
    We have found the networking capabilities of Java to be both strong and easy to use. Anyone who has tried to do Internet programming using another language will revel in how simple Java makes onerous tasks like opening a socket connection. (We cover networking in Volume 2 of this book.) The remote method invocation mechanism enables communication between distributed objects (also covered in Volume 2).There is now a separate architecture, the Java 2 Enterprise Edition (J2EE), that supports very large scale distributed applications.
    4. Robust
    Java is intended for writing programs that must be reliable in a variety of ways. Java puts a lot of emphasis on early checking for possible problems, later dynamic (run-time) checking, and eliminating situations that are error-prone.… The single biggest difference between Java and C/C++ is that Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data.
    This feature is also very useful. The Java compiler detects many problems that, in other languages, would show up only at run time. As for the second point, anyone who has spent hours chasing memory corruption caused by a pointer bug will be very happy with this feature of Java.
    If you are coming from a language like Visual Basic that doesn’t explicitly use pointers, you are probably wondering why this is so important. C programmers are not so lucky. They need pointers to access strings, arrays, objects, and even files. In Visual Basic, you do not use pointers for any of these entities, nor do you need to worry about memory allocation for them. On the other hand, many data structures are difficult to implement in a pointerless language. Java gives you the best of both worlds. You do not need pointers for everyday constructs like strings and arrays. You have the power of pointers if you need it, for example, for linked lists. And you always have complete safety, because you can never access a bad pointer, make memory allocation errors, or have to protect against memory leaking away.
    5. Secure
    Java is intended to be used in networked/distributed environments. Toward that end, a lot of emphasis has been placed on security. Java enables the construction of virus-free, tamper-free systems.
    In the first edition of Core Java we said: “Well, one should ‘never say never again,’” and we turned out to be right. Not long after the first version of the Java Development Kit was shipped, a group of security experts at Princeton University found subtle bugs in the security features of Java 1.0. Sun Microsystems has encouraged research into Java security, making publicly available the specification and implementation of the virtual machine and the security libraries. They have fixed all known security bugs quickly. In any case, Java makes it extremely difficult to outwit its security mechanisms. The bugs found so far have been very technical and few in number.
    From the beginning, Java was designed to make certain kinds of attacks impossible, among them:
    Overrunning the runtime stack—a common attack of worms and viruses
    Corrupting memory outside its own process space
    Reading or writing files without permission
    A number of security features have been added to Java over time. Since version 1.1, Java has the notion of digitally signed classesWith a signed class, you can be sure who wrote it. Any time you trust the author of the class, the class can be allowed more privileges on your machine.
    6. Architecture Neutral
    The compiler generates an architecture-neutral object file format—the compiled code is executable on many processors, given the presence of the Java runtime system. The Java compiler does this by generating bytecode instructions which have nothing to do with a particular computer architecture. Rather, they are designed to be both easy to interpret on any machine and easily translated into native machine code on the fly.This is not a new idea. More than 20 years ago, both Niklaus Wirth’s original implementation of Pascal and the UCSD Pascal system used the same technique.
    Of course, interpreting bytecodes is necessarily slower than running machine instructions at full speed, so it isn’t clear that this is even a good idea. However, virtual machines have the option of translating the most frequently executed bytecode sequences into machine code, a process called just-in-time compilation. This strategy has proven so effective that even Microsoft’s .NET platform relies on a virtual machine.
    The virtual machine has other advantages. It increases security because the virtual machine can check the behavior of instruction sequences. Some programs even produce bytecodes on the fly, dynamically enhancing the capabilities of a running program.
    7. Portable
    Unlike C and C++, there are no “implementation-dependent” aspects of the specification. The sizes of the primitive data types are specified, as is the behavior of arithmetic on them.
    For example, an int in Java is always a 32-bit integer. In C/C++, int can mean a 16-bit integer, a 32-bit integer, or any other size that the compiler vendor likes. The only restriction is that the int type must have at least as many bytes as a short int and cannot have more bytes than a long int. Having a fixed size for number types eliminates a major porting headache. Binary data is stored and transmitted in a fixed format, eliminating confusion about byte ordering. Strings are saved in a standard Unicode format.The libraries that are a part of the system define portable interfaces. For example, there is an abstract Window class and implementations of it for UNIX, Windows, and the Macintosh.
    As anyone who has ever tried knows, it is an effort of heroic proportions to write a program that looks good on Windows, the Macintosh, and 10 flavors of UNIX. Java 1.0 made the heroic effort, delivering a simple toolkit that mapped common user interface elements to a number of platforms. Unfortunately, the result was a library that, with a lot of work, could give barely acceptable results on different systems. (And there were often different bugs on the different platform graphics implementations.) But it was a start. There are many applications in which portability is more important than user interface slickness, and these applications did benefit from early versions of Java. By now, the user interface toolkit has been completely rewritten so that it no longer relies on the host user interface. The result is far more consistent and, we think, more attractive than in earlier versions of Java.
    8. Interpreted
    The Java interpreter can execute Java bytecodes directly on any machine to which the interpreter has been ported. Since linking is a more incremental and lightweight process, the development process can be much more rapid and exploratory.
    Incremental linking has advantages, but its benefit for the development process is clearly overstated. In any case, we have found Java development tools to be quite slow. If you are used to the speed of the classic Microsoft Visual C++ environment, you will likely be disappointed with the performance of Java development environments. (The current version of Visual Studio isn’t as zippy as the classic environments, however. No matter what language you program in, you should definitely ask your boss for a faster computer to run the latest development environments. )
    9. High Performance
    While the performance of interpreted bytecodes is usually more than adequate, there are situations where higher performance is required. The bytecodes can be translated on the fly (at run time) into machine code for the particular CPU the application is running on.
    If you use an interpreter to execute the bytecodes, “high performance” is not the term that we would use. However, on many platforms, there is also another form of compilation, the just-in-time (JIT) compilers. These work by compiling the bytecodes into native code once, caching the results, and then calling them again if needed. This approach speeds up commonly used code tremendously because one has to do the interpretation only once. Although still slightly slower than a true native code compiler, a just-in-time compiler can give you a 10- or even 20-fold speedup for some programs and will almost always be significantly faster than an interpreter. This technology is being improved continuously and may eventually yield results that cannot be matched by traditional compilation systems. For example, a just-in-time compiler can monitor which code is executed frequently and optimize just that code for speed.
    10. Multithreaded
    The enefits of multithreading are better interactive responsiveness and real-time behavior.if you have ever tried to do multithreading in another language, you will be pleasantly surprised at how easy it is in Java. Threads in Java also can take advantage of multiprocessor systems if the base operating system does so. On the downside, thread implementations on the major platforms differ widely, and Java makes no effort to be platform independent in this regard. Only the code for calling multithreading remains the same across machines; Java offloads the implementation of multithreading to the underlying operating system or a thread library. Nonetheless, the ease of multithreading is one of the main reasons why Java is such an appealing language for server-side development.
    11. Dynamic
    In a number of ways, Java is a more dynamic language than C or C++. It was designed to adapt to an evolving environment. Libraries can freely add new methods and instance variables without any effect on their clients. In Java, finding out run time type information is straightforward.
    This is an important feature in those situations in which code needs to be added to a running program. A prime example is code that is downloaded from the Internet to run in a browser. In Java 1.0, finding out runtime type information was anything but straightforward, but current versions of Java give the programmer full insight into both the structure and behavior of its objects. This is extremely useful for systems that need to analyze objects at run time, such as Java GUI builders, smart debuggers, pluggable components, and object databases.
    Java and the Internet
    The idea here is simple: users will download Java bytecodes from the Internet and run them on their own machines. Java programs that work on web pages are called applets. To use an applet, you need a Java-enabled web browser, which will execute the bytecodes for you. Because Sun is licensing the Java source code and insisting that there be no changes in the language and basic library structure, a Java applet should run on any browser that is advertised as Java-enabled. Unfortunately, reality has been different. Various versions of Netscape and Internet Explorer run different versions of Java, some of which are seriously outdated. This sorry situation made it increasingly difficult to develop applets that take advantage of the most current Java version. To remedy this problem, Sun has developed the Java Plug-in, a tool that makes the newest Java runtime environment available to both Netscape and Internet Explorer
    When the user downloads an applet, it works much like embedding an image in a web page. The applet becomes a part of the page, and the text flows around the space used for the applet. The point is, the image is alive. It reacts to user commands, changes its appearance, and sends data between the computer presenting the applet and the computer serving it.
    a good example of a dynamic web page—an applet to view molecules—that carries out sophisticated calculations. By using the mouse, you can rotate and zoom each molecule to better understand its structure. This kind of direct manipulation is not achievable with static web pages, but applets make it possible.

    附件2:外文文献(译文)

    Java技术介绍
    Java是一种程序设计平台
    Java是一种优秀的程序设计语言。对于一个名副其实的程序设计人员来说,使用Java无疑是一个好的选择。有人认为:Java将有望成为一种最优秀的程序设计语言,但还需要一个相当长的发展时期。一旦一种语言应用于某个领域,与现存代码的相容性问题就摆在了人们的面前。”
    Java并不只是一种语言。在此之前出现的那么多种语言也没有能够引起那么大的轰动。Java是一个完整的平台,有一个庞大的库,其中包含很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾回收等服务的执行环境。
    作为一名程序设计人员,常常希望能够有一种语言,它具有令人赏心悦目的语法和易于理解的语义(C++不是这样的)。与许多其他的优秀语言一样,Java恰恰满足了这些要求。有些语言提供了可移植性、垃圾回收等等,但是,没有提供一个大型的库,如果想要有奇特的绘图功能、网络连接功能和数据库存取功能就必须自己动手编写代码。Java这种功能齐全的出色语言,具有高质量的执行环境以及庞大的库。正是因为它集多种优势于一身,所以对于广大的程序设计人员来说有着不可抗拒的吸引力。
    JAVA的特性
    1.简单性
    人们希望构建一个无需深奥的专业训练就可以进行编程的系统,并且要符合当今的 标准惯例。因此,尽管人们发现C++不太适用,但在设计Java的时候还是尽可能地接近 C++,以便系统更易于理解。Java别除了C++中许多很少使用、难以理解、易混淆的特性。在目前看来,这些特性带来的麻烦远远大于带来的好处。
    的确,Java语法是C++语法的一个“纯净”版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。(请参看本书各个章节给出的C++注释,那里比较详细地解释了Java与C++之间的区别。)然而,设计者并没有试图清除C++中所有不适当的特性。例如,switch语句的语法在Java中就没有改变。如果熟悉C++就会发现可以轻而易举地将它转换成Java,
    如果已经习惯于可视化的编程环境(例如Visual Basic),就不会觉得Java简单了。Java有许多奇怪的语法(尽管掌握其要领并不需要很长时间),更重要的是,使用Java需要自己编写大量的程序。Visual Basic的魅力在于它的可视化设计环境几乎自动地为应用程序提供了大量的基础结构。而使用Java实现同样的功能却需要手工地编制代码,通常代码量还相当大。然而,已经有一些支持“拖放”风格程序开发的第三方开发环境。
    简单性的另一个方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB;再加上基础的标准类库和对线程的支持(基本上是一个自含的微内核)大约需要增加175KB。这是一个了不起的成就。然而,需要注意的是支持图形用户界面(GUI)的类库相当大。
    2.面向对象
    简单地讲,面向对象设计是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。用木匠来打一个比方,一个“面向对象的”木匠始终关注的是所制作的 椅子,第二位才是所使用的工具;一个“非面向对象的”木匠则首先考虑的是所用的工具。在本质上,Java的面向对象能力与C++是一样的。
    在过去的30年里,面向对象已经证明了自身的价值,一种现代的程序设计语言不使用面向对象技术简直让人难以置信。的确,Java的面向对象特性与C++旗鼓相当。Java与C++的主要不同点在于多继承,在Java中,取而代之的是简单的接口概念,以及Java的元类(metaclass)模型。
    反射机制以及对象序列化特性使得Java更加容易实现持久对象和GUI构建器(可以整合外来组件)。
    3.分布式
    Java有一个扩展的例程库,用于处理像HTTP和FTP这类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便利程度如同访问本地文件系统一样。 人们已经看到Java的网络能力强大且易于使用。任何曾经试图使用其他语言进行网络编程的人都会惊呼Java竟然把类似打开socket连接这类繁重的任务都变得如此简单。
    另外,远程方法调用机制使得分布式对象之间可以进行通信。 现在有一种独立的体系结构,Java 2企业版(J2EE ),它支持大规模的分布式应用。
    4.健壮性
    Java的设计目标之一在于使用Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了有出错倾向的状态……
    Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。这个特性非常有用。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。至于第二点,对于曾经花费几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性。
    如果曾经只使用过Visual Basic这类没有显式指针的语言,就会感觉这么说似乎有些小题大做。然而,C程序员就没有这样幸运了。他们需要利用指针来存取串、数组、对象,甚至文件。
    在Visual Basic中,根本不必使用指针来访问这些实体,也不必关心有关内存分配的问题。另一方面,在没有指针的语言中,许多数据结构很难实现。Java具有双方的优势。它不需要使用指针构造诸如串、数组这样的结构。如果需要,也能够具有指针的能力,如链表。Java绝对是安全的,其原因是永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄漏。
    5.安全性
    Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。 使用Java可以构建防病毒、防墓改的系统。事实证明这是正确的。在Java开发工具箱启用后不久,普林斯顿大学的一些安全专家们发现了在Java 1.0中的某些安全特性方面存在着一些非常隐蔽的bug, Sun Microsystems大力支持对Java的安全性的研究,制定了供人们使用的规范,实现了虚拟机和安全库,并迅速地处理了所有已知的安全bug。在任何情况下,蒙骗Java的安全机制都是十分困难的。现在,发现bug所需的技术性越来越强,数目越来越少。 从一开始,Java就被设计成能够防范各种袭击,包括:
    ·禁止运行时堆栈溢出。例如,蠕虫等病毒常用的袭击手段。
    ·禁止在自己的处理空间之外破坏内存。
    ·未经授权禁止读写文件。许多安全特性相继不断地被加入Java中。
    自从Java 1.1问世以来,Java就有了数字签名类(digitally signed class)的概念(请参看卷II)。通过数字签名类,可以确定类的作者。如果信任这个类的作者,这个类就可以在你的机器上拥有更多的权限。
    来自微软的基于ActiveX技术的竞争代码传输机制,其安全性完全依赖于数字签名。这显然是不够的,因为微软自身产品的任何用户都可以证实,来自知名提供商的程序会崩溃并对系统产生危害。Java的安全机制比ActiveX要强得多,因为它是在应用程序运行时加以拉制并制止恶意性破坏的。
    6.体系结构中立
    编译器生成一个体系结构中立的目标文件格式,这是一种编译过场代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上被解释执行,而且还可以迅速地翻译成本地机器的代码。这并不是什么新的思想。20多年以前,Niklaus Wirth最初实现的Pascal以及UCSD Pascal系统都使用了这种技术。当然,解释字节码肯定要比全速地运行机器指令慢很多。所以说,这是不是一个好的思想还很难讲!然而,虚拟机有一个选项,它可以将执行最频繁的字韦码序列翻译成机器码,这一过程被称为即时编译。这一策略已经被证明十分有效,致使微软的.NET平台也依赖于虚拟机。虚拟机还有一些其他的优点。虚拟机可以检测指令序列的行为,以增强其安全性。有些程序甚至能够快速地生成字节码,并动态地增强所运行程序的处理能力。
    7.可移植性
    与C和C++不同,Java规范中没有“依赖具体实现”的地方。塞本数据类型的大小以及有关算法都做了明确的说明。例如,Java中的int永远为32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固足的大小,们除J代消移祖盯竿八大油a’i土女IWJ*I。-ml R77数据以固定的格式存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。作为系统的组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window类给出了在UNIX, Windows和Macintosh环境下的不同实现。
    凡是尝试过的人都知道,要编写一个在Windows, Macintosh和10种不同风格的、在UNIX上看起来都不错的程序有多么困难。Java 1.0就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具箱。遗憾的是,花费了大量的心血,却构建了一个在各个系统上都难以让人接受的库(而且,在不同平台的图形实现中有不同的bug)。不过,这毕竟是个开端。对于许多应用问题来说,可移植性比花枝招展的用户界面更加重要。而且这些应用程序从Java的早期版本中获益匪浅。现在,用户界面工具箱已经完全被重写了,不再依赖于主机的用户接口。现在的Java版本比早期版本更加稳定,更加吸引人。
    8.解释型
    Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个更加增量且简便的过程,所以开发过程也变得更加快捷,更加具有探索性。增量链接有其优势,但给开发过程带来的好处显然是言过其实了。在任何情况下,都会觉得Java开发工具的速度相当慢。如果习惯于经典的Microsoft Visual C++环境的速度,就会对Java开发环境的性能感到失望。(但是,Visual Studio的当前版本不像经典的环境那样快捷。无论用什么语言编写程序,都需要向老板申请一台速度更快的计算机,以便运行最新的开发环境。)
    9.高性能
    尽管对解释后的字节码性能已经比较满意,但在有些情况下却需要更加高效的性能。字节码可以(在运行时刻)被快速地翻译成运行该应用程序的特定CPU的机器码。如果使用解释器执行字节码,根本就不可能用术语“高性能”。然而,在许多平台上,还有另一种编译形式,这就是即时编译器(JIT编译器)。它的基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来。在需要的时候重新调用。由于这种方式只需要进行一次解释,从而极大地提高了常用代码运行速度。虽然,即时编译器仍然比真正的本地代码编译器慢一些,但是对某些程序来说,能够提高10倍乃至20倍的速度,而且几乎在任何情况下,都比解释器的速度快得多。这个技术始终在不断完善着,或许有一天它能够达到传统编译系统所无法匹敌的性能。例如,即时编译器可以监视哪些代码被频繁地执行,并对其进行优化,以提高程序的运行速度。
    10.多线程
    多线程可以带来更好的交互响应和实时行为。 如果曾经使用过其他语言编写多线程的应用程序,就会对Java多线程处理的便捷性惊叹不已。
    只要操作系统支持,Java中的线程就可以利用多个处理器。在底层,主流平台的线程实现机制各不相同,Java并没有花费太大的力气对此实现平台无关性。在不同的机器上,只是调用多线程的代码完全相同;Java把多线程的实现交给了底层的操作系统或线程库来完成。(有关线程的详细内容将在卷II中介绍。)尽管如此,多线程的简单性是Java成为颇具魅力的服务器端开发语言的主要原因之一。
    11.动态性
    从各种角度看,Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变童,而时客户端却没有任何影响。在Java中找出运行时刻类型信息十分直观。当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。一个很好的例子是:从Internet上下载代码,然后在浏览器上运行。在Java 1.0中,不能直接地获取运行时类型信息,而Java的当前版本允许程序员知晓对象的结构和行为。这对于必须在运行时分析对象的系统来说非常有用。这些系统有:Java GUI构建器、智能调试器、可插入组件以及对象数据库。
    微软曾经发布了一个叫做J++的产品,它与Java有许多共享的机制。与Java一样,J++是由虚拟机来执行的,该虚拟机与执行Java字节码的Java虚拟机相互兼容,但是,当与外部代码有接口时就会出现很多不同之处。基本语言的语法与Java几乎一样。只是除了与Windows API的接口之外,还增加了一些可能具有一定实用性的语言结构。Java和J++不仅共享通用的语法,它们的塞本类库(串、实用程序、联网、多线程、数学函数等等)从本质上说也是一致的。然而,图形库、用户界面、远程对象存取的方式则完全不同。为此,微软不再支持J++,取而代之的是另一种被称为C#语言。C#与Java有很多相似之处,然而使用的却是完全不同的虚拟机。甚至还有一种J#语言可将J++的应用迁移到使用C#的虚拟机上。
    Java与Internet
    这里的思想很简单:用户将从Internet下载Java字节码,并在自己的机器上运行。在网页中运行的Java程序称为applet。为了使用applet,需要一个启用Java的Web浏览器来执行字节码。因为Sun公司只负责发放Java源代码的许可证,并坚持不允许对语言和基本类库的结构做出任何修改,因此,Java的applet应该可以运行在任何启用Java浏览器上。遗憾的是,实际情况并非如此。
    各个版本的Netscape(网景浏览器)和Internet Explorer (IE浏览器)运行着不同版本的Java,其中有些早已过时。这种糟糕的情况导致更加难于利用Java最新版本来开发applet。为了摆脱这种局面,Sun开发了Java插件。这就使得Netscape和Internet Explorer都可以利用最新的Java运行时环境。 用户下载一个applet就如同在网页中嵌入一幅图片。applet成为了页面的一部分。文本环绕着applet所占据的空间周围。关键一点是图片为活动的。它可以对用户命令做出响应,改变外观,在运行它的计算机与提供它的计算机之间传递数据。 applet显示了分子结构,这将需要相当复杂的计算。
    在一个网页中,可以利用鼠标进行旋转,调整焦距等操作,以便能够更好地理解分子结构。用静态网页将无法实现这种直接操作,而applet却可以达到此目的。可以借助applet在网页上增加按钮和输人框。但是,通过拨号连接下载这样的applet速度相当慢。除此之外,还可以使用Dynamic HTML, HTML表单和某种脚本语言(如JavaScript)完成这类操作。当然,早期的applet主要用于动画,如大家熟悉的旋转球、跳动的卡通字符、疯狂。

    完整毕业设计下载:https://www.huzhan.com/code/goods344411.html

    展开全文
  • 数据仓库发展趋势

    2011-08-21 11:45:07
    从这个角度看,决策支持系统分为两类:结构化数据的数据仓库和非结构化数据的知识管理系统。非结构化数据包含非结构化文档、图像、视频、音频和空间数据等。   数据可视化 可视化趋势:更多图表类型;交互可视化...
  • 企业信息化已成为全球化的发展趋势。以企业资源计划E即 (EnterpriseReso盯CePlanning)为代表的管理数字化是企业信息化技术特点的重要体现。相当规模的企业更是将信息化管理作为一项重要任务常抓不懈。 ERp...
  • 数据处理现状:当前基于Hive的离线数据仓库已经非常成熟,数据中台体系也基本上是围绕离线数仓进行建设。但是随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一...
  • 一、数据的仓库的产生和发展  数据仓库的出现和发展是计算机应用到一定阶段的必然产物。经过多年的计算机应用和市场积累,许多商业企业已保存了大量原始数据和各种业务数据,这些数据真实地反映了商业企业主体和...
  • 1.2.1传统企业库存管理系统存在的问题 1 1.2.2现代企业库存管理系统的特点 1 1.3可行性分析 2 1.4技术方案 3 1.4.1系统开发工具 3 1.4.2实施步骤 5 第二章 系统分析 7 2.1系统需求分析 7 2.1.1摘要 7 2.1.2系统的...
  • 基于Java的仓库管理系统

    千次阅读 多人点赞 2019-01-03 20:40:16
    获取项目源文件,联系Q:1225467431,指导其它毕设,课设 摘 要 现如今,许多企业存在的问题:信息化不足,计算机使用率不高,大量的日常工作皆是手工处理,因此工作效率低,...仓库管理系统就是对货物和信息以及金...
  • 整个系列的文章从银行数据仓库架构,ETL,模型,数据管理以及几大方面应用介绍了数据仓库,可以让大家对银行数据仓库有个概要的了解。 前文回顾: 《银行数据仓库的系统架构是什么?看这篇足矣》 《深度分析|...
  • 在当年看来是先进时髦的,在仓库物流中心里哪些操作可以采用系统指导、哪些工作搭配人工处理、KPI应该监控哪些关键点,都由国外软件的导入慢慢普及到整个市场,也让一个专业仓储管理系统的神秘面纱慢慢被揭开了来。...
  • WMS发展历史与趋势

    2021-08-11 00:55:16
    上海音锋穿梭车产品介绍导语大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K。知识星球*原创电子书*深海社区*微信群01中国WMS发展相较于国外在1980年开始发展的...
  • 仓库管理软件

    2015-06-16 21:47:00
    1)概述了物流管理的概念、产生背景与发展历程,详细介绍了我国物流管理的实际状况与发展趋势,分析了物流管理系统的实际意义,展望了物流仓储管理系统的未来前景。 2)采用当前流行的Microsoft公司的SQL Server...
  • 数据仓库最早是90年代流行于美国,Bill Inmon最先提出了数据仓库的概念,其专著《建立数据仓库(第一版)》明确指出数据仓库是一个具有如下特征的数据的集合:面向主题的、集成的、非易失的且随时间变化 ,同时是为...
  • 最近Spring各个团队的大佬在一起探讨了一下2021年Spring项目的新东西和预期的变化。胖哥就赶紧整理出来分享给大家,希望大家能够及时抓住未来的技术趋势。Spring Boot目前S...
  • 谈及数据库的发展历史,就不得不提及三位数据库领域的开拓者,分别是Frank、Micheal和JimGray,他们为数据库理论奠定了坚实的基础,都获得了图灵奖。早在1972年,Micheal最早提出了Ingres数据库,于2014年获得图灵奖...
  •  综合我国流通企业的管理向网络化、信息化方向发展的现状,以及对仓储管理的精细化要求,仓储管理系统(WMS)将向以下几个方向发展:  1、一体化  一体化企业业务管理系统、WMS一体化应用,能提高对客户订单的...
  • 实时数据仓库发展、架构和趋势

    千次阅读 2021-04-02 09:30:59
    当前基于 Hive 的离线数据仓库已经非常成熟,数据中台体系也基本上是围绕离线数仓进行建设。但是随着实时计算引擎的不断发展以及业务对于实时报表的产出需求不断膨胀,业界最近几年就一直聚焦并探索于两个相关的热点...
  • 而我们作为大数据的践行者,在这个“多智时代”如何才能跟上大数据的潮流,把握住大数据的发展方向。 前言 大数据起源于2000年左右,也就是互联网高速发展阶段。经过几年的发展,到2008年 Hadoop 成为 Apache 顶级...
  • 随着社会不断发展与进步,档案分类越来越细化,涉及的内容越来越丰富,信息量和数量越来越大。全国有数以万计的大大小的档案馆,其中有许多非常重要的机要档案,其历史和社会价值非常高,如何做到档案资料的长期完好...
  • 数据仓库是数据库的发展方向之一, 对企业管理和决策支持起着重要的辅助作用。简要介绍了数据仓库和元数据的基本概念,重点阐述了元数据的概念、作用、CWM标准、来源,并就元数据具体应用进行了初步的研究和探讨
  • 这些技术看起来都紧接潮流,但如何与企业业务贴合,或者让企业在原有的赛道上提高名次或者拓宽赛道,至今烟云环绕不明方向。 不但概念与技术难以甄别,而且企业推进智能制造领域经验十分匮乏,许多制造型企业对于...
  • 未来ERP软件的发展趋势是什么?

    千次阅读 2018-07-31 09:44:56
    随着社会的发展,电商业的繁荣,各企业的需求也越来越多,对于ERP软件的要求也越来越多,那么什么样的ERP软件才能被大家所喜欢,ERP软件发展趋势是什么?我来一一给大家分析。  现有ERP系统的局限性:  1.ERP不能...
  • 整个系列的文章从银行数据仓库架构,ETL,模型,数据管理以及几大方面应用介绍了数据仓库,可以让大家对银行数据仓库有个概要的了解,但在各子系统设计,技术方面没有太深入介绍,后续也会陆续补充。作为这个系列...
  • 数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务,数据仓库的建设也是“数据智能”中必不可少的一环。本文将从数据仓库的简介、经历了怎样的发展、如何建设、架构演变、应用案例以及实时数仓与离线...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,475
精华内容 13,790
关键字:

仓库管理的发展方向