1.引言
1.1 研究背景
1.1.1 问题的提出
近年来,随着我国高等教育事业的快速发展,高校在校生规模持续扩大,教材需求量随之攀升。据统计,全国中小学教材年零售金额超过200亿元,而大学教材因专业性强、单价高(新书普遍四五十元),二手交易需求更为旺盛。然而,教材资源的利用效率却不容乐观。我国每年约28亿册教材中,超过90%因缺乏有效回收渠道最终被送入造纸厂,造成了严重的资源浪费与环境污染。从环保角度看,每循环1吨教材用纸可节约17棵成年大树,减少二氧化碳排放4.8吨。从经济角度计算,若能实现教材的充分循环利用,全国学生每年可节省开支超过200亿元。
1.1.2 国内外研究现状
国内研究方面,校园二手书籍交易平台的研究围绕技术架构、功能设计和新兴技术融合三大方向展开,但仍存在明显缺口。技术架构上,国内平台长期以SpringBoot+Vue等重量级架构为主流(占比68%),部署成本高、资源消耗大,难以适配中小型高校服务器条件。虽有Flask+MySQL轻量化组合的探索(如范路桥等2022年的问答系统验证可降低50%内存占用),但多停留于基础功能验证,未迁移至二手书交易场景,未解决校园身份认证、线下交割等核心需求;数据库优化方面,未采用"学期分表+联合索引"策略,数据量超万条时查询响应时间达1.2秒,远超0.5秒的用户阈值。功能设计上,"照搬电商逻辑、忽略校园特性"问题突出:85%平台采用基础关键词匹配推荐模型,教材版本错配率达32%;身份核验不严导致非学生用户混入率12%;仅23%平台预设校园自提点,平均交易耗时4.2小时,远超国外平台的1.8小时。2024-2025学年全国高校二手书交易量达1200万册,但仅43%通过校园专属平台完成,其余依赖微信群等非正式渠道。新兴技术融合方面,区块链、AI识别等技术"方案设计多、实际落地少":区块链部署需8GB内存,超中小型高校平均4GB配置;AI成色识别模型需GPU服务器(成本超5万元),而82%平台年度运维预算不足3万元。综上,国内研究存在技术架构优化不足、算法功能场景脱节、新兴技术落地困难三大缺口。
1.2 研究目的和意义
本研究设计并实现一个功能完善、操作便捷、安全可靠的校园二手书籍交易平台,具体目标包括:①为高校师生提供便捷的二手书信息发布与检索渠道,解决传统交易方式信息分散、匹配效率低的问题;②通过学号认证和交易流程设计,构建可信的校园交易环境,降低交易风险;③规范线下交割环节,设计自提点预约机制,确保交易的顺利完成;④通过数据统计和管理功能,为平台运营提供决策支持。
1.3 本文研究内容和章节结构介绍
本文围绕校园二手书籍交易平台的设计与实现展开研究,主要内容包括:分析校园二手书交易的需求特点和现有问题,设计符合校园场景的系统架构和功能模块,基于Flask框架和MySQL数据库进行技术实现,并对系统进行全面的功能测试。
2.系统相关技术介绍
2.1 Python语言
Python是一种高级、解释型、通用的编程语言,由Guido van Rossum于1991年首次发布。Python以其简洁易读的语法而闻名,采用强制缩进的代码块结构,使得代码清晰规范、可读性强。Python支持多种编程范式,包括面向对象编程、命令式编程、函数式编程和过程式编程,能够灵活适应不同类型的开发需求。
在Web开发领域,Python拥有丰富的框架生态,如Django、Flask、Tornado等,开发者可以根据项目规模和复杂度选择合适的工具。Python还拥有庞大的第三方库生态系统,通过pip包管理工具可以便捷地安装和使用各类扩展库,大大提升了开发效率。此外,Python在数据分析、人工智能、自动化脚本等领域也具有广泛应用,为系统的后续功能扩展提供了技术基础。
2.2 Flask框架
Flask是一个用Python编写的轻量级Web应用框架,由Armin Ronacher于2010年基于Werkzeug工具箱和Jinja2模板引擎开发。Flask被归类为"微框架"的核心哲学是保持核心简单但可扩展,它不强制使用特定的工具或库,开发者可以根据项目需求灵活选择和集成各类扩展。
2.3 数据库技术
数据库是Web应用的核心组件,负责数据的持久化存储和管理。本系统选用MySQL作为数据库管理系统,配合SQLAlchemy对象关系映射(ORM)工具进行数据库操作。
MySQL是一款开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL具有以下优势:一是性能卓越,支持高并发访问,能够满足校园平台的数据处理需求;二是可靠性高,支持事务处理、数据备份和恢复机制,保障数据安全;三是跨平台支持,可在Windows、Linux、macOS等多种操作系统上运行;四是与Python和Flask配合良好,有成熟的驱动和ORM支持;五是开源免费,降低了系统开发和部署成本。
3.系统分析
3.1 系统技术可行性分析
3.1.1 技术可行性
本系统采用的技术栈均为成熟稳定的开源技术,具有充分的技术可行性。
3.1.2 经济可行性
本系统在经济层面具有显著的可行性优势。从开发成本来看,所有核心技术均为开源免费软件,无需支付商业软件许可费用。Python、Flask、MySQL、Bootstrap等均采用开源协议,可以免费用于商业和非商业项目。
3.1.3 操作可行性
本系统在操作层面充分考虑了用户的使用习惯和技能水平。系统界面设计遵循简洁明了的原则,采用常见的电商网站布局方式,用户无需专门培训即可上手使用。
3.2 功能需求分析
3.2.1 用户功能需求
根据对校园二手书交易场景的调研分析,系统需要满足不同角色用户的功能需求。系统涉及的用户角色主要包括普通用户(学生)和管理员两类。
①普通用户功能需求:
一是用户注册与登录。用户需要提供学号、姓名、联系方式等真实信息进行注册,通过学号认证保障用户身份的真实性。登录后系统能够识别用户身份,提供个性化服务和权限控制。
二是书籍信息浏览与搜索。用户能够浏览平台上所有可预约的书籍,支持按学科、成色等维度进行筛选,支持按书名关键词进行搜索。书籍列表以卡片形式展示,包含书名、学科、成色、价格等关键信息,方便用户快速筛选。
三是书籍详情查看。用户点击书籍卡片后可进入详情页面,查看书籍的完整信息,包括封面图片、详细描述、卖家信息等。详情页还展示该书籍的历史留言,方便用户了解其他用户的咨询情况。
四是书籍发布。用户可以将自己不再需要的书籍发布到平台,填写书名、学科、版本、成色、价格等信息,上传封面图片,并撰写书籍描述。发布后的书籍将在首页展示供其他用户浏览。
五是书籍预约购买。用户对感兴趣的书籍可发起预约,选择自提点后生成交易记录。预约成功后,书籍状态更新为已售,避免重复预约。
六是个人中心管理。用户可以在个人中心查看自己发布的书籍、购买记录、销售记录和消息通知。对于自己发布的书籍,可以进行编辑或删除操作;对于交易记录,可以查看状态并进行相应操作。
七是站内消息沟通。用户可以向卖家发送留言咨询书籍细节、商议交易时间地点。消息系统支持已读未读状态标识,方便用户跟进沟通。
②管理员功能需求:
一是用户管理。管理员可以查看所有注册用户的信息,包括姓名、学号、联系方式、注册时间、发布书籍数量、交易次数等,便于掌握用户情况。
二是书籍管理。管理员可以查看平台上的所有书籍,了解书籍的发布情况、状态信息,对于违规书籍可进行下架处理。
三是交易管理。管理员可以查看所有交易记录,追踪交易状态,了解交易完成情况。
3.2.2 角色用例图
系统涉及两类主要角色:普通用户(学生)和管理员。普通用户的用例包括:注册账号、登录系统、浏览书籍、搜索书籍、查看详情、发布书籍、编辑书籍、删除书籍、预约购买、发送消息、查看个人中心、管理交易记录等。管理员的用例包括:登录后台、管理用户、管理书籍、管理交易等。

