軟件設(shè)計(jì)說明書(例)_第1頁
軟件設(shè)計(jì)說明書(例)_第2頁
軟件設(shè)計(jì)說明書(例)_第3頁
軟件設(shè)計(jì)說明書(例)_第4頁
軟件設(shè)計(jì)說明書(例)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、案卷號(hào)00001日期軟件詳細(xì)設(shè)計(jì)說明書(例)作 者:完成日期:簽收人:簽收日期:修改情況記錄:版本號(hào)修改批準(zhǔn)人修改人安裝日期簽收人目錄1引言 31.1 編寫目的 31.2范圍 41.3定義 41.4參考資料 42總體設(shè)計(jì) 52.1需求規(guī)定 52.2運(yùn)行環(huán)境 52.3基本設(shè)計(jì)概念和處理流程 62.4結(jié)構(gòu) 82.5功能需求與程序的關(guān)系 112.6人工處理過程 132.7 尚未解決的問題 133接口設(shè)計(jì) 133.1用戶接口 133.2外部接口 143.3內(nèi)部接口 144運(yùn)行設(shè)計(jì) 184.1 運(yùn)行模塊組合 184.2運(yùn)行控制 184.3運(yùn)行時(shí)間 185系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 195.1邏輯結(jié)構(gòu)設(shè)計(jì)要點(diǎn) 19

2、5.2物理結(jié)構(gòu)設(shè)計(jì)要點(diǎn) 15.3數(shù)據(jù)結(jié)構(gòu)與程序的關(guān)系 46系統(tǒng)出錯(cuò)處理設(shè)計(jì) 46.1 岀錯(cuò)信息 46.2補(bǔ)救措施 56.3系統(tǒng)維護(hù)設(shè)計(jì) 51引言1.1編寫目的隨著證券交易電子化程度的不斷提高,券商對(duì)于各種業(yè)務(wù)提出了新的要求,為了滿足券商的發(fā)展需求,更好的為客戶提供服務(wù),現(xiàn)結(jié)合原有各版本的證券交易軟件的優(yōu)點(diǎn)和特點(diǎn), 開發(fā)一套采用 Client/Server 結(jié)構(gòu)的證券交易軟件管理系統(tǒng)(SQL版)。本系統(tǒng)從底層予以優(yōu)化,使整個(gè)系統(tǒng)的運(yùn)行速度得到較大提高,通過重新優(yōu)化數(shù)據(jù)庫內(nèi)部結(jié)構(gòu),使系統(tǒng)的可擴(kuò)充性得到極大提高。本說明書給出SQL版證券交易系統(tǒng)的設(shè)計(jì)說明,包括最終實(shí)現(xiàn)的軟件必須滿足的功能、 性能、接

3、口和用戶界面、附屬工具程序的功能以及設(shè)計(jì)約束等。目的在于:為編碼人員提供依據(jù);為修改、維護(hù)提供條件;項(xiàng)目負(fù)責(zé)人將按計(jì)劃書的要求布置和控制開發(fā)工作全過程;項(xiàng)目質(zhì)量保證組將按此計(jì)劃書做階段性和總結(jié)性的質(zhì)量驗(yàn)證和確認(rèn)。本說明書的預(yù)期讀者包括:項(xiàng)目開發(fā)人員,特別是編碼人員;軟件維護(hù)人員;技術(shù)管理人員;執(zhí)行軟件質(zhì)量保證計(jì)劃的專門人員;參與本項(xiàng)目開發(fā)進(jìn)程各階段驗(yàn)證、確認(rèn)以及負(fù)責(zé)為最后項(xiàng)目驗(yàn)收、鑒定提供相應(yīng)報(bào) 告的有關(guān)人員。合作各方有關(guān)部門的復(fù)雜人;項(xiàng)目負(fù)責(zé)人和全體參加人員。1.2范圍說明:a. 待開發(fā)的軟件系統(tǒng)的名稱:模擬股票交易系統(tǒng)b. 列出本項(xiàng)目的任務(wù)提出者、開發(fā)者、用戶以及將運(yùn)行該項(xiàng)軟件的單位。1.

