郭杰
摘要:摜蛋比賽是深受群眾喜愛的撲克比賽,傳統(tǒng)手工分組、計(jì)分,十分繁瑣,耗費(fèi)大量人力,且容易出現(xiàn)錯誤。該系統(tǒng)是采用Struts2,Spring,Hibernate框架開發(fā)的Java Web項(xiàng)目,客戶端無須安裝,打開瀏覽器即可訪問。實(shí)現(xiàn)了根據(jù)比賽規(guī)則自動分組功能,比賽成績錄入功能,根據(jù)成績級差自動判分功能,設(shè)置局?jǐn)?shù)和打印輸出總成績功能。
關(guān)鍵詞:Java;Web;Struts2;Spring;Hibernate
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)34-0091-02
Abstract: GUAN DAN game is loved by the masses of poker game, the traditional manual grouping, scoring is very tedious, spend a lot of manpower, and easy error. The system is the use of Struts2, Spring, Hibernate framework for the development of the Web Java project, the client does not need to install, open the browser to access. To realize the automatic grouping function according to the rules of the game, race entry function, according to the results of differential automatic judging function, setting function innings and print output total score.
Key words: Java; Web; Struts2; Spring; Hibernate
1 背景
摜蛋是一種起源于江蘇淮安的撲克游戲,群眾基礎(chǔ)廣泛,深受群眾歡迎,年終及工會活動常常舉辦摜蛋比賽,目前缺乏相應(yīng)的比賽專用軟件,傳統(tǒng)方式采用手工登記人員分組、記錄每局成績,換算得分,十分繁瑣,耗費(fèi)大量人力和時間,且容易出現(xiàn)錯誤。本系統(tǒng)采用B/S結(jié)構(gòu),使用Struts2,Spring,Hibernate框架快速開發(fā),只需部署服務(wù)器端,客戶端無須安裝,打開瀏覽器即可訪問。賽前錄入人員名單進(jìn)行編組,賽中按照比賽規(guī)則多輪分組,現(xiàn)場錄入比賽成績,自動判分,并打印輸出各局成績和分組情況,最終現(xiàn)場公示總成績。大大提高比賽裁判效率,使得比賽過程公開、透明、公正。
2 技術(shù)基礎(chǔ)
2.1 Spring框架
Spring框架是一個容器框架,通過配置文件,在程序運(yùn)行時動態(tài)注入指定的類,從而大大加強(qiáng)了程序的靈活性和可維護(hù)性。通過Spring框架提供的事務(wù)處理,將業(yè)務(wù)邏輯層的方法統(tǒng)一進(jìn)行事務(wù)處理,保證了業(yè)務(wù)方法的正確性和可靠性。
2.2 Strust2框架
使用Struts2框架將表示層JPS頁面的調(diào)度進(jìn)行統(tǒng)一控制,將業(yè)務(wù)處理和頁面展示進(jìn)行解耦,便于項(xiàng)目的維護(hù)。在JSP頁面的數(shù)據(jù)綁定上,使用Struts2標(biāo)簽代碼更加簡潔。
2.3 Hibernate框架
模型層采用Hibernate框架自動生成實(shí)體類和配置文件,數(shù)據(jù)訪問層采用Spring框架的HibernateDaoSupport類實(shí)現(xiàn)增、刪、改、查的操作。
3 系統(tǒng)設(shè)計(jì)
3.1 比賽流程設(shè)計(jì)
系統(tǒng)包括三種角色:管理員、主裁判、裁判助理。賽前管理員新增比賽信息,包括比賽名稱、地點(diǎn)、場次、每場時間、比賽狀態(tài)。裁判助理從Excel文件中導(dǎo)入比賽選手名單,并打印張貼。
比賽過程中,主裁判宣布比賽規(guī)則,宣布選手分組名單表,參賽選手記住自己的組號。主裁判進(jìn)行比賽分組并公示,首輪比賽隨機(jī)分組,確保同一部門兩組選手不會分在同一桌。參賽選手查看分組情況,到指定牌桌就位。主裁判開始倒計(jì)時,比賽正式開始。同一桌兩組選手在規(guī)定時間內(nèi)一組打過A則該桌比賽結(jié)束,裁判助理記錄該桌成績并將成績錄入至系統(tǒng)中,根據(jù)分差自動計(jì)算為每局積分。
主裁判根據(jù)第一輪比賽積分排名,進(jìn)行第二輪分組,第一名和第二名分在第一桌,第三名和第四名分在第二桌,依次類推。第二輪之后的每一輪保證打過的兩組選手不再碰面。
每輪比賽結(jié)束后,裁判助理導(dǎo)出成績排名至Excel文件,打印并張貼。最后一輪比賽結(jié)束后,主裁判公示比賽名次。
3.2 功能設(shè)計(jì)
系統(tǒng)總體功能設(shè)計(jì)如下圖所示。
3.3 架構(gòu)設(shè)計(jì)
本系統(tǒng)采用B/S分層架構(gòu)開發(fā),包括:模型層、業(yè)務(wù)邏輯層、表示層、數(shù)據(jù)訪問層、控制層、通用層。
3.3.1 模型層(Java Bean)
該層為簡單的POJO(Plain Ordinary Java Object)類,包含與數(shù)據(jù)庫表相對應(yīng)的實(shí)體類,由于各層都需要使用該項(xiàng)目中的類,我們可以將該項(xiàng)目獨(dú)立出來,稱為“模型層”,實(shí)體類是各層數(shù)據(jù)傳遞的載體。
3.3.2 表示層(JSP)
表示層包括各個JSP頁面,在瀏覽器中輸入網(wǎng)址和文件名就可以進(jìn)入相應(yīng)的頁面,提供所有與用戶進(jìn)行交互的界面,從而完成各個功能,JSP頁面使用DIV、CSS進(jìn)行布局,利用Struts2標(biāo)簽綁定數(shù)據(jù),表示層的跳轉(zhuǎn)和數(shù)據(jù)綁定統(tǒng)一由控制層進(jìn)行處理。
3.3.3 控制層(Action)
控制層采用Struts2框架,是表示層和業(yè)務(wù)邏輯層進(jìn)行交互的橋梁,表示層錄入的數(shù)據(jù),封裝為模型層實(shí)體類的對象,然后傳遞給業(yè)務(wù)邏輯層進(jìn)行處理,返回的數(shù)據(jù)轉(zhuǎn)換為json格式或?qū)嶓w類的對象,跳轉(zhuǎn)到相應(yīng)的頁面并顯示。
3.3.4 業(yè)務(wù)邏輯層(Service)
業(yè)務(wù)邏輯層負(fù)責(zé)處理比賽分組的算法,以及在控制層和數(shù)據(jù)訪問層之間傳遞數(shù)據(jù)。
3.3.5 數(shù)據(jù)訪問層(DAO)
數(shù)據(jù)訪問層對數(shù)據(jù)進(jìn)行持久化,負(fù)責(zé)增、刪、改、查的基本操作。根據(jù)業(yè)務(wù)邏輯層傳來的數(shù)據(jù)請求信息,調(diào)用相關(guān)的方法,將數(shù)據(jù)反饋給業(yè)務(wù)邏輯層,最終顯示到頁面。
3.4 數(shù)據(jù)庫設(shè)計(jì)
系統(tǒng)分為配置表,用戶表,類別表,計(jì)時表,比賽表,選手表。采用MySQL數(shù)據(jù)庫建表加約束,復(fù)雜的查詢采用視圖進(jìn)行操作。使用Hibernate框架對底層數(shù)據(jù)庫的連接進(jìn)行了封裝,通過自動生成的XML配置文件將數(shù)據(jù)庫表與實(shí)體類建立一一對應(yīng)的關(guān)系,再進(jìn)行數(shù)據(jù)持久化操作。
3.5 界面設(shè)計(jì)
表示層與用戶交互的界面采用JSP頁面,采用DIV、CSS進(jìn)行布局。數(shù)據(jù)顯示采用EasyUI組件。EasyUI是基于jQuery的用戶界面插件集合,只需要使用簡單的HTML標(biāo)記即可以定義用戶界面。綁定的數(shù)據(jù)是由控制層返回的JSON格式的輕量級數(shù)據(jù),傳輸數(shù)據(jù)量小、效率高。EasyUI采用了Ajax異步刷新的方式顯示分頁數(shù)據(jù),數(shù)據(jù)顯示速度快,實(shí)現(xiàn)了良好的用戶體驗(yàn)。
4 關(guān)鍵技術(shù)
4.1 分組算法
首輪分組采用折半隨機(jī)算法,將參數(shù)選手順序編組,所有組數(shù)分為對等的兩部分,兩個部分的選手部門不出現(xiàn)重復(fù)。兩個部分的組數(shù)隨機(jī)混淆,然后每兩組進(jìn)行匹配。
第二輪分組根據(jù)首輪比賽得分情況進(jìn)行排序,得分由高到低,兩兩編組,確保積分相近的選手分在同一桌。
其他輪分組按照第二輪分組算法,加上打過不重復(fù)原則。即第一組、第二組打過,則第一組和第三組分在同一桌。
4.2 積分算法
規(guī)定時間內(nèi)最先打過A一方獲勝,一方獲勝本輪比賽即結(jié)束。計(jì)時結(jié)束雙方均未打過A,則記錄當(dāng)前各自正在打的等級。積分算法是根據(jù)雙方最終的級差數(shù)值來換算相應(yīng)的積分,具體級差積分如下表所示。例如:甲方打2(數(shù)值為2),乙方打過A(數(shù)值為15),則甲方乙方的級差為13分,乙方勝得26分,甲方負(fù)得0分。若甲乙雙方均打到A,則級差為0,各積13分。如遇對手棄權(quán),勝方按16分計(jì),棄權(quán)方按0分計(jì)。若兩方同時棄權(quán),則均按0分計(jì)。
5 結(jié)束語
本文深入研究了摜蛋比賽自動分組判分系統(tǒng)的技術(shù)基礎(chǔ)、系統(tǒng)架構(gòu)、業(yè)務(wù)流程設(shè)計(jì)、功能設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)、界面設(shè)計(jì)以及關(guān)鍵算法。提出了Java平臺利用SSH框架搭建分層開發(fā)模式解決實(shí)際問題的方案。理清了摜蛋比賽的業(yè)務(wù)流程,實(shí)現(xiàn)了關(guān)鍵的分組和積分算法。該系統(tǒng)連續(xù)兩年在工會牌藝比賽中得到應(yīng)用,真正實(shí)現(xiàn)了現(xiàn)場高效分組、計(jì)時、錄入成績、公布名次,受到參賽選手和主辦方的普遍好評。
參考文獻(xiàn):
[1] 夏玉敏, 華中. 基于Ajax技術(shù)的摜蛋比賽自動裁判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 內(nèi)江科技, 2012(7): 150-151.