1、个人收集整理 勿做商业用途 股票交易系统概要设计说明书 编写:成小鹰 日期:2011-8-16 审核:成小鹰 日期:2011-8-16 批准:成小鹰 日期:2011-8-16 受控状态: 是 发布版次:1.0 日期:2011-8-16 编号: 变更记录 日期 版本 变更说明 作者 2011—8—16 1。0 初始版本 成小鹰
2、 签字确认 系统模块 对应章节 对应部门 负责人签字 目 录 1 引言 4 1。1 编写目的 4 1.2 背景 4 1.3 基线 4 1。4 定义 4 1.5 参考资料 6 2 总体设计 7 2。1 设计思想 7 2。1。1 系统构思 7 2。1。2 关键技术与算法 8 3 系统数据结构设计 8 3.1 数据结构 9 3.2 数据结构与系统元素的关系 12 4 尚待解决的问题 12
3、1 引言 1.1 编写目的 本说明书建立在前期的需求分析基础之上目的在于明确说明操盘手股票交易系统的客户端与后台的基本框架,登录,股票交易,买卖,显示,查询几个模块的数据流程图,了解系统中数据的基本流向.该系统功能仅限于局域模拟股票交易,不能进行网络连接,大数据的处理。 本说明书的预期读者为:前期的内测版主要用于小组成员,公测版则面向线上的股票用户. 1.2背景 a) 待开发的软件系统的名称:操盘手股票交易系统 b) 本项目的任务提出者为中软国际C++培训讲师,开发者为该培训班培训人员,用户面向对于C++编程比较熟悉的专业人员,该系统在该培训班的培训机房进行开发,该机房的计算机
4、符合开发的基本要求。 c) 该软件系统只需进行单机运行模拟股票交易即可。 1。3基线 股票系统需求分析说明书 v1。0 1。4定义 1。日k线图 : 日k线图就是将每天的k线按时间顺序排列在一起,反映该股票自上市以来的每天的价格变动情况的k线图。 2.日成交额 : 指当天已成交股票的金额总数。 3。日开盘价 : 日开盘价是指每个交易日的第一笔成交价格,这是传统的开盘价定义.目前中国市场采用集合竞价的方式产生开盘价。 4.日收盘价 : 日收盘价是指每个交易日的最后一笔成交价格。因为收盘价是当日行情的标准,又是下一个交易日开盘价的依据,可
5、据以预测未来证券市场行情,所以投资者对行情分析时,一般采用收盘价作为计算依据。 5.日最低价 : 指当天该股票成交价格中的最低价格。 6。日最高价 : 指当天该股票成交价格中的最高价格。 7。股票代码: 股票的编号. 8.股票名称: 股票的名字。 9。最新价格: 当前最近一段时间内平均交易价格。 10。委买价: 用户委托买入股票的价格。 11.委卖价: 用户委托卖出的价格. 12。涨跌: 股票当前价格与昨天收盘价的差价。 13。涨幅: 涨跌对昨天收盘价的百分率。 14.当前最高价: 当
6、日开盘之后,市场上交易的最高价 15.当前最低价: 当日开盘后,市场上交易的最低价 16。总手: 股票上市后的已达成交易的交易总量。 17.现手: 市场上正在流通或可交易的总量。 18.涨速: 当前时段的平均价格减去前一时段的平均价格的差除以时段的时间. 19.挂单表: 用户进行买/卖操作后提交给服务器的一张存有交易信息的表单(一种数据结构)。 1.5参考资料 ● 股票需求说明书; ● QT GUI开发指导; ● 项目计划书 ● C++帮助文档 ● 已有的股票模拟软件 2 总体设计 2.1 设计思想 2.1.1 系统
7、构思 系统功能层次图 2.1.2 关键技术与算法 2.1.2.1 股票成交价格的计算 简要说明本系统中的主要技术与算法.这部分是概要设计的核心!!! 股票交易系统的主要算法是计算股价,绘制K线图以及曲线图 计算股票的平均价格: 从系统的挂单表中读取用户的买卖股票信息,将读取的用户信息分别用内存中的买卖两个容器存储。在一个时间段内(1s),按照买卖双方利益最大化原则,按先按价格再按时间优先,从买方最高价,卖方最低价开始匹配(当买方的价格低于卖方的价格时停止匹配).成功交易价为买卖双方价格的平均值。对这一时间段内的每一次成功交易价格求平均值,这个平均值就是这一时间段内
8、成交的股票价格的平均价格。将成交成功的股票记录保存到交易记录中,并从挂单表中删除除这次交易的买卖单,如果本次交易后,其中一方的挂单表中的股票交易量未达到预期数量,则不删除该支表单,只修改其表单上的数量,继续挂单。 2.2 股票交易系统功能 本系统为模拟股票交易系统的基本功能,包括股民账户的注册、登录以及支付宝的注册和绑定。账户登陆成功之后,用户能查看股票大盘的信息,可查询单支股票的详细信息(实时曲线图和历史k线图),也可查询和修改用户自己的信息(查询账户信息与支付宝信息,修改账户和支付宝的密码).同时,通过挂单委托的方式,对大盘上的股票进行买卖。 3 系统数据结构设计 3.1
9、类的抽象 本系统使用主要数据结构为支付宝、用户、股票、市场、用户持有表、曲线、统计信息、交易记录信息、挂单信息九个结构体以及支付宝类、用户类、后台数据处理类、数据库连接类、用户操作类。 本系统分为服务端与客户端: 服务端(即后台):通过数据处理类对所有数据经行封装处理,实时连接数据库,实时将最新信息更新到数据库. 客户端(前台):用户通过支付宝类、用户类、用户操作类可进行账户的注册、登陆,以及股票的买卖。 提示:不管是在前台还是后台,凡牵涉到数据库信息的查询、修改、删除或者更新,都需要通过数据库连接类进行数据库的连接。 具体结构体和类的抽象如下: struct TPa
10、yment //支付宝 { string payID; //支付宝ID string payPasswd; //支付宝密码 double payMoney; //支付宝余额 }; struct TUser //用户 { string userID; //用户ID string userName; //用户姓名 string userPasswd; //用户登陆密码 string payID; //支付宝ID }; struct TStock //股票 { string stockID; //股票编号 string s
11、tockName; //股票名称 string stockType; //股票类型 }; struct TMarket //市场 { TStock stock; //股票 double curPrice; //股票当前价 double comBuyPrice; //委买价 double comSellPrice; //委卖价 double closingPrice; //昨天收盘价 double openingPrice; //今天开盘价 double markup; //涨幅 double markupNum; //涨跌量 doubl
12、e curHighPrice; //当前最高价 double curLowPrice; //当前最低价 int AllTradeNum; //股票目前交易总量(总手) int curAbleNum; //当前可交易量(现手) double riseSpeed; //涨速 double AllTradeMoney; //股票目前交易额(总额) }; struct THolding //用户持有表 { string userID; //用户编号 string stockID; //股票编号 int holdingNum; //股票持有量
13、}; struct TGatherList //统计表 { string stockID; //股票编号 int dayTradeNum; //当天交易量 int dayHighPrice; //当天最高价 int dayLowPrice; //当天最低价 int closingPrice; //当天收盘价 int opingPrice; //当天收盘价 int date; //日期 }; struct TStockCurve //股票曲线 { string stockID; //股票编号 double curPrice; /
14、/股票当前价格 int curTime; //当前时间 }; struct TTradeInfo //交易记录 { string stockID; //股票编号 int tradeNum; //交易数量 double dealPrice; //成交价格 int curTime; //成交时间 }; struct TOrderList //挂单表 { string userID; //用户编号 string stockID; //股票编号 int stockNum; //股票数量 int orderType; //委
15、托买卖类型(0:买 1:卖) int orderPrice; //委托价格 int orderTime; //委托时刻 }; class CPayment //支付宝类 { private: TPayment m_payment; //支付宝成员 public: CPayment(string payID = 0); //构造函数 ~CPayment(); //析构函数 double getMoney() //返回金钱数 { return m_payment。payMoney; } bool chang
16、eMoney(double money); //改变金钱数,money是修改的数额。 bool changePasswd(string passwd); //修改支付宝密码 bool isPasswd(string passwd); //验证密码是否匹配 bool addPayment }; class CUser //用户类 { private: TUser m_user; //用户成员 CPayment *m_payment; //支付宝对象 public: CUser(string userName); //构造函数
17、 ~CUser(); //析构函数 void loadUserInfo(); //加载用户信息 void saveUserInfo(); //保存用户信息 void changePasswd(); //修改用户密码 void passUserInfo(string &userName,TPayment &payment) //传递用户信息 { userName = m_user。userName; payment。payID = m_payment.payID; payment.payMoney = m_payment.payMone
18、y; payment。payPasswd = "1”; } bool changeUserMoney(double money) //更改用户金钱 { if(payment。changeMoney(money)) { return true; } return false; } }; class CUserOperator //用户操作 { private: CUser *user; //用户对象 public: CUserOperator(string userName); /
19、/构造函数 ~CUserOperator(); //析构函数 bool changeLoginPasswd(string newPasswd); //修改登陆密码 bool changePayPasswd(string newPasswd); //修改支付宝密码 void tiePayment(); //绑定支付宝 void checkUserinfo(string userName); //查询用户信息 void checkUserstock(string userName); //查询用户持有股票信息 void che
20、ckUserTrade(string userName); //查询用户交易信息 bool buyStock(string stockID); //用户买入 bool sellStock(string stockId); //用户卖出 }; 3.2 数据结构与系统元素的关系 因为支付宝的主键是作为用户的外键存在,所以支付宝类作为用户类的成员出现。用户类,支付宝类,股票类,分别封装自己的属性与操作。而用户类则是建立这几个类之间的关系而存在。 说明各个数据结构与访问这些数据结构的各个系统元素之间的对应关系。将数据和系统的程序模块有机地结合起来。可以进一步向系统最终的数学模型(程序语言)靠近。 4 尚待解决的问题 以上类的抽象为前台客户端的操作使用,所有后台数据的处理尚未设计。 中软培训实训基地 第 12 页 共 12 页