4、3定義列出本文件中用到的專門術(shù)語的定義和縮寫詞的原詞組。本報(bào)告用到的術(shù)語符合國(guó)家標(biāo)準(zhǔn)軟件工程術(shù)語(GB/T11475-1995 )。1.4參考資料列出要用到的參考資料,如:a. 本項(xiàng)目的經(jīng)核準(zhǔn)的計(jì)劃任務(wù)書或合同、上級(jí)機(jī)關(guān)的批文;b. 屬于本項(xiàng)目的其他已發(fā)表的文件;c. 本文件中各處引用的文件、資料,包括所要用到的軟件開發(fā)標(biāo)準(zhǔn)。列出這些文件的標(biāo)題、 文件編號(hào)、發(fā)表日期和出版單位, 說明能夠得到這些文件資料的 來源。2總體設(shè)計(jì)2.1需求規(guī)定詳細(xì)的說明可參見需求的規(guī)定,詳細(xì)說明參見需說明對(duì)本系統(tǒng)的主要的輸入輸出項(xiàng)目、處理的功能性能要求,分析說明書。2.2運(yùn)行環(huán)境簡(jiǎn)要地說明對(duì)本系統(tǒng)的運(yùn)行環(huán)境(包括硬件

5、環(huán)境和支持環(huán)境) 求分析說明書。數(shù)據(jù)庫服務(wù)器奔騰Pro內(nèi)存128MB以上硬盤9GB100M網(wǎng)卡應(yīng)用服務(wù)器奔騰Pro內(nèi)存64MB以上硬盤4GB100M網(wǎng)卡網(wǎng)絡(luò)配置100M / 10M工作站(柜臺(tái))P100以上內(nèi)存8MB以上 硬盤1G以上100M/10 M 網(wǎng)卡軟件操作系統(tǒng)Windows NT 4.0 以上數(shù)據(jù)庫管理系統(tǒng)SQL Server 2005相關(guān)軟件工具Win dows NT Workstation/Wi ndows NT serverWin dows 2000 Professio nal/ Server開發(fā)工具平臺(tái): Windows95/98、Windows NT、Windows 200

6、0 開發(fā)工具:visual stidio 2005 sp1,C#.Net測(cè)試環(huán)境Windows31、Windows95/98、Windows NT、Windows 20002.3基本設(shè)計(jì)概念和處理流程說明本系統(tǒng)的基本設(shè)計(jì)概念和處理流程,盡量使用圖表的形式。營(yíng)業(yè)部系統(tǒng)一共有四個(gè)對(duì)象,即客戶、員工、市場(chǎng)和銀行,市場(chǎng)的概念是交易所的細(xì)化, 比如上海證券交易所的A股和E股就是兩個(gè)市場(chǎng),有了市場(chǎng)的概念我們就可以把交易所這個(gè)概念細(xì)化,并使同一個(gè)市場(chǎng)的共性更突出。銀行則通過銀證轉(zhuǎn)賬業(yè)務(wù)介入,并成為營(yíng)業(yè)部系統(tǒng)不可或缺的組成部分。因此整個(gè)系統(tǒng)模上述四個(gè)對(duì)象通過一些業(yè)務(wù)流程進(jìn)行相互操作從而形成整個(gè)交易活動(dòng)。型可以

