当前位置: 首页 > article >正文

使用DeepSeek实现自动化编程:类的自动生成

目录

简述

1. 通过注释生成C++类

1.1 模糊生成

1.2 把控细节,让结果更精准

1.3 让DeepSeek自动生成代码

2. 验证DeepSeek自动生成的代码

2.1 安装SQLite命令行工具

2.2 验证DeepSeek代码

3. 测试代码下载


简述

在现代软件开发中,自动化编程工具如 DeepSeek 为开发人员带来了极大的便利。本文将展示如何借助 DeepSeek 实现一个基于 Qt6 对数据库进行增删改查 的 C++ 类。通过为 C++ 类添加详细的注释,使用 DeepSeek 进行代码的自动化补全。


1. 通过注释生成C++类

1.1 模糊生成

自己也不明白需要实现什么细节的情况下,写一个大致的提示词即可。DeepSeek 会自动生成相应的代码。(可能给出的结果无法让你满意,就像领导布置的任务一样,你先做,做完我再看,大概率是要返工的)

提示词:

帮我写一个c++接口类,用Qt6实现对SQLite数据库的增删改查。

如果有进一步的要求,那么将先把接口定义出来,将注释写好,通过DeepSeek的推理功能去实现。


1.2 把控细节,让结果更精准

提示词:

//要求:帮我写一个c++接口类,用Qt6实现对sqlite数据库的增删改查。
//请按照注释补全接口代码,同时包含所需的头文件、成员变量。class SQLiteManager
{
public:/*** 构造函数,初始化SQLite数据库连接。* @param dbName 数据库文件名(包括路径)。*/SQLiteManager(const QString &dbName);/*** 析构函数,关闭数据库连接并清理资源。*/~SQLiteManager();/*** 创建表。* @param tableName 表名。* @param columns 表的列定义,格式为"column1 type1, column2 type2, ..."。* @return 是否成功创建表。*/bool createTable(const QString &tableName, const QString &columns);/*** 插入数据。* @param tableName 表名。* @param columns 列名列表,格式为{"column1", "column2", ...}。* @param values 对应列的值,格式为{value1, value2, ...}。* @return 是否成功插入数据。*/bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values);/*** 更新数据。* @param tableName 表名。* @param setClause 设置子句,格式为"column1 = value1, column2 = value2"。* @param whereClause WHERE子句,格式为"column = value"。* @return 是否成功更新数据。*/bool update(const QString &tableName, const QString &setClause, const QString &whereClause);/*** 删除数据。* @param tableName 表名。* @param whereClause WHERE子句,格式为"column = value"。* @return 是否成功删除数据。*/bool remove(const QString &tableName, const QString &whereClause);/*** 查询数据。* @param tableName 表名。* @param columns 查询的列名,格式为"column1, column2"。默认为"*",表示查询所有列。* @param whereClause WHERE子句,格式为"column = value"。默认为空。* @return 查询结果模型(QSqlQueryModel)。*/QSqlQueryModel *select(const QString &tableName, const QString &columns = "*", const QString &whereClause = "");
};

要点:

说明接口需求,要实现一个什么样的功能,需要分为几个接口实现?

然后通过注释给出接口的规范,包括:

  • 接口的描述
  • 输入与输出
  • 返回值

1.3 让DeepSeek自动生成代码

将1.2中的详细提示词写完后,保存到文件 或者 直接复制给 DeepSeek: 

 推理中:

