北邮面向对象程序设计(C++)2022年春季学期实验作业要求

本文记录了北京邮电大学面向对象程序设计实践(C++)的大作业(综合作业+基础题目)的内容需求,用以备查。BUPT 的 OOP 课程的综合题目每年都会发生变化。为了使有需要的朋友在阅读代码时能够理解部分设计用意,特此将课程设计的内容记录如下。

《面向对象程序设计实践(C++)》课程基础实验

PDF:《面向对象程序设计实践(C++)》课程基础实验.pdf

物流管理系统设计与实现

随着移动互联网的发展,上网购物、快递取货已经广泛地融入人们的生活。此次作业的任务是使用 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. 快递员揽收:快递员通过客户端揽收。 接受快递:用户通过客户端查看自己未签收的快递,对自己的快递进行签收,签收意味着此物品的运送任务完成。

主要要求如下:

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

作业的其他要求

  1. 程序设计要求
    •  如有必要的友元函数,要在实验报告和程序中说明每个友元函数的不可替代性,为什么一定要用友元才能实现。
    •  自己编写的代码,除主函数和必要的友元函数外,不允许出现任何一个非类成员函数。
    •  任何不改变对象状态(不改写自身对象数据成员值)的成员函数均需显式标注 const。
    •  本作业的实现可采用任何未明文限制的技术方案。
  2. 代码规范性要求
    • 代码需遵循课件提出的编码规范要求。
    • 通过开发环境自动生成的界面类代码(如有),全部数据成员和成员函数需在类声明时加以注释,函数体内的必要步骤要加以注释。
    • 其他全部类代码的数据成员和成员函数的声明和实现均需加以注释,成员函数的必要步骤要加以注释

PDF:物流管理系统设计与实现.pdf

发表评论