7、表述為圖2-1設(shè)計(jì)時(shí)需要將營(yíng)業(yè)部系統(tǒng)所使用的各種信息分為描述四個(gè)對(duì)象的信息和描述業(yè)務(wù)流程的信息。由于四個(gè)對(duì)象相對(duì)而言是一種穩(wěn)定型信息, 而業(yè)務(wù)流程則較易變化,且營(yíng)業(yè)部之間 差異很大,因此應(yīng)將四個(gè)對(duì)象盡量定型, 而將各種業(yè)務(wù)流程盡可能做成組件, 以便營(yíng)業(yè)部可 根據(jù)實(shí)際需求組裝成適合自己的系統(tǒng)。從而使對(duì)象需求變化時(shí)不致影響系統(tǒng)結(jié)構(gòu)。證券商電腦系統(tǒng)圖2.12.4結(jié)構(gòu)用一覽表及框圖的形式說明本系統(tǒng)的系統(tǒng)元素(各層模塊、子程序、公用程序等) 的劃分,扼要說明每個(gè)系統(tǒng)元素的標(biāo)識(shí)符和功能,分層次地給出各元素之間的控制與被控制關(guān)系。本系統(tǒng)采用C/S模式的3層結(jié)構(gòu)按照不同會(huì)話來劃分的話可以分為3大系統(tǒng)模塊接口處

8、理子系統(tǒng)數(shù)據(jù)庫系統(tǒng)維護(hù)子系統(tǒng)I客戶端登陸模塊:E蘭圖2-2交易系統(tǒng)體系結(jié)構(gòu)PZ缶一 KUzEd密耐3.M135U1密buyStocksellStock,checkUserMoneyCount ( stockData) Or checkUserStockCount要通過數(shù)據(jù)訪問層來訪問用戶表quoteStockCan selfDelegate在撮合隊(duì)列中處理并且返回處理結(jié)果tradelnQueue ( stockData newstockData)Success!unSuccessupDateUserI nfo (stockData) 通過調(diào)用ADO 層工廠來訪問 不同的數(shù)據(jù)庫 (更新用戶表II

9、)upDateDelegate Info ( stockDat a) 同左更新的是 委托臨時(shí)表1adoFactory通過該模塊可動(dòng)態(tài)建立不同數(shù)據(jù) 庫的連接Orical、sqlserver, access數(shù)據(jù)訪問層access access.postDate(stockData) 將數(shù)據(jù)更新到數(shù)據(jù)庫數(shù)據(jù)訪問層sqlserverSqlserver。postDate (stockData)Rule s/ Mod el 規(guī)范 買賣 指令 傳輸 的數(shù) 據(jù)結(jié) 構(gòu)必 須是 stockData 形式Chec k客戶端服務(wù)器 每次交易返回最新信息股票信息發(fā)布經(jīng)過修改我認(rèn)為每次由客戶端每5秒去查詢一次服務(wù)器更新信

10、息不可取,因?yàn)檫@會(huì)加重服務(wù)端和客戶端的負(fù)擔(dān),特別是服務(wù)器端的運(yùn)算。修改后實(shí)現(xiàn)變更為:用戶一開始登陸后獲得一次服務(wù)器的全部股票當(dāng)前信息。 而服務(wù)器 端每次發(fā)生交易后,給每一個(gè)在線用戶發(fā)送當(dāng)前交易需要更新的股票信息, 這樣就減輕了客 戶機(jī)和服務(wù)端的信息Stock idStock price第一次登陸發(fā)送請(qǐng)求獲得所有 股票信息,并畫分時(shí)線圖TCP/IP2.5功能需求與程序的關(guān)系(該關(guān)系由需求分析報(bào)告編寫者根據(jù)結(jié)構(gòu)圖說明)本條用一張如下的矩陣圖說明各項(xiàng)功能需求的實(shí)現(xiàn)同各塊程序的分配關(guān)系:獲取并發(fā)送 用戶請(qǐng)求繪制分時(shí) 圖MD5加密解密發(fā)送用戶 交易請(qǐng)求接受并識(shí)別 用戶請(qǐng)求調(diào)用數(shù)據(jù)層 查詢撮合交易服務(wù)器返

