Qt物料管理系统--局域网版
项目报告
项目名称 萤火虫物料管理系统
项目负责人 王XX
二O二一年 六月——二O二一年 七月
目录
目录
第一章 绪论
第二章 环境介绍
第三章 项目总体设计
第四章 数据库设计
第五章 项目介绍
第六章 重点代码
第一章 绪论
1.1背景
一个组织的运营,都需要对内部的办公用品,生产消耗物料进行台账管理,好用的ERP软件管理系统大大提高物料管理的效率和便捷性,目前市面上的大型ERP都是收费软件,对于功能需求不是太强,刚起步的小组织来说采用收费ERP系统开销较大,而接下来的萤火虫物料管理系统设计就是为了帮助中小组成设计一个开源的精简版ERP,免费提供给需要服务的用户。本系统追求的是算法优化、代码精简、界面简洁优雅、操作简单、实用。
第二章 环境介绍
2.1硬件环境
本系统可以运行在windows版的个人台式机、笔记本上。
2.2软件环境
本系统仅可以运行在window8/window10系统上。
第三章 项目总体设计
3.1功能列表
序号 功能 描述
1 用户管理 添加、修改、删除用户
2 商品管理 完善商品的基本信息
3 进货管理 进货处理
4 库存管理 库存查询、导出
5 出库管理 出库处理
6 生产库存管理 生产临时库存管理
3.2各管理模块功能需求
3.2.1用户管理模块功能介绍
1>新增用户
根据输入的用户名、用户密码、权限分配新增用户
2>删除用户
删除已启用的用户
3>修改用户
根据需求修改用户的密码、权限等级
3.2.2商品管理模块功能介绍
1>新增物料,完善物料的基本信息
2>修改物料信息,根据实际物料信息的变化,及时修改物料信息
3>删除物料,根据实际需求,删除已经弃用的物料
4>新增物料类别,根据实际需要,新增/删除物料类别列表
3.2.3进货管理模块功能介绍
1>进货,已完善基本的信息的物料可以根据实际采购进度,将其录入到采购库存
2>如果库存中的物料价格与后进物料价格不一致,需先将库存中的物料出库操作再进行新物料入库操作
3.2.4库存管理模块功能介绍
1>查看当前采购库存中的所有物料
2>以EXCEL格式导出整个采购库存或筛选后的库存
3.2.5出库管理模块功能介绍
1>根据实际需要,从库存选取合适的物料入库
2>删除当前准备出库的物料信息
3>清空当前所有准备出库的物料信息
第四章 数据库设计
4.1表格关系
本系统为了显示方便,每个表格都比较独立,都是以同一ID作为主键,本系统用的数据库是Qt版sqlite
4.1.1用户表格
4.1.2商品信息表格
4.1.3商品类别表格
4.1.4商品库存表格
4.1.5生产库存表格
项目介绍
5.1登录界面
5.2出库界面
5.3出库明细界面
5.4添加商品类别界面
5.5商品信息界面
5.6进货管理界面
5.7库存管理界面
5.8用户管理界面
5.9生产库存管理界面
第六章 关键代码详解
6.1创建数据库
loginwindow.cpp
//创建数据库句柄
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setUserName("material"); //数据库户名和密码
db.setPassword("11223344");
//设置数据库名称,用户名, 密码
db.setDatabaseName("my.db");
//打开数据库
if(!db.open())
{
qDebug() << db.lastError().text(); //输出错误信息
}
//创建数据库--用户表格,执行创建表格语句 唯一用户
QString sql = "create table USER(user varchar(125) primary key, password varchar(256), limits varchar(15),loginTime varchar(125));";
QSqlQuery query;
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--库存表格,执行创建表格语句 唯一用户 //, num int, sum varchar(256)
sql = "create table GOODS(goodsID integer primary key, goodsName varchar(135), goodsClass varchar(35),"
" goodsModel varchar(35), goodsNum int, goodsUnit varchar(35), goodsPrice float(4,3),goodsSupplier varchar(256), goodsNote varchar(256));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--商品表格,执行创建表格语句 唯一用户
sql = "create table MGOODS(goodsID int primary key, goodsClass varchar(15),goodsName varchar(125), "
"goodsPrice float(4,3), goodsModel varchar(15),goodsUnit varchar(15), goodsSupplier varchar(256), goodsNote varchar(256));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--进货订单表格,执行创建表格语句 唯一用户
sql = "create table ORD(orderID varchar(35), stockTime date not null, supplier varchar(35), stockSum float(3,7), worker varchar(35), stockNote varchar(35));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--进货订单明细表格,执行创建表格语句 唯一用户
sql = "create table DETAIL(orderID varchar(35), goodsID integer, goodsName varchar(35), goodsSupplier varchar(135), goodsNum int);";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--类型表格,执行创建表格语句 唯一用户
sql = "create table TYPE(type varchar(25));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--出库订单表格,执行创建表格语句 唯一用户
sql = "create table OUTORD(orderID varchar(35), worker varchar(35), outBoundTime date not null, outNum integer, outSum float(3,7), outNote varchar(35));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--商品表格,执行创建表格语句 唯一用户
sql = "create table OUTORDDETAIL(orderID varchar(35),goodsID integer, goodsName varchar(125), "
" goodsModel varchar(15),goodsPrice float(4,3), outNum integer);";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--生产库存表格,执行创建表格语句 唯一用户
sql = "create table PDSTORE(goodsID int, goodsName varchar(125), goodsClass varchar(15), "
" goodsModel varchar(15), goodsNum integer);";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
//创建数据库--生产库存表格,执行创建表格语句 唯一用户
sql = "create table PDOUTTB(goodsID int, goodsName varchar(125), goodsModel varchar(15), goodsNum integer, outBoundTime date not null, goodsNote varchar(256));";
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
}
6.2.2登录代码
loginwindow.cpp
//登录
void LoginWindow::on_pushButton_login_clicked()
{
QString username = ui->userlineEdit->text();
QString password = ui->passwordlineEdit->text();
QString curDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
QString sql = QString("select * from USER where user = '%1' and password = '%2'")
.arg(username).arg(password);
QSqlQuery query;
if(!query.exec(sql))
{
qDebug() << query.lastError().text();
return;
}
//查询
if(query.next())
{
qDebug() << "查到数据";
QSqlRecord record = query.record();
this->hide(); //隐藏窗口
//显示主窗口
YHQManagementSystemWin *w = new YHQManagementSystemWin();
w->show();
/* 获取当前用户 */
w->worker = record.value("user").toString();
w->limits = record.value("limits").toString();
delete this;
//更新用户登录时间
QString update = QString("update USER set loginTime = '%1' where user = '%2'").arg(curDateTime).arg(username);
query.exec(update);
if(!query.exec(update))
{
qDebug() << query.lastError().text();
return;
}
}else
{
qDebug()<< "未查询到数据";
QMessageBox::warning(this, "提示" , "登录失败!");
}
}
6.3主应用
6.3.1功能选择代码
yhqmanagementsystemwin.cpp
//功能界面选择函数
void YHQManagementSystemWin::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
if(item->text(column) == "出库")
{
if((this->limits=="1") | (this->limits=="2"))
{
showOutStockSlot();
}
}else if (item->text(column) == "出库明细") {
if((this->limits=="1") | (this->limits=="2"))
{
showOutBoundSlot();
}
}else if (item->text(column) == "商品信息") {
showGoodsPageSlot();
}
else if (item->text(column) == "商品类别") {
showAddTypeSlot();
}
else if (item->text(column) == "进货处理") {
if((this->limits=="1") | (this->limits=="2"))
{
showStockSlot();
}
}
else if (item->text(column) == "库存管理") {
qDebug() << "库存管理";
showStoreSlot();
}
else if (item->text(column) == "用户管理") {
if(this->limits=="1")
{
showUserTable();
}
}
else if (item->text(column) == "首页") {
ui->stackedWidget->setCurrentIndex(5); //跳转到出库管理界面
}
else if (item->text(column) == "生产库存") {
showPDTable();
}
else {
}
}
6.3.2出库管理代码
yhqmanagementsystemwin.cpp
//显示出库管理界面
void YHQManagementSystemWin::showOutStockSlot()
{
qDebug() << "显示出库管理界面";
ui->stackedWidget->setCurrentIndex(4); //跳转到出库管理界面
QStringList headTextList;
headTextList.push_back(QString("编号"));
headTextList.push_back(QString("商品名称"));
headTextList.push_back(QString("分类"));
headTextList.push_back(QString("规格"));
headTextList.push_back(QString("库存量"));
headTextList.push_back(QString("单位"));
headTextList.push_back(QString("单价"));
headTextList.push_back(QString("出库量"));
headTextList.push_back(QString("金额"));
//设置行列数(只有列存在的前提下,才可以设置列标签)
int HlableCnt = headTextList.count();
ui->outStockTable->setColumnCount(HlableCnt);
//表头设置
QTableWidgetItem *headerItem;
for(int i=0; i<ui->outStockTable->columnCount(); i++)
{
headerItem = new QTableWidgetItem(headTextList.at(i));
//获取原有字体设置
QFont font = headerItem->font();
//设置为粗体
font.setBold(true);
//设置字体大小
font.setPointSize(11);
//设置字体颜色
headerItem->setForeground(QBrush(QColor(qRgb(60,60, 60))));
//应用字体设置
headerItem->setFont(font);
//对每个单元格进行设置
ui->outStockTable->setHorizontalHeaderItem(i, headerItem);
}
//不显示序号
ui->outStockTable->verticalHeader()->hide();
//设置整行选中
ui->outStockTable->setSelectionBehavior(QAbstractItemView::SelectRows);
//获取库存数据库所有的ID
QStringList idList;
QString sql = QString("SELECT goodsID FROM GOODS");
QSqlQuery query;
query.exec(sql);
if(!query.exec(sql))
{