图3-1 角色用例图
Fig.3-1 Role Use Case Diagram
(此处应放置角色用例图,图示内容包括两个角色及其对应的用例,角色与用例之间通过连线表示关联关系。)
3.2.2 角色用例词汇
系统涉及两类主要角色:普通用户(学生)和管理员。普通用户的用例包括:注册账号、登录系统、浏览书籍、搜索书籍、查看详情、发布书籍、编辑书籍、删除书籍、预约购买、发送消息、查看个人中心、管理交易记录等。管理员的用例包括:登录后台、管理用户、管理书籍、管理交易等。
表3-1 用例词汇表
Table 3-1 Use Case Glossary
|--------|----------|----------------------------|
| 用例名称 | 角色 | 简要描述 |
| 用户注册 | 普通用户 | 用户提供学号、姓名、联系方式、密码等信息完成账号注册 |
| 用户登录 | 普通用户、管理员 | 用户通过学号和密码登录系统 |
| 浏览书籍 | 普通用户 | 查看首页书籍列表,支持分页浏览 |
| 搜索书籍 | 普通用户 | 按书名关键词搜索或按学科、成色筛选书籍 |
| 查看详情 | 普通用户 | 查看书籍详细信息,包括封面、描述、卖家信息等 |
| 发布书籍 | 普通用户 | 填写书籍信息并上传封面,将书籍发布到平台 |
| 编辑书籍 | 普通用户 | 对自己发布的书籍信息进行修改更新 |
| 删除书籍 | 普通用户 | 将已发布的书籍下架,状态变更为已取消 |
| 预约购买 | 普通用户 | 选择自提点并发起交易预约,生成交易记录 |
| 发送消息 | 普通用户 | 向卖家发送咨询留言,询问书籍详情或约定交易 |
| 查看个人中心 | 普通用户 | 查看自己的书籍发布、交易记录和消息通知 |
| 取消交易 | 普通用户 | 对未完成的交易进行取消操作 |
| 确认交易完成 | 卖家 | 作为卖家确认交易已完成 |
| 提交反馈 | 普通用户 | 对已完成的交易提交反馈意见 |
| 标记消息已读 | 普通用户 | 将收到的消息标记为已读状态 |
| 用户管理 | 管理员 | 查看和管理所有用户信息 |
| 书籍管理 | 管理员 | 查看和管理所有书籍信息 |
| 交易管理 | 管理员 | 查看和管理所有交易记录 |
4.系统设计
4.1 系统架构设计
本系统采用基于B/S(Browser/Server)模式的三层架构设计,将系统划分为表示层、业务逻辑层和数据访问层,各层之间职责清晰、耦合度低,便于系统的开发、部署和维护。
三层架构的优势在于:一是各层职责清晰,表示层关注用户界面,业务逻辑层关注业务规则,数据访问层关注数据持久化,降低了系统的复杂性;二是层与层之间通过接口通信,某一层的修改不会影响其他层,提高了系统的可维护性;三是便于系统的分布式部署,不同层可以部署在不同的服务器上,提升系统性能。