以下是DeepSeek实现的SQLiteManager类:

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlQueryModel>
#include <QVariant>
#include <QStringList>class SQLiteManager
{
private:QSqlDatabase m_db;public:SQLiteManager(const QString &dbName){m_db = QSqlDatabase::addDatabase("QSQLITE");m_db.setDatabaseName(dbName);if (!m_db.open()) {qWarning() << "Failed to open database:" << m_db.lastError().text();}}~SQLiteManager(){if (m_db.isOpen()) {m_db.close();}QSqlDatabase::removeDatabase(m_db.connectionName());}bool createTable(const QString &tableName, const QString &columns){QSqlQuery query(m_db);QString sql = QString("CREATE TABLE IF NOT EXISTS %1 (%2)").arg(tableName, columns);if (!query.exec(sql)) {qWarning() << "Create table failed:" << query.lastError().text();return false;}return true;}bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values){if (columns.size() != values.size()) return false;QSqlQuery query(m_db);QString cols = columns.join(", ");QString placeholders = QStringList(columns.size(), "?").join(", ");query.prepare(QString("INSERT INTO %1 (%2) VALUES (%3)").arg(tableName, cols, placeholders));for (const auto &value : values) {query.addBindValue(value);}if (!query.exec()) {qWarning() << "Insert failed:" << query.lastError().text();return false;}return true;}bool update(const QString &tableName, const QString &setClause, const QString &whereClause){QSqlQuery query(m_db);QString sql = QString("UPDATE %1 SET %2 WHERE %3").arg(tableName, setClause, whereClause);if (!query.exec(sql)) {qWarning() << "Update failed:" << query.lastError().text();return false;}return true;}bool remove(const QString &tableName, const QString &whereClause){QSqlQuery query(m_db);QString sql = QString("DELETE FROM %1 WHERE %2").arg(tableName, whereClause);if (!query.exec(sql)) {qWarning() << "Delete failed:" << query.lastError().text();return false;}return true;}QSqlQueryModel* select(const QString &tableName, const QString &columns, const QString &whereClause){QSqlQueryModel *model = new QSqlQueryModel();QString sql = QString("SELECT %1 FROM %2").arg(columns, tableName);if (!whereClause.isEmpty()) {sql += QString(" WHERE %1").arg(whereClause);}model->setQuery(sql, m_db);if (model->lastError().isValid()) {qWarning() << "Query failed:" << model->lastError().text();delete model;return nullptr;}return model;}
};

头文件依赖:需要包含Qt SQL模块,在.pro文件中添加:

QT += sql

或者在CMakeLists.txt中追加Sql,修改以下部分:

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)target_link_libraries(deepseek_sqlite1 PRIVATEQt${QT_VERSION_MAJOR}::WidgetsQt${QT_VERSION_MAJOR}::Sql
)

功能特性:

  • 自动处理数据库连接的生命周期
  • 使用预编译语句防止SQL注入(INSERT操作)
  • 返回可直接用于Qt视图组件的QSqlQueryModel
  • 详细的错误日志输出

扩展建议

// 可添加事务支持
bool beginTransaction() { return m_db.transaction(); }
bool commit() { return m_db.commit(); }
bool rollback() { return m_db.rollback(); }

2. 验证DeepSeek自动生成的代码

2.1 安装SQLite命令行工具

相关阅读:SQLite 安装教程以及可视化工具介绍

2.2 验证DeepSeek代码

#include <QApplication>
#include <QTableView>
#include "sqlite_manager.h"int main(int argc, char **argv) {QApplication app(argc, argv);SQLiteManager db("D:/test.db");db.createTable("users", "id INTEGER PRIMARY KEY, name TEXT, age INTEGER");// 插入数据db.insert("users", {"name", "age"}, {"Alice", 25});// 更新数据//db.update("users", "age = 26", "name = 'Alice'");// 删除数据//db.remove("users", "age > 30");// 查询数据 - 查询所有users数据QSqlQueryModel *model = db.select("users", "*", "");QTableView tableView;tableView.setModel(model);tableView.show();return app.exec();
}

运行:

3. 测试代码下载

通过网盘分享的文件:deepseek_sqlite1.zip
链接: https://pan.baidu.com/s/1IkH--pFYf4TzU7bmtaBdZA?pwd=2wyg 提取码: 2wyg

相关文章:

使用DeepSeek实现自动化编程:类的自动生成

目录 简述 1. 通过注释生成C类 1.1 模糊生成 1.2 把控细节&#xff0c;让结果更精准 1.3 让DeepSeek自动生成代码 2. 验证DeepSeek自动生成的代码 2.1 安装SQLite命令行工具 2.2 验证DeepSeek代码 3. 测试代码下载 简述 在现代软件开发中&#xff0c;自动化编程工具如…...

nio使用

NIO &#xff1a; new Input/Output,&#xff0c;在java1.4中引入的一套新的IO操作API&#xff0c;&#xff0c;&#xff0c;旨在替代传统的IO&#xff08;即BIO&#xff1a;Blocking IO&#xff09;&#xff0c;&#xff0c;&#xff0c;nio提供了更高效的 文件和网络IO的 操作…...

【考试大纲】中级网络工程师考试大纲(最新版与旧版对比)

目录 引言考试科目1:网络工程师基础知识考试科目2:网络工程师应用技术引言 最新的网络工程师考试大纲出版于 2024 年 10 月,本考试大纲基于此版本整理。 考试科目1:网络工程师基础知识 计算机系统知识1.1 计算机硬件知识 1.2 操作系统知识 1.3 系统管理 系统开发和运行…...

