🪵Good模块
搭建储存和操作商品信息的底层数据结构
当前进度
.---+- include -+- tools -+- color.h
| | +- hint.h
| | +- info.h
| |
| +- user -+- user.h
| |
| +- good -+- good.h <---
| |
| +- config.h <---
|
+- src -+- tools -+- color.c
| +- hint.c
| +- info.c
|
+- data -+- id.txt
| +- user.txt
| +- good.txt <---
|
+- user -+- user.c
|
+- good -+- good.c <---
|
+- main.c其实商品模块和之前用户模块的设计过程是类似的,读者可以先尝试自行设计,有了一个自己的版本之后再来参考我的写法,可能会更有学习效果一些。
设计数据类型
商品有三种状态:销售中、已售出、已下架。我们用一个枚举类型表示商品的状态:
如果对于枚举类型已经不太熟悉的话,可以寻找相关教程复习一下。
参考教程: https://www.runoob.com/cprogramming/c-enum.html
后续内容还会涉及到枚举类型的使用,将不再额外说明。
根据前面所说的要求,我么可以在good.h中定义如下的用户类型:
选择数据结构
我选用了数组结构,因此我们需要约定商品的总数不超过MAX_GOOD,并且在config.h中定义这个宏。
我们在good.c中定义这个数据结构,同时定义商品的初始总数为0:
设计对外接口
接口设计
根据项目刚开始时的需求汇总,我们对于商品的数据结构提供如下一些接口,声明在good.h头文件中。
接口实现
从外部文件导入商品信息
注意,枚举类型本质上是无符号整数。
将商品信息导出到外部文件
获取商品对象
打印详细的商品信息
因为商品状态是用枚举类型表示的,而枚举类型本质上只是一个无符号整数,但用户需要看到的应该是一个表示状态的字符串,所以我们使用stateName数组建立起枚举类型和对应字符串之间的映射关系。这样在打印的时候就可以打印状态名称,而不是012了。
添加新商品
注意判断是否数组已满,防止数组越界导致程序崩溃。
查找给定ID的商品
这里的搜索采用的是最直白的顺序搜索,其实基于顺序表的搜索可以采用折半搜索来提高效率。不过我们这个项目侧重点不在此就是了,所以直接顺序搜索也没问题。
删除给定ID的商品
打印详细的商品信息
为买家搜索商品
这里我采用的匹配方式是字串匹配,用到了string.h中的strstr函数,不清楚的读者可以寻找相关教程查看一下。
参考教程: https://www.runoob.com/cprogramming/c-function-strstr.html
之后再次使用该函数便不再特别说明。
为管理员搜索商品
打印给定卖家id的商品
打印出售中的商品
至此我们已经完成了商品数据结构模块的编写,之后编写交互界面的时候只需要根据用户的需求调用这些封装好的数据结构接口就可以了。干得漂亮,我们继续完成最后一块——订单的数据结构吧!
最后更新于
这有帮助吗?