物品"复活"软件设计文档
针对大学生群体开发的闲置物品交易平台,解决学生宿舍空间有限、物品处置困难的问题。
- 提供简单易用的物品信息管理功能
- 支持用户权限管理系统(管理员和普通用户)
- 支持动态物品类型管理(管理员可自定义物品类型和属性)
- 支持物品分类管理(食品、书籍、工具等)
- 不同类别物品支持特定属性
- 保证基础数据安全性
- 支持命令行交互操作
- 具备良好的可扩展性
- 功能优先:开发初期以实现核心功能为主
- 适度封装:在保证功能完整性的前提下进行基础封装
- 用户体验:提供清晰的交互指引和错误处理
- 安全平衡:在安全性和开发效率间取得平衡
- 面向对象:使用继承和多态实现物品分类系统
系统支持两种类型的用户:
-
管理员(Admin):
- 可以设置新的物品类型(定义物品类型的名称和各个属性)
- 可以修改物品类型
- 可以审批普通用户的注册申请
- 拥有普通用户的所有功能
-
普通用户(Normal User):
- 需要注册(填入基本信息,包括住址、联系方式等)
- 需要管理员批准后才能成为正式用户
- 可以添加物品(先选择物品类型,再填入物品信息)
- 可以搜索物品(先选择类型,再输入关键字进行搜索)
- 可以删除物品
- 可以查看所有物品
职责:管理用户信息和权限
属性封装:
- 用户名(私有字符串)
- 密码(私有字符串)
- 用户类型(私有UserType枚举:ADMIN或NORMAL)
- 用户状态(私有UserStatus枚举:PENDING待审批或APPROVED已批准)
- 住址(私有字符串)
- 电话(私有字符串)
- 邮箱(私有字符串)
方法设计:
- 构造方法:初始化用户信息
- 信息获取方法:提供安全的属性访问
- 状态管理方法:批准/拒绝用户
- 权限检查方法:判断是否为管理员、是否已批准
职责:管理用户注册、登录和审批
方法设计:
- 用户注册:registerUser() - 普通用户注册,初始状态为待审批
- 用户登录:login() - 验证用户名和密码,只有已批准用户才能登录
- 查找用户:findUser() - 根据用户名查找用户
- 获取待审批用户:getPendingUsers() - 返回所有待审批的用户列表
- 批准用户:approveUser() - 管理员批准用户注册
系统初始化时自动创建一个默认管理员账户:
- 用户名:
admin - 密码:
admin123 - 状态:已批准
系统支持管理员动态定义物品类型及其属性。每个物品类型可以包含多个属性,每个属性可以是以下类型之一:
- 字符串(STRING)
- 整数(INTEGER)
- 浮点数(FLOAT)
职责:定义物品类型的结构
属性封装:
- 类型名称(私有字符串)
- 属性列表(私有vector)
方法设计:
- 添加属性:addAttribute() - 为物品类型添加属性
- 修改属性:modifyAttribute() - 修改指定索引的属性
- 删除属性:removeAttribute() - 删除指定索引的属性
- 显示信息:printType() - 打印物品类型及其属性信息
职责:管理所有物品类型
方法设计:
- 添加物品类型:addItemType() - 创建新的物品类型
- 查找物品类型:findItemType() - 根据名称查找物品类型
- 为类型添加属性:addAttributeToType() - 为指定类型添加属性
- 修改类型属性:modifyAttributeInType() - 修改指定类型的属性
- 选择类型:selectType() - 在界面中选择物品类型
系统初始化时自动创建以下默认物品类型:
-
食品:
- 保质期(字符串)
- 数量(整数)
-
书籍:
- 作者(字符串)
- 出版社(字符串)
-
工具:
- 工具状态(字符串)
-
其他:
- 无特定属性
职责:管理用户联系信息
属性封装:
- 姓名(私有字符串)
- 电话(私有字符串)
- 邮箱(私有字符串)
方法设计:
- 构造方法:初始化所有联系信息(姓名、电话、邮箱)
- 信息获取方法:提供安全的属性访问(getName, getNum, getEmail)
- 显示方法:格式化输出联系人信息
- 信息修改方法:支持更新联系信息
职责:管理物品公共信息
属性封装:
- 物品名称(保护字符串)
- 物品说明(保护字符串)
- 物品所在地址(保护字符串)
- 联系人信息(保护Contacts对象)
- 物品类别(保护ItemCategory枚举,用于向后兼容)
- 物品类型名称(保护字符串,动态类型)
方法设计:
- 构造方法:初始化物品完整信息
- 信息获取方法:提供安全的属性访问
- 显示方法:虚函数,支持多态显示
- 信息修改方法:支持更新物品信息
- 类型名称方法:获取和设置物品类型名称
为了向后兼容,系统保留了原有的物品派生类(FoodItem、BookItem、ToolItem、OtherItem)。新系统使用Item类的typeName字段来标识物品类型,同时保留了原有的category枚举字段。
职责:核心业务逻辑处理
属性封装:
- 物品列表(私有vector<Item*>,使用指针支持多态)
方法设计:
- 添加物品:验证后加入列表(支持多态)
- 删除物品:基于名称的安全删除,自动释放内存
- 查询物品:支持名称搜索
- 列表显示:遍历显示所有物品信息
- 按类型和关键字搜索:searchByTypeAndKeyword() - 先按类型筛选,再按关键字在物品名称、说明和联系人名称中匹配
- 析构函数:自动释放所有动态分配的内存
职责:用户交互处理
属性封装:
- 物品管理器实例(私有Inventory对象)
- 联系人列表(私有vector)
- 用户管理器实例(私有UserManager对象)
- 物品类型管理器实例(私有ItemTypeManager对象)
- 当前登录用户(公共User*指针)
方法设计:
- 用户登录:login() - 验证用户凭据并登录
- 用户注册:registerUser() - 处理新用户注册
- 菜单显示:showMainMenu(), showAdminMenu(), showNormalUserMenu() - 根据不同用户类型显示不同菜单
- 管理员功能:
- adminManageItemTypes() - 管理物品类型
- adminAddItemType() - 添加新物品类型
- adminModifyItemType() - 修改物品类型
- adminApproveUsers() - 审批用户
- 普通用户功能:
- normalUserAddItem() - 添加物品(先选择类型)
- normalUserSearchItem() - 搜索物品(先选择类型,再输入关键字)
- 通用功能:entrySelect() - 处理用户选择的操作
所有物品都包含以下公共信息:
- 物品名称
- 物品说明
- 物品所在地址
- 物品类型名称(动态类型)
- 联系人姓名(来自用户注册信息)
- 联系人手机(来自用户注册信息)
- 联系人邮箱(来自用户注册信息)
物品的特定属性由管理员在定义物品类型时指定。默认类型包括:
- 保质期(字符串)
- 数量(整数)
- 作者(字符串)
- 出版社(字符串)
- 工具状态(字符串,如:全新、良好、需维修等)
- 仅包含公共信息
管理员可以根据需要创建新的物品类型,并为每个类型定义不同的属性。
- 所有类属性设为私有或保护
- 通过公共方法提供受控访问
- 使用智能指针或手动内存管理确保资源安全
- 输入参数基础验证
- 集合操作边界检查
- 空值处理机制
- 类别选择验证
- 用户登录验证
- 权限检查
- 用户输入错误友好提示
- 系统异常基础捕获
- 操作失败明确反馈
- 内存管理安全(析构函数自动释放)
- 使用虚函数实现多态
- 基类指针存储派生类对象
- 正确调用派生类的重写方法
- 普通用户需要管理员批准后才能使用系统
- 只有管理员可以管理物品类型和审批用户
- 所有用户操作都需要先登录
配置好cmake后,在文件根目录运行:
make run
mingw32-make run // 如果直接执行make报错
配置cmake:
brew install cmake make
运行:
make run
- 启动程序后,会显示登录/注册菜单
- 默认管理员账户:
- 用户名:
admin - 密码:
admin123
- 用户名:
- 选择菜单项
2(注册) - 依次输入:
- 用户名
- 密码
- 住址
- 联系电话
- 邮箱
- 注册成功后,需要等待管理员审批
- 选择菜单项
1(登录) - 输入用户名和密码
- 只有已批准的用户才能成功登录
管理员登录后可以:
- 添加物品:选择菜单项1,先选择物品类型,然后输入物品信息
- 删除物品:选择菜单项2,输入要删除的物品名称
- 查看所有物品:选择菜单项3,显示所有物品的详细信息
- 搜索物品:选择菜单项4,先选择物品类型,再输入关键字
- 管理物品类型(菜单项5):
- 查看所有物品类型
- 添加新物品类型(可以定义属性)
- 修改物品类型(添加或修改属性)
- 审批用户(菜单项6):
- 查看待审批用户列表
- 批准用户注册申请
- 退出登录:输入
e退出登录
普通用户登录后可以:
-
添加物品(菜单项1):
- 先选择物品类型(从系统定义的类型中选择)
- 输入物品名称
- 输入物品说明
- 输入物品所在地址
- 系统自动使用用户注册时的联系信息
-
删除物品(菜单项2):
- 输入要删除的物品名称
-
查看所有物品(菜单项3):
- 显示所有物品的详细信息
-
搜索物品(菜单项4):
- 先选择物品类型
- 输入搜索关键字(会在物品名称、说明和联系人名称中进行匹配)
-
退出登录:输入
e退出登录
- 选择菜单项
5(管理物品类型) - 可以选择:
- 查看所有物品类型
- 添加新物品类型:
- 输入类型名称
- 为类型添加属性(属性名称和类型:字符串/整数/浮点数)
- 修改物品类型:
- 选择要修改的类型
- 添加新属性或修改现有属性
- 选择菜单项
6(审批用户) - 查看待审批用户列表
- 输入要批准的用户名
- 用户被批准后即可登录使用系统
- 所有输入字段不能为空
- 物品名称用于唯一标识物品
- 普通用户必须等待管理员批准后才能登录
- 搜索功能支持不区分大小写的关键字匹配
- 程序退出时会自动释放所有内存
- 管理员默认账户请及时修改密码
普通用户搜索物品时:
- 需要先选择物品类型(从系统中定义的物品类型中选择)
- 然后输入搜索关键字
- 系统会在以下字段中匹配关键字:
- 物品名称
- 物品说明
- 联系人名称(物品发布者的用户名)
- 匹配是不区分大小写的
所有图源在/doc/out目录下





