二、数据管理模块设计
使用MySQL数据库进行管理
需要管理的数据:
菜品信息:菜品ID、菜品名称、菜品单价、菜品描述、添加&修改时间
订单信息:订单ID、菜品名称、订单状态,添加时间,修改时间
1.数据库表的设计(2张表)
1.1创建数据库餐厅ct。
create database ct;
primary key:主键约束,约束指定的这一列数据不能为NULL,也不能数据重复,也会创建一个主键索引,为数据构建目录提高查询速率
auto_increment:自增属性,每次插入数据会自动增加1
1.2菜品信息表
create table tb_dish(
id int primary key auto_increment,
name varchar(32),
price int,
info varchar(255),
ctime datetime);
1.3订单信息表
create table tb_order(
id int primary key auto_increment,
dishes varchar(128),
status int,
ctime datetime,
mtime datetime);
订单的菜品信息中,下单菜品是不确定的,因此设计是存储多个菜品ID,组织为json格式的数组“[2,4]”
订单状态:0-未完成 1-完成 2-撤销
2.数据管理模块代码设计
需要封装实现自己的MySQL客户端,完成对数据库中数据的操作
菜品的增删改查:新增菜品、删除菜品、修改菜品名称&单价&描述、查询获取所有菜品信息、查询获取指定菜品信息
订单的增删改查:新增订单、删除订单、修改订单状态&最后一次修改时间、查询所有订单信息、查询指定订单信息
当前项目比较简单,如果指封装一个类,在类中提供各个数据操作的接口,不利于以后扩展
我们可以针对每一个表创建一个操作管理类,这个类实例化的对象就负责指定表数据的操作
class TableDish {
private:
MYSQL* _mysql;
public:
bool Insert(const Json::Value& dish);//通过Json::Value对象向函数内传递菜品信息
bool Update(const int dish_id, const Json::Value& dish);//传入要修改的菜品ID和新的菜品信息
bool Delete(const int dish_id);//传入菜品ID
bool SelectAll(Json::Value* dishes);//以输出参数向外传递所有菜品信息
bool SelectOne(const int dish_id, Json::Value* dish);//传入菜品ID,输出参数返回具体菜品信息
};
class TableOrder {
private:
MYSQL* _mysql;
public:
bool Insert(const Json::Value& order);//通过Json::Value对象向函数内传递订单信息
bool Update(const int order_id, const Json::Value& order);//传入要修改的订单ID和新的订单信息
bool Delete(const int order_id);//传入订单ID
bool SelectAll(Json::Value* orders);//以输出参数向外传递所有订单信息
bool SelectOne(const int order_id, Json::Value* order);//传入订单ID,输出参数返回具体订单信息
};
MYSQL* MysqlInit();//数据库初始化接口
void MysqlDestroy();//数据库句柄销毁接口
bool MysqlQuery(MYSQL* mysql, const std::string& sql);//sql语句执行接口