11、回 客戶端信息用戶登陸VVVV查看用戶 持倉(cāng)VVV實(shí)時(shí)指 數(shù)VVV交易委托VVVVVVV取消交易VVVVVV2.6人工處理過程說明在本軟件系統(tǒng)的工作過程中不得不包含的人工處理過程(如果有的話)沒有完成股票管理的模塊設(shè)計(jì),所以股票必須從數(shù)據(jù)庫后臺(tái)添加如果有新股發(fā)行,還必須添加有關(guān)股票的交易隊(duì)列2.7尚未解決的問題說明在概要設(shè)計(jì)過程中尚未解決而設(shè)計(jì)者認(rèn)為在系統(tǒng)完成之前必須解決的各個(gè)問題。3接口設(shè)計(jì)3.1用戶接口說明將向用戶提供的命令和它們的語法結(jié)構(gòu),以及軟件的回答信息。向用戶提供簡(jiǎn)單易用的 UI,以及幫助文檔。客戶端將提供以下功能 首先彈出用戶登陸框,供用戶輸入用戶名和密碼菜單項(xiàng)提供個(gè)股查詢和分時(shí)

12、圖按鈕菜單欄下是選項(xiàng)卡,提供股票實(shí)時(shí)信息和個(gè)股分時(shí)圖欄提供用戶交易界面和交易按鈕以及查看用戶盈虧按鍵3.2外部接口說明本系統(tǒng)同外界的所有接口的安排包括軟件與硬件之間的接口、本系統(tǒng)與各支持軟件之間的接口關(guān)系。采用基于正確公開標(biāo)準(zhǔn)的部件和技術(shù)以確保最大限度的協(xié)作能力以及與第三方系統(tǒng)與 部件集成的簡(jiǎn)便性。這類標(biāo)準(zhǔn)包括但不限于以下幾種:網(wǎng)絡(luò)協(xié)議與標(biāo)準(zhǔn) (TCP/IP, HTTP, SSL, etc)語言(SQL, C#.net, etc.)數(shù)據(jù)庫連接性(ADQ net)3.3內(nèi)部接口說明本系統(tǒng)之內(nèi)的各個(gè)系統(tǒng)元素之間的接口的安排。邏輯層和數(shù)據(jù)訪問層通過以經(jīng)的stockDataModel接口,來限定訪問

13、stockData類型的 數(shù)據(jù)客戶端通過調(diào)用 buyStock ( stockData )和sellStock (stockData )來訪問邏輯層,在 這個(gè)函數(shù)中包含了訪問邏輯層的接口dealTra nsactio n(stockData)通過AdoFactory訪問不同的數(shù)據(jù)庫客戶端登陸協(xié)議D(二字節(jié))+(客戶名字長(zhǎng)度)(4字節(jié))+(客戶名字)+(客戶密碼長(zhǎng)度)(4字節(jié))+(客戶密 碼);客戶買賣協(xié)議B(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量)(4字節(jié))S(二字節(jié))+(股票ID)(4字節(jié))+(股票數(shù)量)(4字節(jié))查詢交易信息并返回給客戶端C(二字節(jié))具體有拆包解包的類using Sy

14、stem;using System.Collections.Generic;using System.Text;namespace ProjectCenterTradingSyspublic class Protocalprivatebyte messagebuffer;privatebyte messagelength;public byte messagebag;/該函數(shù)是將字符串轉(zhuǎn)換為字節(jié)數(shù)組return messagebag;messagebuffer = System.Text.ASCIIEncoding .ASCII.GetBytes(stringlnfo);return mess

15、agebuffer;/該函數(shù)將整型轉(zhuǎn)換為個(gè)字節(jié)public byte InttoByte( int number)messagelength=BitConverter .GetBytes(number);return messagelength;/將浮點(diǎn)型轉(zhuǎn)換為個(gè)字節(jié)public byte DoubletoByte( double price)byte pricebyte = BitConverter .GetBytes(price); return pricebyte;/合并一個(gè)字符串(字節(jié)數(shù)組)和他的長(zhǎng)度作為一個(gè)包public byte Combinarray( byte messle,

16、byte messinfo) messagebag= new byte messle.Length+messinfo.Length;int index;for (index = 0; index messle.Length; index+) messagebagindex = messagelengthindex;for ( int index1 = 0; index1 messinfo.Length; index1+) messagebagindex + index1 = messagebufferindex1;/解包頭public byte BagHead( char head)byte

17、headbyte = BitConverter .GetBytes(head); return headbyte;/讀包頭public char DeBagHead(byte buffer)char headinfo = BitConverter .ToChar(buffer, 0); return headinfo;/該函數(shù)為解包信息為字符串public string deMessgeBag( byte Messagebag, int start, out int next)next =BitConverter .Tolnt32(Messagebag, start);string messa

18、ge = System.Text. ASCIIEncoding .ASCII.GetString(Messagebag, start + 4,next);return message;4運(yùn)行設(shè)計(jì)4.1運(yùn)行模塊組合說明每種運(yùn)說明對(duì)系統(tǒng)施加不同的外界運(yùn)行控制時(shí)所引起的各種不同的運(yùn)行模塊組合,行所歷經(jīng)的內(nèi)部模塊和支持軟件。4.2運(yùn)行控制說明每一種外界的運(yùn)行控制的方式方法和操作步驟。4.3運(yùn)行時(shí)間說明每種運(yùn)行模塊組合將占用各種資源的時(shí)間。5系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)5.1邏輯結(jié)構(gòu)設(shè)計(jì)要點(diǎn)給出本系統(tǒng)內(nèi)所使用的每個(gè)數(shù)據(jù)結(jié)構(gòu)的名稱、標(biāo)識(shí)符以及它們之中每個(gè)數(shù)據(jù)項(xiàng)、記錄、文卷和系的標(biāo)識(shí)、定義、長(zhǎng)度及它們之間的層次的或表格

