目录
- 一、项目地址
- 仓库地址
- 二、CodeArt的提交日志截图和前后端commit次数
- 1、部分CodeArt提交日志截图
- 2、commit次数
- 三、程序运行环境
- 四、功能实现思路
- 1、模块分工与技术选型
- a、模块拆分
- b、技术选型
- 2、各模块功能实现思路
- a、用户模块
- b、购车咨询模块
- c、附加功能模块
- d、GUI界面实现
- 五、功能需求建模分析
- 1、用例分析
- 2、类图分析
- 六、程序截图
- 七、评估每位组员的贡献比例
- 八、PSP和遇到的困难及解决方式
一、项目地址
仓库地址
仓库地址
二、CodeArt的提交日志截图和前后端commit次数
1、部分CodeArt提交日志截图






2、commit次数
| 成员 | commit |
|---|
| 102300416郑哲傲 | 7 |
| 102300417胡致兴 | 6 |
| 102300418陈周发 | 7 |
| 102300419黄贵 | 7 |
| 102300420林少杰 | 8 |
| 102300421郑栋文 | 7 |
| 102300422吴坚铭 | 7 |
| 102300423骆泽权 | 8 |
| 102300429林哲兴 | 8 |
三、程序运行环境
四、功能实现思路
1、模块分工与技术选型
a、模块拆分
- 用户模块
负责用户全生命周期的身份与信息管理,支撑个性化服务基础:
核心功能:用户注册(用户名 / 密码校验)、账号登录(凭证验证)、密码找回 / 重置
信息管理:姓名、手机号等基础信息维护,购车预算、偏好车型(轿车 / SUV / 新能源等)、品牌倾向等个性化标签管理
权限控制:区分普通用户与管理员账号身份,限制功能访问范围 - 购车咨询模块
系统核心业务模块,衔接用户需求与 AI 智能服务:
咨询请求管理:接收用户咨询参数(预算范围、车型偏好、使用场景、燃料类型、配置需求等),进行参数合法性校验与格式化
智能咨询生成:将用户需求结构化转换为 LLM 提示词,调用大语言模型服务(Qwen/ChatGLM),获取专业购车建议(车型推荐、优缺点分析、选购要点)
咨询记录管理:保存用户咨询原始需求、LLM 生成结果、咨询时间戳等数据,支持用户查看历史咨询记录、管理员追溯咨询内容 - 附加功能模块
(1)积分系统子模块
激励用户活跃,提升系统粘性:
积分获取:用户完成咨询、提交咨询反馈、邀请新用户注册等行为可获得对应积分
积分管理:积分累计统计、积分明细查询,支持积分有效期设置
积分兑换:提供汽车周边礼品(车膜、车载充电器、座椅垫等)兑换功能,包含兑换规则展示、兑换记录查询、礼品库存管理
(2)管理子模块
支撑系统运营与数据监控,仅对管理员开放:
数据统计分析:用户注册量、咨询总量、日均咨询频次等核心数据统计,热门咨询话题(如 "15 万级新能源 SUV 推荐")、高频车型偏好等趋势分析
账号与内容管理:用户账号审核、禁用 / 启用操作,咨询记录筛选(按时间 / 用户 / 关键词)、违规咨询内容删除
运营支持:导出统计报表、热门咨询话题人工标注与优化建议录入
(3)压力测试子模块
保障系统高并发场景下的稳定性:
并发模拟:生成百万级虚拟用户咨询请求,模拟不同地区、不同需求类型的并发访问场景
性能监控:实时统计系统响应时间、请求成功率、LLM 接口调用延迟
稳定性测试:长时间高负载运行测试,验证数据库连接池、LLM 接口重试机制、服务器资源占用情况(CPU / 内存 / 网络) - GUI 界面模块
负责全平台可视化交互,衔接用户操作与后端逻辑:
基础交互组件:登录 / 注册窗口、表单输入框(带校验提示)、功能按钮、弹窗提示(成功 / 错误 / 确认)
功能界面展示:用户中心(信息编辑 / 积分查询)、咨询界面(需求输入表单 / LLM 结果展示)、历史记录界面(列表 + 详情)、管理员后台(数据统计图表 / 管理表格)
交互逻辑处理:界面跳转控制、表单数据提交校验、异步请求状态反馈(如咨询加载中动画)、数据展示格式化(咨询记录分页、积分明细排序)
b、技术选型
- 整体技术栈选型
核心技术栈:Python + Tkinter + Flask选型说明:Python 生态丰富、开发效率高,适配 LLM 接口调用、数据处理等场景;Tkinter 作为 Python 内置 GUI 库,轻量化且无需额外复杂配置,满足桌面端界面快速开发需求;Flask 框架轻量灵活,适合构建后端 API 服务,支撑前后端数据交互。 - 各层级技术选型
(1)界面层(GUI 界面模块)
核心技术:Tkinter + ttk(Tkinter 扩展组件库)
辅助工具:Pillow(图片处理,支持界面图标、背景图展示)、tkinter.messagebox(弹窗提示)
功能支撑:
基础组件:窗口、表单输入框、按钮、标签、下拉菜单等核心交互组件
数据展示:Treeview(表格展示用户列表、咨询记录)、Text(富文本展示 LLM 咨询结果)
交互优化:threading(多线程处理异步请求,避免界面卡顿)、tkinter.scrolledtext(带滚动条的文本框)
(2)后端服务层(用户模块、购车咨询模块、附加功能模块)
核心框架:Flask(构建 RESTful API,处理前端请求、业务逻辑封装)
辅助技术:
数据校验:marshmallow(请求参数格式校验,确保数据合法性)
并发处理:gunicorn(WSGI 服务器,支持多进程并发,提升请求处理能力)
日志记录:logging(系统运行日志、错误日志记录,便于问题排查)
(3)数据层(全模块数据存储)
数据库选型:MySQL 8.0
选型说明:相比 SQLite,MySQL 支持更高并发访问、数据持久化稳定性更强,适配用户量增长后的存储需求,支持复杂查询(如热门咨询话题统计、用户行为分析)
数据访问:SQLAlchemy(ORM 框架,简化数据库操作,避免原生 SQL 冗余)
缓存优化:Redis(可选,缓存高频访问数据如热门咨询结果、用户登录状态,提升响应速度)
(4)LLM 接口层(购车咨询模块核心依赖)
集成模型:阿里百炼(Qwen)API + 智谱 AI(ChatGLM)API
辅助技术:
请求处理:requests(HTTP 协议调用 LLM API)
稳定性保障:tenacity(重试机制,处理 API 超时、临时故障)
提示词工程:自定义格式化模板,规范用户需求转译,确保 LLM 输出结构化结果
(5)附加功能支撑技术
积分系统子模块:Redis(积分实时计算与缓存)、MySQL(积分明细、兑换记录持久化)
管理子模块:pandas(数据统计分析)、matplotlib/seaborn(生成统计图表,如热门咨询话题折线图、用户增长柱状图)
压力测试子模块:locust(Python 开源压测工具,模拟百万级并发请求,支持分布式压测)
(6)团队协作与版本控制
版本控制:Git(代码版本管理,支持分支开发、合并)
代码仓库:Gitee/CodeArts(团队代码托管,支持权限管理、提交记录追溯)
协作工具:Jira(任务分配、进度跟踪)、Wiki(技术文档、接口说明维护)
(7)部署与运维(可选)
部署环境:Windows Server/Linux(后端服务部署)、桌面端打包(PyInstaller,将 GUI 程序打包为 exe 可执行文件,方便用户安装)
监控工具:Prometheus + Grafana(系统性能监控,如接口响应时间、数据库连接数)
2、各模块功能实现思路
a、用户模块
- 注册功能
界面设计:通过 register_window.py 构建可视化注册表单,包含用户名输入框、密码输入框(带隐藏显示切换)、姓名输入框、手机号输入框、购车预算输入框(支持区间输入)、偏好车型下拉选择框(轿车 / SUV / 新能源 / MPV 等选项),搭配注册确认按钮和表单校验提示组件。
数据校验:前端通过输入长度限制、格式提示做基础校验;后端在 app.py 中通过正则表达式校验手机号格式(如 /^1[3-9]\d{9}$/),通过 database.py 调用数据库查询接口,校验用户名 / 手机号是否已存在,确保信息唯一性。
数据存储:校验通过后,密码经 MD5 加密处理(hashlib.md5),通过 db_manager.create_user 方法将用户名、加密密码、姓名、手机号、购车预算、偏好车型等信息存入 models.py 定义的 User 数据表,返回注册成功结果及用户 ID。 - 登录功能
界面设计:通过 login_window.py 搭建登录界面,包含用户名输入框、密码输入框、登录按钮、注册跳转按钮,支持 “记住密码” 可选功能。
身份校验:前端收集用户输入的用户名和密码,后端 app.py 接收请求后,将密码加密处理,通过 db_manager.get_user_by_credentials 方法查询数据库,比对用户名与加密后的密码是否匹配。
权限跳转:校验通过后,返回用户基础信息(含用户 ID、身份标识),前端 main.py 接收结果后关闭登录窗口,根据用户身份(普通用户 / 管理员)打开对应主窗口,同时缓存用户登录状态。 - 用户基本信息管理
界面设计:在主窗口侧边栏添加 “个人中心” 入口,点击后展示信息管理界面,包含个人信息展示区(姓名、手机号、购车预算等)和编辑按钮,编辑时切换为可输入 / 选择组件。
信息修改:用户修改信息后提交请求,后端 app.py 接收修改数据,再次校验手机号等关键字段格式,通过 db_manager.update_user_info 方法更新数据库中对应用户的记录。
数据同步:修改成功后,前端实时刷新信息展示区,同时更新本地缓存的用户信息,确保后续操作(如咨询服务)使用最新的个性化标签。b、购车咨询模块
- 咨询请求管理
界面设计:通过 consultation_window.py 构建咨询表单界面,包含预算范围输入框(支持固定金额或区间输入)、车型偏好下拉框、使用场景多选框(通勤 / 家庭 / 商务 / 越野等)、燃料类型选择框(燃油 / 电动 / 混动)、品牌偏好输入框(支持自由输入或多选),搭配提交咨询按钮和加载状态提示组件。
请求处理:用户提交后,前端通过多线程(threading)发起请求,避免界面卡顿;后端 app.py 接收请求数据,通过参数合法性校验(如预算为正数、必填项非空),将合法请求暂存至内存队列,等待 LLM 服务处理。
异常处理:若参数校验失败,前端弹窗提示具体错误(如 “预算范围格式错误”);若网络异常,提供重试按钮,确保用户操作流畅。 - 咨询记录保存与查看
记录存储:咨询请求提交后,后端在调用 LLM 服务前,通过 db_manager.create_consultation 方法,将用户 ID、预算范围、车型偏好、使用场景等原始需求存入 models.py 定义的 Consultation 数据表,生成唯一咨询记录 ID,待 LLM 返回结果后,更新该记录的 llm_response 字段。
查看界面:在主窗口侧边栏添加 “我的咨询” 入口,点击后通过表格组件(ttk.Treeview)展示历史咨询记录,包含咨询时间、核心需求摘要、查看详情按钮,支持按时间倒序排序。
详情展示:用户点击查看详情后,前端通过咨询记录 ID 调用 app.py 的 /api/consultation/int:consultation_id 接口,后端从数据库查询该记录的完整信息(原始需求 + LLM 响应结果),前端以富文本形式展示,支持复制、导出功能。 - 基于 LLM 的咨询结果生成
Prompt 构建:后端 app.py 接收合法咨询请求后,按照预设模板将用户需求结构化组装为 Prompt(如明确要求推荐 3-5 款车型、包含优缺点分析和选购建议),确保 LLM 理解需求边界。
模型调用:通过 llm_service.py 封装的统一接口,同时支持调用阿里百炼(Qwen)和智谱 AI(ChatGLM)API,调用过程中实现重试机制(tenacity),处理 API 超时、临时故障等问题,确保服务稳定性。
结果处理:接收 LLM 返回的响应后,无需额外格式化(因 Prompt 已约定输出结构),直接存储至数据库,并同步返回给前端,前端在 consultation_window.py 中以清晰的富文本格式展示,突出车型推荐、核心亮点等关键信息。c、附加功能模块
- 积分系统子模块
积分规则设计:在数据库中新增积分相关数据表(用户积分表、积分明细记录表、礼品表),定义积分获取规则(单次咨询获 10 积分、提交咨询反馈获 5 积分、邀请新用户注册获 20 积分),积分有效期设为 12 个月。
积分增减逻辑:用户完成咨询后,后端在 app.py 的 /api/consult 接口中,同步调用积分增加方法,通过 db_manager.add_points 记录积分变动(用户 ID、变动类型、积分数量、时间戳);用户兑换礼品后,扣减对应积分,更新积分明细和礼品库存。 - 管理子模块
管理员权限控制:在 models.py 的 User 表中添加 is_admin 字段(布尔值),管理员通过 admin_window.py 专用登录入口登录,后端校验 is_admin=True 后,跳转至管理后台界面。
数据统计与分析:
基础统计:通过 pandas 读取数据库数据,统计总用户数、总咨询量、日均咨询频次,以数字卡片形式展示;
用户行为分析:通过 matplotlib 生成偏好车型分布饼图、咨询时间趋势折线图;
热门话题分析:统计高频咨询关键词(如 “15 万新能源 SUV”“家用轿车推荐”),生成 Top5 排行榜,以柱状图展示。
管理操作功能:
用户管理:表格展示所有用户信息,支持按用户名 / 手机号搜索,提供账号禁用 / 启用、信息编辑、删除按钮;
咨询内容管理:表格展示所有咨询记录,支持按用户、时间、关键词筛选,提供咨询内容查看、违规内容删除按钮,删除后同步更新前端展示。d、GUI界面实现
采用 “多窗口联动 + 模块化布局” 设计,基于 Tkinter + ttk 组件库开发,确保界面简洁易用、逻辑清晰: - 核心窗口设计
登录窗口(login_window.py):采用垂直布局,依次排列用户名标签 + 输入框、密码标签 + 输入框(带隐藏图标)、“记住密码” 复选框、登录按钮(居中高亮)、注册跳转链接,底部展示错误提示文本。
注册窗口(register_window.py):采用网格布局(grid),按 “标签 + 输入组件” 成对排列,预算输入框旁添加 “万元” 单位提示,偏好车型使用下拉框(ttk.Combobox),底部设置注册按钮和取消按钮,实时校验表单并展示校验结果。
主窗口(main.py):采用 “侧边栏 + 主内容区” 的左右布局,侧边栏为功能导航(购车咨询、我的咨询、积分商城、个人中心),主内容区为卡片式布局,根据选中的导航项动态加载对应界面,支持窗口最大化、最小化、关闭操作。 - 功能界面设计
购车咨询界面(consultation_window.py):采用分组布局,将咨询参数按 “基础需求”“偏好设置”“补充信息” 分组展示,预算范围用两个输入框(最低 / 最高),使用场景、燃料类型用复选框组,提交按钮设置为悬浮高亮样式,点击后显示加载动画,直至 LLM 结果返回。
咨询结果界面:嵌入 tkinter.scrolledtext.ScrolledText 组件(带滚动条),以富文本形式展示 LLM 生成的购车建议,支持字体放大缩小、复制文本功能,底部添加 “返回”“导出结果” 按钮(导出为 TXT 文件)。
我的咨询界面:使用 ttk.Treeview 表格组件,列名包括 “咨询时间”“核心需求”“咨询状态”“操作”,操作列提供 “查看详情” 按钮,表格支持点击列名排序,顶部添加时间筛选器(今日 / 本周 / 本月 / 全部)。
积分商城界面:采用网格卡片布局,每个礼品卡片包含图片展示区、名称标签、所需积分标签、库存标签、兑换按钮,卡片 hover 时添加阴影效果,兑换按钮点击后弹窗确认,积分不足时按钮置灰并提示。
管理后台界面(admin_window.py):顶部为功能导航栏(用户管理、咨询管理、数据统计),主内容区根据导航切换:用户管理 / 咨询管理采用表格 + 搜索框 + 操作按钮的组合;数据统计采用多图表布局(左侧饼图 / 柱状图,右侧数字卡片),支持图表导出为图片。 - 界面交互优化
状态反馈:按钮点击后有加载状态提示,操作成功 / 失败弹出对应弹窗(tkinter.messagebox),表单输入错误时实时标注错误字段;
响应性优化:所有耗时操作(咨询提交、数据统计)均通过多线程(threading)处理,避免界面冻结;
适配性设计:窗口支持自适应缩放,组件布局采用 pack+grid 混合布局,确保在不同屏幕分辨率下正常显示。
五、功能需求建模分析
1、用例分析
一、用户认证与授权
- 普通用户登录 / 注销
用例描述:用户通过用户名和密码登录系统,获取操作权限;登录后可主动退出,释放权限并返回欢迎界面。
依赖代码:
登录:login_window.py(登录窗口界面)、app.py 的 /api/login 接口(后端校验)、database.py 的 get_user_by_credentials 方法(数据库凭证校验)。
注销:main.py 的 logout 方法(清空当前用户状态,返回欢迎界面)、各功能窗口(consultation_window.py、admin_window.py)的退出按钮绑定该方法。
核心逻辑:登录时密码经 MD5 加密校验,通过后缓存用户信息;注销时清空缓存,销毁当前功能界面。 - 管理员登录 / 注销
用例描述:管理员通过专属登录入口,输入管理员账号密码登录,获取后台管理权限;支持主动退出。
依赖代码:
登录:login_window.py(支持 login_type="admin" 传入,渲染管理员登录窗口)、app.py 的 /api/admin/login 接口、database.py 的 get_admin_by_credentials 方法(校验管理员账号)。
注销:同普通用户注销逻辑,返回系统欢迎界面。
核心逻辑:单独的管理员账号表存储凭证,登录后跳转至管理员专属后台(admin_window.py)。 - 权限验证
用例描述:系统根据用户身份(普通用户 / 管理员)限制功能访问权限,避免越权操作。
依赖代码:main.py 的 user_login_success(普通用户跳转咨询窗口)和 admin_login_success(管理员跳转管理窗口)方法,通过身份标识控制界面跳转。
核心逻辑:登录成功后返回用户身份标识,前端根据标识加载对应功能界面,普通用户无法直接访问管理员后台,反之亦然。
二、用户信息管理 - 用户注册
用例描述:新用户填写注册表单(用户名、密码、姓名、手机号等),完成账号创建并初始化基础信息。
依赖代码:register_window.py(注册表单界面)、app.py 的 /api/register 接口(数据接收与校验)、database.py 的 create_user 方法(用户信息存入数据库,初始化积分)。
核心逻辑:校验用户名唯一性、手机号格式合法性,密码加密存储,注册成功后赠送初始积分(100 积分)。 - 用户信息编辑
用例描述:已登录用户修改个人基础信息(姓名、手机号、购车预算、偏好车型等),修改后同步更新数据库。
依赖代码:admin_window.py 的 edit_selected_user 方法(管理员编辑用户)、app.py 的 /api/admin/user/int:user_id 接口(PUT 请求处理)、database.py 的 update_user 方法(更新数据库记录)。
核心逻辑:支持管理员编辑用户信息,普通用户可扩展个人中心编辑功能(代码预留扩展接口),修改后实时同步数据。
三、购车咨询管理 - 发起购车咨询
用例描述:用户填写购车需求(预算范围、车型偏好、使用场景等),提交后系统调用 LLM 生成个性化建议。
依赖代码:consultation_window.py(咨询表单界面、多线程提交)、app.py 的 /api/consult 接口(接收请求)、llm_service.py 的 car_consultation 方法(调用 LLM 模型)、database.py 的 create_consultation 方法(保存咨询记录)。
核心逻辑:前端多线程避免界面卡顿,后端组装 Prompt 调用 Qwen/ChatGLM 接口,生成结果后存储并返回前端。 - 查看咨询历史
用例描述:用户查看过往所有咨询记录,支持查看单条记录的详细内容(需求 + LLM 建议)。
依赖代码:
普通用户:consultation_window.py 的 load_consultation_history 方法(加载个人咨询记录)、app.py 的 /api/consultations/int:user_id 接口(获取用户专属记录)。
管理员:admin_window.py 的 load_all_consultations 方法(加载所有用户咨询记录)、app.py 的 /api/admin/consultations 接口(获取全量记录)。
核心逻辑:按用户身份返回对应范围的记录,以表格展示摘要,双击 / 点击详情按钮查看完整内容。 - 咨询记录管理(管理员)
用例描述:管理员查看所有用户的咨询记录,支持搜索、删除违规记录。
依赖代码:admin_window.py 的 search_consultations(搜索过滤)、delete_selected_consultation(删除记录)方法、app.py 的 /api/admin/consultation/int:consultation_id 接口(DELETE 请求)。
核心逻辑:支持按用户名、手机号等关键词搜索,删除记录时同步删除数据库对应条目。
四、积分系统管理 - 积分获取
用例描述:用户完成指定操作(注册、提交咨询)后,系统自动增加对应积分。
依赖代码:database.py 的 create_user(注册赠送 100 积分)、create_consultation(咨询赠送 10 积分)方法,通过 point_records 表记录积分变动。
核心逻辑:触发指定行为后,后端自动执行积分增加 SQL,同步更新积分记录表和用户积分总数。 - 积分查看
用例描述:用户查看个人当前积分总额及积分变动记录(获取渠道、时间)。
依赖代码:consultation_window.py 的 load_user_points 方法(加载当前积分)、app.py 的 /api/user/points/int:user_id 接口(获取积分总额)、database.py 的 get_point_records 方法(获取积分变动历史)。
核心逻辑:前端展示积分总额,支持展开查看积分获取明细(如 “注册奖励”“咨询奖励”)。
五、管理员数据统计与管理 - 用户统计分析
用例描述:管理员查看系统整体用户数据(总用户数、今日新增、活跃用户数)及用户行为分布。
依赖代码:admin_window.py 的 load_statistics 方法(加载统计数据)、app.py 的 /api/admin/user_stats 接口(获取统计数据)、database.py 的 get_user_stats 方法(计算用户统计指标)。
核心逻辑:后端统计总用户数、今日新增用户、活跃用户(有咨询记录的用户),前端以卡片和表格展示。 - 热门车型分析
用例描述:管理员查看系统内用户咨询量最高的车型排行,辅助运营决策。
依赖代码:admin_window.py 的 load_statistics 方法(渲染热门车型表格)、database.py 的 get_user_stats 方法(统计各车型咨询次数)。
核心逻辑:按咨询记录中的 preferred_type 分组统计次数,返回 Top 排行,前端以表格展示车型及咨询次数。 - 用户管理(管理员)
用例描述:管理员查看所有注册用户信息,支持搜索、编辑、删除用户账号。
依赖代码:admin_window.py 的 load_all_users(加载用户列表)、search_users(搜索用户)、edit_selected_user(编辑用户)、delete_selected_user(删除用户)方法,对应 app.py 的 /api/admin/users(获取用户列表)、/api/admin/user/int:user_id(PUT/DELETE 请求)。
核心逻辑:全量展示用户信息,支持多条件搜索,编辑 / 删除操作同步更新数据库,删除用户时级联删除其咨询记录和积分数据。
2、类图分析

