
题 目:圆通快递物流信息系统
课程名称: 物流信息系统设计
专 业: 电子商务与物流信息工程
学 号: 1043113257
姓 名: 陶巧云
完成时间: 2013年12月1号
前言
快递管理的内容包括三个方面的内容:即对快递活动诸要素的管理,包括运输、储存等环节的管理;对快递系统诸要素的管理,即对其中人、财、物、设备、方法和信息等六大要素的管理;对快递活动中具体职能的管理,主要包括快递计划、质量、技术、经济等职能的管理等。
实施快递管理的目的就是要在尽可能最低的总成本条件下实现既定的客户服务水平,即寻求服务优势和成本优势的一种动态平衡,并由此创造企业在竞争中的战略优势。根据这个目标,快递管理要解决的基本问题,简单地说,就是把合适的产品以合适的数量和合适的价格在合适的时间和合适的地点提供给客户。
快递管理主要有4个特点:
(1)以实现客户满意为第一目标;
以企业整体最优为目的;
以信息为中心;
(4)重效率更重效果。
目前,在快递行业中,时限和安全是快递服务价值的核心。客户对快递服务有着苛刻的要求,在时限、安全、可靠、便利、跟踪查询方面比其他运输服务有着更高的要求,因而客户愿意为得到这些高品质的服务支付较高的价格。阳光快递管理系统将为快递事业的各项业务进行有效地管理与运作提供有力的支持。
本软件服务于快递公司的业务。处理单据,数据统计,报表打印,单据查询以及数据库维护等。
系统功能有:
1 数据的添加、删除和修改
2 派送单查询、接收单查询、投诉单查询以及未派送的快件查询等查询功能。
3 对某一段时间内的数据进行统计
4 打印详细报表
5 基本资料维护及用户权限等
6 数据库的备份与还原
第1章 系统需求分析
1.1 系统的背景介绍
快递是指承运方将托运方指定在特定时间内运达目的地的物品,以最快的运输方式,运送和配送到指定的目的地或目标客户手中。
快递的市场基础是对于时间比较敏感的运输需求。中国快递市场可以分为国际快递市场和国内快递市场两大类型,其中国内快递市场又可分为同城快递市场和城际快递市场。
同城快递业务是指在同一个城市区域内互寄的快递业务。同城快递的时限标准一般可分为“限时递”、“当日递”、和“次日递”等。
城际快递业务在国内城际市场按照空间运距,还可以细分为跨区城际快递和区域内城际快递,如华东地区、华南地区等。
在快递行业中,时限和安全是快递服务价值的核心。客户对快递服务有着苛刻的要求,在时限、安全、可靠、便利、跟踪查询方面比其他运输服务有着更高的要求,因而客户愿意为得到这些高品质的服务支付较高的价格。目前快递市场目标客户主要来自高科技领域、从事高附加值含量的商品、半成品或配件的生产企业,其产品具有价值高、相对重量体积小等特点。如高科技、医疗器械、电子产品、电子元件、通讯产品、电脑产品及配件、药品、日化产品的企业等。
1.2 系统的可行性研究
1.2.1数据库设计方法简述
数据库设计是对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。
1.2.1.1数据库设计可以分为6个步骤:
1.需求分析阶段
准确了解与分析用户需求(包括数据与处理)它是整个设计过程的基础,是最困难、最耗费时间的一步。
2.概念结构设计阶段
它是整个数据库设计的关键。通过对用户需求进行综合、归纳与抽象,形成一个于具体DBMS的概念模型。
3.逻辑结构设计阶段
将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化。
4.数据库物理设计阶段
为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
5.数据库实施阶段
运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果。建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
6.数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改。
1.2.1.2 设计特点
在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。
1.2.2操作可行性
作为一个实际存在的业务,系统设计的目的,以及所包括的信息内容功能都能够比较清晰地获得。通过合理的系统分析,能够基本上获得系统的需求,并且按照系统的需求进行之际的系统设计工作。
1.2.3技术可行性
本系统将用Delphi工具编写。Delphi系统开发工具能够大幅度节省系统开发时间,所开发的系统的可维护性和稳定性较高。数据库部分使用 SQL Server 2000 数据库系统。
1.3系统业务流程的调查和分析
本软件服务于快递公司的业务。处理单据,数据统计,报表打印,单据查询以及数据库维护等
系统功能有:
1 数据的添加、删除和修改
2 派送单查询、接收单查询、投诉单查询以及未派送的快件查询等查询功能。
3 对某一段时间内的数据进行统计
4 打印详细报表
5 基本资料维护及用户权限等
6 数据库的备份与还原
1.3.1系统业务流程分析
图1-2 快递管理业务流程图
1.3.2 系统规划
3.2.2.1系统处理范围
单据处理、数据统计、 单据查询、报表打印、数据库维护、权限管理
3.2.2.2系统功能
1)数据的录入(添加、删除和修改)
2)派送单、接收单、投诉单等的查询
3)某一段时间内的数据进行统计
4)打印详细报表
5)基本资料的维护
6)数据库的备份与还原
7)权限管理
1.4 系统数据流程的调查和分析
图1-3 快递管理数据流程图
1.5 数据库设计
1.5.1逻辑结构设计
本数据库主要涉及以下六个实体:
收件单(接收单号,发站,运输方式,…,快递员号)
派送单(派送单号,接收单号,发站,运输方式,…,快递员号)
中转单 (中转单号,发站,运输方式,…,快递员号)
投诉单(投诉单号,派送单号,接收单号,货物编号,原因)
快递员(编号,姓名,手机,住址,宅电)
品名维护(编号,品名,备注)
备注维护(编号,备注)
具体的E-R图如下所示:
各实体之间的联系
1.5.2物理结构设计
(1)创建数据库
本系统使用SQL Server作为数据库管理系统。打印“企业管理器”,新建一个数据库,取名为“kd”。快递管理系统根据功能共需要设计9张数据表。
综合快递物流信息系统表汇总
| 序号 | 表名称 | 功能描述 |
| 1 | fj_lr | 派送单记录表 |
| 2 | js_lr | 接收单记录表 |
| 3 | ts_lr | 投诉单记录表 |
| 4 | zz_lr | 中转记录表 |
| 5 | Sender | 品名信息表 |
| 6 | User1 | 用户信息表 |
| 7 | Memo | 备注信息表 |
| 8 | Kuaidiyuan | 快递员信息表 |
| 9 | 权限管理 | 权限管理表 |
表名:fj_lr 派送单记录表
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| fj_id | 派送单编号 | Varchar(15) | 15 | 否 | Key |
| station | 发站名称 | nvarchar(10) | 10 | 否 | |
| send_mode | 运输方式 | nvarchar(10) | 10 | 否 | |
| name | 品名 | nvarchar(10) | 10 | 否 | |
| weight | 重量 | Numeric(9) | 9 | 否 | |
| sender | 送货人 | nvarchar(10) | 10 | ||
| rece_person | 收货人 | nvarchar(10) | 10 | 否 | |
| rece_addr | 收货人地址 | nvarchar(60) | 60 | 否 | |
| rece_tel | 收货人电话 | nvarchar(20) | 20 | 否 | |
| thing | 备注 | nvarchar(60) | 60 | ||
| fjfee | 派送费 | Float(8) | 8 | 否 | |
| ps_data | 派送日期 | Datatime | 否 | ||
| Js_id | 接收单号 | Varchar(15) | 15 | 否 | |
| id | 快递员id | Varchar(15) | 15 | 否 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| js_id | 接收单号 | Varchar(15) | 15 | 否 | Key |
| station | 发站名称 | nvarchar(10) | 10 | ||
| send_mode | 运输方式 | nvarchar(10) | 10 | 否 | |
| name | 品名 | nvarchar(10) | 10 | 否 | |
| weight | 重量 | Numeric(9) | 9 | 否 | |
| sender | 送货人 | nvarchar(10) | 10 | ||
| rece_person | 收货人 | nvarchar(10) | 10 | 否 | |
| rece_addr | 收货人地址 | nvarchar(60) | 60 | 否 | |
| rece_tel | 收货人电话 | nvarchar(20) | 20 | 否 | |
| Memo1 | 备注 | nvarchar(60) | 60 | ||
| fjfee | 派送费 | Float(8) | 8 | 否 | |
| js_data | 接收日期 | Datatime | 8 | 否 | |
| id | 快递员id | Varchar(15) | 15 | 否 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| Ts_id | 投诉单编号 | Varchar(15) | 15 | 否 | Key |
| fj_id | 派送单编号 | Varchar(15) | 15 | ||
| js_id | 接收单号 | Varchar(15) | 15 | ||
| customer | 客户名 | nvarchar(20) | 20 | ||
| customer_addr | 客户地址 | nvarchar(40) | 40 | ||
| customer_tel | 客户电话 | nvarchar(20) | 20 | ||
| Memo1 | 备注原因 | nvarchar(40) | 40 | 否 | |
| Ts_date | 投诉日期 | Datatime | 8 | 否 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| zz_id | 接收单号 | Varchar(15) | 15 | 否 | Key |
| Start_station | 发站名称 | nvarchar(10) | 10 | ||
| end_station | 终站名称 | nvarchar(10) | 10 | ||
| send_mode | 运输方式 | nvarchar(10) | 10 | 否 | |
| name | 品名 | nvarchar(10) | 10 | 否 | |
| weight | 重量 | Numeric(9) | 9 | 否 | |
| rece_person | 收货人 | nvarchar(10) | 10 | 否 | |
| rece_addr | 收货人地址 | nvarchar(60) | 60 | 否 | |
| rece_tel | 收货人电话 | nvarchar(20) | 20 | 否 | |
| Memo1 | 备注 | nvarchar(60) | 60 | ||
| zz_data | 接收日期 | Datatime | 8 | 否 |
表名:Sender 品名信息表
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| Id | 编号 | Char | 10 | 否 | Key |
| mane | 品名 | char | 20 | 否 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| id | 编号 | nvarchar | 4 | 否 | Key |
| name | 姓名 | nvarchar | 10 | ||
| password | 密码 | nvarchar | 10 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| id | 编号 | Nvarchar | 4 | 否 | Key |
| memo | 备注 | Nvarchar | 50 |
| 字段名 | 代表意义 | 数据类型 | 长度 | 是否允许空值 | 主键 |
| id | 编号 | Nvarchar | 15 | 否 | Key |
| name | 姓名 | Nvarchar | 10 | 否 | |
| Tel | 手机 | Varchar | 20 | 否 | |
| Addr | 住址 | Nvarchar | 40 | ||
| Phone | 宅电 | Varchar | 20 |
数据字典的组成
数据字典有6类条目:数据项、数据结构、数据流、数据处理、数据存储和外部实体。(1)数据项
是数据的最小单位,是不可再分的数据单位。如学号,姓名等。对数据项的描述一般包括:数据项的编号、名称、别名和简述,数据项的类型、长度和取值范围等。
表一:数据项描述—派送单编号
| 数据项编号 | I01-01 |
| 数据项名称 | fj_id |
| 别名 | 派送单编号 |
| 简述 | 用于记录派送单的代码 |
| 类型及宽度 | Varchar(15) |
| 取值范围 | 000000000000000~999999999999999 |
| 相关数据结构 | 派送单记录表、投诉单记录表 |
| 数据项编号 | I01-02 |
| 数据项名称 | send_mode |
| 别名 | 运输方式 |
| 简述 | 用于描述采用何种运输方式 |
| 类型及宽度 | nvarchar(10) |
| 相关数据结构 | 派送单记录表、接受单记录表、中专记录表 |
数据结构描述了数据项之间的关系,由数据项或者数据结构组成。一个简单的数据结构由数据项组成,而复杂的数据结构则包含了其他数据结构
对数据结构的描述包括:数据结构的编号、名称、简述、数据结构的组成等。
表三:数据结构描述—品名信息
| 数据结构编号 | DS02-01 |
| 数据结构名称 | 品名信息 |
| 简述 | 用于描述货物信息 |
| 组成 | 编号、品名 |
| 相关数据流 | 派送单、接收单、中转单 |
| 相关数据处理 | 录入、修改及删除出处理 |
| 数据结构编号 | DS02-02 |
| 数据结构名称 | 快递员信息 |
| 简述 | 用于描述快递员的信息 |
| 组成 | 编号、姓名、手机、住址、宅电 |
| 相关数据流 | 派送单、接收单、中转单 |
| 相关数据处理 | 录入修改及删除处理 |
| 数据结构编号 | DS02-03 |
| 数据结构名称 | 用户信息 |
| 简述 | 用于描述此软件的用户的信息 |
| 组成 | 编号、姓名、密码 |
| 相关数据流 | 派送单、接收单、中转单 |
| 相关数据处理 | 录入、修改及删除处理 |
| 数据结构编号 | DS02-04 |
| 数据结构名称 | 备注信息 |
| 简述 | 用于描述备注 |
| 组成 | 编号、备注 |
| 相关数据流 | 派送单、接收单、中转单、投诉单 |
| 相关数据处理 | 录入、删除及修改处理 |
数据流用来描述数据的流动过程,由一个或一组固定的数据项组成。可以是一个已定义的数据结构,也可以由若干数据项组成。
表七:数据流描述—派送单
| 数据流编号 | F03-01 |
| 数据流名称 | 派送单 |
| 简述 | 快递公司根据接收单开出此单,根据此单进行派送 |
| 数据流来源 | 首发站 |
| 数据流去向 | 快件派送及中转管理模块 |
| 数据流组成 | 派送单编号、发站名称、运输方式、品名、重量、送货人、收货人、收货人地址、收货人电话、备注、派送费、派送日期、接收单号、快递员id |
| 数据流编号 | F03-02 |
| 数据流名称 | 接收单 |
| 简述 | 接收物品后的登记单据 |
| 数据流来源 | 快件接收登记 |
| 数据流去向 | 快件接收管理模块 |
| 数据流组成 | 接收单编号、发站名称、运输方式、品名、重量、送货人、收货人、收货人地址、收货人电话、备注、派送费、接收日期、快递员id |
| 数据流编号 | F03-03 |
| 数据流名称 | 投诉单 |
| 简述 | 用于登记用户的投诉情况 |
| 数据流来源 | 发件人 |
| 数据流去向 | 客户投诉管理 |
| 数据流组成 | 投诉单编号、派送单编号、接收单号、客户名、客户电话、客户地址、投诉原因、投诉日期 |
| 数据流编号 | F03-04 |
| 数据流名称 | 中转单 |
| 简述 | 用于登记快件的中转记录 |
| 数据流来源 | 快递中转站 |
| 数据流去向 | 快件派送管理模块 |
| 数据流组成 | 接收单号、发站名称、终站名称、运输方式、品名、重量、收货人、收货人地址、收货人电话、备注、接受日期 |
数据处理定义数据流程图中数据项的处理方式。
表十一:数据处理——登陆
| 数据处理编号 | P04-01 |
| 数据处理名称 | 登陆处理 |
| 简述 | 对用户登陆信息进行验证 |
| 处理 | 对用户信息验证,以判定其是否可登陆以及登陆权限 |
| 输入数据流 | 用户名、密码 |
| 输出数据流 | 验证信息 |
| 处理频率 | 无 |
| 数据处理编号 | P04-02 |
| 数据处理名称 | 修改密码处理 |
| 简述 | 对自己的密码进行修改 |
| 处理 | 密码修改 |
| 输入数据流 | 用户名、旧密码、新密码 |
| 输出数据流 | 密码修改成功或失败的提示信息 |
| 处理频率 | 无 |
| 数据处理编号 | P04-03 |
| 数据处理名称 | 查询处理 |
| 简述 | 发件、接收、中转以及投诉信息的查询 |
| 处理 | 根据用户诸如的信息,显示用户所要查询的信息 |
| 输入数据流 | 所查询信息的关键字或者关键项 |
| 输出数据流 | 发件、接收、中转以及投诉信息的查询 |
| 处理频率 | 无 |
| 数据处理编号 | P04-04 |
| 数据处理名称 | 录入、修改、删除信息处理 |
| 简述 | 货物信息、派送单、中转单等的录入、修改及删除 |
| 处理 | 对信息的修改、删除及录入操作 |
| 输入数据流 | 所要录入、修改或删除的内容 |
| 输出数据流 | 发件、接收、中转信息的录入、删除及修改 |
| 处理频率 | 无 |
| 数据处理编号 | P04-05 |
| 数据处理名称 | 打印处理 |
| 简述 | 用于对信息内容的打印 |
| 处理 | 将录入信息进行打印,以便于进行配送 |
| 输入数据流 | 所要录入、修改或删除的内容 |
| 输出数据流 | 打印预览 |
| 处理频率 | 无 |
| 数据处理编号 | P04-06 |
| 数据处理名称 | 统计处理 |
| 简述 | 对于每个月产生的派送、接受、投诉、中转以及大客户运量的统计 |
| 处理 | 对于每个月产生的派送、接收、投诉、中转以及大客户运量的统计,并制作统计报表 |
| 输入数据流 | 派送单、接收单、投诉单、中转单 |
| 输出数据流 | 数据流量统计表 |
| 处理频率 | 每月一次 |
外部实体描述了数据流入、流出和处理的实际发生地点和有关的实体。
表十七:外部实体——客户
| 外部实体编号 | S05-01 |
| 外部实体名称 | 客户 |
| 简述 | 发货人 |
| 输入数据 | 姓名、联系电话、地址、收件人姓名、收件人地址、收件人联系电话 |
| 输出数据流 | 无 |
| 外部实体编号 | S05-02 |
| 外部实体名称 | 收件人 |
| 简述 | 收件人 |
| 输入数据 | 无 |
| 输出数据流 | 用户接受登记 |
2.1 模块结构图
图2-1快递管理系统结构图
2.2 代码设计
接收单号代码表
| 接收单号 |
| 20100101001—2010年1月1号接收的第1个单子 |
| 20100101002—2010年1月1号接收的第2个单子 |
| 20100101003—2010年1月1号接收的第3个单子 |
| 派送单号 |
| 20100101001—2010年1月1号派送的第1个单子 |
| 20100101002—2010年1月1号派送的第2个单子 |
| 20100101003—2010年1月1号派送的第3个单子 |
| 类型号 |
| 1—运输途中丢失,运输公司负责赔偿 |
| 2—不全 |
| 3—破损 |
| 4—丢了 |
| 5—包装导致物品破损,由快递公司负责赔偿 |
| 6—没有 |
| 种类号 |
| 001—书籍 |
| 002—箱包 |
| 003—衣物 |
| 004—日用品 |
| 005—灯具 |
| 006—食品 |
| 007—电器 |
| 008—饮料 |
| 009—其他 |
2.3.1、输入设计
(1)输入设计的任务
根据具体业务要求,确定适当的输入形式,使信息系统获取管理工作中产生的正确信息。
(2)输入设计的内容
1.输入界面设计。根据具体业务要求确定(详见主界面设计和各模块设计)。
2.输入设备选择:键盘--磁盘输入装置。数据录入员通过工作站录入,经拼写检查和可靠性验证后存入磁记录介质 。
(3)输入数据正确性校验
常用的校对方式有:
1.人工校对:录入数据后显示或打印出来,由人进行校对。
2.根据输入数据之间的逻辑关系校对:利用会计恒等式,对输入的记账凭证进行借贷平衡的检验。
3.用程序设计实现校对:通过设置取值区间检验,或利用输入数据表的外键进行一致性检验。
图2-2 信息录入界面
2.3.2、输出设计
(1)输出设计的内容
1.输出信息使用情况。信息的使用者、业务统计、业务查询、信息量等。
2.输出信息内容。派送单据、业务单据、统计业务量等。
3.输出格式。如表格、报告等。
4.输出设备和介质,设备:如打印机、显示器等;介质:如磁盘、磁带、纸张等。
(2)输出设计的方法
1.表格信息。一般用来表示详细的信息。
图2-3信息查询输出图
图2-4信息统计报表输出图
第3章 系统实现
3.1登录模块设计
启动程序,首先进入登录模块,该模块用来确认用户身份,保证数据的安全性。在该模块中使用了TDBLookupListBox组件,该组件能将被查找字段的值自动添加到它的列表中,用户可以在该组件中选取用户名进行登录。
3.1.1设计步骤
1)新建窗体,设置BorderStyle属性(边框类型)为“bsNone”,在窗体上放置一个TImage组件,设置其Stretch属性为“true”图片放大或缩小以TImage组件边框为准,pictures属性选择图片(背景图片)。
2)在TImage组件上放置一个TDBLookupListBox组件,设置Ctl3D属性为“False”;设置ListSourse属性为“dm.dsuser1table”;设置KeyField属性为“name”;设置ListField属性为“name”。在窗体上添加一个TEdit组件,设置Ctl3D属性为“False”;设置passwordChar属性为“*”。
3)在TImage组件上放置两个TBitBtn组件,为了按钮的美观,设置其Glyph属性加载按钮图片。
3.1.2程序代码设计
主要的代码在单击【登录】按钮和【取消】按钮。单击【登录】按钮,系统在数据库中查找与用户输入的“用户名”和“密码”相符的记录。如果有,则用户可以登录,如果没有且输入3次都不正确,系统将自动退出。单击【取消】按钮,退出系统。(代码详见附录)
3.2主界面设计
3.2.1主窗体设计概述
主窗体设计在系统中占据很重要的地位,因为只有界面友好、操作方便的软件才能被用户所接受。
本系统使用TSpeedButton组件作为工具栏按钮,使用TTreeView组件作为功能目录树,使用TStatusBar组件显示当前系统状态信息。
图3-1用户主界面
3.2.2 菜单设计
菜单是窗体的重要组成部分,本系统菜单主要是通过Additional页中的TActionMainmenuBar和TactionManager组件实现。下面是菜单设计的步骤:
1)向窗体中添加TActionMainmenuBar和TactionManager组件,TActionMainmenuBar一般摆放在窗体的最上边。
2)双击TactionManager组件,将显示如图(3-2)所示的编辑窗口,在该窗口的Action选项卡中,单击【Add New】按钮可以添加一个TAction对象,单击【Delete Selected】按钮可以删除所选TAction对象。这里添加的TAction对象要与菜单功能项个数相等并且相对应。当选中一个TAction对象后在“Object Inspector”窗口中可以编辑其属性。双击TAction对象,进行代码编辑,实现操作。
图 3-2 TAction对象编辑
3)添加好TAction对象后返回主窗体,选中TActionManager组件,在“Object Inspector”窗口中单击ActionBars属性右边的【...】按钮,打开编辑窗口。
4)在显示的编辑窗口中单击【add new】按钮添加TActionBarItem对象,并选中它,在“Object Inspector”窗口中设置ActionBar的值为前面加入窗体的TActionMainmenuBar组件。
5)在选中的TActionBarItem对象,在“Object Inspector”窗口中选择Items属性,单击其右边的【...】按钮,打开编辑窗口,在窗口中单击【Add New】添加TActionClientItems对象,并选中它,在“Object Inspector”窗口中为Action属性选择一个TAction对象,该TAction对象是前面在TactionManager组件中添加的,在此可以通过Caption属性来改变TAction的标题。
3.2.3 状态栏
状态栏用于显示系统状态、用户信息及其提示信息,本系统的状态栏是通过TStatusBar组件实现的。
1.日期时间信息
在状态栏的第一栏中显示日期时间信息,代码如下:
procedure Tmainform.Timer1Timer(Sender: TObject);
begin
self.StatusBar1.Panels[0].Text:='当前时间: '+datetimetostr(now);
end;
2.用户名及其编码的动态信息
在状态栏的第二栏中显示用户名及其编码的动态信息。
图3-3 状态栏
3.2.4 树状功能目录
在主窗体左边放置一个功能目录,可以通过TTreeView组件实现。在 TTreeView组件中的每一个节点都可以有一个图标,添加图标可以通过TImageList组件实现。
图3-4树状功能目录设计图
3.2.5 工具栏
本系统使用TSpeedButton组件作为工具栏按钮。
图3-5工具栏设计图
3.2.6主窗体背景
主窗体背景设计需要用一个TImage组件实现。
3.3数据模块设计
数据模块是将连接和处理数据的数据库组件统一规范管理的模块,在设计期间数据模块是以窗口的形式显示在界面中的。但是不可以向数据模块中加入可视化组件,因为该模块不会在系统运行时显示出来。
使用数据模块进行数据库设计与数据处理有以下优点:
1.便于数据库的移植
2.增加了程序的清晰性
3.可以最大程度的实现代码重用
总之,可以将数据集全部放在数据模块中,这样可以方便地设置数据关联等,而且数据处理起来也相对方便,因为不需要在工程文件中去寻找对应的数据集。
在本系统中使用数据模块统一管理数据库组件,下面是创建数据模块的过程:
(1)建立数据模块。使用File菜单下的New Application建立一个新应用程序。在New Item中双击Data Module建立一个数据模块(命名为dm),
图3-6数据模块
(2)在数据模块中添加数据组件。首先添加TADOConnection组件到dm中,取名为kdconn,并设置它的ConnectionString属性,是它与数据库建立连接。
图3-7 ConnectionString属性编辑
3.4信息录入模块设计
信息录入模块包括快件接收录入、快件派送录入、快件中转录入和客户投诉录入等板块。
图3-8 快件派送录入界面
图3-9 快件接收录入
图3-10 快件中转录入
图3-11客户投诉录入
3.5信息统计模块设计
信息统计模块包括快件接收统计、快件派送统计、快件中转统计、客户投诉统计和大客户运量统计等板块。其中未派送统计是多表联系查询统计。
派送统计:主要负责功能是统计在某一段时间内的派送的物品的重量和派送费用并且有相应的打印模块可以打印报表。
相应的主要代码:
procedure Ttj_paisong.BitBtn1Click(Sender: TObject);
begin
if self.DateTimePicker1.Date>self.DateTimePicker2.Date then
begin
messagebox(self.Handle,'起始日期不能大于终止日期','提示信息',mb_iconinformation);
Exit;
end;
dm.search1.Close;
dm.search1.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker1.Date );
dm.search1.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker2.Date );
dm.search1.Open ;
dm.search0.Close;
dm.search0.CommandText:='select sum(weight) ''总重量'',sum(fjfee) ''派送费合计'' from fj_lr where ps_date >=cast(:date1 as datetime)'+
' and ps_date<=cast(:date2 as datetime)' ;
dm.search0.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker1.Date );
dm.search0.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker2.Date );
dm.search0.Open ;
dbedit1.DataSource:=dm.dssearch0 ;
dbedit1.DataField:='总重量';
dbedit2.DataSource:=dm.dssearch0 ;
dbedit2.DataField:='派送费合计';
end;
图3-12派送统计界面
接受统计:主要负责对一段时间内的收件进行显示和重量计算。
主要代码:类似于派送统计。
图3-13 接收统计界面
未派送统计:具有相当重要的意义,因为快件派送统计、快件中转统计、客户投诉统计和大客户运量统计等,只是用来当做月末或季度末的结算功能使用;而未派送统计则是对工作有较大的意义,可以查到一段时间之内,还未派送的快件,便可以查看这些快件有无缺失或者根据时间安排相应的派送顺序。
具体实现为:DBGrid连接到dm:data dmunit中的TDataSourceTADODataSet
TADOConnection (与相应数据库连接)。
相应的SQL语句为:
select js_id ‘票据号', send_station ‘发站', send_mode ‘运输方式',
name ‘品名',weight ‘ 重量',rece_person ‘ 收货人', js_date ‘收件日期'
from js_lr where js_date>=cast(:date1 as datetime) and js_date<=cast(:date2 as datetime)and js_id not in(select js_id from fj_lr where fj_lr.js_id=js_lr.js_id)
图3-14 未派送统计界面
大客户运量统计:主要用于对大型客户设计的信息统计。只要输入相应的客户名,便可以对相应时间段内或者该客户所有订单进行查询。是专门为有大量业务的会员量身定做的。
相应的主要代码:
dm.search4.Close;
dm.search4.CommandText:='select fj_id ''派送单号'' ,station ''发站'', name ''品名'', weight ''重量'', fjfee ''派送费'','+
' rece_person ''客户名称'', ps_date ''发件日期'' from fj_lr ' +
' where rece_person like+''%''+'''+str+'''+''%'' and ps_date>=cast(:date1 as datetime) '+
' and ps_date<=cast(:date2 as datetime)';
dm.search4.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.datetimepicker1.Date );
dm.search4.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.datetimepicker2.Date );
dm.search4.Open ;
dm.search0.Close; ;
dm.search0.CommandText:='select sum(fjfee) ''派送费合计'','+
' sum(weight) ''总重量'' from fj_lr ' +
' where rece_person like+''%''+'''+str+'''+''%'' and ps_date>=cast(:date1 as datetime) '+
' and ps_date<=cast(:date2 as datetime)';
dm.search0.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.datetimepicker1.Date );
dm.search0.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.datetimepicker2.Date );
dm.search0.Open ;
dbedit1.DataSource:=dm.dssearch0 ;
dbedit1.DataField:='总重量';
dbedit2.DataSource:=dm.dssearch0;
dbedit2.DataField:='派送费合计';
end;
end;
图3-15 大客户运量统计界面
统计打印报表设计:提取相应的界面上和数据库中的数据,制成一张打印报表,供发放给其他操作员,例如快递员或业务经理等。
主要实现:调用相应的打印报表界面。在打印报表界面中实现,具体见报表实现部分。
主要代码:
procedure Ttj_customer.BitBtn2Click(Sender: TObject);
begin
try
if (dm.search4.Active=false) then exit;
rpt_tj.QuickRep4.BringToFront ;
| fj_id | 单号 | Varchar(15) | 15 | 否 |
| sender | 寄件人 | nvarchar(10) | 10 | 否 |
| rec_person | 收货人 | nvarchar(10) | 10 | 否 |
| rece_addr | 收货人地址 | nvarchar(60) | 60 | 否 |
| rece_tel | 收货人电话 | nvarchar(20) | 20 | 否 |
| ps_data | 收货时间 | Datatime | 否 | |
| id | 快递员编号 | Varchar(15) | 15 | 否 |
except
Application.MessageBox('错误。','提示!',mb_ok);
end;
end;
图3-16 收件单统计打印报表界面
3.6信息查询模块设计
信息查询模块包括快件接收查询、快件派送查询、快件中转查询、客户投诉查询和未派送快件查询等板块。其中快件接收查询、快件派送查询、快件中转查询和客户投诉查询是简单的单表查询;未派送快件查询是多表查询。
下面主要从快件接收查询、快件派送查询和未派送快件查询为例子来介绍本文的信息查询模块设计。
3.6.1快件接收查询
select js_id ‘接收单号',js_id ‘票据号',station ‘发站',send_mode ‘运输方式',name ‘品名',weight ‘重量',rece_person ‘收货人' ,
fjfee ‘派送费',ps_date ‘派送日期'
from js_lr
where ps_date>=cast(:date1 as datetime) and ps_date<=cast(:date2 as datetime)
图3-17快件接收查询
图3-18快件接收查询打印报表
3.6.2快件派送查询
select fj_id ‘派送单号',js_id ‘票据号',station ‘发站',send_mode ‘运输方式',name ‘品名',weight ‘重量',rece_person ‘收货人' ,
fjfee ‘派送费',ps_date ‘派送日期'
from fj_lr
where ps_date>=cast(:date1 as datetime) and ps_date<=cast(:date2 as datetime)
图3-19快件派送查询
3.6.3未派送快件查询
select js_id ‘票据号', send_station ‘发站', send_mode ‘运输方式',
name ‘品名',weight ‘ 重量',rece_person ‘ 收货人', js_date ‘收件日期'
from js_lr
where js_date>=cast(:date1 as datetime) and js_date<=cast(:date2 as datetime)
and js_id not in(select js_id from fj_lr where fj_lr.js_id=js_lr.js_id)
图3-20未派送快件查询
procedure Ttj_weipaisong.BitBtn1Click(Sender: TObject);
begin
if self.DateTimePicker1.Date>self.DateTimePicker2.Date then
begin
messagebox(self.Handle,'起始日期不能大于终止日期','提示信息',mb_iconinformation);exit; end;
dm.search6.Close;
dm.search6.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker1.Date );
dm.search6.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker2.Date );
dm.search6.Open ; dm.search0.Close;
dm.search0.CommandText:='select sum(weight) ''总重量'' from js_lr where js_date>=cast(:date1 as datetime) and js_date<=cast(:date2 as datetime) and js_id not in(select js_id from fj_lr where fj_lr.js_id=js_lr.js_id) ' ; dm.search0.Parameters.ParamByName('date1').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker1.Date ); dm.search0.Parameters.ParamByName('date2').Value:=formatdatetime('yyyy-mm-dd',self.DateTimePicker2.Date );
dm.search0.Open ; dbedit1.DataSource:=dm.dssearch0 ;
dbedit1.DataField:='总重量';
end;
3.7资料维护与数据库备份模块设计
数据对用户来说是非常宝贵的资产。数据是存放在计算机上的,但是即使是最可靠的硬件和软件,也会出现系统等故障。所以应该在意外发生之前做好充分的准备工作,以便在意外发生之后有相应的措施能快速恢复数据库运行。
图3-21 数据库备份与恢复界面
3.8报表设计
报表是管理系统中最为重要的组成部分之一,它是一种主要的数据输出手段,可以把数据打印出来以供查询或备份保留。
设计步骤:
1.在工程中新建一个窗体。
2.在窗体中添加TQuickRep组件,即报表的主体。
3.在该窗体的implementation(实现部分)加语句uses dmunit;(数据模块窗体明)(这是关键一步,否则数据模块的信息无法在他的“Object Inspector”窗口中显示)。
4.设置TQuickRep组件的DataSet属性为“(数据库中相应表)”报表的设计
5.最后一步,也是将报表与调用它的窗体连接的关键,先在调用它的窗体的implementation(实现部分)加语句uses 报表窗体名;再在调用它的窗体的连接按钮(常常为打印按钮)中加代码:窗体名.TQuickRep组件名.Preview;
说明:一个窗体可以有多个加TQuickRep组件,即多张统计报表。
图3-22 报表界面图
3.9数据保护设计
为了提高软件系统的安全性,本系统进行了数据库的安全性设计。1.防止用户直接操作数据库;2. 权限管理设计。
3.9.1防止用户直接操作数据库
用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其他途径操作数据库。
图3-23登陆界面
3.9.2权限管理设计
权限管理是应用项目中比较关键的环节,如果不建立权限管理系统,那么一个“非法用户”可以轻而易举通过该程序进行的所有功能。因此需要权限管理系统进行权限检测,让经过授权的用户可以正常合法的使用已授权的功能,而对那些未授权的非法用户拒之门外。 一个好的权限管理系统应该对每一类或每一个用户,分配不同的系统操作权限,并应具有扩展性,也就是它可以加入到任何一个带有权限管理的应用项目中,就像构件一样可以被重复使用。 我们将整个系统细化,分解为若干个子模块,最后组合成一个完整的应用。也只有这样,才容易实现为每一类或每一个用户分配不同的操作权限。
本程序将权限细分为:‘单据录入’、‘单据查询’、‘统计报表’、‘资料维护’、‘权限管理’5个子模块。
当用户登录前,首先关闭所有子模块所拥有的action,关闭所有功能。
当在用户登录后,根据用户名在user1表中找到相应的主键id,接着通过外键找到相应id所拥有的权限,打开相应的action,激活相应的功能。被屏蔽的功能将显示灰色,不能点击。
权限管理设计主要代码:
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select id from 权限管理 where (id=(select id from user1 where name='''+combobox1.Text+'''))and(权限='''+checkbox5.Caption+''')');
adoquery2.Open;
if adoquery2.FieldByName('id').AsString<>'' then
checkbox5.Checked:=true
else
checkbox5.Checked:=false;
//-------------刷新更新后的列表框中的权限清单------------
adoquery2.Close;
adoquery2.SQL.clear;
adoquery2.SQL.Text:='select 权限 from 权限管理 where id=(select id from user1 where name='''+combobox1.Text+''''+')';
adoquery2.Open;
listbox1.Clear;
while not adoquery2.Eof do
begin
listbox1.Items.Add(adoquery2.fieldbyname('权限').AsString);
adoquery2.Next;
end;
图3-24 权限分配界面
图3-24 仅有查询权限的用户的主界面
确定每个角色对数据库表的操作权限。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。
| 角色 | 操作权限 |
| 1 | 单据录入 |
| 2 | 单据查询 |
| 3 | 统计报表 |
| 4 | 资料维护 |
| 5 | 权限管理 |
当以后,数据库里的信息变得很多时,查询、更新、删除会比较繁琐。因此,将数据库按逻辑上的一个大表分割成物理上的几块。使表的每块的索引要比在整个数据集上的索引要小,能有效提高更新和查询的性能。
在数据库和系统的维护上,要日常检查, 故障修理, 故障登记,安装和调试登记。同时,对于重要的信息进行数据库备份。数据库的资料是保障系统正常运作的必要条件,应该根据数据库的大小和其他因素定期备份数据库资料用户基本数据库资料备份后的数据文件应存放在另一台服务器,并刻成光盘保存,以确保万无一失。具体实现如章节3.7资料维护与数据库备份模块中的内容所示。
第4章 系统说明
4.1系统环境说明
阳光快递管理系统是应用Delphi7软件进行开发设计,运用Pascal语言进行编程,应用SQL Server2000进行数据库设计。
1.本系统是在Windows XP下开发的,程序测试环境为Windows XP。
2.系统时间设定,为保证程序查询功能的正常使用,应设置系统日期格式。
设置步骤:
1)打开控制面板,单击【区域设置】。
2)在弹出的【区域设置 属性】对话框中,单击【日期】选项卡,在【短日期格式】列表框中选择“yyyy-mm-dd”列表项。
3.数据库环境设置
本文档同时提供备份数据库,只需将它还原,并命名为“kd”。
1)打开企业管理器,在Sql server组中的local中新建数据库,命名为kd
2)右击kd数据库,单击“所有任务”/“还原数据库”菜单项,选择“从设备”,点击“选择设备”,点击“添加”,选择备份数据库文件夹的路径,点击确定,再次点击确定。
3)点击选项,打钩,修改”移至物理文件名”为“你放数据库的位置”。
4.2数据库的命名规则
本系统的数据库和所有数据表大多数是应用中文的拼音缩写,个别的用简单的英文命名。
第5章 收获与心得
通过这次的课程设计,在圆通快递管理信息系统的设计和实现过程中,对数据库的设计流程,sql语句的复杂使用,数据库编程和delphi的开发语言等,有了众多的认识和了解,更加灵活应用。
同时在本次信息系统的设计中,我能够更加积极查阅相关的资料和在网上寻求相应的组件用法,不局限于书本中,在提高课内知识的同时,更加提高了自己的信息检索能力。建立一个信息系统是困难的,但发现问题、寻求解决方法、完成改进方案则更加困难,所以信息检索能力显得更加重要。
对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。希望本次课程设计所建立的阳光快递管理信息系统在现实的快递行业信息管理中能够有一定的应用价值。
附录 程序设计清单
| 文件名 | 文件类型 | 说明 |
| aboutunit | 单元文件 | 关于本系统 |
| backupunit | 单元文件 | 数据备份与还原 |
| cx_paisongunit | 单元文件 | 快递派送查询 |
| Cx_receunit | 单元文件 | 快递收件查询 |
| Cx_tosuunit | 单元文件 | 客户投诉查询 |
| Cx_zzunit | 单元文件 | 快递中转查询 |
| Dmunit | 单元文件 | 管理数据库组件(数据模块) |
| Flash | 单元文件 | 启动窗体 |
| Loginunit | 单元文件 | 登录窗体 |
| Mainunit | 单元文件 | 快递系统主窗体 |
| Paisongunit | 单元文件 | 快递派送录入 |
| Receunit | 单元文件 | 快递接收录入 |
| Rpt_customer | 单元文件 | 客户运量统计报表 |
| Rpt_fj | 单元文件 | 派送单报表 |
| Rpt_js | 单元文件 | 接收单报表 |
| Rpt_tjunit | 单元文件 | 统计报表 |
| Rpt_ts | 单元文件 | 客户投诉单报表 |
| Rpt_zz | 单元文件 | 快递中转报表 |
| Selecdataunit | 单元文件 | 数据选择窗体 |
| Tj_customerunit | 单元文件 | 客户运量统计 |
| Tj_paisongunit | 单元文件 | 派送统计 |
| Tj_receunit | 单元文件 | 收件统计 |
| Tj_tosuunit | 单元文件 | 投诉统计 |
| Tj_zzunit | 单元文件 | 中转统计 |
| Tj_weipaisong | 单元文件 | 未派送统计查询 |
| Tosuunit | 单元文件 | 投诉录入 |
| Zhongzhuanunit | 单元文件 | 中转录入 |
| Zl_memounit | 单元文件 | 备注数据库 |
| Zl_senderunit | 单元文件 | 品名数据库 |
| Zl_user | 单元文件 | 用户维护 |
| kd | 工程文件 | 主程序 |