图4-1 系统框架图
Fig.4-1 System architecture diagram
4.2 系统功能模块设计
根据需求分析的结果,本系统划分为六大功能模块,各模块协同工作,共同支撑平台的完整业务流程。
用户管理模块负责用户的注册、登录、信息维护和权限控制。用户注册时需提供学号、姓名、联系方式等信息,系统对学号进行唯一性校验,密码经过哈希加密后存储。用户登录时验证学号和密码,成功后创建用户会话。已登录用户可以查看和修改个人信息,修改密码时需验证原密码。用户管理模块还通过Flask-Login实现会话管理和权限控制,区分普通用户和管理员的不同访问权限。
书籍管理模块负责书籍信息的发布、浏览、搜索、编辑和下架。用户发布书籍时填写书名、学科、版本、成色、价格等信息,可上传封面图片。系统对输入数据进行验证,确保必填项完整、价格格式正确。发布的书籍在首页展示,支持按学科、成色筛选和按书名关键词搜索。用户可以在个人中心查看自己发布的书籍,并进行编辑或下架操作。
交易管理模块负责交易预约、状态流转和反馈提交。用户对可预约的书籍发起交易,选择自提点后生成交易记录,同时书籍状态更新为已售。交易状态包括待交易、已完成和已取消三种,分别用不同颜色的标签标识。买家可以取消待交易的预约,卖家可以确认交易完成,交易完成后双方可提交反馈。交易管理模块实现了从预约到完成的全流程跟踪。
消息管理模块负责站内消息的发送、接收和状态管理。用户可以在书籍详情页向卖家发送留言,留言内容、发送者、接收者、关联书籍等信息被记录到数据库。接收者可以在个人中心和消息页面查看收到的消息,未读消息有醒目提示和计数标识。用户可将消息标记为已读,系统支持已读/未读状态的区分。
个人中心模块为用户提供统一的个人信息和活动管理入口。个人中心聚合展示了用户发布的书籍列表、购买记录、销售记录和消息通知。用户可以在个人中心快速查看各类信息的状态,对书籍进行编辑,对交易进行取消或确认,对消息进行阅读和回复。
后台管理模块为管理员提供平台运营管理功能。管理员登录后进入管理后台,用户管理页面列出所有注册用户的信息,便于管理员掌握用户情况。书籍管理页面展示所有书籍及其状态,交易管理页面展示所有交易记录及其状态。

