一开始觉得很简单,做起来才发现根本不简单…
本来想找俩技术同好一起研究搞一搞,无奈找不到人。下面我就分别以 M 和 G 两个开发人员来模拟一下结队编程,两人都是主程。
本案例的核心代码已经分享,关键是分析设计思路。
本来,按照商业软件的设计思路,客户端最多也就是做做网络请求以及数据显示,但部分功能性的处理,比如实时数据查询等数据库操作统统都应该放在 server 端,不过这里由于只有一个客户端,所以顺带把这些个需求全部放在了客户端。但是明白商业软件一般都不会这么干即可。
该项目亮点
在哪?
基本上这个项目会涉及 GUI 开发的方方面面,范例式的 Cpp 代码,以自选股为背景。
(我这个做,纯碎为了兴趣), 不过还是列举了一下:
现在做的每一个作品,要么不做,要么做到精致;仔细思考,尽量重用.
- 1 登录模块 (以后尽可能都重用这一个组件,怎么做到最大化重用?子模块包含)
- 2 多语言处理 (考虑到QString内部实际采用utf16编码,直接使用std::wstring)
- 3
概要
功能与分工
这个系统比较大,我初步估计,最少一个月最多两个月能完成。主要功能模块如下:
然后既然是两个主力协作,那么应该至少如下分工:
大致上就是这么个情况,如果只是概要看看,其实没有多复杂。但是实际操作起来还是不一样的。
核心业务流程
总结了一下,大致如下:
纯属个人软件,所以和真是商业软件流程还是有很大的差距的。
详情
这个就分模块直接展示了。
开发环境概述
主要集中在 Mac 环境下,后期可能会在 windows pc 上跑一跑。
Modern Cpp + Mysql + Qt
, 核心技术就这样了。
数据结构设计
该部分是最先进行的,详细分析过程不展开。
具体内容如下:
数据库设计
主要的表如下:
相关 sql 语句如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| CREATE DATABASE IF NOT EXISTS qt_stock_mock DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE qt_stock_mock;
## T_USER 存储用户信息
CREATE TABLE IF NOT EXISTS t_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, # 自动编号 id username varchar(128), # 用户名 passwd varchar(128), # 密码 p001 varchar(10) NOT NULL, # previlege 1 系统权限 p002 varchar(10) NOT NULL, # 2 基础数据维护权限 p003 varchar(10) NOT NULL, # 3 品种维护权限 p004 varchar(10) NOT NULL, # 4 导入导出权限 p005 varchar(10) NOT NULL, # 5 查询权限 p006 varchar(10) NOT NULL, # 6 即时数据权限 p007 varchar(10) NOT NULL, # 7 工具权限 p008 varchar(10) NOT NULL, # 8 金融计算器权限 p009 varchar(10) NOT NULL, # 9 截屏权限权限 p010 varchar(10) NOT NULL # 10 系统设置权限 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### T_STOCK_INFO 维护股票基础信息 CREATE TABLE IF NOT EXISTS t_stock_info ( code varchar(32), # 股票代码 name varchar(64), # 股票名称 id_kind BIGINT # 股票种类编号 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
## T_KIND 维护股票种类信息 CREATE TABLE IF NOT EXISTS t_kind ( id BIGINT PRIMARY KEY AUTO_INCREMENT, # 自动编号 id name varchar(128) # 股票种类名称 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
### T_R_000000 表用于保存股票日线数据 (例如) CREATE TABLE IF NOT EXISTS t_r_000001 ( data_time varchar(10), # 日期 price_open varchar(32), # 开盘价 price_close varchar(32), # 收盘价 price_max varchar(32), # 最高价 price_min varchar(32), # 最低价 turnover varchar(32), # 交易量 trading_volume varchar(32) # 交易额 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
具体的数据,可以用 python 去新浪财经,东财等爬取,我这里采用 csv 导入模拟数据.
(如果要相关数据,可以发邮件给我)
注意:
_T_R_xxxxxx 日线数据表, 每增加一只股票增加一个表, 但表结构是一样的;因为数据可能会很多,所以分表。
并且所有外键关联取消,手动维护,减少数据库负担_。
登录模块
直接重用其他项目岂不是更好?
总结
在这个项目里面, Qt 框架的相关技术越来越熟悉,我也对自己提出了更多其他要求:
- 怎么样组织代码可以快速出产品?
- 工程与子工程如何相互结合?
- 怎么样做到一份代码的重复使用?
可重用代码