GithubHelp home page GithubHelp logo

express-management-system's Introduction

物流管理系统设计与实现

北京邮电大学2022春《面向对象程序设计与分析》课程作业

作业要求

背景

随着移动互联网的发展,上网购物、快递取货已经广泛地融入人们的生活。此次作业的任务是使用C++语言,基于面向对象的程序设计方法,设计并实现一个简单的物流管理平台,提供物流管理、用户管理、员工管理等功能。

本作业包含三个题目,使得该物流管理平台功能逐步增强。前两个题目为单机版,运行时体现为一个进程。第三个题目为网络版,要求采用CS结构,客户端和服务器端为不同的进程。注意完成题目要求,建议先有系统的整体设计方案,再去分三阶段逐步实现系统,避免后期程序改动巨大。

本作业必须提交三个程序,即每个题目各提交1个程序,不能由于第三个程序满足前两个的功能要求,就只提交一个。每个程序的代码只完成自身的功能,三个程序之间应该体现出功能逐步增加的关系。

除程序外,本作业要求提交实验报告,可以提交word或者pdf版本。报告内容至少包含:整个程序(最后产出的程序)的总体设计、关键类的设计、以及实现中的重要问题和解决方案、想法、经验、教训等。报告格式不限,但要求组织结构合理、逻辑清晰、描述清楚。

题目一:物流业务管理子系统和用户管理系统子系统

功能支持

  1. 用户注册&登录:快递新用户注册平台账号,已注册用户用平台账号登录平台,要求已注册用户的信息长久保留。

  2. 修改账户密码:登录后对用户账号的密码修改。

  3. 余额管理:对用户账号中余额的查询、充值。

  4. 发送快递:用户申请发送快递到指定用户的手中,提交发送后系统为本次快递分配快递单号,本次快递状态变为待签收,并扣除用户的余额(每件快递15元),并将扣除的金额转到物流公司管理员的账号。

  5. 接受快递:用户可查看自己未签收的快递清单,可选择其中的一个或多个快递进行签收,签收意味着此物品的运送任务完成。

  6. 查询快递:用户查询自己发出的所有快递信息,以及接收的所有快递信息,可根据发送人/接收人、时间、快递单号查询快递。

  7. 物流业务管理:物流公司管理员可查看所有用户信息和所有的历史快递的详细信息,可根据用户、时间、快递单号进行查询。

主要要求

  • 用户至少要包含如下属性:用户名(保证唯一)、姓名、电话、密码、账户余额、地址等。
  • 物流公司管理员(不需要支持注册)包含如下属性:账户余额、用户名、姓名、密码等。
  • 请把用户信息写入到文件中(要求使用文件存储一定信息,以练习对文件的操作和流的输入输出),实现数据持久化。物流公司、快递快件等信息也要求持久化,持久化方式不做要求。
  • 物品一共有两种状态:已签收、待签收,属性至少包括寄送时间、接收时间、寄件用户、收件用户、物品状态、物品描述等。
  • 注意面向对象**的使用。

题目二:快递员任务管理子系统

功能支持

在题目一的基础之上引入快递员角色和功能:

  1. 管理快递员:物流公司管理员添加和删除物流公司的快递员。即,用户登录时可选不同身份,比如包括用户,快递员,管理员等,不同身份对应不同功能和权限。

  2. 快递分类:快递至少包含如下几类:易碎品(8元/kg)、图书(2元/本)、普通快递(5元/kg)。

  3. 发送快递:用户发送快递到指定用户的手中,提交发送后系统为本次快递分配快递单号,快递进入待揽收状态,并扣除发件用户的余额(不同类型的快递具体计算),扣除金额转到物流公司管理员的账号。

  4. 快递员揽收:物流公司管理员对待揽收快递分配一名快递员,该快递员可查看其名下所有未揽收快递,并选择一个或多个进行揽收,被揽收的快递状态从待揽收变为待签收状态(无需模拟物品运输过程),并从物流公司管理员账号中将该快递费的50%转给快递员账号。

  5. 接受快递:收件用户查看自己未签收的快递,对自己的快递进行签收,签收意味着此物品的运送任务完成。

  6. 快递任务查询:快递员查询自己揽收和投递的所有快递信息,可根据发送人、接收人、时间、快递单号、以及快递状态查询快递信息。

  7. 物流业务管理:物流公司管理员可查看所有用户信息和所有的历史快递的详细信息,可根据用户、时间、快递单号进行查询。物流公司管理员可查看所有快递员及其揽收投递的快递的详细信息,可根据发件人、收件人、时间、快递单号进行查询。

主要要求

  • 快递员至少包含如下属性:姓名、电话、账户余额
  • 请根据快递的分类设计一套继承体系(物品基类-物品子类)。商品基类请至少具有一个虚函数getPrice()用于计算快递的价格。
  • 物品一共有三种状态:待揽收、待签收、已签收。
  • 支持一定的错误处理能力,例如余额不足、非法输入等。

题目三:物流管理系统(网络版)

功能支持

在题目一、二的基础上,将物流管理平台修改成网络版。网络版要求实现如下功能:

  1. 用户登录:用户通过客户端以账号密码登录平台。

  2. 用户发送快递:用户通过客户端向指定用户发送快递,数据发送到服务端等待处理。

  3. 物流管理:物流公司管理员通过客户端为未揽收快递分配快递员。。

  4. 快递员揽收:快递员通过客户端揽收。

  5. 接受快递:用户通过客户端查看自己未签收的快递,对自己的快递进行签收,签收意味着此物品的运送任务完成。

主要要求

  • 网络版需要实现的功能的要求与单机版要求一致。
  • 支持一定的错误场景处理能力。
  • 要求采用传统CS结构而非BS结构,客户端与服务器系统之间使用socket进行通信,不能使用rpc框架。

作业的其他要求

程序设计要求

  • 如有必要的友元函数,要在实验报告和程序中说明每个友元函数的不可替代性,为什么一定要用友元才能实现。
  • 自己编写的代码,除主函数和必要的友元函数外,不允许出现任何一个非类成员函数。
  • 任何不改变对象状态(不改写自身对象数据成员值)的成员函数均需显式标注const。
  • 本作业的实现可采用任何未明文限制的技术方案。

代码规范性要求

  • 代码需遵循课件提出的编码规范要求。
  • 通过开发环境自动生成的界面类代码(如有),全部数据成员和成员函数需在类声明时加以注释,函数体内的必要步骤要加以注释。
  • 其他全部类代码的数据成员和成员函数的声明和实现均需加以注释,成员函数的必要步骤要加以注释。

运行方式

编译方式

已经写好 makefile 文件,仅需在终端中运行:

make

运行方式

默认产生的二进制文件为 debug/bin/express-management-system, 可以根据实际需要修改 makefile 文件。

文件数据存储在二进制文件同目录下的 data 文件夹(若不存在将会自动产生),其目录结构为:

├── data 
│   ├── express
│   └── user
└── express-management-system

express-management-system's People

Contributors

lin594 avatar

Stargazers

Guanzhou Chen avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.