图4-2 系统功能图
Fig.4-2 System function diagram
4.3 系统流程设计
系统流程设计描述了用户在完成关键业务操作时的步骤顺序和系统响应,本部分以核心业务流程为例进行说明。
用户注册登录流程:用户访问注册页面,填写学号、姓名、联系方式、密码等信息提交。系统验证学号是否已存在,若存在则返回错误提示;若不存在,则将用户信息存入数据库,密码经过哈希加密。注册成功后跳转至登录页面,用户输入学号和密码,系统验证凭据正确性,验证通过后创建用户会话并跳转至首页。

图4-3 用户注册登录流程图
Fig.4-3 User registration and login process
书籍发布流程:已登录用户进入发布书籍页面,填写书名、学科、版本、成色、价格等信息,可选择上传封面图片。提交前系统进行前端验证,确保必填项已填写、价格格式正确。提交后后端再次验证数据有效性,并将书籍信息存入数据库,书籍状态默认为可预约。发布成功后跳转至书籍详情页或首页。

图4-4 书籍发布流程图
Fig.4-4 Book publishing process
书籍预约交易流程:用户在书籍详情页选择自提点后点击预约按钮。系统检查当前用户是否为书籍发布者(禁止自购),检查书籍状态是否为可预约。验证通过后创建交易记录,状态为待交易,同时将书籍状态更新为已售。交易创建成功后跳转至个人中心,用户可在购买记录中查看该交易。卖家可在销售记录中看到新交易,双方通过站内消息沟通具体交易事宜。卖家确认线下交易完成后点击确认完成按钮,交易状态更新为已完成。

图4-5 书籍预约交易流程图
Fig.4-5 Book Reservation Transaction Process
消息发送与接收流程:用户在书籍详情页填写留言内容后发送。系统记录消息内容、发送者、接收者、关联书籍、发送时间等信息,消息初始状态为未读。接收者登录系统后,在个人中心的消息标签页和独立的消息页面均可看到收到的消息,未读消息以高亮背景和计数徽章标识。用户点击消息后可查看详情,点击标为已读按钮可将消息状态更新为已读。

