軟件詳細設計說明書例_第1頁
軟件詳細設計說明書例_第2頁
軟件詳細設計說明書例_第3頁
軟件詳細設計說明書例_第4頁
軟件詳細設計說明書例_第5頁
免費預覽已結束,剩余41頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、求倉斤00001日期軟件詳細設計說明書(例)作者:完成日期:簽收人:簽收日期:修改情況記錄:版本號修改批準人修改人安裝日期簽收人目錄1弓I言31.1 編寫目的31.2 范圍41.3 定義41.4 參考資料42總體設計51 需求規定51 運行環境51 基本設計概念和處理流程61 結構81 功能需求與程序的關系111 人工處理過程131 尚未解決的問題133接口設計134.1 用戶接口134.2 外部接口144.3 內部接口144運行設計185.2 運行模塊組合185.3 運行主空制185.4 運行時間185系統數據結構設計19邏輯結構設計要點19物理結構設計要點1數據結構與程序的關系46系統出錯

2、處理設計4出錯信息4補救措施5系統維護設計51引言1.1編寫目的隨著證券交易電子化程度的不斷提高,券商對于各種業務提出了新的要求,為了滿足券商的發展需求,更好的為客戶提供服務,現結合原有各版本的證券交易軟件的優點和特點,開發一套采用Client/Server結構的證券交易軟件管理系統(SQL版)。本系統從底層予以優化,使整個系統的運行速度得到較大提高,通過重新優化數據庫內部結構,使系統的可擴充性得到極大提高。本說明書給出SQL版證券交易系統的設計說明,包括最終實現的軟件必須滿足的功能、性能、接口和用戶界面、附屬工具程序的功能以及設計約束等。目的在于:為編碼人員提供依據;為修改、維護提供條件;項

3、目負責人將按計劃書的要求布置和控制開發工作全過程;項目質量保證組將按此計劃書做階段性和總結性的質量驗證和確認。本說明書的預期讀者包括:項目開發人員,特別是編碼人員;軟件維護人員;技術管理人員;執行軟件質量保證計劃的專門人員;參與本項目開發進程各階段驗證、確認以及負責為最后項目驗收、鑒定提供相應報告的有關人員。合作各方有關部門的復雜人;項目負責人和全體參加人員。1.2范圍說明:a.待開發的軟件系統的名稱:模擬股票交易系統b.列出本項目的任務提出者、開發者、用戶以及將運行該項軟件的單位。定義列出本文件中用到的專門術語的定義和縮寫詞的原詞組。本報告用到的術語符合國家標準軟件工程術語(GB/T1147

4、5-1995)。參考資料列出要用到的參考資料,如:a.本項目的經核準的計劃任務書或合同、上級機關的批文;b.屬于本項目的其他已發表的文件;c.本文件中各處引用的文件、資料,包括所要用到的軟件開發標準。列出這些文件的標題、文件編號、發表日期和出版單位,說明能夠得到這些文件資料的來源。2總體設計需求規定詳細的說明可參見需求的規定,詳細說明參見需說明對本系統的主要的輸入輸出項目、處理的功能性能要求,分析說明書。運行環境簡要地說明對本系統的運行環境(包括硬件環境和支持環境)求分析說明書。數據庫服務器奔月PPro內存128MB以上硬盤9GB100M網卡應用服務器奔月PPro內存64MB以上硬盤4GB10

5、0M網卡網絡配置100M/10M工作站(柜臺)P100以上內存8MB以上硬盤1G以上100M/10M網卡軟件操作系統WindowsNT4.0以上數據庫管理系統SQLServer2005相關軟件工具WindowsNTWorkstation/WindowsNTserverWindows2000Professional/Server開發工具平臺:Windows95/98、WindowsNT、Windows2000開發工具:visualstidio2005sp1,C#.Net測試環境Windows31、Windows95/98、WindowsNT、Windows2000基本設計概念和處理流程說明本系統

6、的基本設計概念和處理流程,盡量使用圖表的形式。營業部系統一共有四個對象,即客戶、員工、市場和銀行,市場的概念是交易所的細化,比如上海證券交易所的A股和B股就是兩個市場,有了市場的概念我們就可以把交易所這個概念細化,并使同一個市場的共性更突出。銀行則通過銀證轉賬業務介入,并成為營業部系統不可或缺的組成部分。上述四個對象通過一些業務流程進行相互操作從而形成整個交易活動。因此整個系統模型可以表述為圖2-1設計時需要將營業部系統所使用的各種信息分為描述四個對象的信息和描述業務流程的信息。由于四個對象相對而言是一種穩定型信息,而業務流程則較易變化,且營業部之間差異很大,因此應將四個對象盡量定型,而將各種