19、的相互關(guān)系??蛻舳祟悎D:windowForm : FormPrivate:userLogDialog userNametextBox userPasswordtextBox userlogOKbott on userlogCa nselbutt on tabPage Me nuBar stockRealtimeGraphitem stock Quote Dialog dataGridView userBuyStockID userBuyStockcount userBuyStockprice userBuyStockButt on .sell userStocklistView userSto

20、ckLookButt onsend Mesto Server(stri ng Info)/該函數(shù)用來向主機(jī)發(fā)送請(qǐng)求(接上)MD5encrypt (string)以下都要通過sen dMestoServer向主機(jī)發(fā)送信息logOK_press(eve nt,ha ndle); stockQuoteitem_press(e,h); buyStockButt on _press(e,h); sellStockButt on _press(e,h); stocklookButt on _press(e,h);/該函數(shù)調(diào)用drawPicture畫圖 stockRealtimeGraphitem_pres

21、s(e,h)Class RealTime GraphPrivatestockID/動(dòng)態(tài)數(shù)組存儲(chǔ)股票價(jià)格ArrayListstockPricePublic :/在 windowform類中 recievemess后更新當(dāng)前價(jià)格,即在數(shù)組后添加一項(xiàng)取新價(jià)格updatePrice ( price, sotckPrice)drawPicture(stockID ,stockPrice)Class stockData訂單號(hào) public int ListID; public int UsrID; public string Stockindex; public flout Price; public i

22、nt Count; public bool Isbuy;該類即為向服務(wù)端傳送數(shù)據(jù)時(shí)的包服務(wù)器端StockQueuePrivatestockData datastockData nextPublicDeleteQueueHead();AddStockData();Class TradeService弋 Dispose Cbool)For ml ()string)Ini tiali()SendtoCli ent KharSver. Cli entlnfoj serviceClint ()StiartLi s teniiig ()cli entSoicketcomponents lsb_cli en

23、t m_cli ent m_serverThread m_Tcplisterii m Fort該類還要補(bǔ)充若干個(gè) StockQueue類型的成員變量private void StartListening()byte ipadre = new byte 10, 82, 14, 47;IPAddress ip= new IPAddress (ipadre);m_Tcplisten =new TcpListener (ip,m_Port);m_Tcplisten.Start();while ( true )trySocket s = m_Tcplisten.AcceptSocket();client

