收银台

项目描述:

  • 项目背景
  • 项目核心功能
  • 项目模块划分
  • 数据库设计
  • 设计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数据库的操作实现的新型收银台,通过数据库操作类的封装,创建不同使用者界面,根据身份信息不同,登录不同的操作界面,来管理商品或人员信息。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记得多喝热水…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值