7、業務流程盡可能做成組件,以便營業部可根據實際需求組裝成適合自己的系統。根據以上思想,在設計對象模型時應充分考慮到可擴展性,盡量做到抽象化、參數化,從而使對象需求變化時不致影響系統結構。結構用一覽表及框圖的形式說明本系統的系統元素(各層模塊、子程序、公用程序等)的劃分,扼要說明每個系統元素的標識符和功能,分層次地給出各元素之間的控制與被控制關系。本系統采用c/s模式的3層結構按照不同會話來劃分的話可以分為3大系統模塊柜臺管理資金管理報表管理查詢管理圖2-2交易系統體系結構客戶端登陸模塊:pzw1-三。*:Enuw最關鍵的交易系統模塊結構圖如下:ftbuyStock一:sellStockcheck

8、UserMoneyCount(stockData)OrcheckUserStockCount要通過數據訪問層來訪問用戶表在撮合隊列中處理并且返回處理結果tradeInQueue(stockDatanewstockData)quoteStockCanselDelegateSuccessunSuccessupDateUserInfo(stockData)通過調用ADO層工廠來訪問不同的數據庫(更新用戶表II)upDateDelegateInfo(stockData)同左更新的是委托臨時表1adoFactory通過該模塊可動態建立不同數據庫的連接Orical、sqlserver,access數據訪問

9、層accessaccess.postDate(stockData)將數據更新到數據庫數據訪問層sqlserverSqlserver。postDate(stockData)仇od就埃令輸嗽紹必提RUS/Mel規買指傳的據構須湫匕式ecstoDa形chk股票信息發布經過修改我認為每次由客戶端每5秒去查詢一次服務器更新信息不可取,因為這會加重服務端和客戶端的負擔,特別是服務器端的運算。修改后實現變更為:用戶一開始登陸后獲得一次服務器的全部股票當前信息。而服務器端每次發生交易后,給每一個在線用戶發送當前交易需要更新的股票信息,這樣就減輕了客戶機和服務端的信息第一次登陸發送請求獲得所有股票信息,并畫分時

10、線圖StockidStockpriceTCP/IP服務器每次交易返回最新信息功能需求與程序的關系(該關系由需求分析報告編寫者根據結構圖說明)本條用一張如下的矩陣圖說明各項功能需求的實現同各塊程序的分配關系:獲取并發送用戶請求繪制分時圖MD5加密解密發送用戶交易請求接受并識別用戶請求調用數據層查詢撮合交易服務器返回客戶端信息用戶登陸VVVV查看用戶持倉VVV實時指數VV交易委托VVVVVV7V取消交易V7V7V7V7V7V7人工處理過程說明在本軟件系統的工作過程中不得不包含的人工處理過程(如果有的話)沒有完成股票管理的模塊設計,所以股票必須從數據庫后臺添加如果有新股發行,還必須添加有關股票的交易

11、隊列尚未解決的問題說明在概要設計過程中尚未解決而設計者認為在系統完成之前必須解決的各個問題。3接口設計用戶接口說明將向用戶提供的命令和它們的語法結構,以及軟件的回答信息。向用戶提供簡單易用的UI,以及幫助文檔。客戶端將提供以下功能首先彈出用戶登陸框,供用戶輸入用戶名和密碼菜單項提供個股查詢和分時圖按鈕菜單欄下是選項卡,提供股票實時信息和個股分時圖欄提供用戶交易界面和交易按鈕以及查看用戶盈虧按鍵外部接口說明本系統同外界的所有接口的安排包括軟件與硬件之間的接口、本系統與各支持軟件之間的接口關系。采用基于正確公開標準的部件和技術以確保最大限度的協作能力以及與第三方系統與部件集成的簡便性。這類標準包括

12、但不限于以下幾種:網絡協議與標準(TCP/IP,HTTP,SSL,etc)語言(SQL,C#.net,etc.)數據庫連接性(ADQnet)內部接口說明本系統之內的各個系統元素之間的接口的安排。邏輯層和數據訪問層通過以經的stockDataModel接口,來限定訪問stockData類型的數據客戶端通過調用buyStock(stockData)和sellStock(stockData)來訪問邏輯層,在這個函數中包含了訪問邏輯層的接口dealTransaction(stockData)通過AdoFactory訪問不同的數據庫客戶端登陸協議D(二字節)+(客戶名字長度)(4字節)+(客戶名字)+(

13、客戶密碼長度)(4字節)+(客戶密碼);客戶買賣協議B(二字節)+(股票ID)(4字節)+(股票數量)(4字節)S(二字節)+(股票ID)(4字節)+(股票數量)(4字節)查詢交易信息并返回給客戶端C(二字節)具體有拆包解包的類usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceProjectCenterTradingSyspublicclassProtocalprivatebytemessagebuffer;privatebytemessagelength;publicbytemessagebag;/該函

