[项目实践] 使用DeepSeek实现自动化编程:类的自动生成

515 0
Honkers 2025-3-5 16:15:43 | 显示全部楼层 |阅读模式

目录

简述

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 把控细节,让结果更精准

提示词:

  1. //要求:帮我写一个c++接口类,用Qt6实现对sqlite数据库的增删改查。
  2. //请按照注释补全接口代码,同时包含所需的头文件、成员变量。
  3. class SQLiteManager
  4. {
  5. public:
  6. /**
  7. * 构造函数,初始化SQLite数据库连接。
  8. * @param dbName 数据库文件名(包括路径)。
  9. */
  10. SQLiteManager(const QString &dbName);
  11. /**
  12. * 析构函数,关闭数据库连接并清理资源。
  13. */
  14. ~SQLiteManager();
  15. /**
  16. * 创建表。
  17. * @param tableName 表名。
  18. * @param columns 表的列定义,格式为"column1 type1, column2 type2, ..."。
  19. * @return 是否成功创建表。
  20. */
  21. bool createTable(const QString &tableName, const QString &columns);
  22. /**
  23. * 插入数据。
  24. * @param tableName 表名。
  25. * @param columns 列名列表,格式为{"column1", "column2", ...}。
  26. * @param values 对应列的值,格式为{value1, value2, ...}。
  27. * @return 是否成功插入数据。
  28. */
  29. bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values);
  30. /**
  31. * 更新数据。
  32. * @param tableName 表名。
  33. * @param setClause 设置子句,格式为"column1 = value1, column2 = value2"。
  34. * @param whereClause WHERE子句,格式为"column = value"。
  35. * @return 是否成功更新数据。
  36. */
  37. bool update(const QString &tableName, const QString &setClause, const QString &whereClause);
  38. /**
  39. * 删除数据。
  40. * @param tableName 表名。
  41. * @param whereClause WHERE子句,格式为"column = value"。
  42. * @return 是否成功删除数据。
  43. */
  44. bool remove(const QString &tableName, const QString &whereClause);
  45. /**
  46. * 查询数据。
  47. * @param tableName 表名。
  48. * @param columns 查询的列名,格式为"column1, column2"。默认为"*",表示查询所有列。
  49. * @param whereClause WHERE子句,格式为"column = value"。默认为空。
  50. * @return 查询结果模型(QSqlQueryModel)。
  51. */
  52. QSqlQueryModel *select(const QString &tableName, const QString &columns = "*", const QString &whereClause = "");
  53. };
复制代码

要点:

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

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

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

1.3 让DeepSeek自动生成代码

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

 推理中:

以下是DeepSeek实现的SQLiteManager类:

  1. #include <qsqldatabase>
  2. #include <qsqlquery>
  3. #include <qsqlerror>
  4. #include <qsqlquerymodel>
  5. #include <qvariant>
  6. #include <qstringlist>
  7. class SQLiteManager
  8. {
  9. private:
  10. QSqlDatabase m_db;
  11. public:
  12. SQLiteManager(const QString &dbName)
  13. {
  14. m_db = QSqlDatabase::addDatabase("QSQLITE");
  15. m_db.setDatabaseName(dbName);
  16. if (!m_db.open()) {
  17. qWarning() << "Failed to open database:" << m_db.lastError().text();
  18. }
  19. }
  20. ~SQLiteManager()
  21. {
  22. if (m_db.isOpen()) {
  23. m_db.close();
  24. }
  25. QSqlDatabase::removeDatabase(m_db.connectionName());
  26. }
  27. bool createTable(const QString &tableName, const QString &columns)
  28. {
  29. QSqlQuery query(m_db);
  30. QString sql = QString("CREATE TABLE IF NOT EXISTS %1 (%2)").arg(tableName, columns);
  31. if (!query.exec(sql)) {
  32. qWarning() << "Create table failed:" << query.lastError().text();
  33. return false;
  34. }
  35. return true;
  36. }
  37. bool insert(const QString &tableName, const QStringList &columns, const QVariantList &values)
  38. {
  39. if (columns.size() != values.size()) return false;
  40. QSqlQuery query(m_db);
  41. QString cols = columns.join(", ");
  42. QString placeholders = QStringList(columns.size(), "?").join(", ");
  43. query.prepare(QString("INSERT INTO %1 (%2) VALUES (%3)").arg(tableName, cols, placeholders));
  44. for (const auto &value : values) {
  45. query.addBindValue(value);
  46. }
  47. if (!query.exec()) {
  48. qWarning() << "Insert failed:" << query.lastError().text();
  49. return false;
  50. }
  51. return true;
  52. }
  53. bool update(const QString &tableName, const QString &setClause, const QString &whereClause)
  54. {
  55. QSqlQuery query(m_db);
  56. QString sql = QString("UPDATE %1 SET %2 WHERE %3").arg(tableName, setClause, whereClause);
  57. if (!query.exec(sql)) {
  58. qWarning() << "Update failed:" << query.lastError().text();
  59. return false;
  60. }
  61. return true;
  62. }
  63. bool remove(const QString &tableName, const QString &whereClause)
  64. {
  65. QSqlQuery query(m_db);
  66. QString sql = QString("DELETE FROM %1 WHERE %2").arg(tableName, whereClause);
  67. if (!query.exec(sql)) {
  68. qWarning() << "Delete failed:" << query.lastError().text();
  69. return false;
  70. }
  71. return true;
  72. }
  73. QSqlQueryModel* select(const QString &tableName, const QString &columns, const QString &whereClause)
  74. {
  75. QSqlQueryModel *model = new QSqlQueryModel();
  76. QString sql = QString("SELECT %1 FROM %2").arg(columns, tableName);
  77. if (!whereClause.isEmpty()) {
  78. sql += QString(" WHERE %1").arg(whereClause);
  79. }
  80. model->setQuery(sql, m_db);
  81. if (model->lastError().isValid()) {
  82. qWarning() << "Query failed:" << model->lastError().text();
  83. delete model;
  84. return nullptr;
  85. }
  86. return model;
  87. }
  88. };
复制代码

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

  1. QT += sql
复制代码

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

  1. find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Sql)
  2. find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Sql)
  3. target_link_libraries(deepseek_sqlite1 PRIVATE
  4. Qt${QT_VERSION_MAJOR}::Widgets
  5. Qt${QT_VERSION_MAJOR}::Sql
  6. )
复制代码

功能特性:

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

扩展建议

  1. // 可添加事务支持
  2. bool beginTransaction() { return m_db.transaction(); }
  3. bool commit() { return m_db.commit(); }
  4. bool rollback() { return m_db.rollback(); }
复制代码

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

2.1 安装SQLite命令行工具

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

2.2 验证DeepSeek代码

  1. #include <qapplication>
  2. #include <qtableview>
  3. #include "sqlite_manager.h"
  4. int main(int argc, char **argv) {
  5. QApplication app(argc, argv);
  6. SQLiteManager db("D:/test.db");
  7. db.createTable("users", "id INTEGER PRIMARY KEY, name TEXT, age INTEGER");
  8. // 插入数据
  9. db.insert("users", {"name", "age"}, {"Alice", 25});
  10. // 更新数据
  11. //db.update("users", "age = 26", "name = 'Alice'");
  12. // 删除数据
  13. //db.remove("users", "age > 30");
  14. // 查询数据 - 查询所有users数据
  15. QSqlQueryModel *model = db.select("users", "*", "");
  16. QTableView tableView;
  17. tableView.setModel(model);
  18. tableView.show();
  19. return app.exec();
  20. }
复制代码

运行:

3. 测试代码下载

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4008
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行