1. 项目概述与设计思路
销售信息管理系统是企业日常运营中不可或缺的工具,特别是在需要追踪销售业绩、分析产品表现的场景下。使用C++结合Qt框架开发这类系统,能够充分发挥跨平台优势,同时保证系统的高效运行。这个项目我们选择实现一个典型的按月销售业绩管理系统,主要面向中小型企业的销售部门使用。
为什么选择Qt框架?Qt提供了丰富的GUI组件和数据库接口,其信号槽机制非常适合事件驱动的管理系统开发。相比其他GUI框架,Qt的文档完善、社区活跃,遇到问题更容易找到解决方案。此外,Qt的跨平台特性让我们的系统可以轻松部署在Windows、Linux和macOS上。
系统采用经典的三层架构设计:
- 表示层:基于Qt Widgets实现用户界面
- 业务逻辑层:处理数据验证、计算和业务规则
- 数据访问层:使用Qt SQL模块与数据库交互
数据库方面,我们选择SQLite作为后端存储。SQLite无需单独安装数据库服务,适合单机版应用。它的零配置特性和单个文件存储方式,使得部署和维护都非常简便。对于中小规模的销售数据管理,SQLite的性能完全够用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 开发环境准备
2.1 工具安装与配置
首先需要安装以下开发工具:
- Qt Creator:推荐使用5.15.x LTS版本,这是目前最稳定的长期支持版
- C++编译器:Windows下使用MinGW,Linux/macOS使用GCC或Clang
- SQLite:Qt已内置SQLite支持,无需单独安装
在Qt Creator中创建新项目时,选择"Qt Widgets Application"模板。项目配置需要注意:
- 勾选"SQL"模块以启用数据库支持
- 设置C++标准为C++11或更高
- 启用RTTI和异常支持(在.pro文件中添加
CONFIG += exceptions rtti)
2.2 项目目录结构
合理的项目结构能提高代码可维护性:
code复制SalesManager/
├── include/ # 头文件
├── src/ # 源文件
├── forms/ # UI设计文件
├── resources/ # 资源文件
└── database/ # 数据库文件
在.pro文件中添加对应的目录引用:
qmake复制INCLUDEPATH += $$PWD/include
RESOURCES += $$PWD/resources/resources.qrc
3. 数据库设计与实现
3.1 数据库表结构
系统需要两个核心表:用户表和销售记录表。
用户表(users)结构:
sql复制CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
role INTEGER NOT NULL, -- 0:普通用户 1:管理员
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
销售记录表(sales)结构:
sql复制CREATE TABLE sales (
id INTEGER PRIMARY KEY AUTOINCREMENT,
salesperson_id INTEGER NOT NULL,
salesperson_name TEXT NOT NULL,
product1 REAL DEFAULT 0,
product2 REAL DEFAULT 0,
product3 REAL DEFAULT 0,
total_sales REAL GENERATED ALWAYS AS (product1 + product2 + product3) STORED,
month INTEGER NOT NULL, -- 格式YYYYMM
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(salesperson_id) REFERENCES users(id)
);
注意:这里使用SQLite的生成列(GENERATED ALWAYS)特性自动计算总销售额,确保数据一致性。
3.2 数据库连接管理
创建DatabaseManager类封装数据库操作:
cpp复制// include/databasemanager.h
class DatabaseManager {
public:
static DatabaseManager& instance();
bool initialize(const QString& path);
QSqlDatabase database() const;
private:
DatabaseManager() = default;
~DatabaseManager();
QSqlDatabase m_db;
};
// src/databasemanager.cpp
DatabaseManager& DatabaseManager::instance() {
static DatabaseManager instance;
return instance;
}
bool DatabaseManager::initialize(const QString& path) {
m_db = QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName(path);
if (!m_db.open()) {
qCritical() << "无法打开数据库:" << m_db.lastError().text();
return false;
}
// 启用外键约束
QSqlQuery query("PRAGMA foreign_keys = ON");
return query.exec();
}
4. 用户认证模块实现
4.1 用户注册功能
注册流程需要严格验证用户名和密码格式:
cpp复制bool AuthService::validateUsername(const QString& username) {
// 非空检查
if (username.isEmpty()) return false;
// 长度检查(4-16位)
if (username.length() < 4 || username.length() > 16) return false;
// 字符组成检查(字母、数字、下划线)
QRegularExpression regex("^[a-zA-Z0-9_]+$");
if (!regex.match(username).hasMatch()) return false;
// 唯一性检查
QSqlQuery query;
query.prepare("SEL