14、數是將字符串轉換為字節數組publicbyteStringtoByte(stringstringInfo)messagebuffer=System.Text.ASCIIEncoding.ASCII.GetBytes(stringlnfo);returnmessagebuffer;/該函數將整型轉換為個字節publicbyteInttoByte(intnumber)messagelength=BitConverter.GetBytes(number);returnmessagelength;/將浮點型轉換為個字節publicbyteDoubletoByte(doubleprice)bytepri

15、cebyte=BitConverter.GetBytes(price);returnpricebyte;/合并一個字符串(字節數組)和他的長度作為一個包publicbyteCombinarray(bytemessle,bytemessinfo)messagebag=newbytemessle.Length+messinfo.Length;intindex;for(index=0;indexmessle.Length;index+)messagebagindex=messagelengthindex;for(intindex1=0;index1newlist.price,利用插入排序將newli

16、st插入到買隊列BuyQueue中,轉1;.)ifSellQueue0.countnewlist.count,newlist完全撮合,SellQueue0.count=SellQueue0.countnewlist.count,轉2;4.)ifSellQueue0.count=newlist.count,SellQueue0撮合,并將SellQueue0從SellQueue隊列中刪除,newlist.count=newlist.count-SellQueue0.count,轉2;5.)取買單隊列頭BuyQueue0,ifBuyQueue0.pricenewlist.count,newlist完