24、Socket = s;m_serverThread =new Thread (new ThreadStart (serviceClient); / 多線程 deal各個(gè)連接用戶的socketm_serverThread.Start();catch ( Exception E)Console .WriteLine(E.ToString();如以上startlistening代碼所示,監(jiān)聽創(chuàng)造一個(gè)連接客戶端的套接字,再用多線程處理該連接,而服務(wù)器端則繼續(xù)監(jiān)聽新的套接字。這樣主要的交易代碼就可以放入ServiceClient這個(gè)函數(shù)中,當(dāng)有新客戶信息連入時(shí),即可進(jìn)行查詢數(shù)據(jù)庫,對(duì)比插入股票隊(duì)列等工作

25、Class Clie ntlnfo/這個(gè)類記錄了客戶端的socketV Cliwitlnfo (string, System. Het, EndPcint Syst* ToString 0宜 CLThread予 Host晉 MarneSock注 cl thread” endpoint,name川 xocknewlist.price ,利 用插入排序?qū)?newlist插入到買隊(duì)列BuyQueue中,轉(zhuǎn)1 ;3. )if SellQueue0.countnewlist.count, newlist 完全撮合,SellQueue0.cou nt= SellQueue0.cou ntnewlist.c

26、ount,轉(zhuǎn) 2;4. )if SellQueue0.count=newlist.count, SellQueue0撮合,并將 SellQueue0從 SellQueue 隊(duì)列中刪除, newlist.count=newlist.count-SellQueue0.count,轉(zhuǎn) 2;5. )取 買 單 隊(duì) 列 頭 BuyQueue0 , ifBuyQueue0.pricenewlist.count,newlist 完全撮合,BuyQueue0.co unt = BuyQueue0.co unt n ewlist.co unt , 轉(zhuǎn)1;7. )if BuyQueue0.co unt=n ewl

27、ist.co unt,BuyQueue0撮合, 并將 BuyQueue0從 BuyQueue隊(duì)列中刪 除, n ewlist.co unt=n ewlist.co un t-BuyQueue0.co unt,轉(zhuǎn)5;如下面流程圖522所示:SeUeuetl為空不為空/小于等于11tlcount-BuSeUeu被0完全磨合nesWlj全被磨合SQeUe全部非空成員向前進(jìn)一位單是否為空不為空 為空插入排序QUe的e位-判斷UyQueue判斷其為買判SQieue是否為空賣單單還是BuyQueue% / BuyC內(nèi)全部非卜丨/空成員向前進(jìn)一位 返回成交信息*bJBuyQueue0 被完全磨合找到其置圖

28、3.2.2522集合競(jìng)價(jià)集合競(jìng)價(jià)是指對(duì)所有有效委托進(jìn)行集中處理,深、滬兩市的集合競(jìng)價(jià)時(shí)間為 交易日上午9: 15至9: 25。集合競(jìng)價(jià)原則:凡是高于開盤價(jià)的買單一定成交;凡是低于開盤價(jià)的賣單一定成交;凡是高于開盤價(jià)的賣單一定不成交;凡是低于開盤價(jià)的買單一定不成交;集合競(jìng)價(jià)分四步完成:第一步:確定有效委托在有漲跌幅限制的情況下,有效委托是這樣確定的:根據(jù)該只證券上一交易日收盤價(jià)以及確定的漲跌幅度來計(jì)算當(dāng)日的最高限 價(jià)、最低限價(jià)。有效價(jià)格范圍就是該只證券最高限價(jià)、最低限價(jià)之間的所有價(jià) 位。限價(jià)超出此范圍的委托為無效委托,系統(tǒng)作自動(dòng)撤單處理。第二步:系統(tǒng)根據(jù)競(jìng)價(jià)規(guī)則自動(dòng)確定集合競(jìng)價(jià)的成交價(jià), 這個(gè)價(jià)

