admin管理员组文章数量:1122854
收银台
项目描述:
- 项目背景
- 项目核心功能
- 项目模块划分
- 数据库设计
- 设计API
- 项目总结
一. 项目背景
收银台:作为商场超市所必不可少的配套设施,越来越多的被客户所关注。收银台俗称付款处,是顾客付款交易的地方,也是顾客在商店最后停留的地方。
传统收银台存在很多问题,诸如:
- 收款结算速度慢,容易出现营业差错
- 不宜进行商品调价,盘点效率低
- 商品信息管理和人员信息管理不当而造成利润受损
- 用户体验不好
二. 核心功能:
因此我们实现了新型收银台系统,快捷方便,节省大量人力成本,不容易出错,能够快速反馈出商品的详细信息。
开发这个系统可以方便快捷地查出顾客结帐情况,商品信息情况,每天的售货情况,方便了对超市商品管理、人员管理,大大提高了超市的售货速度。进而加速了社会的发展速度,提高了人民的生活水平。
整体框架
三. 模块划分
1.登录模块
后台管理员和前台售货员需要根据自己的用户名以及密码进行登录。用户输入名户名以及密码后,根据不同身份,显示不同界面,用户进行其相应操作。
- 此时我们需要用到Duilib开源库以及MySQLS数据库
- 界面通过xml文件来配置
使用Dui Designer工具绘制图像
xml文件代码
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Window size="800,600"><HorizontalLayout bkcolor="#FF00FF00"><Button name="btnHello" text="Hello World" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" /></HorizontalLayout>
</Window>
由此可得到我们的登陆界面:
//获取用户名
CEditUI* pEditUserName = (CEditUI*)m_PaintManager.FindControl(_T("EDIT_USER_NAME"));
CDuiString strUserName = pEditUserName->GetText();
//获取密码
CEditUI* pEditPassword = (CEditUI*)m_PaintManager.FindControl(_T("EDIT_USER_PASSWORD"));
CDuiString strPassword = pEditPassword->GetText();
2. 后台管理员模块
员工操作
- 查询员工基本信息
- 添加新员工
- 员工离职后,删除员工信息
- 员工信息变更时,更新员工信息,比如:更新员工薪资
商品操作
- 按照条件查询商品的信息
- 商品入库
- 过期商品的删除
- 商品信息更新,比如:价格发生变动
- 按照日期查询商品销售情况
3. 售货员模块
售货
- 录入商品信息
- 出售:会员出售和普通用户出售
- 如果客户不满意,退货
会员管理
- 增加会员
- 删除会员
- 查询会员
- 更新会员信息
四. 数据库设计
这里我们用到了四张表
职工表
create table Employee(id int, -- 员工编号 name varchar(20), -- 员工名字 gender varchar(3), -- 员工性别 birthday Date, -- 生日 password varchar(20), -- 员工密码 position varchar(10), -- 员工职位 telephone varchar(11), -- 联系方式 salary double(9,2) -- 联系方式
);
商品表
create table Goods( GoodsID int, -- 商品编号 GoodsName varchar(20), -- 商品名称 GoodsType varchar(20), -- 商品类别:水果、烟酒、日常用品、副食等 ProductDate DATE, -- 商品生产日期 DeadDate DATE, -- 商品过期日期 Price double(9,2), -- 商品价格 Unit varchar(3), -- 计量单位 Inventory int, -- 库存量:商品剩余数量 AlarmValye int -- 报警值:低于该值时,应提醒管理员进货
);
售货记录表
create table SellRecord( GoodsName varchar(20), -- 商品名称 GoodsPrice double(9, 2), -- 商品价格 Amount int, -- 售出数量 Unit varchar(3), -- 计量单位 SellTime Date, -- 售出时间 Operator varchar(20) -- 售货员
);
会员表
create table Member( Name varchar(20), -- 会员名字 Telephone varchar(20), -- 会员电话 Level int, -- 会员级别 Score int, -- 会员积分 Time Date -- 办理会员日期
);
五. 设计API
数据库操作类的封装
class MySQL{
public:MySQL();bool ConnectMySql(const char* host, // 主机名称const char* user, // 用户名const char* passward, // 密码const char* dbName, // 数据库名int port=3306); // 端口号:默认为3306~MySQL();bool Insert(const string& strSQL); bool Delete(const string& strSQL); bool Update(const string& strSQL); size_t GetCount(const string& strSQL); vector<vector<string>> Select(const string& strSQL);// 切换数据库 bool SelectDB(const string& daName);
private:MYSQL* _mySql; // mysql连接的实例对象std::string _dbName;vector<string> _tables;
};#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")MySQL::MySQL(){// 初始化mySql_mySql = mysql_init(nullptr);
}bool MySQL::ConnectMySql(const char* host, const char* user, const char* passward,const char* dbName,int port){// 连接mySql数据库if (!mysql_real_connect(_mySql,host,user,passward,dbName,port,NULL,0)){return false;}//c++连接mysql时,比如查询语句中含有中文,或者得到结果中含有中文,经常出现编译出错或乱码问题。//VS编译器默认使用gbk编码。//如果将mysql设置为utf-8编码,则需要先将c++中的各种中文字符串转为utf-8编码输入mysql,//得到的结果为utf-8编码,需要转为gbk才能正常显示。转来转去很麻烦。mysql_query(_mySql, "set names 'gbk'");return true;
}bool MySQL::SelectDB(const string& dbName){if (mysql_select_db(_mySql, dbName.c_str())){return false;}return true;
}bool MySQL::Insert(const string& strSql){// 执行sql语句if (mysql_query(_mySql, strSql.c_str())){return false;}return true;
}bool MySQL::Update(const string& strSQL){// 执行sql语句if (mysql_query(_mySql, strSQL.c_str())){return false;}return true;
}vector<vector<string>> MySQL::Select(const string& sql){vector<vector<string>> vRet;//指定SQL语句if (mysql_query(_mySql, sql.c_str())){string vsRet(mysql_error(_mySql));return vRet;}// 检索完整的数据集到客户端MYSQL_RES *res = mysql_store_result(_mySql);if (res == NULL){return vRet;}// 用来保存结果集中行的信息MYSQL_ROW rows;// 结果集中总共有多少行数据int num_fields = mysql_num_fields(res);while (rows = mysql_fetch_row(res)){int i = 0; vector<string> vItem; vItem.resize(num_fields); for (i = 0; i < num_fields; i++){vItem[i] = rows[i];}vRet.push_back(vItem);}const char* str = mysql_error(_mySql); mysql_free_result(res); return vRet;
}size_t MySQL::GetCount(const string& strSQL){// 指定指定SQL语句if (mysql_query(_mySql, strSQL.c_str())) {return 0; }// 检索完整的数据集到客户端MYSQL_RES *res = mysql_store_result(_mySql); if (res == NULL) { return 0; }return mysql_num_fields(res);
}bool MySQL::Delete(const string& strSQL){// 执行sql语句if (mysql_query(_mySql, strSQL.c_str())) {return false; }return true;
}MySQL::~MySQL(){mysql_close(_mySql);
}
六. 项目总结
本项目基于Duilib界面库和MySQL数据库的操作实现的新型收银台,通过数据库操作类的封装,创建不同使用者界面,根据身份信息不同,登录不同的操作界面,来管理商品或人员信息。
本文标签: 收银台
版权声明:本文标题:收银台 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1687851311a149197.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论