17、全撮合,BuyQueue0.count=BuyQueue0.countnewlist.count,轉1;7.)ifBuyQueue0.count=newlist.count,BuyQueue0撮合,并將BuyQueue0從BuyQueu以歹!J中刪除,newlist.count=newlist.count-BuyQueue0.count,轉5;如下面流程圖5.2.2所示:、BuyQueueneiWl令是否為工為空,不為空SQieue判BuyQueue判斷其為買判S!ueue單還是再端是否為空為空無法貢ewi大片判斷差價?2Seue(序n判斷差價、小.無法交es進小于篝于大于篝于I通磔插入排號戰

18、至畸聶易,判斷差量可交易,判斷差量通2處插入排M找到其花1ae曲映位Snestlcount-BuyQue銅柳豳e相0.counBuyQue初大于信于廿嚀小年大州于BuyQueue0neisWE全被磨合I;SeueL盤價,成交量為0,一i=j=0,M、N分別為BuyQueue再SellQueue祚空元素的數目;BOOLk;Buy=BuyQueue0;Sell=SellQueue0小于0BuyQueuei.price-SellQueuej.price大于等于0判斷差量Buy.count-Sell.count小于等于0大于0i+;k=false;Buy1.count=Buy.count;Buy.co

19、unt=Buy.count+BuyQueuei.count;判斷是否iM判斷Buy.count-Sell.count小于0等于0開盤價為SellQueuej.price;總成交量為Buy.countj+;k=true;Sell1.count=Sell.count;Sell.count=Sell.count+SellQueueiSellQueue.count;判斷是否jN是開盤價為BuyQueuei.price;總成交量為Sell.count開盤價為(SellQueuej.price+BuyQueuei-1.price)/2總成交量為sell.count判斷Buy1.count-Sell1.co

20、unt等于0、,大于。開盤價為(SellQueuej-1.price+BuyQueuei-1.price)/2總成交量為Selll.countI開盤價為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.counttrue開盤價為BuyQueuei.price;總成交量為Selll.count等于0圖3.2.4判斷k值false判斷Buyl.count-Sell.count4/小于0開盤價為SellQueuej.price;總成交量為Buyl.count7集合競價算法描述:和連續競價一樣,首先設定QueueStruct結構為元素的買賣兩個隊歹!JB

21、uyQueue和SellQueue。為了盡可能的提高效率,減少資源占用,我們用靜態數組構建這兩個隊列。其中BuyQueue是時間優先、買價降序排序,而SellQueue是時間優先、賣價升序排序。在開市到開盤這段時間內,買賣單已經分別進入了買賣隊列內排好了序。一旦宣布開盤,則觸發集合撮合,如下:判斷兩隊列是否都不為空,如是,轉2;如否,轉21;判斷BuyQueue0.prince與SellQueue0.prince之差,如大于等于0,轉3:如小于0,轉21;定義inti=j=0;M、N分別為買賣兩隊列非空元素的個數;BOOLk;QueueStructBuy=BuyQueue0;Sell=Sell

22、Queue0;Buy1;Sell1;轉4;判斷BuyQueuei.prince與SellQueuej.prince之差,如大于等于0,轉5:如小于0,轉14;判斷Buy.count與Sell.count之差,如大于0,轉6;如小于等于0,轉9;j+;k=true;Sell1.count=Sell.count;Sell.count=Sell.count+SellQueueiSellQueue.count;轉7;判斷j是否小于N,如是,轉4;如不是,轉8;開盤價為BuyQueuei.price;總成交量為Sell.count;統計成交數據及回報,并返回;i+;k=false;Buy1.count=

23、Buy.count;Buy.count=Buy.count+BuyQueuei.count;轉10;判斷i是否小于M,如是,轉4;如不是,轉11;判斷Buy.count與Sell.count之差,如小于0,轉12;如等于0,轉13;開盤價為SellQueuej.price;總成交量為Buy.count;統計成交數據及回報,并返回;開盤價為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為sell.count;統計成交數據及回報,并返回;判斷k值,如為true,轉15;如為false,轉18;判斷Buy1.count與Sell1.count之差,如大于0,轉

24、16;如小于0,轉17;開盤價為BuyQueuei.price;總成交量為Sell1.count;統計成交數據及回報,并返回;開盤價為(SellQueuej-1.price+BuyQueuei-1.price)/2;總成交量為Sell1.count;統計成交數據及回報,并返回;判斷Buy1.count與Sell.count之差,如小于0,轉19;如等于0,轉20;開盤價為SellQueuej.price;總成交量為Buy1.count;統計成交數據及回報,并返回;開盤價為(SellQueuej.price+BuyQueuei-1.price)/2;總成交量為Buy1.count;統計成交數據及

25、回報,并返回;開盤價為昨日收盤價,成交量為0;保留所有數據至開盤進入連續競價撮合;買賣隊列排序上面我們介紹了撮合算法的核心部分,但實際上在撮合前后都要對兩個買賣隊列進行一定的插入和排列處理,這在整個算法中也是很重要的部分。下面我們就來具體介紹一下。對所有的排列和插入我們考慮了效率問題之后,最后統一使用了二分插入排序法。在單子進入隊列時,我們首先統計出當前隊列中的非空數據個數,然后再通過新單子與當前隊列中間值的價格比較,確定新單子在隊列的前半部分還是后半部分,然后再取該區域中間值與之比較,直到確定新單子應在的位置。如下列代碼所示:intlow=0;inthigh=N-1;N為隊列中非空元素的個數

26、while(lowprice=high+1;-i)(SellQueuei+1=SellQueuei;SellQueuehigh+1=*newlist;這是女隊列的排序,對于買隊列的排序與之相似,只是價格排列是由高到底。在這里不再贅述。這種插入排序方法完全符合了撮合算法中價格優先、時間優先的要求,而且效率也是比較高的。在集合競價前和連續競價后進行的插入排序都是這樣進行的,而在集合競價撮合之后,對兩隊列的重新排列,我們首先使用了memset函數將前面已全部成交的t個元素清空,然后將t到N(原總非空元素個數)前移t位。如下列代碼所示:for(intp=0;*t*N;p+,*t+)(QueueStru

27、cttemp;temp=Queue*t;Queue*t=Queuep;Queuep=temp;撮合算法的運行機制在交易所正常運行時,一天內分為開市、開盤、休市、復開、收市等5個步驟。開市:每天上午9:15開市。這時候,股民可以通過券商向交易所遞單。同一只股票的買賣單開始分別進入這只股票的買賣隊列中,但并不進行撮合。該過程一直持續到9:25。開盤:每天上午9:30正式開盤。9:25-9:30為盤前處理,這段時間也就是集合競價撮合算法運行的時間。9:25,買賣兩隊列開市不再接收新的單子。新的單子這時都放在緩沖區中,直到兩隊列運行完整個集合競價算法后開市重新進單時,再依序將單子從緩存區取出讀入買賣隊

28、列進行連續競價的撮合。買賣隊列于9:25開始集合競價,運算完畢,得出開盤價等所有統計數據并發布行情以及發送完所有回報之后,重新接收單子進入該日正常交易中,使用連續競價算法進行撮合。休市:每天上午11:00休市。此時,所有的券商不再接受買賣單子,也不再給交易所遞單。交易所將此前已經收到的所有單子撮合之后處于休息階段。并進行各種當日前市盤點。復開:每天下午13:30復開。此時,券商開市接收用戶的遞單,并將其送交交易所。交易所重新開市進入連續競價撮合收市:每天下午15:00收市。此時交易所不再接受任何單子,準時進行最后一筆單子的撮合之后,關閉撮合線程。將最后得到的收盤價等數據統計發送完之后,當天的所有工作全部結束。如圖3.2.5所示9:25開市U:30開盤一13:30復開彳5:00收市開市開盤休市復開收市圖3.2.5數據庫設計數據庫服務器為SQLSERVER2005EXPRESS

溫馨提示

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

最新文檔

評論

0/150

提交評論