1.引言
1.1编写目的
在前一阶段(概要设计说明书)中,已解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。在以下的详细设计报告中将对在本阶段中对系统所做的所有详细设计进行说明。
在本阶段中,确定应该如何具体地实现所要求的系统,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。主要的工作有:根据在《需求分析说明书》中所描述的数据、功能、运行、性能需求,并依照《概要设计说明书》所确定的处理流程、总体结构和模块外部设计,设计软件系统的结构设计、逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等等),解决如何
- 接受:旅客信息及取票通知和帐单;
- 输出:取票通知和帐单及机票;
- 网络输出和加密,输入和解密;
- 分辨信息的种类并采取相应的处理步骤;
- 判断信息的正误并采取相应的处理步骤;
- 进行数据库的查询、修改工作;
- 接受并判断错误,输出相应的出错消息;
在以下的各个阶段中,《用户操作手册》将与本阶段的工作紧密结合,努力作到让用户易懂易学。《测试报告》和《维护报告》也将参考本说明书,检验本系统的各项性能指标,及时发现纰漏及时修补,一定要把功能强大、稳定可靠、便于维护的基金管理系统交到用户手中。
1.2项目背景
(1)项目名称:基金管理系统
(2)任务提出者:XXX
(3)开发者:XXX软件工程小组
(4)用户:基金用户
(5)实施单位:XXX软件工程小组
1.3定义
SQL SERVER: 系统服务器所使用的数据库管理系统(DBMS)。
SQL: 一种用于访问查询数据库的语言
事务流:数据进入模块后可能有多种路径进行处理。
主键:数据库表中的关键域。值互不相同。
外部主键:数据库表中与其他表主键关联的域。
ROLLBACK: 数据库的错误恢复机制。
1.4参考资料
以下列出在详细设计过程中所使用到的有关资料:
1.《基金管理系统项目计划任务书》 软件开发小组
2.《基金管理系统项目开发计划》 软件开发小组
3.《需求规格说明书》 软件开发小组
4.《概要设计说明书》 软件开发小组
6.《软件工程》 张海藩 清华大学出版社
7.《软件工程》 钱乐秋 清华大学出版社
2.总体设计
2.1需求概述
该基金管理系统界面简洁美观,功能友好。系统采用了可视化的图表,方便用户可视化地分析数据的对比与变化,给用户更加直观的感受和分析个人的基金,并且通过我们的系统可以在线购买和抛售,免去了一些繁琐的过程,增强了用户体验。
- 数据表格和统计图表结合分析
- 基金情况横纵对比(不同基金的,同一基金不同时间)
- 多种查询方式,智能表格排序
- 多种数据统计(种类统计,盈亏统计,收支统计)图表展示
- 在线抛售与购买,记录购买和抛售记录
- 强大的安全系统(支持原密码,邮箱,密保多种密码修改方式)
2.2软件结构
2.2.1 整体软件结构
2.2.2 wbs分解图
3. 程序描述
我们的基金管理系统分为“基金市场模块”,“基金查询模块”,“个人基金模块”,“用户管理模块”,下面我们分别对各个模块进行描述
3.1 基金市场模块
名称 |
功能描述 |
每日基金 |
该模块用于显示每日各个基金的各项指标,来给用户进行参考,这里我们加入了基金代码查询功能,我们可以通过基金代码进行精确地查询,查看基金的各项指标。由于该模块是用于用户的基金购买,在我们选中我们想要购买的基金后,我们购买相应的份额。 |
运行 |
模块组合 |
相应时间(ms) |
每日基金查询 |
基金查询模块、网络模块、数据库模块 |
500 |
当前界面基金查询 |
基金查询模块 |
200 |
当日基金购买 |
基金购买模块、网络模块、数据库模块 |
500 |
运行 |
输入 |
输出 |
请求方式 |
每日基金查询 |
date |
Sucess,code,message,data[{date, Stock_id,stock_name,nav,day_growth}] |
Json/POST |
当日基金购买 |
id,date,stock_id,stock_name,user_id,nav,amount |
Sucess,code,message |
Json/POST |
输入项目具体可以参考3.1.3中的输入项目表中的输出
用户基金拥有份额 = 用户当前拥有份额 + 当前购买份额
- 每日基金查询
- 每日基金购买
客户端通过访问接口发出请求,然后tomcat转给我们的后端controller,controller再调用service里的业务逻辑,service再调用dao层进行一系列的处理,最后将结果返回给用户,我们在dao层使用Mybatis对数据库进行操作。
属性 |
字段名 |
数据类型 |
码 |
可否为空 |
基金代码 |
stock_id, |
varchar(255) |
PK |
N |
日期 |
date |
date |
PK |
N |
基金简称 |
stock_name |
varchar(255) |
N | |
单位净值 |
nav |
double |
N | |
日增长率 |
day_growth |
double |
必须保证程序正常的连接到服务器
- 测试数据是否可以从后端传送到前端
- 测试查询功能是否可以正常使用
- 测试是否可以正常的购买基金以及是否有出错处理
3.2 基金查询模块
3.2.1功能
名称 |
功能描述 |
按日查询 |
这一模块主要是用来按照日期查询以往基金的状况,这里我们结合表格和可视化图表的形式进行数据展示 |
按类查询 |
这一模块主要是用来按照代码查询以往基金的状况,这里我们结合表格和可视化图表的形式进行数据展示 |
简称查询 |
这一模块主要是用来按照简称查询以往基金的状况,这里我们结合表格和可视化图表的形式进行数据展示 |
3.2.2性能
运行 |
模块组合 |
相应时间(ms) |
按日查询 |
基金查询模块、网络模块、数据库模块 |
500 |
按类查询 |
基金查询模块、网络模块、数据库模块 |
500 |
简称查询 |
基金查询模块、网络模块、数据库模块 |
500 |
图表对比 |
图表模块 |
200 |
当前页查询 |
基金查询模块 |
200 |
3.2.3输入项目
运行 |
输入 |
输出 |
请求方式 |
按日期查询以及图表展示 |
date |
Sucess,code,message,data[{date, Stock_id,stock_name,nav,day_growth}] |
Json/POST |
按代码查询以及图表展示 |
stock_id |
Sucess,code,message,data[{data, Stock_id,stock_name,nav,day_growth}] |
Json/POST |
按简称查询以及图表展示 |
Stock_name |
Sucess,code,message,data[{data, Stock_id,stock_name,nav,day_growth}] |
Json/POST |
3.2.4输出项目
输入项目具体可以参考3.2.3中的输入项目表中的输出
3.2.5算法
该模块就是查询数据库中的数据,然后层层调用,并没有涉及相应的算法
3.2.6程序逻辑
- 过往基金按日期查询
- 过往基金按代码查询
- 过往基金按简称查询
3.2.7接口
客户端通过访问接口发出请求,然后tomcat转给我们的后端controller,controller再调用service里的业务逻辑,service再调用dao层进行一系列的处理,最后将结果返回给用户,我们在dao层使用Mybatis对数据库进行操作。
3.2.8存储分配
参考3.1.8中存储分配
3.2.9限制条件
必须保证程序正常的连接到服务器
3.2.10测试要点
- 测试数据是否可以从后端传送到前端
- 测试查询功能是否可以正常使用
- 测试图表是否可以正常展示
3.3.个人基金模块
3.3.1功能
名称 |
功能描述 |
基金管理 |
这里我们看到我们已经拥有的基金,同时这里我们加入购买时净值和今日净值的对比,以及盈亏的分析。我们在该功能模块也可以查询相应基金的拥有情况。在该模块我们可以进行基金的抛售,我们可以根据盈利情况进行基金的抛售,选择抛售的份额,这里我们对用户份额的抛售进行了限制,如不可超过已拥有的份额,不可为小数或者非正数。 |
购买记录 |
这里我们可以看到我们购买的记录,其购买时间精确到分秒,也可看到我们购买的份额等数据。 |
抛售记录 |
这里我们可以看到我们抛售的记录,其抛售时间精切到分秒,也可以看到我们抛售的份额,抛售时的净值以及盈利情况。 |
基金统计 |
这里我们结合可视化图形的形式,进行数据的展示,这里我们分为三张图表,基金统计表,通过饼状图的展示,我们可以看到各项基金份额占比。盈利统计表,这里我们可以看到已盈亏,持仓盈亏,总盈亏的各项数据对比与展示。收支统计表,这里我们可以看到我们已收入,待收入,总收入,总支出等数据的显示和对比。 |
3.3.2性能
运行 |
模块组合 |
相应时间(ms) |
个人拥有基金情况查询 |
基金查询模块、网络模块、数据库模块 |
500 |
抛售指定份额基金 |
基金抛售模块、网络模块、数据库模块 |
500 |
购买记录查询 |
记录查询模块、网络模块、数据库模块 |
700 |
抛售记录查询 |
记录查询模块、网络模块、数据库模块 |
700 |
个人基金份额统计 |
基金查询模块、网络模块、数据库模块 |
500 |
盈亏统计 |
基金统计模块、网络模块、数据库模块 |
500 |
收支统计 |
基金统计模块、网络模块、数据库模块 |
500 |
3.3.3输入项目
运行 |
输入 |
输出 |
请求方式 |
个人拥有基金情况查询 |
User_id |
Sucess,code,message,data[{date, Stock_id,stock_name,nav,amount}] |
Json/POST |
抛售记录查询 |
User_id,data, Stock_id,stock_name,nav,amount |
Sucess,code,message |
Json/GET |
购买记录查询 |
User_id |
Sucess,code,message,data[{data, Stock_id,stock_name,user_id,nav,amout}] |
Json/GET |
购买记录查询 |
User_id |
Sucess,code,message,data[{data, Stock_id,stock_name,nav,user_idhave_date,hava_anv,amout,profit}] |
Json/GET |
3.3.4输出项目
输入项目具体可以参考3.3.3中的输入项目表中的输出
3.3.5算法
单次抛售盈亏 = 份额 * (当天净值-购买时净值)
总收入 = 已收入 + 待收入
3.3.6程序逻辑
- 基金抛售
- 基金购买记录查询
- 基金抛售记录查询
3.3.7接口
客户端通过访问接口发出请求,然后tomcat转给我们的后端controller,controller再调用service里的业务逻辑,service再调用dao层进行一系列的处理,最后将结果返回给用户,我们在dao层使用Mybatis对数据库进行操作。
3.3.8存储分配
属性 |
字段名 |
数据类型 |
码 |
可否为空 |
编号 |
id |
int |
PK |
N |
用户ID号 |
user_id |
int |
FK |
N |
拥有时间 |
have_time |
date |
N | |
基金代码 |
stock_id |
varchar(255) |
FK |
N |
基金名称 |
stock_name |
varchar(255) |
FK |
N |
拥有时净值 |
have_nav |
double |
FK |
N |
拥有份额 |
amount |
int |
N |
属性 |
字段名 |
数据类型 |
码 |
可否为空 |
编号 |
id |
int |
PK |
N |
用户ID号 |
user_id |
int |
FK |
N |
拥有时间 |
have_time |
datetime |
N | |
基金代码 |
stock_id |
varchar(255) |
FK |
N |
基金名称 |
stock_name |
varchar(255) |
FK |
N |
拥有时净值 |
have_nav |
double |
FK |
N |
拥有份额 |
amount |
int |
N |
属性 |
字段名 |
数据类型 |
码 |
可否为空 |
编号 |
id |
int |
PK |
N |
用户ID号 |
user_id |
int |
FK |
N |
拥有时间 |
have_time |
date |
N | |
基金代码 |
stock_id |
varchar(255) |
FK |
N |
基金名称 |
stock_name |
varchar(255) |
FK |
N |
拥有时净值 |
have_nav |
double |
FK |
N |
抛售时间 |
date |
datetime |
N | |
抛售净值 |
nav |
double |
FK |
N |
抛售份额 |
amount |
int |
N | |
盈利 |
profit |
double |
N |
3.3.9限制条件
必须保证程序正常的连接到服务器
3.3.10测试要点
- 测试数据是否可以从后端传送到前端
- 测试查询功能是否可以正常使用
- 测试盈亏统计以及收支统计是否可以正常显示并且是否计算结果正确
- 测试是否可以正常抛售
- 测试记录查询功能是否能够正常使用
3.4 用户管理模块
3.4.1功能
3.4.2性能
运行 |
模块组合 |
相应时间(ms) |
查看和编辑个人信息 |
用户信息模块、网络模块、数据库模块 |
1000 |
根据原密码修改密码 |
用户信息模块、网络模块、数据库模块 |
500 |
根据邮箱修改密码 |
用户信息模块、网络模块、数据库模块 |
500 |
设置用户密保问题 |
密保模块、网络模块、数据库模块 |
700 |
根据密保修改密码 |
密保模块、用户信息模块、网络模块、数据库模块 |
500 |
注销个人账号 |
用户信息模块、网络模块 |
500 |
用户登录 |
用户信息模块、网络模块、数据库模块 |
500 |
用户注册 |
用户信息模块、网络模块、数据库模块 |
500 |
3.4.3输入项目
运行 |
输入 |
输出 |
请求方式 |
修改个人信息 |
{email,password,nickname, sex,phone,head_pic, qq_pic,wechat_pic,birthday age,blood_type,school_end, zodiac,constellation,autograph,status} |
Sucess,code,message |
Json/POST |
用户注册 |
Email,password |
Sucess,code,message |
Json/POST |
用户登录 |
Email,password |
Sucess,code,message |
Json/POST |
根据原密码修改密码 |
User_id,password,new_password |
Sucess,code,message |
Json/POST |
根据邮箱修改原密码 |
User_id,new_password |
Sucess,code,message |
Json/POST |
设置密保问题 |
User_id,question_1,answer_1,question_2,answer_2,question_3,answer_3 |
Sucess,code,message |
Json/POST |
验证密保问题 |
User_id,question_1,answer_1,question_2,answer_2,question_3,answer_3 |
Sucess,code,message |
Json/POST |
根据密保修改密码 |
User_id,new_password |
Sucess,code,message |
Json/POST |
输入项目具体可以参考3.4.3中的输入项目表中的输出3.4.4输出项目
3.4.5算法
该模块就是查询数据库中的数据,然后层层调用,并没有涉及相应的算法
3.4.6程序逻辑
- 用户信息更改
- 用户密码更改
3.4.7接口
客户端通过访问接口发出请求,然后tomcat转给我们的后端controller,controller再调用service里的业务逻辑,service再调用dao层进行一系列的处理,最后将结果返回给用户,我们在dao层使用Mybatis对数据库进行操作。
3.4.8存储分配
属性 |
字段名 |
数据类型 |
码 |
可否为空 |
用户ID号 |
id |
Int |
PK |
N |
邮箱 |
|
varchar(50) |
N | |
昵称 |
nickname |
varchar(50) |
N | |
密码 |
password |
varchar(19) |
N | |
电话 |
phone |
varchar(30) |
Y | |
年龄 |
age |
varchar(50) |
Y | |
性别 |
sex |
int |
Y | |
属性 |
zodiac |
varchar(50) |
Y | |
血型 |
blood_type |
varchar(3) |
Y |
3.4.9限制条件
必须保证程序正常的连接到服务器
3.4.10测试要点
- 测试数据是否可以从后端传送到前端
- 测试是否可以修改个人信息
- 测试是否可以设置密保问题
- 测试是否根据相应的模块修改用户密码