# 快递驿站系统GUI **Repository Path**: curriculum-design/express_station_system_gui ## Basic Information - **Project Name**: 快递驿站系统GUI - **Description**: 跨平台GUI版本 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 13 - **Forks**: 3 - **Created**: 2019-12-21 - **Last Updated**: 2025-06-28 ## Categories & Tags **Categories**: ecommerce **Tags**: None ## README 快递驿站系统 ============ 系统功能 ---------- * 包裹管理:主要包括包裹入库、包裹查询、包裹出库、库存盘点等。 * 短信发送:可以按照星期进行自动编号(取件码),实物上标记取件码(不写用户名字),按取件码顺序摆放,方便快速找。 * 快递邮寄:快递邮寄开票、快递邮寄结款、未付款查询、快递邮寄查询等。 差错记录管理:客户对已到达的包裹进行验收时,对有差错问题的包裹填写差错记录。 设计目标 ---------- 在实现以上业务逻辑的前提下,我们将开发两套用户界面,控制台界面用于测试业务逻辑,GUI界面提供更简洁的操作方便用户使用。因此,程序整体需要实现良好的前后端分离,后端业务逻辑模块与前端界面模块不能有耦合,考虑到快递驿站管理软件将主要在移动端使用,我们将Android作为系统的目标平台之一。 系统功能设计 --------- ![p1](/mdimg/p1.PNG) ![p2](/mdimg/p2.PNG) ![p3](/mdimg/p3.PNG) 类设计与类结构 ---------- * **date(时间类)**,它描述一个日期,可以生成该日期的取件码 * **expressBase(包裹快递基类)** * **package(包裹类)**,描述驿站代收的快递单件 * **express(快递类)**,描述驿站发出的快递单件 * **Error(差错类)**,描述快递差错信息 类间关系(UML图)如下: ![uml](/mdimg/uml.png) 模块设计详解 ----------- 由于要使用户界面与业务逻辑没有耦合,业务逻辑部分首先基于面向对象思想进行抽象,用`express`和`package`类分别存储驿站中包裹和驿站发出快递的信息。并对其进行封装,生成简洁易用的过程式接口——静态空间`dataOperation`供给前端界面调用。其中含有保存所有`express`和`package`对象的两个`list`。下面将在这个顶层设计的基础上,解析所要实现的每个功能实现逻辑: ### 包裹模块 * **包裹入库**:功能由静态空间`dataOperation`实现,它构造`package`对象,存储到自己的`package`容器`dataOperation::allPackage`中。 * **通过取件码进行包裹查询**:功能由静态空间`dataOperation`实现,它遍历`dataOperation::allPackage`,逐个比对取件码,找到即返回该对象指针,找不到返回`nullptr`。 * **包裹出库**:功能由`package`的`outStock`方法实现,其置该`package.isOutStock`为`true`。 库存盘点:功能由静态空间`dataOperation`实现,它遍历`dataOperation::allPackage`,访问所有对象的`isOutStock`状态,进行统计,返回已取件和未取件数量的二元组。 * **分配取件码**:功能在`package`构造函数中实现,通过系统日期计算当前取件码。取件码结构为“当前周数-当前星期几-当前分秒-当前在库包裹数”,取件码反应了包裹入库的时间顺序,可以按照该顺序在货架上摆放。 ### 快递模块 * **邮寄开票**:功能由`express`的`getExpressBill`方法实现,该函数返回快递单。在GUI界面中,填写邮寄信息后,会自动弹出快递单。也可以输入快递单号查询快递单。 * **邮寄结款**:功能由`express`的`pay`方法实现,其置`express.isPaid`为`true`。 未付款查询:功能由静态空间`dataOperation`实现,它遍历`dataOperation::allExpress`,将所有`isPaid`属性为`false`的对象指针组成一个`vector`,将其返回。 * **差错记录管理**:每个`express`都有一个差错信息类(`Error`)对象作为成员,外部可对其进行设置。如果设置了差错信息,在打印快递单时也会将差错信息输出。