# 数据库简单课设 **Repository Path**: pi-zhuolin/database-simple-course-design ## Basic Information - **Project Name**: 数据库简单课设 - **Description**: 个人用来做数据库的课设 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-16 - **Last Updated**: 2026-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仓库管理系统 一个功能完整、界面现代的仓库管理系统,采用 C++ 后端和 Vue 3 前端。 ## 📋 项目简介 本系统提供完整的仓库管理功能,包括: - 商品管理(增删改查) - 仓库管理(增删改查) - 库存管理(出入库操作) - 用户管理(权限控制) - 数据统计(实时概览) ## ✨ 特色功能 ### 🎨 现代化界面设计 - 暖色调主题(琥珀色系) - 流畅的动画效果 - 响应式布局 - 暗色/亮色自适应 ### 🔐 完善的权限系统 - 5 种用户角色 - 细粒度权限控制 - 路由级别鉴权 - Token 验证机制 ### 📊 实时数据统计 - Dashboard 数据概览 - 权限感知显示 - 最近操作记录 - 实时数据同步 ### 🚀 高性能后端 - C++23 异步架构 - Boost.Beast HTTP 服务器 - MySQL 连接池 - 自定义路由匹配 ## 🛠 技术栈 ### 后端 - **语言**: C++23 - **框架**: Boost.Beast, Boost.Asio - **数据库**: MySQL (Boost.MySQL) - **JSON**: Boost.JSON - **路由**: LaoZu URL Route Match - **构建**: CMake + Ninja ### 前端 - **框架**: Vue 3 (Composition API) - **路由**: Vue Router 4 - **HTTP**: Axios - **样式**: 原生 CSS3 - **构建**: Vite ## 📦 系统要求 ### 后端 - CMake 4.2+ - Ninja 构建工具 - Clang 22+ - Boost 库1.90.1(通过 vcpkg) - MySQL 8.0+ ### 前端 - Node.js 16+ - npm 8+ ## 🚀 快速开始 ### 1. 克隆项目 ```bash git clone cd database-simple-course-design ``` ### 2. 数据库配置 创建 MySQL 数据库并导入表结构: ```sql -- phpMyAdmin SQL Dump -- version 5.2.3 -- https://www.phpmyadmin.net/ -- -- 主机: localhost -- 生成日期: 2026-07-02 16:24:02 -- 服务器版本: 8.0.45 -- PHP 版本: 8.5.7 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- 数据库: `pi_test` -- CREATE DATABASE IF NOT EXISTS `pi_test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE `pi_test`; -- -------------------------------------------------------- -- -- 表的结构 `goods` -- CREATE TABLE `goods` ( `id` bigint NOT NULL COMMENT '商品ID', `goods_no` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品编号', `goods_name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称', `spec` varchar(50) COLLATE utf8mb4_general_ci DEFAULT '''''' COMMENT '规格型号', `unit` varchar(10) COLLATE utf8mb4_general_ci DEFAULT '''件''' COMMENT '计量单位', `price` decimal(10,2) DEFAULT '0.00' COMMENT '商品单价', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='仓库商品基础档案。'; -- -- 转存表中的数据 `goods` -- INSERT INTO `goods` (`id`, `goods_no`, `goods_name`, `spec`, `unit`, `price`, `create_time`) VALUES (5, 'DN-001', '电脑', '华硕天选6pro', '台', 14500.00, '2026-07-02 15:50:55'); -- -------------------------------------------------------- -- -- 表的结构 `in_record` -- CREATE TABLE `in_record` ( `id` int NOT NULL COMMENT '⼊库记录ID', `in_no` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '⼊库单号', `goods_id` int NOT NULL COMMENT '商品ID', `warehouse_id` int NOT NULL COMMENT '⼊库仓库ID', `quantity` int NOT NULL COMMENT '⼊库数量', `operator_id` int NOT NULL COMMENT '操作⼈ID', `in_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '⼊库时间', `remark` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '''''' COMMENT '备注' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- -------------------------------------------------------- -- -- 表的结构 `out_record` -- CREATE TABLE `out_record` ( `id` int NOT NULL COMMENT '出库记录ID', `out_no` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '出库单号', `goods_id` int NOT NULL COMMENT '商品ID', `warehouse_id` int NOT NULL COMMENT '出库仓库ID', `quantity` int NOT NULL COMMENT '出库数量', `operator_id` int NOT NULL COMMENT '操作⼈ID', `out_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '出库时间', `remark` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '''''' COMMENT '备注' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='出库业务流⽔表,结构与⼊库表对称。'; -- -------------------------------------------------------- -- -- 表的结构 `stock` -- CREATE TABLE `stock` ( `id` int NOT NULL COMMENT '库存ID', `goods_id` int NOT NULL COMMENT '商品ID', `warehouse_id` int NOT NULL COMMENT '仓库ID', `quantity` int DEFAULT '0' COMMENT '库存数量' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='承载商品与仓库的多对多关系,同时记录实时库存数量,是库存业务核⼼表。'; -- -------------------------------------------------------- -- -- 表的结构 `sys_role` -- CREATE TABLE `sys_role` ( `id` int NOT NULL, `role` int NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户权限表'; -- -- 转存表中的数据 `sys_role` -- INSERT INTO `sys_role` (`id`, `role`) VALUES (1, 1), (2, 5), (3, 2), (4, 3), (5, 4); -- -------------------------------------------------------- -- -- 表的结构 `sys_user` -- CREATE TABLE `sys_user` ( `id` bigint NOT NULL, `user` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `password` char(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户表'; -- -- 转存表中的数据 `sys_user` -- INSERT INTO `sys_user` (`id`, `user`, `password`) VALUES (1, 'admin', '123'), (2, 'testuser', '123'), (3, 'goods_admin', '123'), (4, 'wh_admin', '123'), (5, 'stock_admin', '123'); -- -------------------------------------------------------- -- -- 表的结构 `warehouse` -- CREATE TABLE `warehouse` ( `id` int NOT NULL, `wh_name` varchar(30) COLLATE utf8mb4_general_ci NOT NULL COMMENT '仓库名称', `wh_address` varchar(100) COLLATE utf8mb4_general_ci DEFAULT '''''' COMMENT '仓库地址' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='仓库基础信息,⽀持多仓库。'; -- -- 转存表中的数据 `warehouse` -- INSERT INTO `warehouse` (`id`, `wh_name`, `wh_address`) VALUES (4, '电脑仓库', '朔州市山西工学院电脑仓库'); -- -- 转储表的索引 -- -- -- 表的索引 `goods` -- ALTER TABLE `goods` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `goods_no` (`goods_no`); -- -- 表的索引 `in_record` -- ALTER TABLE `in_record` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `in_no` (`in_no`); -- -- 表的索引 `out_record` -- ALTER TABLE `out_record` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `out_no` (`out_no`); -- -- 表的索引 `stock` -- ALTER TABLE `stock` ADD PRIMARY KEY (`id`); -- -- 表的索引 `sys_role` -- ALTER TABLE `sys_role` ADD PRIMARY KEY (`id`); -- -- 表的索引 `sys_user` -- ALTER TABLE `sys_user` ADD PRIMARY KEY (`id`); -- -- 表的索引 `warehouse` -- ALTER TABLE `warehouse` ADD PRIMARY KEY (`id`); -- -- 在导出的表使用AUTO_INCREMENT -- -- -- 使用表AUTO_INCREMENT `goods` -- ALTER TABLE `goods` MODIFY `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品ID', AUTO_INCREMENT=6; -- -- 使用表AUTO_INCREMENT `in_record` -- ALTER TABLE `in_record` MODIFY `id` int NOT NULL AUTO_INCREMENT COMMENT '⼊库记录ID', AUTO_INCREMENT=3; -- -- 使用表AUTO_INCREMENT `out_record` -- ALTER TABLE `out_record` MODIFY `id` int NOT NULL AUTO_INCREMENT COMMENT '出库记录ID', AUTO_INCREMENT=2; -- -- 使用表AUTO_INCREMENT `stock` -- ALTER TABLE `stock` MODIFY `id` int NOT NULL AUTO_INCREMENT COMMENT '库存ID', AUTO_INCREMENT=3; -- -- 使用表AUTO_INCREMENT `sys_user` -- ALTER TABLE `sys_user` MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; -- -- 使用表AUTO_INCREMENT `warehouse` -- ALTER TABLE `warehouse` MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; ``` ### 3. 启动后端 #### 手动编译 ```bash # 安装 Ninja(如果未安装) sudo apt-get install ninja-build # 创建并进入构建目录 mkdir -p cmake-build-debug-clang-22 cd cmake-build-debug-clang-22 # 配置 CMake CC=clang-22 CXX=clang++-22 cmake -G Ninja \ -DCMAKE_TOOLCHAIN_FILE=/home/mrpi/vcpkg/scripts/buildsystems/vcpkg.cmake .. # 编译 ninja # 运行 ./low_mysql_boost_code ``` 后端服务将在 `http://0.0.0.0:8000` 启动。 ### 4. 启动前端 #### 手动启动 ```bash cd vue/vue-project # 安装依赖(首次运行) npm install # 启动开发服务器 npm run dev ``` 前端将在 `http://localhost:5173` 启动(端口可能不同)。 ### 5. 访问系统 在浏览器中打开前端地址,使用以下测试账号登录: - **管理员**: ID: 1, 密码: 123 - **商品管理员**: ID: 3, 密码: 123 - **仓库管理员**: ID: 4, 密码: 123 - **库存管理员**: ID: 5, 密码: 123 - **普通用户**: ID: 2, 密码: 123 ## 📚 权限说明 | 角色ID | 角色名称 | 权限范围 | |--------|----------|----------| | 1 | 管理员 | 所有功能(商品、仓库、库存、用户管理) | | 2 | 商品管理员 | 商品的增删改查 | | 3 | 仓库管理员 | 仓库的增删改查 | | 4 | 库存管理员 | 出入库操作和记录查询 | | 5 | 普通用户 | 仅个人信息管理(修改密码、删除账号) | ## 📁 项目结构 ``` database-simple-course-design/ ├── main.cpp # 后端主程序 ├── CMakeLists.txt # CMake 配置 ├── modules/ # 后端模块 │ ├── session.cppm # 会话管理 │ ├── token.cppm # Token 验证 │ ├── dto.cppm # 数据传输对象 │ └── mysql.cppm # 数据库操作 ├── service/src/ # 业务逻辑 │ ├── login.cppm # 登录注册 │ ├── goods.cppm # 商品管理 │ ├── warehouse.cppm # 仓库管理 │ ├── record.cppm # 出入库记录 │ └── user.cppm # 用户管理 ├── vue/vue-project/ # 前端项目 │ ├── src/ │ │ ├── assets/ # 资源文件 │ │ │ └── global.css # 全局样式 │ │ ├── views/ # 页面组件 │ │ │ ├── login.vue # 登录页 │ │ │ ├── home.vue # 主布局 │ │ │ ├── dashboard.vue # 数据概览 │ │ │ └── ... # 其他页面 │ │ ├── router/ # 路由配置 │ │ └── utils/ # 工具函数 ``` ## 🔧 配置说明 ### 后端配置 在 `main.cpp` 中修改 MySQL 连接配置: ```cpp params.server_address.emplace_host_and_port(std::string("127.0.0.1"), 3306); params.username = "pi_test"; params.password = "pi_test"; params.database = "pi_test"; ``` ### 前端配置 在 `vue/vue-project/vite.config.js` 中配置代理: ```javascript server: { proxy: { '/api': { target: 'http://localhost:8000', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } } ``` ## 🐛 故障排除 ### 后端无法启动 1. 检查 MySQL 服务是否运行 2. 验证数据库配置是否正确 3. 确认端口 8000 未被占用 4. 查看日志输出获取详细错误信息 ### 前端无法连接后端 1. 确认后端服务已启动 2. 检查浏览器控制台的网络请求 3. 验证代理配置是否正确 4. 检查 CORS 设置 ### 编译错误 1. 确认已安装所有依赖 2. 检查 CMake 和 Ninja 版本 3. 清理构建目录重新编译 4. 查看详细的编译错误信息 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📝 License 本项目仅供学习使用。 ## 👨‍💻 作者 Mr.Pi ## 🙏 致谢 - LaoZu的动态路由 - Boost C++ Libraries - Vue.js Team - 所有开源贡献者 --- **注意**: 这是一个课程设计项目,仅用于学习和演示目的。生产环境使用前请进行充分的安全审计和性能测试。