基于QT(C++)+SQLServer实现(WinForm)超市管理系统
超市库存管理系
使用 QT 开发,SQLserver 数据库配置 ODBC 数据源:QSQLServer
超市库存管理系统需求规格说明书
1 引言
校园超市的库存物资管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,订货、管理的渠道各有差异,各个校园超市之间的管理体制不尽相同,因此仓库的库存管理必须编制一套库存信息管理系统,用计算机对其管理,同时要依据校园超市自身的实际处境来制作对应的处理方法。超市库存管理系统很好的解决了上述问题,它依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,减轻了劳动强度,并且能够快速反映出商品入库、出库、存货等状况,使管理人员快速对市场的变化做出相应的决策,提高超市经营管理效率。
1.1 项目背景
本宝鸡文理学院超市库存管理系统软件需求分析报告是为学校超市系统而编写的。一套适用于宝鸡文理学院的超市进行较多种类货物的库存管理系统,力争以最简洁的方式帮助超市管理人员进行入库、出库操作和库存管理,提供表格导出等功能。本宝鸡文理学院超市库存管理报告旨在使超市商品管理人员明确超市库存管理系统的要求和细节,给开发者(18 级软工二班代登辉、韩思琦、陈培陪、李彤彤及 18 级软工一班杨玉芳)了解需求实现的难度和困难,最终提供给老师(审核人)和超市商品管理人员(管理者)讨论和审核,达到沟通效果。
对于现今的大学生超市仓库管理非常繁琐,管理人员需付出大量的工作时间来统计商品的数量和保证到期日期早的商品能及时上架,工作效率很低。因此为提高工作效率,减轻货物管理人员的工作负担,决定开发商品仓库管理系统软件。该商品仓库管理系统的开发主要是为了解决超市商品库存的缺货问题,保证超市商品供销链上的及时性与动态性。
1.2 术语定义
专门术语:
静态数据--系统固化在内的描述系统实现功能的一部分数据。
动态数据--在软件运行过程中用户输入的后系统输出给用户的一部分数据,也就是系统要处理的数据。
数据字典--数据字典中的名字都是一些属性与内容的抽象和概括,它们的特点是数据的“严密性”和“精确性”。
2 应用环境
2.1 硬件环境
列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能,包括:
a. CPU 主频 1.6GHZ 以上及内存 1G 以上;
b. 硬盘 150G 以上;
c. 操作系统:windows10
d. 数据库服务器:Microsoft SQL Server2008
2.2 软件环境
操作系统 windows 系统,数据库管理系统:SQL 数据库系统,QTCreator 编译工具。
2.3 应用环境
Windows 10 系统
3 基于 UML 分析系统功能需求
3.1 用例图
用例图从用户角度描述系统功能。该用例图描述系统的参与者仓库管理员与系统的登录、用户管理、供货商管理、商品管理、入库管理、出库管理、报表管理等用例之间的关系。
系统用例图入图 1 所示:
图 1 用例图
3.2 活动图
活动图是描述活动的顺序。此系统的活动图分为:出库活动图和入库活动图,它们各自描述了各自与系统进行交互的流程操作。
该出库活动图描述了仓库管理员与系统进行交互的流程操作。
出库活动图如图 2 所示:
图 2 出库活动图
该入库活动图描述了仓库管理员与系统进行交互的流程操作。
入库活动图如图 3 所示:
图 3 入库活动图
3.3 类图
类图是描述类,接口以及它们之间关系的图,是一种静态模型,显示了系统中各个类的静态结构。该类图描述超市库存管理系统中的相关类以及各个类的关系来描述静态视图,为的是让开发人员能够更加清楚了解组成该系统的结构。
超市库存管理系统类图如图 4 所示:
图 4 超市库存管理系统类图
3.4 顺序图
顺序图代表了一个相互作用,在以时间为次序的对象之间的通信集合。
出库顺序图:该顺序图描绘了仓库管理员、出库、数据库之间传递消息的时间顺序,以此来表示出库的行为顺序。
出库顺序图如图 5 所示:
图 5 出库顺序图
入库顺序图:该顺序图描绘了仓库管理员、入库、数据库之间传递消息的时间顺序,以此来表示入库的行为顺序。
入库顺序图如图 6 所示:
图 6 入库顺序图
3.5 通信图
出库通信图如图 7 所示:
图 7 出库通信图
出库通信图如图 8 所示:
图 8 入库通信图
3.6 状态图
状态图主要描述了系统在各个状态之间的转换关系。在进行商品入库操作时,通过点击界面上的各个菜单跳转到各个不同的页面,显示商品的不同状态,各个操作执行完成之后都可以直接返回到系统操作界面,执行其他操作。超市库存管理系统状态图如图 9 所示:
图 9 状态图
4 性能需求
4.1 精度
输入的数据必须符合设计的格式要求:
a. 产品数量必须为正整数;
b. 商品金额属性,小数点后面取前两位。
4.2 时间特性要求
说明对于该软件的时间特性要求:
a. 响应时间 0.1s;
b. 更新处理时间 0.1s;
c. 数据的转换和传送时间 0.1s;
d. 解题时间;等待的要求 0.5s。
要求登陆系统时,系统的响应时间控制在一秒内,更新的时间越低越好, 数据传送时间尽量缩短。
4.3 灵活性
该系统是以 C++ 语言为背景的,应该是可以跨平台运行的,至于操作系统应该也是可以转换在 windows 操作系统。数据库是 SQL Server。
如果需求发生某些变化时,该软件对这些变化的适应能力如下:
a. 操作方面添加部分表单;
b. 运行环境不变;
c. 同其他软件接口不变;
d. 精度和有效时限不变;
e. 计划的变化或改进。
5 系统实现
5.1 管理员进入系统
系统里已写入默认管理员,输入用户名、密码,即可进入该系统。管理员进入系统界面截图如图 10 所示。
图 10 登录界面截图
bool Mysql::verifyLogin(const QString name,const QString password)
{QSqlQuery query;query.exec("select * from [user] where exist = 1");bool chekname=false;bool chekpassword=false;// 打印输出用户名和密码while (query.next()) {qDebug() << query.value(0).toInt()<< query.value(1).toInt()<< query.value(2).toString();if(query.value(1).toInt() ==1 ){chekname = (QString::compare(name,query.value(2).toString(),Qt::CaseSensitive) == 0);chekpassword = (QString::compare(password,query.value(3).toString(),Qt::CaseSensitive) == 0);}else{continue;}if(chekname&&chekpassword){return true;}}return false;
}
5.2 注册新用户功能
管理员进入系统后可添加新的用户或者注册新的管理员。注册界面截图如图 11 所示:
图 11 注册界面截图
// 当注册页面的注册按下
void Register::on_pushButton_login_clicked()
{MySQL sql;if(sql.isUid(ui->lineEdit_id->text().toInt())){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("编号已存在"));return;}// 用户名是否存在if(sql.isUname(ui->lineEdit_uname->text())!=-1){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("用户名已存在"));return;}// 两次密码是否一致if((QString::compare(ui->lineEdit_password->text(),ui->lineEdit_password_2->text(),Qt::CaseSensitive) == 0)){User user;user.setId(ui->lineEdit_id->text().toInt());user.setUname(ui->lineEdit_uname->text());user.setUpassword(ui->lineEdit_password->text());user.setExit(1);int age = ui->lineEdit_age->text().toInt();if(age>0&&age<200){ // 年龄user.setAge(age);}else{ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("年龄错误"));return;}user.setSex(ui->combo_sex->currentText());user.setTel(ui->lineEdit_tel->text());if(sql.applyAccount(user)){user.printUser();QMessageBox::warning(nullptr, "注意", "用户创建成功");on_pushButton_clear_clicked();}}else { // 两次密码不一样ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("两次密码不一致"));}
}
5.3 获取管理员用户界面截图
仓库管理员可以获取用户管理员界面如图 12 所示:
图 12 获取用户界面图
std::vector* Mysql::getUsers()
{std::vector *List = new std::vector;QSqlQuery query;query.exec("select * from [user] where exist = 1");while (query.next()) {User user;user.setId(query.value(0).toInt());user.setExit(query.value(1).toInt());user.setUname(query.value(2).toString());user.setUpassword(query.value(3).toString());user.setSex(query.value(4).toString());user.setAge(query.value(5).toInt());user.setTel(query.value(6).toString());user.setTime(query.value(7).toDateTime());List->push_back(user);}return List;
}
5.4 用户信息模糊查询界面截图
默认管理员可以通过模糊信息查询用户信息,用户信息模糊查询界面如图 13 所示:
图 13 模糊查询界面图
5.5 商品入库界面截图
管理员进入商品入库界面,选择供应商、输入商品名称等一系列信息,并选择过期时间。商品入库界面如图 14 所示:
图 14 商品入库界面图
void InForm::on_pushButton_in_clicked(){QString sname = ui->comboBox->currentText();QString catename = ui->comboBox_2->currentText();QString cname = ui->lineEdit->text();int id = sql.getGoodCid(sname,catename,cname);if(id == 0){// 创建商品ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("请先创建新商品"));return ;}int num = ui->spinBox_num->text().toInt();float price = ui->doubleSpinBox_price->text().toFloat();float weight = ui->doubleSpinBox__kg->text().toFloat();if(num <= 0 || price <= 0 || weight <= 0){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("商品数量、价格、质量不能为零"));return ;}QString selftime = ui->dateTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss");QString tmpSql = QString("INSERT INTO [dbo].[in] ([cid], [price], [time], ""[shelftime], [num], [uid], [weight] )""VALUES""( %1, %2, GETDATE(), '%3', %4, %5, %6 )").arg(id).arg(price).arg(selftime).arg(num).arg(uid).arg(weight);qDebug() << tmpSql;sql.Myexec(tmpSql);QMessageBox::warning(nullptr, "提示", "入库成功");ui->label_tip->clear();}
5.6 新建商品信息界面截图
管理员进入新建商品界面,依次添加信息、选择商品类别、供应商即可成功添加新的商品。新建商品信息界面如图 15 所示:
图 15 新建商品信息界面图
void CommodityAddForm::on_pushButton_new_clicked(){QString name = ui->lineEdit_cname->text();QString category = ui->comboBox_category->currentText();QString suppliername = ui->comboBox->currentText();if(suppliername.isEmpty()){this->ui->label_tip->setText("请先选择供应商");return;}int sid = sql.SupplierID(suppliername);int maxnum = ui->lineEdit_MAX->text().toInt();int minnum = ui->lineEdit_MIN->text().toInt();QString tmp = QString("INSERT INTO [dbo].[commodity]([cname],"" [sid], [category], [minnum], [maxmun]) ""VALUES ('%1', %2, '%3', %4, %5)").arg(name).arg(sid).arg(category).arg(minnum).arg(maxnum);qDebug() << tmp;sql.Myexec(tmp);suppliercomboBox();QMessageBox::warning(nullptr, "提示", "商品信息创建成功");}
5.7 获取供应商界面截图
进入供应商界面即可获取所有的供应商信息,输入供应商任一信息即可相对应的供应商信息。获取供应商界面如图 16 所示:
图 16 获取供应商界面图
std::vector *Mysql::getSupplier(QString name){std::vector *list = new std::vector;QSqlQuery query;query.exec(QString("select * from [supplier] where exist = 1 and sname LIKE '%%1%'").arg(name));while (query.next()) {Supplier supplier;supplier.setSid(query.value(0).toInt());supplier.setExist(query.value(1).toInt());supplier.setSname(query.value(2).toString());supplier.setAddr(query.value(3).toString());supplier.setTel(query.value(4).toString());list->push_back(supplier);}return list;}
5.8 删除界面截图
点击删除供应商的任一信息即可删除该供应商对应的所有信息。删除供应商界面如图 17 所示:
图 17 删除供应商界面图
void SupplierForm::on_pushButton_delete_clicked(){int row = ui->tableView->currentIndex().row();int id = this->model->data(this->model->index(row,0)).toInt();list[size] =id;qDebug() << list[size] << "row = " << row;size++;model->removeRow(ui->tableView->currentIndex().row());}// 点击修改供应商void SupplierForm::on_pushButton_alter_clicked(){int row = ui->tableView->currentIndex().row();Supplier supplier;getSupplier(row,supplier);supplier.printSupplier();upadteSupplier(supplier);}
5.9 出库界面截图
管理员进入商品出库界面,选择供应商以及商品类别即可。出库界面如图 18 所示:
图 18 出库界面图
void OutForm::on_pushButton_out_clicked()
{int row = ui->tableView->currentIndex().row();int id = this->model->data(this->model->index(row,0)).toInt();int num = this->model->data(this->model->index(row,2)).toInt();int outnum = this->model->data(this->model->index(row,8)).toInt();if(num < outnum){QMessageBox::warning(nullptr, "警告", "出库数量超过库存");this->model->setItem(row, 8,new QStandardItem(QString("")));return;}if(outnum <= 0){QMessageBox::warning(nullptr, "警告", "请输入出库数量");return;}int out = num - outnum;QString tmp = QString("UPDATE [dbo].[in] ""SET [num] = %1 WHERE [iid] = %2").arg(out).arg(id);sql.outgood(id,outnum,uid);qDebug() << tmp;sql.Myexec(tmp);QMessageBox::warning(nullptr, "提示", "出库成功");on_pushButton_refresh_clicked();
}
5.10 出入库报表管理界面截图
进出入库界面,在报表类型下拉框中选择入库,在时间下拉框中选择时间段即可导出相应的信息。入库报表管理界面如图 19 所示:
图 19 入库报表管理界面图
进出入库界面,在报表类型下拉框中选择出库,在时间下拉框中选择时间段即可导出相应的信息。出库报表管理界面如图 20 所示:
图 20 出库报表管理界面图
void StatementForm::on_pushButton_refresh_clicked(){QString IO = ui->comboBox->currentText();QString time = ui->comboBox_2->currentText();// 获取当前时间QDateTime data = QDateTime::currentDateTime();if(QString::compare(time,QString("一天以内")) == 0){//data = data.addDays(-1);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一个月内"))== 0){data = data.addMonths(-1);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一个季度内"))== 0){data = data.addMonths(-3);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一年以内"))== 0){data = data.addYears(-1);time = data.toString("yyyy-MM-dd");}else{time = QString("");}std::vector *Slist;if(QString::compare(IO,QString("入库")) == 0){initable(1);Slist = sql.getinGoods(time);int i = 0;for(std::vector<Goods>::iterator it=(*Slist).begin();it!=(*Slist).end();it++){/*setItem设置条目栏中的一个格子的信息*/setINTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL;}else{initable(2);Slist = sql.getoutGoods(time);int i = 0;for(std::vector<Goods>::iterator it=(*Slist).begin();it!=(*Slist).end();it++){/*setItem设置条目栏中的一个格子的信息*/setOUTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL;}qDebug() << uid << "id id";qDebug() << data.toString("yyyy-MM-dd") << " " << IO ;}
5.11 商品管理界面截图
进入商品信息管理界面,在供应商下拉框中选择供应商,在商品类别下拉框中选择商品类别即可导出相应的信息。商品管理界面如图 21 所示:
图 21 商品管理界面图
void GoodManangeForm::on_pushButton_find_clicked(){initTable();QString sname = ui->comboBox->currentText();QString catename = ui->comboBox_2->currentText();qDebug() << sname << " " << catename;std::vector *Slist = sql.getGoods(sname,catename);int i = 0;for(std::vector::iterator it=(Slist).begin();it!=(Slist).end();it++){/*setItem设置条目栏中的一个格子的信息*/setTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL;}
5.12 警告界面截图
实时更新警告,一分钟更新一次。
警告商品过期界面如图 22 所示:
图 22 警告商品过期界面图
警告商品即将过期界面如图 23 所示:
图 23 警告商品即将过期界面图
警告商品库存不足界面如图 24 所示:
图 24 警告商品库存不足界面图
警告商品库存过量界面如图 25 所示:
图 25 警告商品库存过量界面图
void WarningForm::settableGoods(int i, std::vector::iterator s){s->printGoods();this->model->setItem(i, 0, new QStandardItem(QString("%1").arg(s->getCid())));this->model->setItem(i, 1, new QStandardItem(QString(s->getCname())));this->model->setItem(i, 2, new QStandardItem(QString("%1").arg(s->getNum())));this->model->setItem(i, 3, new QStandardItem(QString(s->getCategory())));this->model->setItem(i, 4, new QStandardItem(QString(s->getSnmae())));this->model->setItem(i, 5, new QStandardItem(QString(s->getAddr())));this->model->setItem(i, 6, new QStandardItem(QString(s->getTel())));}void WarningForm::Overdue(){ui->label->clear();ui->label->setText(QString("警告商品过期"));std::vector goodlist = getgoods();int i = 0;for(std::vector::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem设置条目栏中的一个格子的信息*/settable(i,it);i++;}}void WarningForm::Expiring(){ui->label->clear();ui->label->setText(QString("警告商品即将过期"));std::vector goodlist = getExpiringgoods();int i = 0;for(std::vector::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem设置条目栏中的一个格子的信息*/settable(i,it);i++;}}void WarningForm::lack(){ui->label->clear();ui->label->setText(QString("警告商品库存不足"));std::vector goodlist = getlackgoods();int i = 0;for(std::vector::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem设置条目栏中的一个格子的信息*/settableGoods(i,it);i++;}}void WarningForm::nimiety(){ui->label->clear();ui->label->setText(QString("警告商品库存过量"));std::vector goodlist = getnimietygoods();int i = 0;for(std::vector::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem设置条目栏中的一个格子的信息*/settableGoods(i,it);i++;}}bool WarningForm::ifOverdue(){QSqlQuery query;query.exec(QString("SELECT * from goodsin where shelftime < GETDATE()"));query.next();return !query.value(1).toString().isEmpty();}bool WarningForm::ifExpiring(){QSqlQuery query;query.exec(QString("SELECT * from goodsin where shelftime < GETDATE()+30 and shelftime > GETDATE()"));query.next();return !query.value(1).toString().isEmpty();}bool WarningForm::iflack(){QSqlQuery query;query.exec(QString("SELECT * from goodsin where num < minnum"));query.next();return !query.value(1).toString().isEmpty();}bool WarningForm::ifnimiety(){QSqlQuery query;query.exec(QString("SELECT * from goodsin where num > maxmun"));query.next();return !query.value(1).toString().isEmpty();}
相关文章:
基于QT(C++)+SQLServer实现(WinForm)超市管理系统
超市库存管理系 使用 QT 开发,SQLserver 数据库配置 ODBC 数据源:QSQLServer 超市库存管理系统需求规格说明书 1 引言 校园超市的库存物资管理往往是很复杂、很繁琐的。由于所掌握的物资种类众多,订货、管理的渠道各有差异,各个校园超市之间的管理体制…...
06 - 多线程-JUC并发编程-原子类(二)
上一章,讲解java (java.util.concurrent.atomic) 包中的 支持基本数据类型的原子类,以及支持数组类型的原子类,这一章继续讲解支持对实体类的原子类,以及原子类型的修改器。 还有最后java (java…...
HTML:网页的骨架 — 入门详解教程
HTML:网页的骨架 — 入门详解教程 HTML(HyperText Markup Language,超文本标记语言)是构建网页的基础语言,负责定义网页的结构和内容。无论是简单的个人博客,还是复杂的企业网站,HTML都是不可或…...
Oracle 分析函数(Analytic Functions)
Oracle 的分析函数(Analytic Functions)是一类特殊的函数,用于在查询结果的窗口(window)内执行计算(如排名、累计求和、移动平均等),不会聚合结果行,而是为每一行返回一个…...
全新电脑如何快速安装nvm,npm,pnpm
以下是全新电脑快速安装 nvm、npm 和 pnpm 的详细步骤,覆盖 Windows/macOS/Linux 系统: 一、安装 nvm(Node Version Manager) 1. Windows 系统 下载安装包: 访问 nvm-windows 官方仓库,下载 nvm-setup.ex…...
风丘年度活动:2025年横滨汽车工程展览会
| 展会简介: 2025年横滨汽车工程展览会,是由日本汽车工程师学会(JSAE)精心主办的一场行业盛会。预计届时将汇聚超550家参展商,设置1300个展位,展览面积超过20000平方米。展会受众广泛,面向汽车…...
springBoot接入文心一言
文章目录 效果接入步骤项目接入配置类:WenXinYiYan前端vue代码js代码 后端mapper层service层controller层 测试代码 效果 先来看一下最后实现的效果 (1)未点击前的功能页面 (2)点击后的页面 (3ÿ…...
力扣HOT100——无重复字符的最长子字符串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 思路: 滑动窗口。遍历整个字符串,…...
Python高级爬虫之JS逆向+安卓逆向1.4节:数据运算
目录 引言: 1.4.1 赋值运算 1.4.2 算术运算 1.4.3 关系运算 1.4.4 逻辑运算 1.4.5 标识运算 1.4.6 爬虫接单赚了10块钱 引言: 大神薯条老师的高级爬虫安卓逆向教程: 这套爬虫教程会系统讲解爬虫的初级,中级,高…...
微信小程序无缝衔接弹幕效果纯CSS
效果图 主要运用蒙层、动画延迟 .wxml <view wx:for"{{detail}}" wx:key"{{index}}" class"container" style"--s:{{item.s}}s" ><view wx:for"{{2}}" wx:key"{{index}}" class"container-item&q…...
vue3:十一、主页面布局(增加左上角系统名称)
一、实现效果 侧边栏可平滑折叠/展开,带有过渡动画 折叠时隐藏Logo文字,只显示图标 优化滚动区域,避免标题栏随菜单滚动 解决折叠/展开时出现的滚动条闪烁问题 二、 实现 1、可以使用 SCSS(Sass 的一种语法) 首先…...
孟加拉slot游戏出海代投FB脸书广告策略
对于在孟加拉进行游戏出海代投的广告策略,可以考虑以下方面: 定位目标受众:确定目标受众群体,包括他们的年龄、兴趣爱好、消费习惯等信息,以便精准定位广告投放对象。 优质创意设计:设计吸引人眼球的广告素…...
算法题(125):子集
审题: 本题需要我们将题目给定数组的所有子集枚举起来 思路: 方法一:二进制枚举 枚举对象:0到1<<n -1的整形数据 枚举顺序:顺序 枚举方式:二进制枚举 在解释二进制枚举的方法之前,我们先看…...
深度学习中的数值稳定性处理详解:以SimCLR损失为例
文章目录 1. 问题背景SimCLR的原始公式 2. 数值溢出问题为什么会出现数值溢出?浮点数的表示范围 3. 数值稳定性处理方法核心思想数学推导 4. 代码实现分解代码与公式的对应关系 5. 具体数值示例示例:相似度矩阵方法1:直接计算exp(x)方法2&…...
查看linux中是否安装了tiktoken
在 Linux 中检查 tiktoken 是否安装的完整方法 通过 pip 命令检查 查看已安装的 Python 包列表: pip list | grep tiktoken 若输出包含 tiktoken,则表示已安装。 获取包详细信息: pip show tiktoken 若显示包版本、安装路径…...
从源码看无界 1.0.28:为何说它是 qiankun 的 “轻量化替代方案”(二)
我们接着上一节的《从源码看无界 1.0.28:为何说它是 qiankun 的 “轻量化替代方案”》内容继续往下。 生命周期图 sandbox.active 方法 我们找到 packages/wujie-core/src/sandbox.ts 文件的第 275 行: //.../** 激活子应用* 1、同步路由* 2、动态修改iframe的fetch* 3、准…...
SQL注入之时间盲注攻击流程详解
目录 一、时间盲注原理 二、完整攻击流程 1. 注入点确认 2. 基础条件判断 3. 系统信息收集 (1)获取数据库版本 (2)获取当前数据库名 4. 数据提取技术 (1)表名枚举 (2)列名猜…...
【NIO番外篇】之组件 Selector
目录 一、Selector:网络世界的“机场管制塔” / “总机接线员” 📡什么是 Selector?它的作用是什么? 二、Selector 的工作流程:塔台是怎么指挥飞机的?1. 飞机就位 (准备 Channel):2. 向塔台报到…...
对接印度尼西亚股票数据源API
随着对东南亚市场的关注增加,获取印度尼西亚(IDX)股票市场的实时和历史数据变得尤为重要。本文将指导您如何使用Spring Boot框架对接一个假定的印尼股票数据源API(例如,StockTV),以便开发者能够…...
SQL(9):创建数据库,表,简单
1、创建数据库,一句SQL语句搞定 CREATE DATDBASE 数据库名 CREATE DATABASE my_db;2、创建表 CREATE TABLE 表名(字段名 类型) CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255)…...
医学成像中的对比语言-图像预训练模型(CLIP):一项综述|文献速递-深度学习医疗AI最新文献
Title 题目 CLIP in medical imaging: A survey 医学成像中的对比语言-图像预训练模型(CLIP):一项综述 01 文献速递介绍 尽管在过去十年中视觉智能领域取得了重大进展(何恺明等人,2016;塔尔瓦宁和瓦尔…...
KEGG注释脚本kofam2kegg.py--脚本010
采用kofam结合kegg官网htxt进行注释 用法: python kofam2kegg.py kofam.out ath00001.keg my_kegg_output code: import sys from collections import defaultdictdef parse_kofam_file(kofam_file):ko_to_genes defaultdict(list)with open(kofam_file) as f:…...
hevc编码芯片学习-VLSI实现
在Fan等工作中,根据特定算法设计了整像素运动估计引擎,最终的BD-Rate损失非常小,但是硬件开销比较大,搜索算法缺少灵活性,本次设计优化了硬件设计架构, 微代码 取像素 压缩 水平参考像素存储器 寻址控制 转…...
选导师原理
总述 一句话总结:是雷一定要避,好的一定要抢。方向契合最好,不契合适当取舍。 首先明确自身需求: 我要学东西!青年导师,好沟通,有冲劲,高压力。 我要摆烂!中老年男性教…...
2.5亿像素卷帘快门CMOS大幅面扫描相机
规格说明书 主要特征 ◎ 卷帘快门CMOS 传感器 ◎ 2.46 亿像素分辨率 ◎ 全分辨率最高帧率达5fps ◎ 高灵敏度及低噪声 ◎ ROI 区域设置 ◎ 曝光时间灵活控制(外触发,自由运行) ◎ 输出像素格式8/10/12bit 可选 ◎ 自动坏像素校正、平场校正…...
CD27.【C++ Dev】类和对象(18)友元和内部类
目录 1.友元 友元函数 几个特点 友元类 格式 代码示例 2.内部类(了解即可) 计算有内部类的类的大小 分析 注意:内部类不能直接定义 内部类是外部类的友元类 3.练习 承接CD21.【C Dev】类和对象(12) 流插入运算符的重载文章 1.友元 友元函数 在CD21.【C Dev】类和…...
企业级硬盘的测试流程
测试硬盘流程 找一个有Linux操作系统的服务器,配置好管理ip的接口,连接上linux服务器,执行lsblk命令来查看设备的情况 使用mkfs命令格式化要测试的硬盘,格式化之前务必把数据进行备份,可以使用blkid命令查看硬盘的文件…...
std::enable_shared_from_this 模板类的作用是什么?
我们以Connection类的shared智能指针为例说明,std::enable_shared_from_this<Connection> 是一个标准库模板类,它的作用是让一个类的对象能够安全地生成指向自身的 std::shared_ptr,即使该对象最初是通过普通指针或其他方式创建的。 作…...
鸿蒙开发-ArkUi控件使用
2.0控件-按钮 2.1.控件-文本框 Text(this.message).fontSize(40) // 设置文本的文字大小.fontWeight(FontWeight.Bolder) // 设置文本的粗细.fontColor(Color.Red) // 设置文本的颜色------------------------------------------------------------------------- //设置边框Tex…...
大数据学习栈记——MongoDB编程
本文介绍NoSQL技术:MongoDB用Java来连接数据库,执行常见的数据库操作,使用环境:IntelliJ IDEA、Ubuntu24.04。 配置Maven 我们需要使用“MongoDB Driver”,所以先打开“MongoDB Java Driver”项目,但是提…...
体系结构论文(六十七):A Machine-Learning-Guided Framework for Fault-Tolerant DNNs
A Machine-Learning-Guided Framework for Fault-Tolerant DNNs DATE 2024 研究动机 深度神经网络(DNN)虽然对某些扰动具有天然的容错性,但在面对硬件故障(如软错误、老化、环境干扰等)时,仍会出现输出错…...
qt designer 创建窗体选择哪种屏幕大小
1. 新建窗体时选择QVGA还是VGA 下面这个图展示了区别 这里我还是选择默认,因为没有特殊需求,只是在PC端使用...
游戏引擎学习第225天
只能说太难了 回顾当前的进度 我们正在进行一个完整游戏的开发,并在直播中同步推进。上周我们刚刚完成了过场动画系统的初步实现,把开场动画基本拼接完成,整体效果非常流畅。看到动画顺利呈现,令人十分满意,整个系统…...
sql工具怎么选最适合自己的?
sql工具怎么选? 为什么大多数主流工具又贵又难用?有没有一款免费好用的sql工具?像大多数朋友经常用的sql工具应该都遇到过这种情况,用着用着收到了来自品牌方的律师函,或者处理数据时经常卡死,再或者不支持…...
css实现一键换肤
实现一键换肤的时候,我们除了动态替换引用的css文件,还可以通过使用css变量的方式,达到所需效果。 首先我们来了解css变量,css变量以--开头,引用时va(--变量名),例 :root{--default-color: #fff; } .box{b…...
波束形成(BF)从算法仿真到工程源码实现-第八节-波束图
一、概述 本节对MVDR、LCMV、LMS等算法的波束图进行仿真。 二、MVDR代码仿真 2.1 mvdr代码 clc; clear; M 18; % 天线数 lambda 10; d lambda / 2; L 100; %快拍数 thetas [10]; % 期望信号入射角度 thetai [-30 30]; % 干扰入射角度 n [0:M-1]; vs exp(-1j * 2…...
静态代码深度扫描详解
静态代码深度扫描是一种通过分析源代码结构、语法、语义及潜在逻辑,在不运行程序的情况下全面检测代码缺陷、安全漏洞和质量问题的技术。它通过结合数据流分析、控制流分析、符号执行等高级技术,实现对代码的深度理解,帮助开发团队在早期发现…...
LC25. K 个一组翻转链表(自己用)
25. K 个一组翻转链表 Java代码: 思路:利用虚拟头节点结合反转链表实现 Code: class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy new ListNode(0);if (head null || k 1)return head;ListNode…...
Spring事务同步器在金融系统中的应用:从风控计算到交易投递
一句话总结 通过 TransactionSynchronization 机制,成功将投行交易系统的可靠性提升至金融级要求,并在对公贷款风控中实现高效资源管理。未来,事务管理将不仅仅是“提交”与“回滚”的二元选择,而是向智能化、实时化演进的核心基础设施。 1. 架构设计 1.1 整体架构图 2.…...
sealos跳转到cusor安装出错
第一次打开cursor安装出错怎么办 我出现这个问题的解决方式是重新下载并且切换目录解决...
【CUDA 】第3章 CUDA执行模型——3.5循环展开(1)
CUDA C编程笔记 第三章 CUDA执行模型3.5 循环展开3.5.1 展开的规约 待解决的问题: 第三章 CUDA执行模型 3.5 循环展开 循环展开是一种循环优化的技术,通过减少分支出现频率循环维护指令。 循环主体代码被多次编写,任何封闭的循环可以把迭代…...
AndroidStudio编译报错 Duplicate class kotlin
具体的编译报错信息如下: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) D…...
LeetCode hot 100—搜索二维矩阵
题目 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 fa…...
栈与队列习题分享(精写)
最小栈 题解 一、题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素 val 推入堆栈。 void pop() 删除堆栈顶部的元素。 int…...
Kotlin 集合过滤全指南:all、any、filter 及高级用法
在 Kotlin 中,集合过滤是数据处理的核心操作之一。无论是简单的条件筛选,还是复杂的多条件组合,Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法,并展示如何在实际开发中灵活运用它们。 1. 基础…...
【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)
官方从零教程:https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md 8-lerobot aloha装配完毕如何进行遥操作 需要先完成的 组装好了so-100 2个机械臂下载安装了lerobot的代码环境:固定好主从臂,通过usb链接到同一个…...
影刀RPA证书题库包含初级、中级、高级和AP初级
影刀rpa初级证书选择题答案,影刀证书答案,影刀rpa考试,影刀初级考试,影刀初级考试选择题 原因 以前的在线题库https://exam.ezrpa.store/是为了方便更新题目和使用的,但经过实际使用发现大部分人“不会用”࿱…...
LR(0)
LR0就是当我处在自动机为红色这些结束状态的时候,这些红色状态就代表我们识别到了一个句柄,那现在的问题就是识别到了句柄,那要不要对他进行归约?LR0就是我不管当前指针指向的终结符是什么,我都拿它做规约 这里的二号状…...
基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)
大家好,我是徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕业设计…...
Matplotlib库详解
Matplotlib 是 Python 里一个特别常用的绘图库,它能帮你创建各种各样的可视化图形,像折线图、柱状图、散点图等。对于数据可视化、数据分析和科学研究而言,它是非常重要的工具。接下来我会以初学者的视角,为你详细介绍 Matplotlib…...