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

server/2025/3/6 0:19:12/

目录

简述

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


http://www.ppmy.cn/server/172726.html

相关文章

2024年中国城市统计年鉴(PDF+excel)

2024年中国城市统计年鉴&#xff08;PDFexcel&#xff09; 说明&#xff1a;包括地级县级市 格式&#xff1a;PDFEXCEL 《中国城市统计年鉴》是一部全面反映中国城市发展状况的官方统计出版物&#xff0c;包括各级城市的详细统计数据。这部年鉴自1985年开始出版&#xff0c;…

SQL Server数据库中用存储过程来取顺序号

SQL Server数据库中用存储过程来取顺序号 表sys_number&#xff0c;字段name字符&#xff0c;表示前缀,value数字&#xff0c;一个一个递增 存储过程代码&#xff1a; SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[usp_GetSysid]name varchar(5…

学网络安全报班可靠吗?

在当今社会&#xff0c;网络安全已经成为我们工作和生活中不可忽视的重要部分&#xff0c;而且市场上各大企业对网络安全人才的需求量非常之大&#xff0c;因此网络安全培训班应运而生&#xff0c;那么学网络安全报培训班靠谱吗?这是很多小伙伴都关心的问题&#xff0c;我们来…

【Qt】ffmpeg解码—照片提取、视频播放▲

目录 一、图像的成像原理&#xff1a; RGB成像原理&#xff1a; YUV成像原理&#xff1a; 二、多线程 三、ffmpeg解码&#xff08;照片提取&#xff09; 1.准备工作 &#xff08;1&#xff09;在工程文件夹里面新建三个文件夹 &#xff08;2&#xff09;在main函数中加…

Milvus 数据批量导出实战:Python 代码解析

1 引言 由于 Milvus 在单次查询中所能返回的数据量存在固有约束,当处理数据量庞大的 Collection 时,需考虑采用多次查询的策略。本文详细阐述了如何运用多次查询的方式,将 Milvus 中的数据进行分批导出,以有效应对数据量过大带来的挑战 。 2 代码整体概述 我们的目标是从…

【量化金融自学笔记】--开篇.基本术语及学习路径建议

在当今这个信息爆炸的时代&#xff0c;金融领域正经历着一场前所未有的变革。传统的金融分析方法逐渐被更加科学、精准的量化技术所取代。量化金融&#xff0c;这个曾经高不可攀的领域&#xff0c;如今正逐渐走进大众的视野。它将数学、统计学、计算机科学与金融学深度融合&…

【算法系列】基数排序

文章目录 基数排序&#xff08;Radix Sort&#xff09;详解一、什么是基数排序&#xff1f;1. 什么是基数2. 基数排序的特点3. 基数的选择对性能的影响 二、基数排序的工作原理基本步骤 三、Java实现基数排序示例代码一示例代码二 四、排序演示1. 初始化2. 遍历数组元素&#x…

HRPWM学习总结

文章目录 前言1. HRPWM基本概念1.1 HRPWM的定义1.2 与传统PWM的区别 2. HRPWM技术原理2.1 MEP技术介绍2.2 计数周期与MEP步长的关系2.3 如何提高占空比精度&#xff1f; 3. HRPWM的应用在电机控制中的应用在电源管理中的优势 4. 如何选择合适的HRPWM解决方案&#xff1f;5. 相关…