摘要:抽獎系統在國內外很多領域上都有應用。在商場,顧客購買一定數額的貨品,便可進行抽獎。本文研究如何使中獎號碼隨機出現,以及如何設置每次抽獎的獎項等因素。把隨機號碼生成系統與商場抽獎活動結合起來,用Visual C++2010編制了一個商場抽獎系統。該系統已準備投入使用,可在抽獎活動中省時省力省資源,提高商場的管理效率。
關鍵詞:隨機號碼;抽獎;軟件系統
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2010)21-5934-03
Shopping Mall's Lottery System Based on Visual C++ 2010
XU Jian-min, YOU Wei-xin, XIONG Jin-zhi
(Computer College, Dongguan University of Technology, Guangdong 523808,China)
Abstract: Lottery systems are applied in many areas at home and abroad. In the market, customers buy a certain amount of goods, then can be a lucky draw. This paper researches how to make the winning numbers and how to set each lottery awards and so on. The random number generation system is combined with the mall sweepstakes, and a shopping mall's lottery system is compiled with Visual C + +2010. The system is ready for use, which improves the efficiency of management of shopping malls.
Key words: random number; lottery; software system
抽獎系統在國內外很多領域上都有應用,例如早幾年前,小型汽車的車牌號碼便是用隨機號碼生成來選取的;又例如在一些大型企業中,員工的編碼也是隨機生成,員工宿舍分配也可以選取隨機分配。這些都是隨機應用的例子,把隨機號碼生成系統與商場抽獎活動結合起來使用,既可以做到軟件系統與實際生活的結合,也可以在抽獎活動上省時間省人力省資源,達到方便統一及有效管理。商場抽獎簡要流程如下:顧客購買一定數額的貨品,便可獲得一個號碼,此號碼作為抽獎之用。在隨后的抽獎活動中,抽獎系統會抽出一些號碼作為中獎號碼,而這些號碼都是隨機出現的,因此,怎樣實現隨機出現這些號碼,有多少個號碼會參加抽獎,每次抽獎的獎項怎么設置等等,最后用最新的Visual C++ 2010 實現一個商場抽獎的軟件系統,這些就是本文研究的主要目的。
隨著社會經濟發展,許多大型商場紛紛以各種各樣的抽獎方式來提高本商場的營業額,在抽獎活動中引入隨機號碼軟件系統。該系統簡潔方便,容易使用,節省許多不必要的資源,應用在商場的抽獎活動上非常適合。
1 主要技術
1.1 Visual C++ 2010簡介
Visual C++ 2010 提供了強大而靈活的開發環境,用于創建基于 Microsoft Windows 和 Microsoft .NET 的應用程序。Visual C++ 包含下列組件:
1)Visual C++ 2010 編譯器工具
該編譯器支持傳統本機代碼開發人員和面向虛擬機平臺(如公共語言運行時 (CLR))的開發人員。Visual C++ 2010 包括面向 x64 和 Itanium 的編譯器。該編譯器仍支持直接面向 x86 計算機,并針對這兩種平臺優化了性能。
2)Visual C++ 庫
其中包括行業標準的活動模板庫 (ATL)、Microsoft 基礎類 (MFC) 庫,以及標準 C++ 庫(由 iostream 庫和標準模板庫 (STL) 組成)和 C 運行庫 (CRT) 之類的標準庫。 CRT 包括安全性已得到增強的替代函數,取代已知會引起安全問題的函數。 STL/CLR 庫為托管代碼開發人員引入了 STL。具有數據封送新功能的 C++ 支持庫,其設計意圖在于簡化面向 CLR 的程序。
3)Visual C++ 開發環境
該開發環境為項目管理與配置(包括更好地支持大型項目)、源代碼編輯、源代碼瀏覽和調試工具提供強力支持。該環境還支持 IntelliSense,在編寫代碼時,該功能可以提供智能化且特定于上下文的建議。
除常規的圖形用戶界面應用程序外,Visual C++ 還允許開發人員生成 Web 應用程序、基于 Windows 的智能客戶端應用程序以及適用于瘦客戶端和智能客戶端移動設備的解決方案。C++ 是世界上最流行的系統級語言,而 Visual C++ 則為開發人員提供了生成軟件的世界級工具[1]。
1.2 MFC簡介
MFC是對WindowsAPI的封裝,大約有100多個類,其中常用的有二三十個。下面介紹最重要的MFC。
CWnd:窗口,它是大多數“看得見的東西”的父類(Windows里幾乎所有看得見的東西都是一個窗口,大窗口里有許多小窗口),比如視圖CView、框架窗口CFrameWnd、工具條CToolBar、對話框CDialog、按鈕CButton,etc;一個例外是菜單(CMenu)不是從窗口派生的,該類很大。
CDocument文檔,負責內存數據與磁盤的交互。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫盤),Serialize(讀寫) 。
CView視圖,負責內存數據與用戶的交互。包括數據的顯示、用戶操作的響應(如菜單的選取、鼠標的響應)。最重要的是OnDraw(重畫窗口),通常用CWnd::Invalidate()來啟動它。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。許多功能都要加在里面,打交道最多的就是它。
CDC設備文本。無論是顯示器還是打印機,都是畫圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設備接口)一起,完成文字和圖形、圖像的顯示工作。把CDC想象成一張紙,每個窗口都有一個CDC相聯系,負責畫窗口。CDC有個常用子類CClientDC(窗口客戶區),畫圖通常通過CClientDC完成。
CWinApp應用程序類。類似于C中的main函數,是程序執行的入口和管理者。
1.3 隨機號碼的生成
計算機不會產生絕對隨機的隨機數,計算機只能產生“偽隨機數”。在我們現實生活中的隨機數是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串像現實生活中那樣絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數[2]。
而所謂的偽隨機,就是根據系統給定的種子而產生任意號碼的方法,即是說,每次隨機前種子沒有變化的話,那么產生的隨機數序列也不會變化。偽隨機的種子是根據當前系統時間來默認的。因此,在計算機上只能按一定規律而產生隨機數,即常說的偽隨機數[3-4]。
2 實現
2.1 抽獎流程
圖1為抽獎流程圖。
2.2 軟件開發平臺的環境
操作系統:Windows 7,Windows Vista, Windows XP。
系統開發軟件:Visual C++ 2010。
2.3 需求分析
把隨機號碼生成引入到抽獎活動中,從而開發抽獎系統。參加抽獎的號碼進行一輪隨機抽取,抽中的號碼即為中獎號碼,抽獎系統一直進行到所有獎項抽取完畢為止。當隨機號碼抽取的這一階段完成后,就進入到下一個階段,根據商場的實際情況,每天的顧客數量都不同的,這就影響到參加抽獎的號碼個數也不同。因此,在這個前提上,設置了一個有關抽獎的號碼個數和獎品獎項的配置功能,在配置界面上可以設置有多少個號碼參加抽獎,每個級別獎項多少,獎品是什么。最后一階段就是當抽獎完畢后,就可以根據中獎的顧客填寫上顧客個人資料和獎品,中獎日期等,此時系統會生成一個TXT文件以記錄中獎情況,也可以在系統的歷史記錄上查看。
2.4 抽獎系統窗口
抽獎系統窗口本身不包含任何功能模塊,只有四個按鈕,通過按鈕來調用抽獎、配置、歷史記錄和退出等功能模塊。因此,其實現比較簡單,僅需在插入該Dialog后,在窗口上繪制出四個按鈕,并分別修改其顯示屬性的ID。修改完成,雙擊按鈕,會自動生成該按鈕的消息處理函數,并將消息處理函數寫入到消息映射表中,在其消息處理函數中添加相應功能的代碼即可。
【開始抽獎】按鈕的消息處理函數如下:
void CLotteryDlg::OnButtonStartlotterying()
{
// TODO: Add your control notification handler code here
Lotterying Lot; //定義一個抽獎窗口
Lot.DoModal(); //該窗口用模態方式顯示
}
其他三個按鈕的消息處理函數也采用相同的實現方法,這里不再贅述。
2.5 重載OnInitDialog方法
MFC窗口在實例化時都會調用OnInitDialog方法來進行初始化,因此,重載該方法,并在該方法中加入控件等對象的初始化的代碼,即對整個窗口進行初始化。該窗口需要初始化的內容有:設置窗口為全屏模式;為隨機數發生器設置種子;在ListCtrl控件中插入三個列分別用來顯示獎項、獎品和中獎號碼,并把獎項和獎品等已知數據插入列表中;最后,還要把背景圖片加載到內存中。
窗口全屏顯示的方法將在下文詳細說明。
設置隨機數發生器種子的方法很簡單,使用srand函數,一行代碼就可以完成。
對List Control的操作主要有插入列、插入行和設置行列數據。插入列可以使用InsertColumn方法;插入行使用InsertItem方法;設置數據使用SetItem方法。
動態加載圖片可以使用LoadImage方法。
OnInitDialog的重載方法(篇幅所限,略)。
2.6 配置窗口模塊功能
如流程圖2所示,該對話框應包含讀取配置信息和保存配置兩大功能模塊,因為需要將數據以文件的形式寫到硬盤上,所以要使用VC提供的CFile類來對文件進行讀寫,要對文件進行讀寫需要先打開文件,打開文件的方法是Open,打開文件之后就可以對文件進行讀寫了,讀寫的方法分別是Read和Write,讀寫操作完成后,還需要用Close方法關閉文件,以免占用系統資源。插入一個新對話框,繪制好所需的控件,在Setting類中加入ReadConfig方法。
ReadConfig的實現代碼見附錄2(篇幅所限,略)。
實現了ReadConfig方法后,在OnInitDialog方法中調用它。這樣窗口初始化時就會讀出配置,并在窗口的控件中顯示抽獎系統原來的配置了。
該類的另一大模塊是保存配置文件。此模塊在【確定】按鈕的消息響應函數中實現,其實現代碼見附錄3(篇幅所限,略)。
2.7 歷史記錄窗口
該窗口用于顯示抽獎的記錄。主要操作包括讀取日志文件,并將讀出的數據按照列表的格式插入對對應的行列中去。文件的讀寫和List Control控件的操作方法與【抽獎】窗口相同,不再贅述。
2.8 系統測試
經過多次測試,抽獎系統的基本功能已經完成,例如隨機號碼生成、配置抽獎信息和查看歷史記錄等功能都能穩定運行。系統簡單易用,而且省時省力省資源,系統能夠穩定地生成隨機號碼,正確性高,不會出錯,也不會出現重復的號碼,可用于商場的抽獎活動。
3 結束語
該系統的主要思想是在抽獎時,把隨機生成號碼與抽獎活動結合起來,每次隨機出現一個號碼,而拿有這個號碼的顧客即是中獎顧客。在隨機函數的處理上,用計算機編程實現偽隨機,根據每次給定的種子決定任意號碼的生成。經測試,本系統隨機抽獎的功能已基本實現,已準備投入商場在抽獎時使用。
參考文獻:
[1] (美)S.David,等.Visual C++ 編程寶典[M].北京:電子工業出版社,2005.
[2] 梁金千,張躍.在計算機上產生真隨機數的探討[J].計算機工程,2003,29(15):176-177.
[3] 王瑞胡.偽隨機數生成及其在計算機密碼安全中的應用[J].電腦知識與技術,2005,12(10):21-22.
[4] 王志偉,龔曉靜,韓紹程.一種基于偽隨機數調制的混合域盲水印算法[J].電腦知識與技術,2010.17(2):437-439.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文