六、程序截图
登陆成功提示窗口

管理员编辑用户信息窗口

管理员成功删除用户

管理员登入窗口

管理员功能切换版

管理员删除用户确认提示窗口

管理员删除咨询记录成功的提示窗口

管理员删除咨询记录的确认提示

管理员搜索相关偏好车型的咨询记录

管理员搜索用户

管理员页面——数据统计

管理员页面——用户管理

管理员页面——咨询记录

首页

用户登入窗口

用户个人咨询记录界面

咨询成功结果展示

七、评估每位组员的贡献比例
八、PSP和遇到的困难及解决方式
- 陈周发:前端 - 基础框架开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 梳理系统 GUI 整体架构,明确窗口联动逻辑与全局状态管理需求 | 40 | 20 | |
| 方案设计 设计主框架布局(欢迎界面 + 功能窗口跳转),定义全局状态存储方案 | 50 | 38 | |
| 编码开发 编写main.py核心代码,实现主窗口初始化、状态管理、注销重置逻辑 | 120 | 86 | |
| 测试优化 测试窗口跳转流畅性、状态同步准确性,修复界面卡顿与布局错乱问题 | 60 | 28 | |
遇到的困难和解决方法
困难:多窗口联动时状态同步混乱(如用户登录后全局用户信息未及时更新)
解决方法:封装全局状态管理类,通过回调函数实现各窗口状态实时同步,确保登录、注销操作后所有界面及时刷新。
困难:窗口切换时组件残留导致界面错乱
解决方法:在切换窗口前统一调用 “清空组件” 方法(widget.destroy()),确保每次加载新界面时主窗口处于干净状态。
- 黄贵:前端 - 用户认证界面开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 明确用户 / 管理员登录、注册的功能点与校验规则 | 30 | 12 |
| 方案设计 | 设计登录 / 注册表单布局,规划数据校验逻辑与 API 对接流程 | 40 | 29 |
| 编码开发 | 编写login_window.py和register_window.py,实现表单渲染、校验、API 调用 | 110 | 98 |
| 测试优化 | 测试不同输入场景(合法 / 非法数据),优化校验提示与交互体验 | 50 | 26 |
遇到的困难和解决方法
困难:管理员与普通用户登录界面复用逻辑混乱
解决方法:通过login_type参数动态渲染界面标题与校验逻辑,复用基础表单组件,减少冗余代码。
困难:API 请求失败时无友好反馈(如网络中断、账号错误)
解决方法:添加异常捕获机制,针对不同错误类型(网络错误、业务错误)弹出对应提示框,引导用户重试或修正输入。
- 骆泽权:前端 - 用户咨询界面开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 梳理用户咨询流程(填写需求→提交→展示结果→查看历史),明确交互细节 | 40 | 19 |
| 方案设计 | 设计咨询表单分组布局、结果展示区(富文本)、历史记录区(表格),规划多线程处理方案 | 60 | 34 |
| 编码开发 | 编写consultation_window.py,实现表单提交、多线程调用、历史记录加载与详情展示 | 150 | 120 |
| 测试优化 | 测试咨询提交响应速度、历史记录查询准确性,优化界面加载状态提示 | 70 | 40 |
遇到的困难和解决方法
困难:LLM 响应耗时较长,导致界面冻结
解决方法:使用threading模块开启后台线程处理咨询请求,主线程仅更新加载状态与结果,确保界面可交互。
困难:历史记录过多时表格加载卡顿
解决方法:实现表格数据分页加载逻辑(前端暂存全量数据,分页渲染),减少一次性 DOM 渲染压力。
- 郑栋文:前端 - 管理员界面开发
| PSP | 阶段描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 明确管理员核心功能(数据统计、用户管理、咨询管理),梳理操作流程 | 40 | 18 |
| 方案设计 | 设计管理后台布局(顶部导航 + 主内容区),规划统计卡片、表格组件、搜索筛选逻辑 | 50 | 43 |
| 编码开发 | 编写admin_window.py,实现面板切换、数据渲染、搜索 / 编辑 / 删除等交互功能 | 140 | 121 |
| 测试优化 | 测试大量数据展示性能、操作权限控制,优化表格筛选与编辑流程 | 60 | 35 |
遇到的困难和解决方法
困难:多个面板(统计、用户、咨询)切换时布局错乱
解决方法:采用 “隐藏 - 显示” 模式管理面板,切换时先隐藏所有面板,再显示目标面板,确保布局独立不冲突。
困难:表格搜索筛选逻辑复杂(多字段匹配)
解决方法:封装通用搜索函数,遍历表格数据并匹配所有关键字段,支持模糊查询,提升筛选效率。
- 林哲兴:后端 - 用户与管理模块 API 开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 梳理用户模块(注册、登录、信息 / 积分查询)与管理员模块(登录、数据统计)核心接口,明确参数与响应格式 | 40 | 16 |
| 方案设计 | 设计两类接口路由,规划密码加密、权限校验、数据库交互逻辑 | 60 | 29 |
| 编码开发 | 编写app.py中用户与管理员模块接口,实现请求校验、业务逻辑处理、数据库对接 | 150 | 145 |
| 测试优化 | 测试接口合法性、权限控制准确性,优化响应速度与数据安全性 | 60 | 39 |
遇到的困难和解决方法
困难:用户密码明文存储存在安全风险
解决方法:使用hashlib.md5对密码进行加密存储,登录时校验加密后的密码,避免明文传输与存储。
困难:管理员与普通用户权限混淆,存在越权风险
解决方法:在接口层添加权限校验中间件,基于用户身份(is_admin字段)过滤请求,拒绝普通用户访问管理员接口。
- 林少杰:后端 - 咨询模块 API 开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 梳理咨询模块接口(提交咨询、查询历史、查看详情),明确参数与业务逻辑 | 30 | 19 |
| 方案设计 | 设计 API 路由,规划 LLM 调用流程、咨询记录存储、异常处理方案 | 60 | 38 |
| 编码开发 | 编写app.py中咨询模块接口,实现请求接收、LLM 调用、数据库存储与响应返回 | 140 | 128 |
| 测试优化 | 测试接口并发能力、LLM 调用稳定性,优化异常捕获与重试机制 | 60 | 36 |
遇到的困难和解决方法
困难:LLM API 调用超时导致接口响应失败
解决方法:在llm_service.py中添加超时重试机制(最多 3 次重试,每次间隔 2 秒),提升接口可用性。
困难:咨询记录数据量大时查询缓慢
解决方法:为consultations表的user_id和created_at字段添加索引,优化查询 SQL 语句。
- 胡致兴:数据层开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 梳理系统数据实体(用户、咨询、积分、管理员),明确实体关系与存储需求 | 40 | 18 |
| 方案设计 | 设计数据库表结构,规划 CRUD 操作方法、事务管理、复杂查询(统计、热门车型)逻辑 | 60 | 54 |
| 编码开发 | 编写database.py,实现数据库连接、表初始化、数据操作封装,对接models.py | 130 | 157 |
| 测试优化 | 测试数据库操作准确性、并发安全性,优化查询语句与事务处理 | 50 | 29 |
遇到的困难和解决方法
困难:多表关联查询(如咨询记录关联用户信息)逻辑复杂
解决方法:使用 SQLJOIN语句实现多表关联查询,封装通用关联查询方法,简化业务层调用。
困难:删除用户时未级联删除关联数据(咨询、积分)导致数据冗余
解决方法:在删除用户时开启事务,依次删除用户关联的积分记录、咨询记录,最后删除用户,确保数据一致性。
- 郑哲傲:LLM 服务层开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 明确 LLM 服务核心需求(接收用户需求、生成结构化建议、处理调用异常) | 30 | 33 |
| 方案设计 | 设计 LLM API 封装方案,规划 Prompt 模板、重试机制、多模型 fallback 逻辑 | 40 | 26 |
| 编码开发 | 编写llm_service.py,实现 Qwen/ChatGLM API 调用、Prompt 构建、响应处理 | 100 | 158 |
| 测试优化 | 测试 LLM 响应准确性、调用稳定性,优化 Prompt 模板与重试策略 | 40 | 24 |
遇到的困难和解决方法
困难:不同 LLM API 返回格式不一致,难以统一处理
解决方法:封装响应格式化函数,将不同模型的返回结果转换为统一结构(如推荐车型列表、优缺点分析),便于业务层使用。
困难:Prompt 设计不合理导致 LLM 响应偏离需求
解决方法:优化 Prompt 模板,明确输出结构(分点、字段约束),添加示例回复,引导 LLM 生成符合预期的结果。
- 吴坚铭:数据模型与工具开发
| PSP 阶段 | 描述 | 预计时间 (分钟) | 实际时间 (分钟) |
|---|
| 需求分析 | 梳理系统数据实体属性与关系,明确数据模型设计要求与工具开发(迁移、测试)需求 | 30 | 27 |
| 方案设计 | 设计数据模型类结构,规划序列化方法、数据库迁移逻辑、测试脚本方案 | 40 | 35 |
| 编码开发 | 编写models.py定义数据模型,编写migrate_database.py实现数据库迁移,开发测试脚本 | 90 | 63 |
| 测试优化 | 测试数据模型兼容性、迁移工具稳定性,完善测试脚本覆盖率 | 30 | 23 |
遇到的困难和解决方法
困难:数据模型字段变更后,旧数据库数据不兼容
解决方法:开发数据库迁移工具(migrate_database.py),支持旧表数据备份、新表创建、数据恢复,确保平滑升级。
困难:数据模型序列化(转换为 JSON)时字段冗余
解决方法:在models.py中为每个模型封装to_dict()方法,仅返回业务所需字段,减少数据传输量。