Spring的下载与配置

1. 下载spring开发包 下载地址&#xff1a;https://repo.spring.io/webapp/#/artifacts/browse/simple/General/libs-release-local/org/springframework/spring 打开之后可以看到有很多版本供选择&#xff0c;因为视频教程用的是4.2.4版本&#xff0c;于是我也选择这个 右键…...

解决IDEA使用Ctrl + / 注释不规范问题

问题描述&#xff1a; ctrl/ 时&#xff0c;注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...

学术小助手智能体

学术小助手&#xff1a;开学季的学术领航员 文心智能体平台AgentBuilder | 想象即现实 文心智能体平台AgentBuilder&#xff0c;是百度推出的基于文心大模型的智能体平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;…...

kafka-leader -1问题解决

一. 问题&#xff1a; 在 Kafka 中&#xff0c;leader -1 通常表示分区的领导者副本尚未被选举出来&#xff0c;或者在获取领导者信息时出现了问题。以下是可能导致出现 kafka leader -1 的一些常见原因及相关分析&#xff1a; 1. 副本同步问题&#xff1a; 在 Kafka 集群中&…...

【开源-鸿蒙土拨鼠大理石系统】鸿蒙 HarmonyOS Next App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/lusson-luo/HarmonyOS-groundhog-…...

HBuilder X中,uni-app、js的延时操作及定时器

完整源码下载 https://download.csdn.net/download/luckyext/90430165 在HBuilder X中&#xff0c;uni-app、js的延时操作及定时器可以用setTimeout和setInterval这两个函数来实现。 1.setTimeout函数用于在指定的毫秒数后执行一次函数。 例如&#xff0c; 2秒后弹出一个提…...

下载pyenv

安装 1、git clone https://gitclone.com/github.com/pyenv/pyenv.git ~/.pyenv 备用&#xff1a;git clone https://hub.fgit.ml/pyenv/pyenv.git ~/.pyenv 配置环境变量 export PYENV_ROOT"$HOME/.pyenv" export PATH"$PYENV_ROOT/bin:$PATH"然后&…...

升级TTSDK抖音小游戏banner广告接入

升级TTSDK抖音小游戏banner广告接入 介绍修改总结 介绍 我们原来使用的是unity2021&#xff0c;这次为了抖音新出的TTSDK中的新的API升级我们将项目升级为了unity2022&#xff0c;这次抖音官方剔除了原来StartSDKUnityTools和Start Asset Analyser&#xff08;startmini&#x…...

vue 项目部署到nginx 服务器

一 vue 项目打包 1 本地环境 npm run build 2 打包完成生成一个dist 文件夹&#xff0c;将其放到服务器指定的文件夹&#xff0c;此文件夹可以在nginx 配置文件中配置 二 nginx 1 根据对应的系统搜索安装命令 sudo yum install nginx 2 查看conf位置 如果不知道的话 ng…...

ubuntu终端指令集 shell编程基础(一)

磁盘指令 连接与查看&#xff1a;磁盘与 Ubuntu 有两种连接方式&#xff1b;使用ls /dev/sd*查看是否连接成功&#xff0c;通过df系列指令查看磁盘使用信息。若 U 盘已挂载&#xff0c;相关操作可能失败&#xff0c;需用umount取消挂载。磁盘操作&#xff1a;使用sudo fdisk 磁…...

win11编译pytorch cuda128版本流程

Geforce 50xx系显卡最低支持cuda128&#xff0c;torch cu128 release版本目前还没有释放&#xff0c;所以自己基于2.6.0源码自己编译wheel包。 1. 前置条件 1. 使用visual studio installer 安装visual studio 2022&#xff0c;工作负荷选择【使用c的桌面开发】,安装完成后将…...

STM32G431RBT6——(1)芯片命名规则

相信很多新手入门STM学的芯片&#xff0c;是STM32F103C8T6&#xff0c;假如刷到个项目换个芯片类型&#xff0c;就会感到好难啊&#xff0c;看不懂&#xff0c;就无从下手&#xff0c;不知所云。其实没什么难的&#xff0c;对于一个个不同的芯片的区别&#xff0c;就像是学习包…...

mac Homebrew安装、更新失败

我这边使用brew安装git-lfs 一直报这个错&#xff1a; curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL更新brew update也是报这个错误。最后使用使用大佬提供的脚本进行操作&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/mast…...

Ecode前后端传值

