第1章 绪论
1. 开发背景
随着中国经济的快速发展,也给中国的物流行业带来了巨大的机遇,同时也带来了挑战。目前国内物流市场的竞争越来越激烈,竞争格局和形势也发生了巨大的变化。
中国近期开展的宏观措施,促使原来靠低附加值产品和低成本的生产贸易企业逐步淘汰出市场,从而引发大批的生产企业撤到内地和国外其它低成本地区,这样也给我们的物流行业带来了比较大的市场冲击。原来单纯靠低价获取的客户资源正在逐步的萎缩,导致了低端物流市场份额的大幅下降。另外,国内高油价和其他运输成本的上涨,也使低成本策略受到了前所未有的压力。因此,物流企业不得不重新调整自己的市场定位。但是,当面对着庞大的高附加值产品的物流市场时,我们的物流企业却面临着尴尬的局面。因为以往单纯的低价竞争策略,已经无法完全满足目前客户的要求。因为生产成本的上涨和供应链管理要求的日益提高,现在的生产企业,已经不能够采取以前传统的,单纯靠降低运输费用的手段,来解决供应链管理中的成本问题了。现在很多企业特别是一些优质企业,都在采取ERP的计划管理和三个JIT(即采购JIT、送料JIT和配送JIT),使企业采购、生产支持、物流配送从战略上一体化,以降低库存、加快资金周转、提高市场应变能力,从而达到降低供应链整体成本的目的。但是这些都必须要求其物流供应商,具备非常专业的信息化管理技术,以及高水平的物流管理能力,才能满足新形势下的物流需求。
因此物流企业只有迅速提升自身的信息化管理水平和物流服务质量,才能够适应目前物流市场的竞争环境。但是对于大多数物流企业来说,建立一套属于自己的物流信息化管理系统,是一份非常遥不可及的事情。虽然现在很多物流企业都已经认识到了物流信息化管理的重要性,但是对于外资物流企业动则几百万的研发费用以及大量的技术和人力投入,一般物流企业都没办法承受。也有部分物流企业为了应付客户要求和内部的临时使用,在市场上低价购买,或者是找一些非专业技术的公司合作开发的一些物流软件,但是由于技术低下、功能不适用和升级困难等因素,根本无法实现真正意义上物流信息化管理,几乎形同虚设。
基于目前物流行业面临的问题,B2BWL物流网在物流行业协会和相关主管部门的支持下,进行了大量的资金和技术、人力的投入,耗费三年的时间,推出了目前国内最专业的第三方物流管理系统-e9物流管理系统。此项目可以使需求企业,在最短的时间内,以最便捷的方式和最低的成本,建立起一套属于自己的,专业的物流信息化管理体系。并且还可以通过B2B专业网站,在互联网上实现企业品牌和服务推广,获取优质客户信息和资源,以及整合物流采购资源等物流B2B服务。企业只需支付每月相对很少的费用,就可以获得行业一流的专业物流管理系统,以及享有终身免费的系统维护和升级、物流管理培训等专业技术服务。从而改变了目前国内物流企业信息化技术相对落后的局面,为优化国内供应链管理体系,整合物流资源,降低物流成本提供可行性的专业解决方案。
2. 数据库基础
2.1 数据库现状
数据库技术自产生以来,发展到今日已形成了坚实的理论基础和独特的数据处理技术,并获得了广泛的应用。数据库技术是信息社会的重要基础之一,是计算机科学领域中发展最为迅速的分支。数据库技术是一门综合性的技术,它涉及到操作系统、数据结构、算法设计和程序设计等知识,因此,在计算机科学中,将数据库技术作为专门的学科来研究和学习。从应用的角度来看,计算机用户需要掌握数据库的理论基础,以其来指导应用实践。
数据库学科的研究范围十分广泛,概括的讲可以分为三个主要领域。
数据库管理系统软件的研制:数据库管理系统(DBMS)是数据库系统的基础,研制DBMS 的基本目标是扩大功能、提高性能、增强可用性。研制以DBMS 为核心的一组互相可联系的软件系统已成为当前数据库软件产品的方向,这些在DBMS 基础上运行的软件有:数据通讯软件、表格软件、数据字典、报表书写、图形系统等。
数据库设计: 在数据库管理系统的支持下,按照某企业某组织的需求,设计一个结构良好的,使用方便,效率较高的数据库及其应用系统,是数据库设计的主要任务。在这个领域内,主要研究课题是设计方法学;数据模型和数据建模方法的研究;数据库设计计算机辅助方法的研究;数据库设计规范和标准的研究,以及数据库设计工具的开发等。
数据库理论:数据库理论研究主要集中与关系的规范化理论、关系型数据库理论、数据库与人工智能结合、数据库与逻辑、逻辑演绎和知识推理等方面,此外,演绎数据库、面向对象数据库、知识库系统的研究都是研究方向。
2.2 数据库系统介绍
一般来说数据库系统由计算机软、硬件资源组成。它实现了有组织地、动态地存储大量关联的数据,方便多用户访问,它与文件系统的重要区别是数据的充分共享、交叉访问及应用的高度性。通俗地讲,数据库系统可以把日常一些表格、卡片等数据有组织地集合在一起,输入到计算机,然后通过计算机处理,再按一定要求输出结果。所以,对于数据库来说,主要解决了三个数问题。第一,有效地组织数据这里主要是指对数据进行合理设计,以便计算机存取;第二,将数据方便地输入到计算机中;第三,根据用户的要求将数据从计算机中抽取出来。
数据库技术发展到今天,可说是较为成熟,但究竟什么是数据库还未有一个被普遍接受的定义。这里,从不同角度给出的定义或描述,列举几例:
数据库是团体用户的团体数据。
数据库是组织、存储、管理数据的仓库。
数据库可以被定义为一个基于某种数据模型存储起来的、为某个特定组织的多种应用服务、并具有尽可能小的冗余度的相关的数据集合。其数据结构于使用数据的程序,对数据的增添、修改和检索,由系统进行统一的控制,系统提供的数据模型也有利于将来应用的扩展。
我们将以上几种定义概括起来,不难发现一个数据库就是一个可共享的数据集合,用于满足不同的信息需求,并且集合中的数据彼此之间有相互联系。
2.3关系型数据库
数据模型是按计算机系统的观点对数据建模,用于机器世界。它需要有严格的形式化定义,并且常常会附加上一组或规定。一个数据模型是表达(或描述)一个组织内有关实体、事件、活动以及它们之间联系的数据信息。
数据库技术中一般有三种传统的数据模型。它们是层次模型、网状模型和关系模型。其中,关系模型是最重要的模型。与层次模型和网状模型相比,关系模型具有多方面的优势。关系型数据库是由美国IBM公司的E.F.Codd提出的,奠定了关系型数据库的理论基础。该数据库是当今世界上最常用的数据库类型,本论文主要介绍关系型数据库。
关系模型就是用表格数据来表示实体和实体间的联系。这种表格就是二维平面表。在层次模型和网状模型中,数据结构中的各节点只保存实体本身的信息,实体间的联系是通过指针来实现的。而在关系模型中,只有表格没有指针,表格中既存放实体本身的信息,也存放实体间的联系。
对应于一个关系模型的所有关系的集合称为关系数据库。关于关系数据库现在总结如下:
关系的列称为属性,不同的列有不同的名字,但不同的列出自同一个值域中。同列中的各分量具有相同的数据类型,并在同一值域中。列的次序是任意的,可随意交换。关系的行称为元组,任意两行不能完全相同。元组的每一分量都是不可再分的数据项。行的次序是任意的,可以随意交换。关系有一个主键来唯一标识各个元组。
2.4数据库管理系统
数据库管理系统DBMS是数据库的核心软件,是数据处理技术各种先进思想的汇集。它的主要功能有:
(1)数据的存储、获取和修改
一个数据库可被许多用户共享。因此,DBMS必须提供多个用户视图,允许用户方便有效地存储、获取和修改他们的数据。
(2)数据字典
数据字典是与一个组织相关数据的所有信息的储藏所。数据字典通常包含数据库完整性定义,安全保密定义,存取路径的定义等。DBMS必须维护一个用户可访问的数据字典,这一服务可由DBMS自身的一个子集提供,或由一个的软件包提供。
(3)安全机制
数据库中的数据必须受到保护,免遭由于意外或误用而引起的破坏。DBMS的安全机制用于控制数据的访问(如用户口令、身份标识、用户级别、存取权限等),并且定义允许用户执行什么样的操作(例如只读或可读可写)。
(4)数据完整性
数据完整性就是数据的正确性、真实性、客观性。且数据失真,其完整性就受到了破坏。DBMS必须提供工具协助用户维护他们的数据的完整性。在DBMS及其软件接口中可设计多种编辑检查和完整性约束。
(5)并发控制
由于一个数据库是由多个用户共享的,两个或更多的用户可能同时试图访问相同数据。如果两个用户并发地试图修改同一数据记录,就有可能产生错误结果,因为两个事务处理会相互干扰。DBMS中必须有防护措施来避免或克服这种干扰。
DBMS实现并发控制的基本方法是将被操作的数据进行封锁,封锁单位的大小将会影响到并行度的高低。封锁的单位越大,开销越小,但并行度就越低;反之封锁的单位越小,开销越大,但并行度却越高。因此,在决定封锁单位的大小时,应考虑到开销和并发度这两方面的因素。
(6)故障恢复
数据库恢复是DBMS的重要任务之一。由各种各样的系统失效造成的数据库损坏或丢失是不可避免的,其原因是多方面的,例如:用户操作失误,硬件出错,不正确或不合法的数据,程序出错,以及自然灾害等。由于数据库在现代管理信息系统中有着举足轻重的地位,DBMS必须提供机制,在数据库丢失或损坏之后迅速而准确地恢复数据库。
DBMS应提供以下工具来恢复数据库:
(1)建立副本,提供整个数据库的周期性副本拷贝。
(2)建立日志,提供用于日后审查的有关事务处理和数据库变更的依据。
(3)设置检查点,DBMS定期挂起所有处理,并使数据库的文件和日志同步。
(4)恢复或重启动工具,DBMS将数据库恢复到一个正确的状态,并重新开始处理事务。
第2章 系统分析
1. 功能需求
“现代流通企业综合管理系统”是专门针对中小型企业各项管理业务而开发的通用性很强的管理系统。该软件集进、销、存、决策于一体,同时还集成了报表打印、查询统计等多种实用的功能,真正实现了进、销、存一体化。本软件采用微软可视化编程工具Myeclipse 开发,软件的界面美观大方,系统运行稳定。该软件有以下特点。
功能强大:该软件以中小型企业为应用对象,结合中小型企业当前和未来发展的管理需求提供实用先进的应用模式,实现多商品、多规格、大范围复杂的经营理念,为经营决策提供及时准确的信息,真正面向市场提高企业效益。
实用高效:建立规范的业务管理模式,使业务人员从繁忙的手工开票、统计报表工作中解脱出来,提高工作效率,减少人为差错。
用户界面操作简洁:系统的每个功能都经过精心设计,充分考虑到使用人员计算机知识较少的特点,全部使用业务人员最熟悉的业务流程、提示用语和操作方式,即使不熟悉此软件的人也能熟练使用本软件完成业务处理。
系统性能稳定:严格按照规范的软件工程管理,充分利用面向对象技术,采用SQL为后台数据库,利用Windows系统的内存管理和多任务特性,从技术上保证了系统的稳定性、可靠性和先进性。
2.系统需求与分析
2.1 角色以及功能
系统内各角色以及功能表2-1
角色类别 | 角色完成的功能 | 功能描述 |
用户登录 | 用户登录 | 对用户输入的用户名,密码进行验证,验证通过后,该用户可以使用物流管理系统中自己拥有权限的那部分功能,否则拒绝使用。 |
超级管理员 | 收货管理 | 完成收货登记(查找已发货厂商,添加未登记厂商),到货确认,损货登记,未估价货票 |
角色类别 | 角色完成的功能 | 功能描述 |
票务管理 | 费用估算,货票充减,少收款和赔款 | |
配送管理 | 车辆登记,司机登记,省级运输,市场配送 | |
财务管理 | 预收货款,提货收费,提货赔付,少收款登记,核算 | |
市场管理 | 少收款登记,退货登记 | |
查询统计 | 货票查询,各项统计 | |
基本资料 | 操作员,用户权限,【运费运时调整】,修改密码 | |
经理 | 收货管理 | 完成收货登记(查找已发货厂商,添加未登记厂商),到货确认,损货登记,未估价货票 |
票务管理 | 费用估算,货票充减,少收款和赔款 | |
配送管理 | 车辆登记,司机登记,省级运输,市场配送 | |
财务管理 | 预收货款,提货收费,提货赔付,少收款登记,核算 | |
市场管理 | 少收款登记,退货登记 | |
查询统计 | 货票查询,各项统计 | |
基本资料 | 操作员,用户权限,【运费运时调整】,修改密码 | |
收货员 | 收货管理 | 完成收货登记(查找已发货厂商,添加未登记厂商),到货确认,损货登记,未估价货票 |
查询统计 | 货票查询,各项统计 | |
基本资料 | 修改密码 | |
市场业务员 | 市场管理 | 少收款登记,退货登记 |
查询统计 | 货票查询,各项统计 | |
基本资料 | 修改密码 |
主程序界面:主程序也是程序控制的核心,操作权限、程序功能调用等都要通过主程序实现。另外,主程序还要显示系统时间、操作状态等功能。主程序通过菜单和工具栏两种方式调用系统。
商品信息:商品信息模块是录入商品基本信息的模块,是进行入库、销售及其他操作的基础。该模块中,除了基础信息的添加、修改、删除等操作外,还支持查找定位的功能。
2.3 需求分析
随着国际贸易自由化、世界经济一体化的趋势日益加强,流通企业的国际化经营已经成为不可逆转的时代潮流。我国加入世贸组织以后,正在引入先进的经营管理技术、服务理念和营销方式以及统一的国际运行规则,伴随着外商逐步进入中国流通产业,中外企业之间必然在易于标准化的领域展开激烈的竞争。中国流通企业最后有多大的胜率,不取决于外商的投资规模和进入速度,而取决于我们的改革力度和自身竞争力水平。
据初步统计,目前全国共有中小企业近1000万个,并且每年以80%的速度增长。我国加入WTO后,企业面临着前所未有的机遇与挑战,企业的高速发展更要求企业管理水平的不断完善、提高,因此,迅速提高企业的经营管理水平、掌握先进的管理方式是企业迫在眉睫的事情,是企业在激烈的市场竞争中稳步发展的基础。在新的市场环境下,用户对软件需求的个性化越来越强烈。企业信息化发展到今天,一些市场上的销售管理软件已经无法完全满足企业高速发展的需要。企业面对国际、国内激烈的竞争和挑战,必须及时进行管理变革,创新适合自身发展的管理模式,从而增强实力、主宰市场,在发展和竞争中保持优势。因此,传统的信息化发展思路已经不能适应时代发展的需要,必须与时俱进,开发适应时代要求、满足企业发展需要的新产品。
开发人员正是在这样的背景条件下开发了现代流通企业综合管理系统软件。本软件以 SQL为后台数据库,专门针对我国中小型企业经营管理而开发的现代流通企业综合管理软件,适用于商品销售企业进行批发及零售进销存管理。该产品是一套通用的、适用于各层次使用的综合管理软件,是集产品的进、销、存三位于一体、集中管理使用单位物流系统的一种新概念软件,是为企业量身定制的以客户为中心,实现市场、销售、服务协同工作的管理平台。那么,无可置疑的,现代流通企业综合管理系统是企业用户和商业用户进行内部产品管理时的首选软件。
乐万家商贸公司是一所集零售与批发为一体的流通企业,建筑面积1500平方米,随着企业规模的不断扩大,新进商品仍以较大的幅度增加。从1996年开始,引入了销售的计算机化管理。但是随着网络技术的发展,计算机应用水平的提高和企业规模的不断扩大,原来系统的时效性、数据的正确性、操作的方便性都存在很大程度的不足,已经影响到系统的正常使用。
2.4 用户信息分析
通过对用户的调查分析,读者已经了解了乐万家公司手工操作的业务情况和用户对系统的一些要求,接下来将乐万家超市的业务情况进行系统分析,考虑到手工系统和计算机管理系统的交互性、复杂性和计算机本身的一些特点,在开发现代流通企业综合管理系统时不能简单地对手工系统进行模仿,而应根据物流和信息流的流向和顺序,全面考虑对业务数据的组织、分类和汇总的方法。通过逐步确认各主要数据流的范围和数据处理的频度,先对手工系统问题分析解决,然后构建出系统的业务流程图和系统结构图。
问题分析与解决的基本思路是:
(1)信息中均采用简码作为操作码,商品销售时,只需输入商品简称,即可显示商品列表,选择客户购买商品;
(2)在库存提示区域显示商品库存情况,如果操作员输入数量超过库存数量将提示;
(3)计算、统计工作全部由程序自动完成。
基本信息管理模块包括:商品信息管理、客户信息管理、供应商信息管理、员工信息管理、银行账户管理等。
商品信息管理主要完成商品名称、拼音简码、编号、规格、产地、批发价格等信息的设定。
商品基础信息的建立,可以达到如下目标:
可以通过为商品设定拼音简码,提高商品信息的录入速度;
自动区分同名商品:
为每种商品制定批发、零售价格,对批发商和零售商使用不同价格;
通过设定商品的出厂日期和保质期,有效管理商品是否过期。
客户信息管理主要完成客户编号、客户名称、客户地址、所属地区、联系方式、联系地址等信息的设定。
客户基础信息的建立,可以达到如下目标:
可以通过为客户设定拼音简码,提高客户信息的录入速度;
记录客户的各种联系方式及联系人;
记录客户银行账户信息。
2.5数据字典
重要数据及其简要描述如表2-1、表2-2、表2-3所示。
表2-2数据项
名称 | 说明 |
商品编号 | 惟一标识一种商品,形式如:SP00001 |
员工编号 | 惟一标识一位员工,形式如:YG00001 |
客户编号 | 惟一标识一个客户,形式如:KH00001 |
供应商编号 | 惟一标识一个供应商,形式如:GYS00001 |
销售票号 | 以此记录一次销售登记。惟一标识每次销售登记,形式如:XS00001 |
入库票号 | 以此记录一次入库登记。惟一标识每次入库登记,形式如:RK00001 |
销售退货票号 | 以此记录一次销售退货登记。惟一标识每次销售退货登记,形式如:TH00001 |
入库退货票号 | 以此记录一次入库退货登记。惟一标识每次入库退货登记,形式如:RT00001 |
操作员 | 管理员,使用系统、拥有系统账号的人 |
仓库名称 | 惟一标识某个仓库 |
库存上限 | 商品数量的最高限 |
库存下限 | 商品数量的最低限 |
损溢数量 | 库存盘点出现的与实际不符的数量 |
管理员权限 | 由最高权限用户分配给管理员使用此软件的权限 |
结算方式 | 进行交易时所采用的结算方式 |
结清否 | 判断某笔交易是否已结清账 |
名称 | 说明 |
药品信息表 | 记录药品的基本信息 |
员工信息表 | 记录员工的基本信息 |
客户信息表 | 记录客户的基本信息 |
供应商信息表 | 记录供应商的基本信息 |
管理员表 | 记录管理员的用户名、密码、权限 |
权限表 | 记录每种权限所能控制的模块 |
库存表 | 记录库存信息 |
销售信息表 | 记录销售时的客户、操作员、日期、合计等信息 |
销售日志 | 详细记录销售时的药品、数量等信息 |
入库信息表 | 记录入库时的供应商、操作员、日期、合计等信息 |
入库日志 | 详细记录入库时的药品、数量等信息 |
销售退货表 | 记录销售退货时的客户、操作员、日期、合计等信息 |
销售退货日志 | 详细记录销售退货时的药品、数量等信息 |
入库退货表 | 记录入库退货时的供应商、操作员、日期、合计等信息 |
入库退货日志 | 详细记录入库退货时的药品、数量等信息 |
订单表 | 记录客户订货信息的数据表 |
往来结账表 | 记录往来单位结账详细内容的数据表 |
名称 | 说明 |
销售管理 | 对客户进行销售交易,即出库 |
入库管理 | 对供应商进行入库交易,也可以称为采购登记 |
销售退货管理 | 对客户进行销售退货交易 |
入库退货管理 | 对供应商进行入库退货交易,也可以称为入库退货登记 |
订单管理 | 根据客户预订商品的信息打印出订货单据 |
调货登记 | 在仓库之间重新分配库存数量 |
客户应收应付结转 | 通常以月为单位,对本月中客户的欠款信息进行结转,并将结转数据作为下月初始数据 |
库存结转 | 通常以月为单位,对本月中商品的入库、出库、报损、报溢情况进行结转,并将其与现有的库存数量进行核对,最后将结转结果作为下月的初始数据 |
供应商应收应付结转 | 通常以月为单位,对本月中供应商的欠款信息进行结转,并将结转数据作为下月初始数据 |
利润分析 | 对指定日期内所销售商品的利润进行分析 |
供应商账目管理 | 对指定供应商的账目情况进行处理,包括账目查询、结账、对账 |
客户账目管理 | 对指定客户的账目情况进行处理,包括账目查询、结账、对账 |
完成该系统的需求分析后,就要开始了该系统的整体设计,物流管理系统的设计包括系统的总体结构和数据库设计。
1. 系统的总体结构
本系统源自物流管理的发展需求,根据需求分析中的业务流程,得出该系统要有如下结构:用户登录、修改密码、收货管理、票务管理、系统帮助、安全注销。分析完系统的结构之后,下面将系统的结构图展示如图3-1。
图3-1 物流管理系统结构图
下面是将各个结构中所实现的功能简单介绍如下:
修改密码:用户需要修改密码时,进入该模块,输入用户名和密码,点击保存后即可修改密码。
收货管理:货物到达物流公司之后,收货员把信息录入系统,包括到货确认子模块。
票务管理:完成票务的添加、修改功能,子模块为未估计货票。
系统帮助:为用户提示操作说明。
安全注销:安全退出系统。
2. 数据库设计
该系统采用ORACLE数据库,本系统根据业务的需要设计六张表,角色信息表用于存放角色信息,包含的属性包括:角色编号,角色名称,收货管理,票务管理,配送管理,财务管理,市场管理,统计查询,基本资料。分公司信息表:分公司编号,地区编号,公司名,联系人,联系电话,详细地址,电子邮件。公司部门表:部门编号,部门名称。货物信息表:货物编号,货物名称,货款计算,货物重量,货物方量,货物件数,件数单位,货物价值,运费,货物保价,备注信息。
表3-1是角色信息表用来存放角色信息,如角色编号为1、角色名称为管理员、收货管理为1、票务管理为1、财务管理为1、配送管理为1、财务管理为1、市场管理为1、统计查询为1、基本资料为1。
表3-1 T_RoleInfo角色信息表
字段名 | 数据类型 | 约束 | 是否递增 | 备注 |
RoleID | int | Primary key | (1000,1) | 角色编号 |
RoleName | Varchar(20) | 角色名称 | ||
RoleSHGL | int | 默认值0 | 收货管理 | |
RolePWGL | int | 默认值0 | 票务管理 | |
RolePSGL | int | 默认值0 | 配送管理 | |
RoleCWGL | int | 默认值0 | 财务管理 | |
RoleSCGL | int | 默认值0 | 市场管理 | |
RoleTJCX | int | 默认值0 | 统计查询 | |
RoleJBZL | int | 默认值0 | 基本资料 |
表3-2 T_AreaInfo(地区信息表)
字段名 | 数据类型 | 约束 | 是否递增 | 备注 |
AreaInfoID | Int | Primary key | Y | 地区编号 |
AreaProvince | Varchar2(20) | |||
AreaCity | Varchar(20) | |||
AreaFilialeType | Int | Default 0 |
表3-3 T_UserInfo(系统使用人员表)
字段名 | 数据类型 | 约束 | 是否递增 | 备注 |
UserID | Int | Primary key | Y | 用户编号 |
UserFilialeID | Varchar(20) | Foreign key | 公司编号 | |
UserUseName | Varchar(20) | 用户名 | ||
UserName | Varchar(20) | 真实姓名 | ||
UserPassword | Varchar(20) | 用户密码 | ||
UserDepartmentID | Int | Foreign key | 部门编号 | |
UserPhone | Varchar(20) | 联系电话 | ||
UserCardID | Varchar(20) | 身份证号码 | ||
UserRoleID | Int | Foreign key | 角色编号 | |
UserLoginNum | Int | 登陆次数 | ||
UserLoginDate | Datetime | 上次登陆时间 | ||
UserDate | Datetime | Default | 注册时间 |
表3-4 T_FilialeInfo(分公司信息表)
字段名 | 数据类型 | 约束 | 是否递增 | 备注 |
FilialeID | Int | Primary key | Y | 分公司编号 |
FilialeAreaID | Int | Foreign key | 地区编号 | |
FilialeName | Varchar(40) | 公司名 | ||
FilialeLinkman | Varchar(20) | 联系人 | ||
FilialePhone | Varchar(20) | 联系电话 | ||
FilialeAddress | Varchar(40) | 详细地址 | ||
FilialeEmail | Varchar(40) | 电子邮件 |
表3-5 T_Department(公司部门表)
字段名 | 数据类型 | 约束 | 是否递增 | 备注 |
DepartmentID | Int | Primary key | Y | 部门编号 |
DepartmentName | Varchar(20) | 部门名称 |
表3-6 T_GoodsInfo(货物信息表)
字段名 | 数据类型 | 约束 | 是否递增 | 备注 | |
GoodsID | Int | Primary key | Y | 货物编号 | |
GoodsName | Varchar(30) | 货物名称 | |||
GoodsPaymentMode | Float | Foreign key | 货款计算方式 | ||
GoodsHeft | Float | 货物重量(吨) | |||
GoodsBulk | Bigint | 货物方量 | |||
GoodsNumber | Varchar(10) | 货物件数 | |||
GoodsNumberUnit | Float | 件数单位 | |||
GoodsValue | Float | 货物价值 | |||
GoodsFreight | Float | 运费 | |||
GoodsInsuranceValue | Float | 货物保价 | |||
GoodsRemarkInfo | Varchar(40) | 备注信息 |
第四章 系统的详细设计与实现
该系统采用B/S架构,所以采用现在最流行的MVC设计模式,采用最简单的jsp+servlet的框架进行开发。
1. 程序总体框架各层分析
(1)jsp层
jsp文件命名规范--按照html文件名称进行命名。
每个jsp的页面title属性一定要写--按功能来写。
如果页面上需要js方法的话,需要声明在title和之间。
jsp方法命名规范--保存方法(toSave),删除方法(toDelete) 查询方法(toQuery) 校验方法(toCheck) 添加方法(toAdd),如果有其他 方法的话,命名规则是to+方法的英文名。
jsp页面中的代码要规范(比如表格的开始标签和结束标签要对齐,且其包含的子标签要有缩进)。
(2)控制层
java类的命名规范---首字母一定大写。
类名的组成“实体名”+"Servlet"。
java类 要有注释。
java类名,除了doGet和doPost方法之前,其他的任何方法均要有注释。
在控制层的java类中不能直接调用dao层的对象和方法,需要使用bo层的对象和方法。
(3)逻辑处理层
java类的命名规范--首字母一定大写;类名的组成“实体名”+“Manager”。
java类 要有注释。
每个方法要有注释。
在这一层是调用的dao层的对象和方法。
(4)数据库层
java类的命名规范--首字母一定大写;类名的组成“实体名”+“Dao”。
这一层里面有个公共类(JdbcDataBaseManager),类完成功能是:数据库连接和资源关闭。当然还可以有其他的方法,只要是在dao层中所有类均需要用到的代码,均可以提炼出来,放到这个公共类中。
java类 要有注释。
每个方法要有注释。
所有的sql语句需要用常量的形式来进行定义。
一定用PerParedStatement 类型进行发送sql语句。
每个实体的dao方法里面一般包含add(方法参数类型是实体的javabean)、get(方法的参数是表的主键)、delete(方法的参数是表的主键)、update(方法参数类型是实体的javabean)。
(5)javabean层
JavaBean其实就是一个Java类,它的作用主要有以下几点:
为了提高代码复用性,完善分布式应用体系。
为了提高java程序的可复用性而提出的基于java的软件组件模型。
可以利用JavaBean封装事务逻辑,进行数据库操作等,可以很好的实现业务逻辑和前台程序(jsp文件)的分离。
所以Java的一切特性,此处都可以使,此javaBean没有图形显示代码,只是完成基本业务逻辑。
JavaBean可以使用JAVA的封装、继承、多态。使用它可以达到显示和业务的分离。
JavaBean还具有一下几个优点:
提高代码的可复用性:对于通用的事物处理逻辑,数据库操作等都可以封装在JavaBean中,通过调用JavaBean的属性和方法可快速进行程序设计。
程序易于开发维护:实现逻辑的封装,使事物处理和显示互不干扰。
支持分布式运用:尽量减少java代码和Html的混编。
Java开发人员专注于具体业务的开发,而JSP开发人员,专注于显示效果的开发。
通过property="*"的方式,将内容设置到Bean中,其根本原因是使用Java的反射机制,根据传递参数的名称找到相应的方法,比如:参数名称为name,则自动找到setName方法。当需要制定某个属性设置内容的时候,可以在property中指定参数:
JavaBean属性的取得方法:
使用JavaBean的setProperty方法,可以自动将传递过来的只有数字的字符串变为整型,之后将内容赋值给具体的属性—>很智能;可以通过以下命令取得JavaBean中的属性:
JavaBean的作用域范围:
page范围:属性只在当前页有效,如果跳转到其他页面,则需要重新实例化。适用于:JSP页面操作资源时使用;
request范围:属性只保存在一次服务器跳转中。前提:使用 session范围:属性保存在一次会话之中,可以使用任意方式连接其他页面,则此对象只实例化一次。适用于:使用JSP直接开发购物车; application范围:属性公有,此对象在整个服务器上只实例化一次。尽量少用:因为application会占用资源。 2. 系统实现的技术 视图层创建(按照模块在存放jsp页面); web应用中静态资源的创建(js/css/images); 创建控制层:(放置在servlet包下面); 模型层:javabean层(他是贯穿在整个模型层面的一组jave类,po); 数据库层:(操作数据库的类放在dao); 逻辑处理层:(是连接控制层和数据库层的中间层,factory); 除了按照mvc模式创建的包之外,还需要一个公共包(这个包下面存放的是公共的工具类)(tool)。 2.1 硬件环境 处理器:1GHz32-bit或-bit; 系统内存:1GB以上; 硬盘分区:至少16GB; 显卡:支持DirectX9; 显存:128MB; 光驱:DVD-R/W 2.2 软件环境 软件:MyEclipse 6.0、JDK1.5、Tomcat5.0、Oracle9i等。 3. 数据库连接的实现 每一个功能都需要使用到数据库,所使用的技术为JDBC。该类需要调用db.properties文件, 该文件中配置了数据库的url,username,password.系统的数据库实现代码如下: public class DBConn { private static String driver=null; private static String url=null; private static String user=null; private static String password=null; private static Connection conn=null; static{ Properties p=new Properties(); try { p.load(DBConn.class.getClassLoader().getResourceAsStream("db.properties")); driver=p.getProperty("driver"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Class.forName(driver); url=p.getProperty("url"); user=p.getProperty("user"); password=p.getProperty("password"); conn=DriverManager.getConnection(url,user,password); System.out.println("======="); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection(){ return conn; } public static void closeConnection(){ if(!(conn==null)){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String [] args){ System.out.println(DBConn.getConnection()); } 4. 收货登记及界面的实现 收货登记功能的实现需要调用数据库连接类,并且在数据库中写入货物的详细信息。该收货登记的实现在jsp页面层使用了jstl标签库,数据库连接处使用了JDBC,该功能的实现代码如下: package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import po.T_AgioInfo; import po.T_FactoryInfo; import po.T_RegisterInfo; import po.T_UserInfo; import tool.DBConn; public class ShdjDaoImpl implements TuserDao { public T_FactoryInfo getFactory(int i) { Connection conn=null; DBConn db=new DBConn(); conn=db.getConnection(); T_FactoryInfo factory=null; //Shdj shdj=new Shdj(); String sql="select FactoryID,FactoryName,FactoryLinkman,FactoryCityID," + "FactoryPhone,FactoryFax,FactoryPostID,FactoryEmail," + "FactoryAddress,FactoryRemark from T_FactoryInfo where FactoryID=?"; try { PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1,i); ResultSet rs=ps.executeQuery(); if(rs.next()){ int FactoryID=rs.getInt(1); String FactoryName=rs.getString(2); String FactoryLinkman=rs.getString(3); int FactoryCityID=rs.getInt(4); String FactoryPhone=rs.getString(5); String FactoryFax=rs.getString(6); String FactoryPostID=rs.getString(7); String FactoryEmail=rs.getString(8); //System.out.println(FactoryEmail+" --------- "); String FactoryAddress=rs.getString(9); String FactoryRemark=rs.getString(10); factory=new T_FactoryInfo(FactoryID,FactoryName,FactoryLinkman,FactoryCityID, FactoryPhone,FactoryFax,FactoryPostID,FactoryEmail, FactoryAddress,FactoryRemark); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return factory; } public java.util.List dhqr(String i) { // TODO Auto-generated method stub return null; } public boolean addFactory(T_FactoryInfo factory) { // TODO Auto-generated method stub return false; } public T_FactoryInfo findFactory(int i) { // TODO Auto-generated method stub return null; } public boolean addAgioInfo(T_AgioInfo agioinfo) { // TODO Auto-generated method stub return false; } public boolean findLogin(T_UserInfo user) { // TODO Auto-generated method stub return false; } public T_RegisterInfo getRegister(int i) { // TODO Auto-generated method stub return null; } public T_RegisterInfo getWgjhp(int i) { // TODO Auto-generated method stub return null; } } 该功能业务类需要把页面传过来的值在从数据库中进行写入,具体代码如下: package servlet; import java.io.IOException; import java.io.PrintWriter; import factory.TuserFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import po.T_FactoryInfo; public class shdjservle extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { T_FactoryInfo t_facinfo=null;// String str=null; /* request.getRequestDispatcher("/SHGL/shdj1.jsp").forward(request,response);*/ try{ str=request.getParameter("csbh"); // System.out.println(str); if(str==""){ request.setAttribute("err输入为空!");//判断输入是否为空 } t_facinfo=TuserFactory.getShdjinstance().getFactory(Integer.parseInt(str)); request.setAttribute("t_facinfo",t_facinfo); if(t_facinfo==null){//判断生成的对象是否为空 request.setAttribute("err未找到任何厂商!"); }else{ request.setAttribute("err找到厂商信息如下!"); } }catch(Exception e){ }finally{ request.getRequestDispatcher("/SHGL/shdj1.jsp").forward(request,response); } } } 系统效果截图如图4-1。 图4-1 收货登记界面图 第五章 系统测试 在软件开发过程中,软件测试是一项十分重要且必不可少的工作,是对整个软件品质的保证。 软件测试的目的可总结为以下这些方面: 质量改进:应用于关键应用中的计算机和软件系统出现问题的后果是十分严重的。软件错误将引起巨大的损失。质量意味着产品符合设计的要求规范。正确性是软件质量的最低要求,正确性是指软件符合特定环境下可运行的要求。调试是软件测试中的一个重要方法,是程序员定位和修复软件错误的一个过程。发现和修复错误是程序调试的主要目的。 验证和确认:软件质量是客观的,能被精确地度量和比较。质量属性包括功能性,可用性,安全性,可靠性和可测性等;而价值是主观的,价值的判断包括满意度,足够好,幸福感,喜好性,憎恶感等。软件测试的一个重要目的是验证和确认软件质量。测试作为一个度量尺度,是一个验证和确认软件质量的过程。测试人员对产品质量的评测主要基于对测试结果的解释,比如软件在特定条件下是否能够正常工作。软件质量依赖于对软件需求的正确分析和设计以及实现, 测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。 良好的测试会对所有质量相关的因素做度量。而对于软件质量维护,则其特殊因素的重要程度因应用不同而不同。对人们生活息息相关的应用系统尤其强调可靠性和完整性,而可用性和可维护性则是典型商务应用系统的两个关键因素,一个适时的科学计算程序则更强调正确性和可靠性。我们的测试,要充分发挥作用,就必须衡量各相关因素,使质量度量成为有形的可见的。 以有效性和正确性验证为目的的软件测试称之为正面测试。即验证软件是可以工作的。这种测试缺点在于它只能验证软件在特定用例情况下能正常工作。有限次数的测试不能确认软件能在各种条件下都能正常工作,反之,如果有一个测试失败,则足以确认该软件不能正常工作。负面测试,指按规范注入错误,旨在破坏软件的正常工作,以检验软件处理错误的能力。即验证软件是不工作的。一个好的软件,必须有足够的例外处理能力去接受破坏性测试的考验。 测试用例是判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施或执行的测试用例的数量为依据的。本系统各模块的测试用例见表5-1。 测试用例表5-1 在功能上,该系统能按最初的设计实现各个规划好的功能,信息添加修改功能,信息的添加、修改、删除功能,都能实现,所以说基本完整。 在容错上,本系统能接受错误的输入并报告相应的错误,具有一定的容错性。 总之,经过测试,本系统具有一定的稳定性和可靠性。 结 论 企业物流仍然是全社会物流活动的重点,专业化物流服务需求已初见端倪近年来,随着买方市场的形成,企业对物流领域中存在的“第三利润源”开始有了深刻的认识。优化企业内部物流管理,降低物流成本成为目前多数国内企业最为强烈的愿望和要求。这说明,我国物流产业的发展水平还比较低,加强企业内部物流管理仍然是全社会物流改革的重点。 在此基础上,以计算机技术为依托的物流系统应运而生,该系统具有速度快,操作简单,非计算机人员再经过简单的培训之后就可以使用,完全符合用户的习惯。企业内部管理人员在使用该系统时,可以对全厂的物流情况有全面的掌握,并能及时的发现和处理问题。该系统所使用的ORACLE数据库,具有高效,存储量大,效率高等优点,非常适合大型企业的使用。而且它的备份和恢复机制都非常完善,这也是该系统选用ORACLE的原因。 该系统虽然在一定程度上解决了企业物流管理混乱,效率低的缺点,但是随着时代的变化,企业物流速度也应该随着提高,现有系统届时会满足不了物流的发展,还需要有很多改进的地方。 参考文献 [1] 刘晓华.JSP应用开发详解[M]. 北京:电子工业出版社, 2007-1-1. [2] 张得强.Visual Basic案例开发[M]. 北京:中国水利水电出版社,2005.1. [3] 高春艳,李俊民.Visual Basic工程应用与项目实践[M].机械工业出版社,2005.1. [4] Steven Jordan(美),牛力.Visual Basic 6编程宝典[M].电子工业出版社,2005.1. [5] 赛奎春.SQL Server 2000数据库管理与开发技术大全[M].人民邮电出版社,2004.12. [6] 杨学全,赵慧勤,李英杰.SQL Server 2000实例教程[M].电子工业出版社,2004.7. [7] 郝平.数据库开发与应用[M].科学出版社,2005.2. [8] Erich Gamma. Design Patterns[M].机械工业出版社,2007. [9] 郭瑞军,唐邦民,谢晗.Visual Basic数据库开发实例精粹[M].电子工业出版社,2005.1. [10] 朱从旭,严晖,曹岳辉.Visual Basic 程序设计综合教程[M].清华大学出版社,2005.3. 致 谢 在物流管理系统开发过程中,指导老师给了我很大的帮助,在此对指导老师表示感谢。同时,对一块完成该系统的同学表示感谢,他们在我最困难的时候给了我很多帮助。谢谢大家。
测试用例5-1续表企业用户注册模块(注册成功)的测试 用例说明 根据要求输入用户名、密码等信息进行注册 测试需求 验证新企业用户的注册 设计输入 用户名:bigtree;密码:123456 期待输出 添加成功,数据库中有记录 实际输出 添加成功,数据库中有记录 测试结果 成功 企业用户注册模块(注册失败)的测试 用例说明 输入已填加的用户名 测试需求 测试企业用户名不能重复注册 设计输入 用户名:654321;密码:123456 期待输出 注册失败 实际输出 添加失败。报错:添加失败,不能添加相同信息! 测试结果 成功 登陆功能模块(登陆成功)的测试 用例说明 输入成功注册的用户名及密码 测试需求 测试企业用户名的登陆 设计输入 用户名:bigtree;密码:123456 期待输出 登陆成功 实际输出 登陆成功,进入企业信息管理首页 测试结果 成功
测试用例5-1续表登录功能模块(登录失败)的测试 用例说明 输入错误的用户名或密码 测试需求 测试企业用户名的登陆 设计输入 用户名:bigtree;密码:654321 期待输出 登陆失败 实际输出 登陆失败。报错: 输入有错,请核对后再登录! 测试结果 成功 用户密码修改模块的测试 用例说明 输入要修改的内容 测试需求 用户密码修改的修改功能 设计输入 修改密码:123456修改为654321 期待输出 修改成功 实际输出 修改成功,数据库中显示为:密码是:654321 测试结果 成功 收货管理添加记录的测试 用例说明 输入要添加的记录信息 测试需求 收货管理信息的添加功能 设计输入 货票编号:20110906001;运输编号:1000000001;其他的为空,;日期 期待输出 添加成功 实际输出 添加成功,数据库中有记录 测试结果 成功
从以上的测试中可以发现实际的测试功能基本上实现了系统的设计测试要求,所以系统还是具有可行性,也基本上实现了系统最初的设计目标。职位删除模块的测试 用例说明 删除收货管理的记录 测试需求 测试删除功能 设计输入 选择要删除的记录,点击后面的删除链接 期待输出 删除成功 实际输出 删除成功,数据库中不再存在该相关记录 测试结果 成功 记录信息修改的测试 用例说明 有些记录的状态需要修改来标识其运作状态 测试需求 收货管理的到货确认功能 设计输入 输入回复内容:已收到,点击提交按钮 期待输出 提交成功 实际输出 提交成功,数据库中显示提交后的内容 测试结果 成功