【股票交易系统】
    ——股票信息发布子系统
    设计报告
    组长:程政淋 3200105708@zju.edu.cn
    组员:米博宇 黄亦霄 黄政 王梓霁 管欣怡
    日期:2022/5/16
    目录
    1 引言 7
    1.1 编写目的 7
    1.2 项目背景 7
    1.3 相关定义 8
    1.4 系统概述 9
    1.5 项目概述 11
    2 总体设计 12
    2.1 需求规定 12
    2.1.1 系统功能 12
    2.1.2 系统性能 12
    2.1.3 输入输出要求 13
    2.1.4 数据管理能力要求 13
    2.2 运行环境规定 13
    2.2.1 服务器端 13
    2.2.2 客户端 14
    2.3 基本设计概念和流程处理 14
    2.4 结构 15
    2.4.1 网上信息发布子系统结构图 15
    2.4.2 IPO 图 16
    3 系统结构 19
    3.1 系统功能结构 19
    3.2 技术简介 21
    3.3 部署图 22
    3.4 类图 23
    3.5 内部接口图 23
    3.6 顺序图 23
    3.6.1 按股票代码查询 23
    3.6.2 按股票名称查询 24
    3.6.3 用户权限升级 24
    3.6.4 用户订单退款 25
    3.6.5 新闻展示与查看 25
    3.6.6 系统维护信息公告 26
    3.6.7 日K线绘制 26
    3.6.8 月K线绘制 27
    3.6.8 年K线绘制 27
    3.6.10 股票其他信息发布 28
    4 执行概念 29
    4.1 按股票代码查询 29
    4.1.1 模块概述 29
    4.1.2 IPO图 29
    4.1.3 功能 29
    4.1.4 输入项 29
    4.1.5 输出项 29
    4.1.6 设计方法(算法) 30
    4.1.7 流程图 30
    4.1.8 测试计划 31
    4.2 按股票名称查询 31
    4.2.1 模块概述 31
    4.2.2 IPO图 31
    4.2.3 功能 31
    4.2.4 输入项 31
    4.2.5 输出项 31
    4.2.6 设计方法(算法) 32
    4.2.7 流程图 32
    4.2.8 测试计划 33
    4.3 用户权限升级 33
    4.3.1 模块概述 33
    4.3.2 IPO图 33
    4.3.3 功能 33
    4.3.4 输入项 33
    4.3.5 输出项 34
    4.3.6 设计方法(算法) 34
    4.3.7 流程图 35
    4.3.8 测试计划 35
    4.4 用户订单退款 36
    4.4.1 模块概述 36
    4.4.2 IPO 图 36
    4.4.3 功能 36
    4.4.4 输入项 36
    4.4.5 输出项 36
    4.4.6 设计方法(算法) 37
    4.4.7 流程图 37
    4.4.8 测试计划 38
    4.5 新闻展示与查看 38
    4.5.1 模块概述 38
    4.5.2 IPO 图 38
    4.5.3 功能 38
    4.5.4 输入项 38
    4.5.5 输出项 38
    4.5.6 设计方法(算法) 39
    4.5.7 流程图 39
    4.5.8 测试计划 39
    4.6 系统维护信息发布 40
    4.6.1 模块概述 40
    4.6.2 IPO 图 40
    4.6.3 功能 40
    4.6.4 输入项 40
    4.6.5 输出项 41
    4.6.6 设计方法(算法) 41
    4.6.7 流程图 42
    4.6.8 测试计划 42
    4.7 日K线绘制 43
    4.7.1 模块概述 43
    4.7.2 IPO图 43
    4.7.3 功能 43
    4.7.4 输入项 43
    4.7.5 输出项 44
    4.7.6 设计方法(算法) 44
    4.7.7 流程图 45
    4.7.8 测试计划 45
    4.8 月K线绘制 45
    4.8.1 模块概述 45
    4.8.2 IPO图 46
    4.8.3 功能 46
    4.8.4 输入项 46
    4.8.5 输出项 46
    4.8.6 设计方法(算法) 47
    4.8.7 流程图 48
    4.8.8 测试计划 48
    4.9 年K线绘制 48
    4.9.1 模块概述 48
    4.9.2 IPO图 49
    4.9.3 功能 49
    4.9.4 输入项 49
    4.9.5 输出项 49
    4.9.6 设计方法(算法) 50
    4.9.7 流程图 51
    4.9.8 测试计划 51
    4.10 其他股票信息发布 51
    4.10.1 模块概述 51
    4.10.2 IPO图 52
    4.10.3 功能 52
    4.10.4 输入项 52
    4.10.5 输出项 52
    4.10. 6 设计方法(算法) 52
    4.10.7 流程图 53
    4.10.8 测试计划 53
    5 接口设计 53
    5.1 股票信息发布首页 53
    5.2 用户管理界面 55
    5.3 统计图表查询界面 55
    5.4 外部接口 56
    5.5 内部接口 56
    6 数据库设计 56
    6.1 ER 图 56
    6.2 逻辑结构设计 57
    6.3 物理结构设计 58
    6.3.1 高级账户 58
    6.3.2 付费信息记录 58
    7 运行设计 58
    7.1 运行模块组合 58
    7.2 运行控制 58
    8 系统出错设计 59
    8.1 错误信息 59
    8.2 补救措施 60
    8.2.1 系统恢复 60
    8.2.2 定时备份 60
    8.2.3 人工操作 60
    8.3 系统维护设计 61
    9 需求回溯 61
    9.1 功能性需求回溯 61
    9.2 性能及安全需求 63

    1 引言
    1.1 编写目的
    从本阶段开始,项目进入正式开发阶段。这份总体设计报告的编写目的,是以本项目的需求分析说明书为依据,从总体设计的角度,明确系统管理子系统的总体架构、流程、数据结构、数据库设计。
    目的在于:

    • 为开发人员提供依据
    • 为修改、测试、维护提供条件
    • 明确各模块外部接口,内部接口,用户接口
    • 项目负责人按计划说明书的要求布置和控制开发工作全过程

    本说明书的预期读者包括:

    • 软件客户
    • 项目经理
    • 测试人员
    • 项目管理和开发人员
    • 系统维护人员

    1.2 项目背景
    软件系统名称

    • 股票交易系统

    任务提出者

    • 软件工程基础课程任课教师-王新宇

    软件开发者

    • 浙江大学2021-2022学年夏学期软件工程基础课程学生项目组

    用户

    • 管理员、普通用户、高级用户

    实现该软件的计算机网络

    • 由若干台PC机组成的局域网

    项目相关背景介绍
    浙江大学软件工程基础课程分为理论课与实践课两个部分。在理论课中,教师有选择地介绍了与软件工程基础相关的理论;强调并确定了适用于整个软件生命期的基本原则,全面而深入地介绍了这些基本原则在软件设计、规范、验证、软件生产过程和管理活动中的运用。而实验课采取分组形式完成,每5个学生为一组,分别设有组长、主程序员、程序员、测试员、文档员等角色。本次课程,教师选取股票交易系统作为综合性实验题目。其中我组主要负责网上信息发布子系统,实现股票信息查询、股票信息发布、行业新闻浏览等功能。
    1.3 相关定义
    (1)MySQL
    一个小型关系型数据库管理系统。
    (2)JavaScript
    JavaScript是一种面向对象的动态类型的区分大小写的客户端脚本语言。
    (3)SQL注入
    通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
    (4)数据库连接池
    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,这项技术能明显提高对数据库操作的性能。
    (5)UTF-8
    UTF-8是 UNICODE 的一种变长字符编码,又称万国码安全证书。安全证书是在进行网上交易时的身份证,或者说是私人钥匙,安全证书是唯一的,与任何其他人的证书都不相同。
    (6)MD5加密算法 Message Digest Algorithm
    MD5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
    (7)HTML5
    HTML5是HTML最新的修订版本,由万维网联盟(W3C)于2014年10月完成标准制定。目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在网际网路应用迅速发展的时候,使网路标准达到符合当代的网路需求。
    (8)Node.js
    Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
    (9)**Django(待定)
    Django是一个开源的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。
    1.4 系统概述
    (1)证券账户开户系统
    办理证券帐户是走进股市的第一步。证券帐户可以视为投资者进入股票交易市场的通行证,只有拥有证券账户,才能进场买卖证券。 想要开设证券帐户,开户人必须不是国家规定禁止开户的四类人员,其他人员均可以凭 相关证件到交易所申请开设证券帐户。证券帐户分为两种,分别时自然人开设的个人帐户,以及法人帐户。每个投资者,都只能开立一个证券帐户,并仅限于本人使用。 自然人开立的证券帐户为个人帐户。开立个人帐户时,投资者必须持有效的身份证件(一 般为居民身份证)去证券交易所指定的证券登记机构或会员证券公司办理名册登记并开立证券帐户。
    (2)资金账户开户系统
    投资者委托买卖股票,须事先在证券经纪商处开立证券交易结算资金帐户,资金帐户用 于投资者证券交易的资金清算,记录资金的币种,余额和变动情况。资金账户开设时,需提交本人身份证与证券账户卡,并将资金帐户和证券帐户相关联, 投资者在资金帐户中的存款可随时提取,证券经纪商按
    活期存款利率定期计付利息并自动转 入投资者的资金帐户。投资者委托买入时,资金帐户要有足够的余额。资金帐户需要设置交易密码,以便在交易客户端使用。另外,还需要设置及取款密码,用于从资金帐户里面取出 资金。帐户开设完毕,用户会得到一张类似于银行卡的,资金帐户卡片。通过在证
    券经纪商 指定的交易客户端设备上面刷卡,并输入资金帐户设置的密码登陆,便可以发出买卖股票的指令,查看资金帐户的资金情况和证券帐户内的股票信息。
    资金帐户密码可以有两张方法修改。
    1. 投资者可以在证券经纪商处在开设资金帐户的设备上,通过输入原有密码和新密码来修改。
    2. 投资者还可以在证券交易客户端通过输入原有密码和新密码修改。
    (3)交易客户端
    投资者在开办完证券帐户并在证券经纪商处开立证券交易结算资金帐户以后,就可以通过交易客户端委托证券经纪商进行股票的买卖交易了。目前存在的委托方式有很多种,主要 有以下 3 种:
    • 交易设备:投资者持资金帐户卡在证券经纪商指定的刷卡设备处刷卡,并输入验证密码。然后就可以发出委托,进行交易。这是最早,也是最常见的委托方式。
    • 网络:投资者通过登陆证券经纪商指定的网址,通过必要的用户和密码验证登陆。然后发出可以发出委托,进行交易。
    • 电话:投资者通过申请,然后就可以致电证券经纪商指定的电话号码,通过必要的用户和密码验证,然后根据语音提示,发出委托。
    用户登陆客户端之后,可以查询证券账户持有的股票。界面将会显示股票的名称、总数,现在价格、持有成本与持有股票损益。用户还可以查看资金账户内的资金信息,并且根据资金与股票信息发出购买、出售股票的指令进行交易。
    (4)中央交易系统子系统
    中央交易系统是整个股票交易过程的核心部分。主要目的是读取交易双方的买卖指令,根据一定的匹配原则,进行股票交易,并将交易结果返回给用户。中央交易系统的稳定高效运行对于股票交易的正常运作起到决定性的作用,因此开发一个安全高效的中央交易系统尤其重要。中央交易系统主要完成的功能有指令撮合、记录交易结果、涨跌停限制。实现根据时间优先及价格优先的原则,对符合条件的指令予以成交;将交易结果返回给交易双方;限制涨跌的最大幅度。最后,移除在当日没有完成交易的指令。
    (5)网上信息发布子系统
    网上信息发布是股票交易系统的模块之一,在此模块中,用户可以通过股票名称或代码查询股票并获得其最新交易结果以及近期交易的统计信息,如股价、涨跌、K线图等,还可以获得相关公司的近期新闻,以便其对股价做出预测并制定交易策略。此外,该模块还应支持对为付费用户提供更高级的功能,如更详细的统计信息、更个性化的投资指导等。
    (6)交易系统管理子系统
    实现交易系统管理员对交易系统监控管理的功能。开发一个工作人员管理界面,通过识别不同用户的授权,可以查看不同股票的所有指令的数量,价格以及买卖数量的全部信息。
    管理员用户名和密码通过验证后,显示操作界面,包括可供查看的股票列表,修改密码,股票指数等必要信息。用户通过在列表里面选择股票名查看股票盘中的实时交易情况。当某种股票出现交易异常或者股票公司有重要信息披露的时候,需要暂停股票的交易。授权的管理员通过管理客户端将某种股票的交易暂时停止。当交易重新开放的条件成熟以后,管理员可以重新启动股票的撮合。同时,在此模块中,管理员可以在正确输入原有密码后,修改登陆码。
    1.5 项目概述
    股票交易系统是用户进行股票查询、交易的大型系统。上市企业可在平台注册后交易本公司股票,用户可在完成相关手续后开通账户进行股票交易,也可以即使获取股价及其变化趋势,相关新闻等关键信息。
    股票交易系统由证券账户业务、资金账户业务、交易客户端、股票中央交易系统、网上信息发布、交易系统管理共六个模块构成。网上信息发布是股票交易系统的模块之一,在此模块中,用户可以通过股票名称或代码查询股票并获得其最新交易结果以及近期交易的统计信息,如股价、涨跌、K线图等,还可以获得相关公司的近期新闻,以便其对股价做出预测并制定交易策略。此外,该模块还应支持对为付费用户提供更高级的功能,如更详细的统计信息、更个性化的投资指导等。
    网上信息发布在整个股票交易系统中是一个核心模块,是用户获取股市信息的关键渠道。
    2 总体设计
    2.1 需求规定
    2.1.1 系统功能
    根据需求,本项目需要提供股票信息显示服务器、API和配套前端。服务器后端,本项目需要设计一个股票网上发布子系统,需要在网页实现股票各种信息的可视化展示以及股票的查询功能等。API 方面,本项目主要使用证券系统和中央交易系统的数据表,对外提供用户交互的API。
    2.1.2 系统性能**

    • 界面设计应简洁直观,布局合理,清晰地呈现信息,突出重点内容。操作方便,用户容易上手。
    • 系统具有良好的反应速度,给用户良好的使用体验。我们要求在良好的网络情况下,系统应具有以下时间特性要求:
      • 单个用户在线时Web响应用户动作时间小于1秒。数据发布操作响应用户动作时间

    小于2秒。

    • 500个用户同时在线时 Web 响应用户动作时间小于2秒。数据发布操作响应用户动作时间小于5秒。
      • 访问容量:该系统至少在同一时间内支持 500 个用户并发访问。
      • 服务器配置最低要求:CPU2.6G,内存 2.0G,硬盘 7200 转。
      • 数据处理能力:至少支持 10000 条数据发布记录。
      • 可用性:该子系统应实现在大多数流行的 Web 浏览器中正确显示和执行,包括 Firefox、Chrome、 Edge、IE 等。

    2.1.3 输入输出要求
    客户端通过网页展现给用户一个友好的界面,用户可以通过提交表单或者点击超链接向服务器提供数据与命令。服务器后台处理后将结果显示到用户的网页界面上。
    API则为其他子系统和前端提供清晰、简洁的接口,子系统通过API向服务器发送请求,服务器后台处理后返回格式化的结果;若子系统进行非法操作,服务器能够进行判断并返回错误信息,避免发送的请求影响后端稳定性。
    2.1.4 数据管理能力要求
    2.1.4.1 安全
    保密性

    1. 用于身份验证的用户名和密码应防止未经授权的用户访问系统。应构建访问控制以
      防止合法用户非法使用系统资源。
    2. 某些敏感数据(如用户名和密码)在交换时应加密。密码在存储之前应加密。
    3. 在用户登录期间,应该防止 SQL 注入,密码强制破解和伪造会话入侵。

    完整性

    1. 防止非法用户对数据进行无意或恶意的修改、插入、删除,防止数据丢失。
    2. 防止内部用户对数据进行无意或恶意的修改、插入、删除,防止数据丢失。
    3. 为数据库加上一定的约束,对关键性操作如删除、修改进行限制,并对用户进行警示。
    4. 定期备份数据。

    2.1.4.2 性能
    对于频繁访问数据库的操作,后台需要建立持久的数据库连接,以避免重复连接数据库耗费资源。
    2.2 运行环境规定
    2.2.1 服务器端
    由于实验条件有限,我们并不能提供专门的服务器运行系统,故将利用配置较高的PC作为服务器,保证服务器以及客户端间网络畅通即可。
    计算机:

    • CPU: 不小于2.0GHz
    • 内存:不小于2.0GB

    软件依赖:

    • 操作系统:Windows Vista/7/8/8.1/10, Mac OS,Linux
    • 数据库平台:MySQL
    • 前端开发框架:无
    • 后端开发框架:Node.js
    • Web 服务器:Apache
    • MySQL 管理软件:MySQL WorkBench等
    • 开发工具:能支持网页开发的工具均可(如Pycharm)
    • 测试工具:能支持测试的工具均可
    • 办公软件:Microsoft Office,Typora
    • 浏览器:Chrome、Edge、Safari(移动端)

    2.2.2 客户端
    外围设备

    • 键盘鼠标:可正常使用
    • 显示器:可正常使用
    • 硬盘:不小于 100GB
    • 硬盘转速:不小于 7200rpm

    通讯设备

    • 网线:正常联通且数据传输能力良好
    • 网卡:100M

    2.3 基本设计概念和流程处理
    本子系统是一个含前端和后端的模块,主要负责网上信息发布,包括股票信息展示(K线图,涨跌幅等)、股票信息查询等模块。
    前端:不使用框架,使用 HTML5 进行单页面开发
    后端:Node.js
    数据库:采用MySQL,通过promise来实现异步查询
    客户端:考虑到本系统所使用的框架较新,推荐使用Chrome、Firefox、Safari或Microsoft Edge浏览器。不推荐使用任何一个版本的IE浏览器,如需使用,版本须在11及以上。
    处理流程图如下:
    设计报告 - 图1
    2.4 结构
    2.4.1 网上信息发布子系统结构图
    设计报告 - 图2
    2.4.2 IPO 图
    2.4.2.1 按股票代码查询
    设计报告 - 图3
    2.4.2.2 按股票名称查询
    设计报告 - 图4
    2.4.2.3 用户权限升级
    设计报告 - 图5
    2.4.2.4 用户订单退款
    设计报告 - 图6
    2.4.2.5 新闻展示与查看
    设计报告 - 图7
    2.4.2.6 系统维护信息公告
    设计报告 - 图8
    2.4.2.7 日K线绘制
    设计报告 - 图9
    2.4.2.8 月K线绘制
    设计报告 - 图10
    2.4.2.9 年K线绘制
    设计报告 - 图11
    2.4.2.10 股票其他信息发布
    设计报告 - 图12
    3 系统结构
    3.1 系统功能结构
    设计报告 - 图13
    在需求分析中,我们已经完成了对数据流相应的分析,具体如下图所示:
    设计报告 - 图14
    需求分析中完成了系统的状态图设计,这里引用状态图作为系统运行的整体流程参考,具体如下图所示:
    设计报告 - 图15
    3.2 技术简介
    在系统设计中,我们将采用 Node.js 或 Django 框架作为后端进行开发。

    • Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使得 Node.js 的性能非常好。
    • Node.js 应用程序在单个进程中运行,无需为每个请求创建新的线程。
    • Node.js 在其标准库中提供了一组异步的 I/O 原语,以防止 JavaScript 代码阻塞,通常,Node.js 中的库是使用非阻塞范式编写的,使得阻塞行为成为异常而不是常态。
    • 当 Node.js 执行 I/O 操作时(比如从网络读取、访问数据库或文件系统),Node.js 将在响应返回时恢复操作(而不是阻塞线程和浪费 CPU 期等待)。这允许 Node.js 使用单个服务器处理数千个并发连接,而不会引入管理线程并发的负担。

    Django 是一个开放源代码的 Web 应用框架,由 Python 写成在前端部分。使用 Django,只要很少的代码,Python的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容。它的特点是带有强大的数据库功能,自带强大的后台功能以及具有优雅的网址。
    3.3 部署图
    设计报告 - 图16
    3.4 类图
    设计报告 - 图17
    3.5 内部接口图
    设计报告 - 图18
    3.6 顺序图
    3.6.1 按股票代码查询
    设计报告 - 图19
    3.6.2 按股票名称查询
    设计报告 - 图20
    3.6.3 用户权限升级
    设计报告 - 图21
    3.6.4 用户订单退款
    设计报告 - 图22
    3.6.5 新闻展示与查看
    设计报告 - 图23
    3.6.6 系统维护信息公告
    设计报告 - 图24
    3.6.7 日K线绘制
    设计报告 - 图25
    3.6.8 月K线绘制
    设计报告 - 图26
    3.6.8 年K线绘制
    设计报告 - 图27
    3.6.10 股票其他信息发布
    设计报告 - 图28
    4 执行概念
    4.1 按股票代码查询
    4.1.1 模块概述
    本模块为用户对股票进行查找的方式之一,用户可在此模块内输入股票代码以查看相匹配的股票信息。
    4.1.2 IPO图
    设计报告 - 图29
    4.1.3 功能
    输入待查询股票代码,进行搜索后根据搜索结果跳转到相应页面。
    4.1.4 输入项

    名称 标识 类型和格式 输入方式
    股票代码 StockId varchar(20) 外部输入

    4.1.5 输出项

    名称 标识 类型和格式 输出方式
    查询结果 StockSearchResult bool 由脚本输出

    4.1.6 设计方法(算法)
    if 用户进行查询操作
    连接数据库
    从输入获取股票代码
    在数据库中查询该代码
    if 查询结果非空
    跳转至该股票详细信息页面
    else
    提示用户没有相应股票
    跳转至查询页面
    4.1.7 流程图
    设计报告 - 图30
    4.1.8 测试计划

    输入数据 预期结果
    数据库中任意股票代码 跳转至该股票详细信息页面
    非数据库中股票代码字符串 显示“没有相应股票”

    4.2 按股票名称查询
    4.2.1 模块概述
    本模块为用户对股票进行查找的方式之一,用户可在此模块内输入股票名称以查看相匹配的股票信息。
    4.2.2 IPO图
    设计报告 - 图31
    4.2.3 功能
    输入待查询股票名称,进行搜索后根据搜索结果跳转到相应页面。
    4.2.4 输入项

    名称 标识 类型和格式 输入方式
    股票名称 StockName varchar(20) 外部输入

    4.2.5 输出项

    名称 标识 类型和格式 输出方式
    查询结果 StockSearchResult bool 由脚本输出

    4.2.6 设计方法(算法)
    if 用户进行查询操作
    连接数据库
    从输入获取股票名称
    在数据库中查询该名称
    if 查询结果非空
    跳转至该股票详细信息页面
    else
    提示用户没有相应股票
    跳转至查询页面
    4.2.7 流程图
    设计报告 - 图32
    4.2.8 测试计划

    输入数据 预期结果
    数据库中任意股票名称 跳转至该股票详细信息页面
    非数据库中股票名称字符串 显示“没有相应股票”

    4.3 用户权限升级
    4.3.1 模块概述
    本模块为用户通过付费升级成为高级用户的模块。用户在登录状态下,可以进入付费页面并选择特定有效期,付费成功后,如果该用户为普通用户,即可将其升级成为高级用户;如果其已为高级用户,则将其高级权限延长相应时间。最后生成付款记录,并更新数据库中用户信息。
    4.3.2 IPO图
    设计报告 - 图33
    4.3.3 功能
    为用户开通高级权限或延长高级权限时间。
    4.3.4 输入项

    名称 标识 类型和格式 输入方式
    权限开通时长 PrivilegeDuration time 外部选择->脚本传输
    支付状态 PayState bool 外部输入

    4.3.5 输出项

    名称 标识 类型和格式 输出方式
    开通状态 IsSuccess bool 由脚本输出

    4.3.6 设计方法(算法)
    if 用户已经登录
    检验安全性
    连接数据库
    检查用户权限
    if 用户选择权限开通时长
    显示支付链接
    if 支付成功
    if 用户已经是高级用户
    修改权限到期时间
    else
    将用户标记为高级用户
    记录权限到期时间
    更新数据库
    返回成功信息
    else
    返回失败信息(支付失败)
    else
    跳转至登录页面

    4.3.7 流程图
    设计报告 - 图34
    4.3.8 测试计划

    输入数据 预期结果
    未登录,进入权限升级页面 跳转至登录页面
    已登录,非高级用户,支付成功 数据库中该用户权限升级
    已登录,高级用户,支付成功 数据库中该用户权限时间延长
    已登录,未支付或支付失败 提示支付失败,刷新页面

    4.4 用户订单退款
    4.4.1 模块概述
    在这个模块中,用户可以在高级会员试用期内(7天)选择退款。选择退款时,用户进入自己的账户页面,选择高级用户,如果在试用期内,则页面上有红色的退款按钮,否则显示已过试用期,不可退款。
    4.4.2 IPO 图
    设计报告 - 图35
    4.4.3 功能
    根据相关信息执行用户退款操作。
    4.4.4 输入项

    名称 标识 类型和形式 输入方式
    付费用户 is_VIP_account boolean 脚本转换
    账号 user_account_id int 外部输入->脚本转换

    4.4.5 输出项

    名称 标识 类型和形式 输出方式
    执行退款 user_account_refund boolean 由脚本输出

    4.4.6 设计方法(算法)
    if 用户账号已登录
    连接数据库
    用户选择账户页面的高级用户页面
    用户点击退款
    if 用户是高级用户且在退款期内
    执行退款操作并在数据库中将是否是高级用户设置为假
    返回退款并成功并刷新页面
    else
    返回错误信息(用户不是高级用户、已过退款期)
    else
    返回错误信息(跳转到登录界面)
    4.4.7 流程图
    设计报告 - 图36
    4.4.8 测试计划

    输入数据 预期结果
    未登录 返回失败信息,跳转到登录界面
    非高级用户或超过退款时间 返回错误信息,提示不能退款
    已登录且是高级用户且在退款时间内 返回成功信息,退款成功

    4.5 新闻展示与查看
    4.5.1 模块概述
    在本模块中,用户可以通过点击首页上滚动显示的行业热点新闻跳转到对应的新闻网站查看新闻。
    4.5.2 IPO 图
    设计报告 - 图37
    4.5.3 功能
    首先,部署在网页上的脚本在网页第一次打开时爬取当天各大财经网站上的新闻并显示在网站固定位置处。用户点击新闻跳转至相应网站进行浏览。
    4.5.4 输入项
    本模块无输入项。
    4.5.5 输出项

    名称 标识 类型和格式 输出方式
    用户跳转 news_view / 外部输出

    4.5.6 设计方法(算法)
    if 用户点击新闻页面
    跳转新闻页面
    4.5.7 流程图
    设计报告 - 图38
    4.5.8 测试计划

    输入数据 预期结果
    用户点击新闻栏 跳转相应网站

    4.6 系统维护信息发布
    4.6.1 模块概述
    通过此模块,管理员可以通过在系统维护界面输入系统何时会进行维护,维护时长等信息,管理员选择发布维护信息后,用户可以在首页看到显示在顶部的悬浮消息框。
    4.6.2 IPO 图
    设计报告 - 图39
    4.6.3 功能
    通过管理员输入信息发布系统维护公告。
    4.6.4 输入项

    名称 标识 类型和形式 输入方式
    维护时间 maintenance_time char 外部输入->脚本转换
    维护时长 maintenance_duration char 外部输入->脚本转换
    公告发布时间 announcement_release_time char 外部输入->脚本转换
    公告持续时长 announcement_duration char 外部输入->脚本转换

    4.6.5 输出项

    名称 标识 类型和形式 输出方式
    发布公告 announcement_release boolean 脚本输出

    4.6.6 设计方法(算法)
    if 管理员账号已登录
    管理员输入维护时间、维护时长、公告发布时间、公告持续时长
    检测信息输入是否合法(是否只含空字符、字符串是否可以转化为时间)
    if 信息验证合法
    按照设置的公告发布时间发布公告
    返回成功信息,并刷新页面
    else
    返回失败信息(输入不合法)
    else
    返回失败信息(管理员账号未登录)

    4.6.7 流程图
    设计报告 - 图40
    4.6.8 测试计划

    输入数据 预期结果
    未登录 返回失败信息,跳转到登录界面
    输入信息非法(只含空白字符) 返回错误信息,提示只含空白字符
    输入信息非法(不能转化为时间) 返回失败信息,提示含有不能转化为时间的字符
    输入信息合法 返回成功信息,按照设置时间发布公告

    4.7 日K线绘制
    4.7.1 模块概述
    在本模块中,用户将能够通过日K线显示功能得到日K线的显示图像,同时在日K线上通过鼠标的移动可以查看不同标点处的股票价格信息和交易信息。如果用户没有访问权限,系统将会返回权限无效信息;如果股票信息不存在,系统将会发送加载失败提示。
    4.7.2 IPO图
    设计报告 - 图41
    4.7.3 功能
    首先,用户通过点击访问股票日K线进入日K线的显示界面;接着,系统根据数据库中的股票交易信息加载股票日K线,并通过客户端呈现给用户;用户通过鼠标的移动可以在图线的对应的地方看到股票的相应价格信息和交易信息;用户点击退出按钮自动退出该界面,返回上级界面,同时系统销毁K线图;用户点击交易,系统将会提供转跳,进入交易界面。
    4.7.4 输入项

    名称 标识 类型和格式 输入方式
    股票名称 stock_name string 脚本转换
    鼠标坐标 mouse_coordinate int 外部输入→脚本转换

    4.7.5 输出项

    名称 标识 类型和格式 输出方式
    股票日K线 stock_Kline_daily jpg 图像显示输出
    股票日K线对应点坐标值 stock_Kline_value double 脚本输出

    4.7.6 设计方法(算法)
    if 用户有权限访问日K线图
    连接数据库
    调用股票数据
    if 股票数据不存在
    报错
    else
    生成日K线图
    while(true)
    if 用户点击退出
    销毁图片数据
    终止当前进程
    else
    接收鼠标坐标
    显示坐标点对应的股票价格数据
    中断数据库连接
    返回主界面
    else
    返回访问权限无效信息

    4.7.7 流程图
    设计报告 - 图42
    4.7.8 测试计划

    输入数据 预期结果
    有权限,选择目标股票 显示对应股票K线图像
    无权限,选择目标股票 返回错误信息,无访问权限
    鼠标的即时坐标 图像对应点的股票数据信息

    4.8 月K线绘制
    4.8.1 模块概述
    在本模块中,用户将能够通过月K线显示功能得到月K线的显示图像,同时在月K线上通过鼠标的移动可以查看不同标点处的股票价格信息和交易信息。如果用户没有访问权限,系统将会返回权限无效信息;如果股票信息不存在,系统将会发送加载失败提示。这些功能与日K线功能相近。
    4.8.2 IPO图
    设计报告 - 图43
    4.8.3 功能
    月K线的整体功能框架和日K线相同。首先,用户通过点击访问股票月K线进入月K线的显示界面;接着,系统根据数据库中的股票交易信息加载股票月K线,并通过客户端呈现给用户;用户通过鼠标的移动可以在图线的对应的地方看到股票的相应价格信息和交易信息;用户点击退出按钮自动退出该界面,返回上级界面,同时系统销毁K线图;用户点击交易,系统将会提供转跳,进入交易界面。
    4.8.4 输入项

    名称 标识 类型和格式 输入方式
    股票名称 stock_name string 脚本转换
    鼠标坐标 mouse_coordinate int 外部输入→脚本转换

    4.8.5 输出项

    名称 标识 类型和格式 输出方式
    股票日K线 stock_Kline_monthly jpg 图像显示输出
    股票日K线对应点坐标值 stock_Kline_value double 脚本输出

    4.8.6 设计方法(算法)
    if 用户有权限访问月K线图
    连接数据库
    调用股票数据
    if 股票数据不存在
    报错
    else
    生成月K线图
    while(true)
    if 用户点击退出
    销毁图片数据
    终止当前进程
    else
    接收鼠标坐标
    显示坐标点对应的股票价格数据
    中断数据库连接
    返回主界面
    else
    返回访问权限无效信息

    4.8.7 流程图
    设计报告 - 图44
    4.8.8 测试计划

    输入数据 预期结果
    有权限,选择目标股票 显示对应股票K线图像
    无权限,选择目标股票 返回错误信息,无访问权限
    鼠标的即时坐标 图像对应点的股票数据信息

    4.9 年K线绘制
    4.9.1 模块概述
    在本模块中,用户将能够通过年K线显示功能得到年K线的显示图像,同时在年K线上通过鼠标的移动可以查看不同标点处的股票价格信息和交易信息。如果用户没有访问权限,系统将会返回权限无效信息;如果股票信息不存在,系统将会发送加载失败提示。这些功能和月K线图的功能相近。
    4.9.2 IPO图
    设计报告 - 图45
    4.9.3 功能
    年K线的功能框架和月K线的功能框架相近。首先,用户通过点击访问股票年K线进入年K线的显示界面;接着,系统根据数据库中的股票交易信息加载股票年K线,并通过客户端呈现给用户;用户通过鼠标的移动可以在图线的对应的地方看到股票的相应价格信息和交易信息;用户点击退出按钮自动退出该界面,返回上级界面,同时系统销毁K线图;用户点击交易,系统将会提供转跳,进入交易界面。
    4.9.4 输入项

    名称 标识 类型和格式 输入方式
    股票名称 stock_name string 脚本转换
    鼠标坐标 mouse_coordinate int 外部输入→脚本转换

    4.9.5 输出项

    名称 标识 类型和格式 输出方式
    股票日K线 stock_Kline_yearly jpg 图像显示输出
    股票日K线对应点坐标值 stock_Kline_value double 脚本输出

    4.9.6 设计方法(算法)
    if 用户有权限访问年K线图
    连接数据库
    调用股票数据
    if 股票数据不存在
    报错
    else
    生成年K线图
    while(true)
    if 用户点击退出
    销毁图片数据
    终止当前进程
    else
    接收鼠标坐标
    显示坐标点对应的股票价格数据
    中断数据库连接
    返回主界面
    else
    返回访问权限无效信息

    4.9.7 流程图
    设计报告 - 图46
    4.9.8 测试计划

    输入数据 预期结果
    有权限,选择目标股票 显示对应股票K线图像
    无权限,选择目标股票 返回错误信息,无访问权限
    鼠标的即时坐标 图像对应点的股票数据信息

    4.10 其他股票信息发布
    4.10.1 模块概述
    在本模块中,用户将能够通过一个统一的信息发布页面获取其他股票的相关信息。通过点击相应的连接,可以转跳至其他股票信息的具体显示页面。
    4.10.2 IPO图
    设计报告 - 图47
    4.10.3 功能
    用户在该部分可以通过一个统一的信息发布页面获取其他股票的相关信息。通过点击相应的连接,可以转跳至其他股票信息的具体显示页面。如果显示的页面不存在将不会进行显示。
    4.10.4 输入项

    名称 标识 类型和格式 输入方式
    股票名称 stock_name string 脚本转换

    4.10.5 输出项

    名称 标识 类型和格式 输出方式
    股票信息显示页面 stock_page HTML 网页显示输出

    4.10. 6 设计方法(算法)
    显示其他股票信息页面
    if 用户点击某只股票
    转跳相应页面
    else if 用户点击退出
    退出股票信息展示页面
    else 等待用户的事件输出
    4.10.7 流程图
    设计报告 - 图48
    4.10.8 测试计划

    输入数据 预期结果
    直接访问 显示其他股票推荐信息显示页面
    点击股票链接 转跳至相应的股票具体信息页面

    5 接口设计
    5.1 股票信息发布首页
    股票信息发布首页可以以游客身份进入,主要起到股票新闻、趋势图等信息发布以及导航的作用,通过上方首页、用户、股票、统计四个按钮可以前往四个子模块。
    设计报告 - 图49
    设计报告 - 图50
    设计报告 - 图51
    左侧的导航栏可以前往首页不同的部分,浏览新闻、交易信息、趋势图等。右上方的菜单导航栏可以前往四个模块中的小模块,对信息发布系统的功能有更直观的了解。
    设计报告 - 图52
    5.2 用户管理界面
    用户管理界面提供用户登录、注册、付费升级、修改密码的功能,通过左侧导航栏可以选择相应小模块。
    设计报告 - 图53
    5.3 统计图表查询界面
    股票查询界面需要以付费用户身份登录后才可以使用,提供日k图、月k图、年k图的统计图表。
    设计报告 - 图54
    5.4 外部接口
    通过PHP与MySQL的数据库建立连接。
    5.5 内部接口

    用户管理子系统 股票管理子系统
    股票信息发布系统 用户个人信息与登录信息、用户权限信息 股票基础信息、股票统计信息

    6 数据库设计
    6.1 ER 图
    本模块无须从头设计数据库,因此从证券系统和中央交易系统处取得相关表进行使用。
    设计报告 - 图55
    6.2 逻辑结构设计
    本子系统从证券系统和中央交易系统处使用的表项如下:
    个人证券账户:
    personSecurity (securityid, registerdate, name, gender, identityid, homeaddress, work, education, workaddress, phone, agentidentityid, accountstate)
    股价范围信息:
    limit_information (stock_id, limit_up_rate, limit_down_rate)
    交易结果信息:
    trade_information (buyer_id, seller_id, trade_price, trade_volume, trade_time)
    注:这里的 buyer_id 和 securityid 应为同一个意思。
    信息发布页面高级账户表:
    advancedAccount (securityid, advanced)
    付费信息记录表:
    paymentInfo (securityid, paydate)
    6.3 物理结构设计
    6.3.1 高级账户

    字段 类型 是否为空 是否主键 备注
    securityid varchar(18) 证券账户的唯一标识符,由系统生成
    advanced bool 用于标记用户是否付费成为高级用户

    6.3.2 付费信息记录

    字段 类型 是否为空 是否主键 备注
    securityid varchar(18) 证券账户的唯一标识符,由系统生成
    paydate datetime 记录付款时间

    7 运行设计
    7.1 运行模块组合
    本子系统按照功能划分模块,每个模块又按流程划分为客户端界面、客户端脚本、服务器后台程序。功能模块之间会共享部分界面(导航栏等)。
    7.2 运行控制
    用户通过处于主界面的导航栏选择功能:用户登录模块(使用信息管理子系统的模块)。用户在表单中输入正确的账户密码,从而登录系统。根据“普通用户”、“高级用户”和“管理员”三种不同的身份,将拥有不同的模块功能。功能在第四节已经叙述,此处不再赘述。

    • 登录者为普通用户
      • 按股票代码查询股票
      • 按股票名称查询股票
      • 升级为高级用户
      • 浏览新闻
      • 查看普通股票信息
    • 登录者为高级用户
      • 按股票代码查询股票
      • 按股票名称查询股票
      • 退款为普通用户
      • 浏览新闻
      • 查看普通和高级股票信息
    • 登录者为管理员
      • 发布系统维护公告
      • 部署新闻爬虫脚本
      • 更新股票数据库

    8 系统出错设计
    8.1 错误信息

    系统输出信息的形式 含义 处理办法或相应对策
    数据库连接失败 ① 数据库配置出错
    ② 数据库连接数超过上限
    ① 修改数据库配置
    ② 限制并非访问量
    用户名密码错误 ① 用户忘记密码
    ②被他人恶意篡改密码
    返回相应的错误信息给用户,通过登录界面的“找回密码”进行密码修改
    服务器暂时无法访问 ① 服务器正在维护中
    ② 短时间内有大量流量导致服务器瘫痪
    对于②的情况,联系系统管理员进行 紧急处理
    非法访问 部分用户企图访问管理员界面或后台程序,窃取网站 限制普通用户越权访问,通过各种手段保护后台数据
    无法读取磁盘内容 磁盘受损 对磁盘与数据库进行周期性的备份

    8.2 补救措施
    8.2.1 系统恢复
    系统崩溃后,根据系统运行日志恢复系统和数据,并重新启动系统。
    8.2.2 定时备份

    1. 周期性地备份数据库中的数据,将其存储在更稳定的介质上,并及时进行校对、更新。
    2. 将工程代码通过 GitHub 进行完善的版本管理。

    8.2.3 人工操作
    当出现紧急情况时,数据库管理员人工地对数据库中数据进行修改,并做相应的记录。
    8.3 系统维护设计
    由于实验条件有限,我们并不能提供专门的服务器运行系统,故将利用配置较高的PC作为服务器,保证服务器以及客户端间网络畅通即可。

    1. 用户在该系统执行操作时应该留下痕迹,以方便检查系统是否被恶意篡改。同时系统管理员定时查看系统日志,统计非法攻击来源和次数,并针对相应攻击加强安全防范措施。
    2. 系统管理员的登录不仅需要账户密码,还需要识别 IP,禁止非白名单 IP 的任何访问。
    3. 系统维护人员及时更新技术漏洞,通过各种手段防止各种对系统的攻击,增强代码的可靠性。
    4. 定期维护数据库,涉及到检查数据库表、检查日志文件等,确保数据库内数据的正确性。
    5. 在可能出错的地方使用try-except语句捕获异常,并输出相应的出错信息和可能的处理方法提示。

    9 需求回溯
    9.1 功能性需求回溯

    需求ID 需求简述 对应的设计模块 实现方式
    A01 用户身份有效性核验 用户管理模块 页面加载时,服务器验证 Session 是否过期,如果过期则重定向到所有子系统统一的登录界面。否则用户将根据 Session中存储的身份信息,拥有不同的模块功能。
    A02 为用户提供股票查询操作 股票信息查询模块
    1. 服务端验证Session后确认用户身份后连接数据库。
    1. 用户可以通过输入股票代码或名称来查询相应股票。
    A03 为用户提供付费/退款操作 用户付费管理模块
    1. 服务端验证Session后确认用户身份
    1. 在用户不是高级用户的情况下,在浏览高级信息时受限,弹出窗口询问用户是否付费,若付费可成为高级用户
    1. 在用户是高级用户且在退款期内的情况下,用户可以选择退款
    A04 为用户提供新闻浏览 新闻发布模块
    1. 服务端验Session后确认用户身份为管理员时,自动以数据库管理员身份连接新闻数据库。
    1. 管理员可以部署爬虫更新每日新闻信息
    A05 为用户提供股票信息浏览 股票信息发布模块
    1. 服务端验证Session后确认用户身份
    1. 用户查询某只股票后跳转到股票详情页面
    1. 页面和股票数据库建立持续连接,拟合出对应图表、图线,同时持续捕捉用户鼠标在图表上的位置显示该点具体信息

    9.2 性能及安全需求

    需求ID 需求简述 实现方式
    B01 【安全性】用户账户安全 使用OAuth2.0标准协议
    B02 【安全性】数据库数据保护,防止用户恶意访问数据库或者破坏数据库
    1. 使用占位符进行查询参数绑定
    1. 数据库根据不同的用户赋予不同的最小需要的操作权限
    B03 【性能】能够应对数据库访问量过大的情况以及通过大量访问量来实现攻击的手段 对于频繁访问数据库的操作,需要建立索引
    B04 【性能】客户端通过网页展现给用户一个友好、易于操作的界面 通过定义外部CSS样式表实现扁平化样式与栅格排版,使用JavaScript和JQuery实现数据的动态显示和交互