Shopping Control System

School Homework experiment

DDL 4/13 12:00

base: 控制系统的核心
cli: 基于命令行的用户友好交互界面

在example里面有一个完整的使用cli的用例,和一个完整的base用例(已经没有这种base用例了)

咕咕咕


使用指南
  该程序基于C++11标准进行编写,并大量采用11的语言特性。请确保你的编译器支持该标准。
版权
  你可以任意的修改代码,或是重新发布该代码。


cli
  这是给普通用户写的使用手册。



base文件夹
  这是为程序员和开发人员准备的使用手册。
    如果你是普通用户请查阅cli文件夹的使。
用手册。

  给程序员的最佳建议:派生你自己的管理系统!
    在Manager类中我们省略了很多细节。如果有必要,你可以自己实现这些细节。
    派生是不错的选择。我们的大量类成员为protected类型,这意味着派生类也可以直接实现对他们的访问。

  头文件goods.h定义了Goods类
    表示一种特定的商品,记录了商品的名称 品牌 价格 数量等
      Goods(std::string id, std::string name, std::string brand, double p, int n)
        使用五个参数初始化
      Goods(std::string s)
        显式的从一个字符串初始化。该字符串必须按顺序包含以上五个参数。
      get_id()、get_name()、get_brand()、get_price()、get_number()
        返回对应的值
      set_price(double a)、set_number(int a)
        修改对应值,返回布尔类型
      is_same_item(const Goods &g)
        检查是否具有相同编号
      is_same_price(const Goods &g)
        检查是否价格相同
      重载的运算符
        调用者应负责保证进行的下列运算是有意义的。
        + - += -=用来实现商品数量的加减运算,商品的其他属性由左操作数决定。
        > < >= <=实现了对数量多少的比较

  头文件goods_list.h定义了Goods_list类
    给进阶程序员的指南:
      这个类公共继承了标准库list类。你可以将他当做一个std::list<Goods>对象。可使用标准库算法扩展更多功能。
    以公有成员实现的常用方法:
      find_by_id
      find_by_name
      find_by_brand
        这三个函数都接受一个标准库string对象,并返回一个新的Goods_list对象包含搜索结果。如果没有搜索到就返回空容器。
      is_empty()
        标准库empty成员的别名
      remove_item(...)
        接受一个字符串或是一个Goods对象的引用,(将字符串当做id属性)寻找并删除id相同的元素。
        返回布尔值指示删除是否成功。如果没有匹配的对象删除将失败。
      重载的运算符
        + - += -=
        将相同id的商品的数量相加减。
        如果被减去的容器不包含减去的容器需要的某个元素,则会引发异常。
        数量为0的元素不会自动删除。如果有需要请自行删除。

  头文件user.h定义了User类和SuperUser类
    这两个类的对象无法复制,在程序中你应该经常地使用他们的引用。
    尽管这两个类具有几乎相同的接口,但他们并不基于同一个类派生来。
    共同的接口
      User(std::string uname, std::string pwd, const Goods_list &c)
      SuperUser(std::string uname, std::string pwd)
      get_username()
      verify(std::string pwd)
        验证密码的正确性
    User类特有的成员
      cart
        cart是普通用户的购物车对象。

  头文件manager.h定义了Manager类
    Manager类保存了整个购物系统所有的库存、用户信息。这个类同样无法复制。

    Manager(const std::string filename)
      显式用一个cfg配置文件初始化整个管理系统的数据库
    cbegin() cend()
      用来浏览库存的标准库迭代器。该迭代器保证至少为前向迭代器。
      在任何情况下都不应对迭代器的底层类型做出假设。请用auto推断其类型。
    login(std::string uname, std::string pwd)
    superuser_login(std::string uname, std::string pwd)
      接受用户名和密码参数,返回一个对应用户类型的引用。
      如果发生错误将抛出异常。
    以下功能都接受一个用户引用作为第一个参数,因此下述参数均为其他的必须参数。这个用户必须位于用户库中。
      superuser_remove_item
        接受一个Goods类或表示id的字符串。下架该商品。
      superuser_add_item
        接受一个Goods类的引用,并将它的副本保存到库存中。
        用户应保证这个商品不是重复的。
      superuser_modify_item
        接受一个Goods类或表示id的字符串,返回库存中的对应商品的引用。
        如果库存中没有这个商品,则抛出异常。
      superuser_view_sell_list
        查看销售记录文件中的内容。返回销售记录的string对象。
      user_checkout
        结账。
        结账成功会返回true,并修改对应库存记录,清空购物车。
        用户需要保证结算时购物车中要购买的商品数量不多于库存数量。
        如果结账发生任何错误都返回false。