图4-6 消息发送与接收流程图
Fig.4-6 Message Sending and Receiving Process
4.4 数据库设计
4.4.1 数据库概念设计
数据库概念结构设计的核心是建立实体-关系模型(E-R模型),描述系统中的实体、属性以及实体之间的联系。
本系统涉及的主要实体包括:用户(User)、书籍(Book)、交易(Trade)、消息(Message)。
4.4.2数据库逻辑设计
根据概念结构设计,将实体-关系模型转换为具体的数据库表结构。本系统共设计四张数据表:用户表(users)、书籍表(books)、交易表(trades)和消息表(messages)。各表的详细结构如下。
表4-1 用户表
Table 4-1 User Table
|---------------|--------------|-------------------------|
| 字段名 | 数据类型 | 约束/描述 |
| id | INTEGER | 主键,自增长 |
| student_id | VARCHAR(20) | 非空,唯一索引,学号 |
| name | VARCHAR(50) | 非空,姓名 |
| password_hash | VARCHAR(128) | 非空,密码哈希值 |
| contact | VARCHAR(20) | 非空,联系方式 |
| role | VARCHAR(10) | 默认'user',角色(user/admin) |
| created_at | DATETIME | 默认当前时间,注册时间 |
表4-2 书籍表
Table 4-2 Book Table
|-------------|--------------|--------------------------------------------|
| 字段名 | 数据类型 | 约束/描述 |
| id | INTEGER | 主键,自增长 |
| seller_id | INTEGER | 外键,关联users(id) |
| title | VARCHAR(100) | 非空,索引,书名 |
| subject | VARCHAR(50) | 非空,索引,学科 |
| version | VARCHAR(50) | 可为空,版本信息 |
| condition | VARCHAR(20) | 非空,成色(全新、九成新等) |
| price | FLOAT | 非空,价格 |
| cover_path | VARCHAR(255) | 可为空,封面图片路径 |
| description | TEXT | 可为空,书籍描述 |
| status | VARCHAR(20) | 默认'available',状态(available/sold/cancelled) |
| created_at | DATETIME | 默认当前时间,发布时间 |
表4-3 交易表
Table 4-3 Trades Table
|------------------|--------------|---------------------------------------------|
| 字段名 | 数据类型 | 约束/描述 |
| id | INTEGER | 主键,自增长 |
| buyer_id | INTEGER | 外键,关联users(id) |
| seller_id | INTEGER | 外键,关联users(id) |
| book_id | INTEGER | 外键,关联books(id) |
| appointment_time | DATETIME | 默认当前时间,预约时间 |
| pickup_location | VARCHAR(200) | 非空,自提点 |
| status | VARCHAR(20) | 默认'pending',状态(pending/completed/cancelled) |
| feedback | TEXT | 可为空,交易反馈 |
| created_at | DATETIME | 默认当前时间,交易创建时间 |
表4-4 信息表
Table 4-4 Messages Table
|-------------|----------|----------------|
| 字段名 | 数据类型 | 约束/描述 |
| id | INTEGER | 主键,自增长 |
| sender_id | INTEGER | 外键,关联users(id) |
| receiver_id | INTEGER | 外键,关联users(id) |
| book_id | INTEGER | 外键,关联books(id) |
| content | TEXT | 非空,消息内容 |
| created_at | DATETIME | 默认当前时间,发送时间 |
| is_read | BOOLEAN | 默认FALSE,是否已读 |
4.5 本章小结
本章详细阐述了校园二手书籍交易平台的设计方案。在系统架构设计方面,采用B/S模式的三层架构,将系统划分为表示层、业务逻辑层和数据访问层。在功能模块设计方面,将系统划分为用户管理、书籍管理、交易管理、消息管理、个人中心和后台管理六大模块,明确了各模块的功能边界和职责范围。在系统流程设计方面,以用户注册登录、书籍发布、书籍预约交易、消息发送接收为例,详细描述了关键业务流程的步骤顺序和分支判断。在数据库设计方面,从概念结构设计入手,建立了用户、书籍、交易、消息四个实体的E-R模型,进而完成逻辑结构设计,定义了详细的数据表结构。
5.系统实现
5.1 用户功能页面模块
用户注册与登录页面:注册页面(register.html)采用表单布局,包含学号、姓名、联系方式、密码、确认密码等输入项。前端通过JavaScript实现密码一致性验证,在表单提交时检查两次输入的密码是否相同,若不同则阻止提交并弹出提示。后端接收表单数据后,调用User模型的set_password方法对密码进行哈希加密,然后存入数据库。学号字段设置为唯一索引,若注册时学号已存在,数据库会抛出完整性错误,系统捕获后返回相应提示。登录页面(login.html)接收学号和密码,调用check_password方法验证密码正确性,验证通过后使用Flask-Login的login_user函数创建用户会话。

图5-1 用户注册与登录图
Fig.5-1 User Registration and Login
首页与书籍浏览页面:首页(index.html)继承自base.html基础模板,上方为搜索筛选区域,下方为书籍列表展示区。搜索区域提供按书名关键词搜索、按学科筛选、按成色筛选三个维度,用户选择筛选条件后提交GET请求,后端根据请求参数动态构建查询条件,返回符合条件的书籍分页结果。书籍列表采用卡片式布局(book-card),每张卡片展示书籍封面、书名、学科、成色、价格和卖家信息。分页组件使用Flask-SQLAlchemy的paginate方法实现,根据当前页和总页数生成页码导航。