说明 在泛微 E9 系统开发过程中&#xff0c;使用 Ecode 调用后端接口并进行传值是极为常见且关键的操作。在上一篇文章中&#xff0c;我们探讨了 Ecode 调用后端代码的相关内容&#xff0c;本文将深入剖析在 Ecode 中如何向后端传值&#xff0c;以及后端又该如何处理接收这些值…...

Wireshark:自定义类型帧解析

文章目录 1. 前言2. 背景3. 开发 Lua 插件 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 Wireshark 不认识用 tcpdump 抓取的数据帧&#xff0c;仔细分析相关代码和数据帧后&#xff0c…...

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗&#xff1f;3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…...

Spring 为何需要三级缓存解决循环依赖,而不是二级缓存

Spring 使用三级缓存来解决循环依赖问题&#xff0c;而不是仅使用二级缓存&#xff0c;主要是为了同时满足依赖注入和 AOP 代理的需求。以下是详细解释&#xff1a; ### Spring 三级缓存的作用 Spring 的三级缓存分别用于不同的场景&#xff1a; 1. **一级缓存&#xff08;sin…...

2继续NTS库学习(读取shapefile)

引用库如下&#xff1a; 读取shapefile代码如下&#xff1a; namespace IfoxDemo {public class Class1{[CommandMethod("xx")]public static void nts二次学习(){Document doc Application.DocumentManager.MdiActiveDocument;var ed doc.Editor;string shpPath …...

避免 Git 文件名大小写出错

一、如何避免大小写出错&#xff1f; 配置 Git 全局忽略大小写 在 Windows 上&#xff0c;默认 Git 会忽略大小写。建议全局关闭此行为&#xff1a; git config --global core.ignorecase false统一团队命名规范 强制约定文件名全小写&#xff08;如 config.json&#xff09;或…...

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去&#xff0c;但是感觉没必要&#xff0c;要是现在会的都是简单的增删改查&#xff0c;所以&#xff0c;这一篇&#xff0c;我直接从java操作数据库开始写&#xff0c;所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…...

Vue程序下载

Vue是一个基于JavaScript&#xff08;JS&#xff09;实现的框架&#xff0c;想要使用它&#xff0c;就得先拿到Vue的js文件 Vue官网 Vue2&#xff1a;Vue.js Vue3&#xff1a;Vue.js - 渐进式 JavaScript 框架 | Vue.js 下载并安装vue.js 第一步&#xff1a;打开Vue2官网&a…...

力扣 寻找重复数

二分&#xff0c;双指针&#xff0c;环形链表。 题目 不看完题就是排序后&#xff0c;用两个快慢指针移动&#xff0c;找到相同就返回即可。 class Solution {public int findDuplicate(int[] nums) {Arrays.sort(nums);int l0;int r1;while(r<nums.length){if(nums[l]num…...

使用Docker将ros1自定义消息通过rosjava_bootstrap生成jar包

文章目录 预准备环境rosjava_bootstrap坏消息好消息 环境安装docker安装rosjava_bootstrap仓库rosjava_center仓库修改rosjava_bootstrap代码拉取docker镜像放置自己的自定义消息 启动docker编译 预准备环境 rosjava_bootstrap rosjava_bootstrap是将自定义的ROS消息生成java…...

分治算法、动态规划、贪心算法、分支限界法和回溯算法的深度对比

1. 分治算法 (Divide and Conquer) 核心思想 分治法三步曲&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将原问题拆分为多个子问题解决&#xff08;Conquer&#xff09;&#xff1a;递归解决子问题合并&#xff08;Combine&#xff09;&#xff1a;合并子问题…...

Unity 运用正则表达式保留字符串中的中文英文字母和数字

正则表达 正则表达式 – 语法 | 菜鸟教程 Regex 类 (System.Text.RegularExpressions) | Microsoft Learn 保留字符串中的中英数 中英数的正则表达。 patten "[\u4e00-\u9fa5A-Za-z0-9]"; 使用Regex 类匹配正则并保留。 matches Regex.Matches(str, patten)…...

网络安全红队工具

目录 红队及发展趋势 基本概念 发展趋势 防守阶段 备战阶段 临战阶段 实战阶段 战后整顿 如果错过互联网,与你擦肩而过的不仅仅是机会,而是整整一个时代。 红队及发展趋势 基本概念 红队一般指实战攻防的防守方。 红队主要复盘总结现有防护系统的不足之处&#xff0c;为…...

【汽车ECU电控数据管理篇】HEX文件格式解析篇章

一、HEX格式文件是啥 HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式&#xff0c;通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据&#xff0c;每一行以冒号开头&#xff0c;包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程…...