29、格就是當(dāng)日 的開盤價(jià), 所有高于開盤價(jià)的買盤和所有低開開盤價(jià)的賣盤均以此價(jià)格成交, 集合競(jìng)價(jià)的成交價(jià)確定原則是:以此價(jià)格成交,能夠得到最大成交量。第三步:集中撮合處理所有的買委托按照委托限價(jià)由高到低的順序排列,限價(jià)相同者按照進(jìn)入系統(tǒng)的時(shí)間先后排列;所有賣委托按委托限價(jià)由低到高的順序 排列,限價(jià)相同者按照進(jìn)入系統(tǒng)的時(shí)間先后排列。 依序逐筆將排在前面的買委 托與賣委托配對(duì)成交,即按照價(jià)格優(yōu)先,同等價(jià)格下時(shí)間優(yōu)先的成交順序依次 成交,直至成交條件不滿足為止,即不存在限價(jià)高于等于成交價(jià)的叫買委托、 或 不存在限價(jià)低于等于成交價(jià)的叫賣委托。所有成交都以同一成交價(jià)成交。這同一成交價(jià)成交的買賣單一般量都是很

30、大的,如圖323所示圖323所示第四步:行情揭示:1. )如該只證券的成交量為零,則將成交價(jià)位揭示為開盤價(jià)、最近成交價(jià)、最高價(jià)、最低價(jià),并揭示出成交量、成交金額。2. )剩余有效委托中,實(shí)際的最高叫買價(jià)揭示為叫買揭示價(jià),若最高叫買價(jià)不存在,則叫買揭示價(jià)揭示為空;實(shí)際的最低叫 賣價(jià)揭示為叫賣揭示價(jià),若最低叫賣價(jià)不存在,則叫賣揭示 價(jià)揭示為空。集合競(jìng)價(jià)中未能成交的委托,自動(dòng)進(jìn)入連續(xù)競(jìng)價(jià)。按照這樣的原則和要求,我們?cè)O(shè)計(jì)了如下的集合競(jìng)價(jià)撮合算法。如圖324所示。BuyQueue判斷兩隊(duì)列是否都不為空SellQueue否小于0判斷差價(jià)BuyQueue0.price-SellQueue0.price大于等

31、于0開盤價(jià)為昨日收盤價(jià),成交量為0i=j=0, M、N分別為BuyQueue 與SellQueue非空元素 的數(shù)目;BOOL k; Buy=BuyQueue0; Sell=SellQueue0判斷差價(jià)BuyQueuei.price-SellQueuej.price小于0大于等于0判斷差量 Buy.count-Sell.count小于等于0大于0i+; k=false; Buy1.count=Buy.count;Buy.count=Buy.count+BuyQueuei.count;j+; k=true; Sell1.count=Sell.count;Sell.count=Sell.count+

32、SellQueueiSellQueue.count;判斷是否iM判斷是否jN 是判斷 Buy.count-Sell.count開盤價(jià)為 BuyQueuei.price;總成交量為Sell.count小于0等于0開盤價(jià)為 SellQueuej.price;總成交量為Buy.count開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2 總成交量為sell.count判斷 Buy1.count-Sell1.counttrueV判斷k值等于0大于0開盤價(jià)為(SellQueuej-1.price+BuyQueuei-1.price)/2 總開盤價(jià)為 BuyQueuei.

33、price 總、成交量為Sell1.count成交量為Sell1.countfalse判斷 Buy1.count-Sell.count等于0h/小于0開盤價(jià)為 SellQueuej.price;總成交量為 Buy1.count7開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.count圖 3.2.4I集合競(jìng)價(jià)算法描述:和連續(xù)競(jìng)價(jià)一樣,首先設(shè)定QueueStruct 結(jié)構(gòu)為元素的買賣兩個(gè) 隊(duì)列 BuyQueue 和 SellQueue 。為了盡可能的提高效率,減少資源占用,我們用靜態(tài)數(shù)組構(gòu)建這 兩個(gè)隊(duì)列。其中BuyQueue是時(shí)間優(yōu)先、買