图5-2 首页与书籍浏览页面图
Fig.5-2 Home page and book browsing page
书籍详情页面:详情页(detail.html)分为左中右三栏布局。左侧展示书籍封面和详细信息,包括学科、成色、版本、价格等。中间展示卖家信息和书籍描述。右侧根据当前用户身份和书籍状态动态显示不同内容:若用户未登录,显示登录提示;若用户是卖家,显示编辑和删除按钮;若用户是买家且书籍可预约,显示预约表单;若书籍已售,显示已售标识。详情页下方为留言区域,通过AJAX技术异步加载该书籍的所有留言。页面加载时调用/book/<book_id>/messages接口获取留言数据,渲染后动态插入页面,实现无刷新加载。

图5-3 书籍详情页面
Fig.5-3 Book Details Page
发布书籍页面:发布页(publish.html)包含完整的书籍信息表单,涉及书名、学科、成色、版本、价格、封面图片、书籍描述等字段。表单采用POST方法提交,enctype设置为multipart/form-data以支持文件上传。后端接收表单数据后,调用save_upload_file函数处理封面图片:检查文件类型是否在允许的扩展名集合中,生成安全的文件名并添加随机后缀避免重名,将文件保存到指定目录,最后将文件路径存入数据库。价格字段在前端通过step="0.01"限制为两位小数,在后端转换为float类型存储。

图5-4 发布书籍页面
Fig.5-4 Publish Book Page
个人中心页面:个人中心(profile.html)采用左右布局,左侧展示用户基本信息卡片和交易统计卡片,右侧采用选项卡(tab)切换不同内容。选项卡包括"我的书籍"、"购买记录"、"销售记录"、"消息通知"四个标签页,通过Bootstrap的tab组件实现无刷新切换。"我的书籍"标签页以列表形式展示用户发布的所有书籍,每本书籍卡片包含封面缩略图、基本信息、状态标签和操作按钮(查看、编辑)。"购买记录"和"销售记录"分别展示用户作为买家和卖家的交易记录,交易状态用不同颜色的徽章标识,并根据状态显示可操作按钮(如取消交易、确认完成、提交反馈)。"消息通知"标签页展示最近的未读消息,并提供查看全部消息的链接。

图5-5 个人中心页面
Fig.5-5 Personal Center Page
消息页面:消息页面(messages.html)同样采用选项卡设计,区分"收到的消息"和"发送的消息"。收到的消息列表中以高亮背景标记未读消息,每条消息显示发送者姓名、学号、留言内容、关联书籍和发送时间。消息末尾提供"标为已读"按钮,通过AJAX请求调用/message/<message_id>/read接口,将消息状态更新为已读。发送的消息列表展示用户发送的所有消息,包含接收者、内容和发送时间。

图5-7 消息页面
Fig.5-7 Messege Page
5.2 管理员功能页面模块
用户管理页面:用户管理页面(users.html)以表格形式展示所有注册用户的信息,包括用户ID、姓名、学号、联系方式、注册时间、发布书籍数量和交易次数-2。表格采用响应式设计,在小屏幕设备上自动转换为卡片形式展示。管理员可以通过表格快速了解用户活跃度和平台参与情况。目前未实现用户编辑和删除功能,未来可根据运营需要扩展。

图5-8 用户管理页面
Fig.5-8 User Manage Page
书籍管理页面:书籍管理页面(books.html)以表格形式展示平台上的所有书籍,包括书籍ID、书名、学科、成色、价格、卖家、状态、发布时间等信息-2。书籍状态用不同颜色的徽章标识(可预约-绿色、已售-红色、已下架-灰色)。每行末尾提供"查看"按钮,点击后跳转至书籍详情页,方便管理员审核书籍内容。未来可扩展违规书籍下架功能。

图5-9 书籍管理页面
Fig.5-9 Book Manage Page
交易管理页面:交易管理页面(trades.html)以表格形式展示所有交易记录,包括交易ID、书名、买家、卖家、价格、自提点、状态、预约时间和反馈内容-2。交易状态用徽章标识(待交易-黄色、已完成-绿色、已取消-灰色)。管理员可通过此页面全面掌握平台交易情况,了解交易完成率和用户反馈。

图5-10 交易管理页面
Fig.5-10 Trades Manage Page