34、價(jià)降序排序,而SellQueue 是時(shí) 間優(yōu)先、賣價(jià)升序排序。在開市到開盤這段時(shí)間內(nèi),買賣單已經(jīng)分別 進(jìn)入了買賣隊(duì)列內(nèi)排好了序。一旦宣布開盤,則觸發(fā)集合撮合,如下:判斷兩隊(duì)列是否都不為空,如是,轉(zhuǎn)2 ;如否,轉(zhuǎn) 21 ;判斷 BuyQueueO.prinee與 SellQueueO.prinee之差,如大于等于0,轉(zhuǎn)3 :如小于0,轉(zhuǎn)21 ;定義int i=j=O ; M、N分別為買賣兩隊(duì)列非空元素 的個(gè)數(shù);BOOL k ; QueueStruct Buy=BuyQueue0 ; Sell=SellQueue0 ; Buy1 ; Sell1 ;轉(zhuǎn) 4; 判斷 BuyQueuei.prinee

35、與 SellQueuej.prinee 之差,如大于等于0,轉(zhuǎn)5 :如小于0 ,轉(zhuǎn)14 ; 判 斷Buy.eount 與Sell.eount 之差,如大于0,轉(zhuǎn) 6;如小于等于0,轉(zhuǎn)9;j+ ; k=true ;Selll.eo un t=Sell.eo unt;Sell.eou nt=Sell.cou nt+SellQueueiSellQueue.count ;轉(zhuǎn) 7 ;判斷j是否小于N,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)8 ;開盤價(jià)為 BuyQueuei.priee ; 總成交量為Sell.eount;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;i+ ; k=false ;Buyl.eo un t=Buy.eo un

36、t;Buy.eount=Buy.eount+BuyQueuei.eount;轉(zhuǎn) 10 ;判斷i是否小于M,如是,轉(zhuǎn)4;如不是,轉(zhuǎn)11 ;判 斷Buy.count 與Sell.count之差,如小于0,轉(zhuǎn)12 ;如等于0,轉(zhuǎn)13 ;開盤價(jià)為 SellQueuej.price; 總成交量為Buy.count ;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為sell.count;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;判斷k值,如為true ,轉(zhuǎn)15 ;如為false ,轉(zhuǎn)18 ; 判斷Buy1.count 與Sell1.count

37、之差,如大于0, 轉(zhuǎn)16 ;如小于0,轉(zhuǎn)17 ;開盤價(jià)為 BuyQueuei.price ; 總成交量為Sell1.count;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;開盤價(jià)為(SellQueuej-1.price+BuyQueuei-1.price)/2;總成交量為Sell1.count;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;判斷Buy1.count與Sell.count 之差,如小于0,轉(zhuǎn)19 ;如等于0,轉(zhuǎn)20 ;開盤價(jià)為 SellQueuej.price; 總成交量為Buy1.count;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并返回;開盤價(jià)為(SellQueuej.price+BuyQueuei-1.price)/2;總成交

38、量為Buy1.count ;統(tǒng)計(jì)成交數(shù)據(jù)及回報(bào),并 返回;開盤價(jià)為昨日收盤價(jià),成交量為0;保留所有數(shù)據(jù)至 開盤進(jìn)入連續(xù)競(jìng)價(jià)撮合;523買賣隊(duì)列排序上面我們介紹了撮合算法的核心部分,但實(shí)際上在撮合前后都要 對(duì)兩個(gè)買賣隊(duì)列進(jìn)行一定的插入和排列處理,這在整個(gè)算法中也是很 重要的部分。下面我們就來具體介紹一下。對(duì)所有的排列和插入我們考慮了效率問題之后,最后統(tǒng)一使用了 二分插入排序法。在單子進(jìn)入隊(duì)列時(shí),我們首先統(tǒng)計(jì)出當(dāng)前隊(duì)列中的非空數(shù)據(jù)個(gè) 數(shù),然后再通過新單子與當(dāng)前隊(duì)列中間值的價(jià)格比較,確定新單子在 隊(duì)列的前半部分還是后半部分,然后再取該區(qū)域中間值與之比較,直 到確定新單子應(yīng)在的位置。如下列代碼所示:int low=0; int high=N-1;N 為隊(duì) 列中非 空元素 的個(gè)數(shù)while

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論