索紅軍
(渭南師范學(xué)院,陜西 渭南 714099)
目前,很多場(chǎng)合下需要從眾多的候選個(gè)體中隨機(jī)選取部分個(gè)體,比如公司年終會(huì)議抽獎(jiǎng)環(huán)節(jié),需要從所有員工中抽取部分員工;老師上課想從所有學(xué)生中選取部分學(xué)生回答問(wèn)題;航空公司或高鐵為了吸引乘客而需要按座位選取部分乘客送以禮品,達(dá)到吸引更多乘客的目的;商場(chǎng)搞活動(dòng)抽獎(jiǎng)以吸引消費(fèi)者等。這就需要一個(gè)多功能的抽簽軟件?,F(xiàn)有很多抽簽之類(lèi)的軟件可以使用,但基本都是只能按照數(shù)字編號(hào)來(lái)進(jìn)行抽取選擇,不能適應(yīng)像教師上課需要抽取具體的學(xué)生名字,或者像飛機(jī)、高鐵之類(lèi)根據(jù)行列座位抽取乘客的需要。為此,研究分析多種場(chǎng)合的具體需求,設(shè)計(jì)實(shí)現(xiàn)了一種多功能抽簽選擇器軟件系統(tǒng)[1]。
本軟件系統(tǒng)主要用來(lái)從眾多候選數(shù)據(jù)項(xiàng)中選取部分?jǐn)?shù)據(jù)項(xiàng),以完成眾選少的功能需求。經(jīng)過(guò)分析,軟件系統(tǒng)應(yīng)該能夠裝入新名單或直接輸入名單生成候選數(shù)據(jù)項(xiàng),也可以通過(guò)不同設(shè)置生成候選數(shù)據(jù)項(xiàng);并能夠快速循環(huán)顯示候選數(shù)據(jù)項(xiàng)或停止循環(huán)顯示;軟件系統(tǒng)可以從循環(huán)顯示的候選數(shù)據(jù)項(xiàng)中隨機(jī)選擇部分?jǐn)?shù)據(jù)項(xiàng)等功能。
通過(guò)“開(kāi)始循環(huán)”和“停止循環(huán)”兩個(gè)按鈕可以循環(huán)顯示候選數(shù)據(jù)項(xiàng)或停止循環(huán)顯示候選數(shù)據(jù)項(xiàng)。應(yīng)用于候選名單不變、可被重復(fù)選擇1個(gè)數(shù)據(jù)項(xiàng)的情況。
1)初始數(shù)據(jù)區(qū)是在程序源代碼中直接放置相應(yīng)候選數(shù)據(jù)項(xiàng)。
初始名單:本院(渭南師范學(xué)院計(jì)算機(jī)學(xué)院)10名教師;
初始數(shù)字:1~50數(shù)字編號(hào);
初始行列:7×10矩陣,即7行10列共70人編號(hào);
初始抽獎(jiǎng):共100張獎(jiǎng)券,其中特等獎(jiǎng)1張,一等獎(jiǎng)3張,二等獎(jiǎng)5張,二等獎(jiǎng)8張,優(yōu)秀獎(jiǎng)13張,謝謝參與70張。
2)數(shù)據(jù)裝入?yún)^(qū)可以裝入相應(yīng)的候選數(shù)據(jù)項(xiàng)。
名單設(shè)置:可以通過(guò)相應(yīng)對(duì)話(huà)框裝入文本文件名單形成候選數(shù)據(jù)項(xiàng);
數(shù)字設(shè)置:可以在相應(yīng)對(duì)話(huà)框中設(shè)置候選數(shù)字的開(kāi)始、結(jié)束值(大于零的一段自然數(shù)序列)。同時(shí)中間可以去掉至少連續(xù)兩段數(shù)字序列,最終形成數(shù)字形式的候選數(shù)據(jù)項(xiàng);
行列設(shè)置:可以在相應(yīng)對(duì)話(huà)框中分別設(shè)置候選行、列的開(kāi)始、結(jié)束值,行、列值均可為數(shù)字或字母。同時(shí),行、列均可去掉中間一段序列。最終形成像高鐵座位號(hào)模樣的二維候選數(shù)據(jù)項(xiàng);
獎(jiǎng)項(xiàng)設(shè)置:通過(guò)相應(yīng)對(duì)話(huà)框可以設(shè)置各種獎(jiǎng)項(xiàng)的數(shù)目,形成抽獎(jiǎng)池候選數(shù)據(jù)項(xiàng);
名單輸入:可以直接輸入數(shù)據(jù)項(xiàng),一般是候選數(shù)據(jù)項(xiàng)較少時(shí)應(yīng)用。同時(shí)可以將輸入的候選數(shù)據(jù)項(xiàng)保存成文本文件。
3)快速裝入數(shù)字候選項(xiàng)。
可以通過(guò) “數(shù)字 1~100”、“數(shù)字1~200”、“數(shù)字1~300”3個(gè)按鈕快速裝入相應(yīng)的數(shù)字候選項(xiàng),中間不能去掉部分值段。
所有候選數(shù)據(jù)項(xiàng)在循環(huán)顯示時(shí)與裝入時(shí)的順序不一致,以保證隨機(jī)。
通過(guò)“選擇1人”、“選擇3人”、“選擇5人”3個(gè)按鈕可以從相應(yīng)候選數(shù)據(jù)項(xiàng)(候選數(shù)據(jù)項(xiàng)是否循環(huán)顯示無(wú)關(guān)緊要)中分別選擇1人、3人或5人。被選中的數(shù)據(jù)項(xiàng)從候選數(shù)據(jù)項(xiàng)中刪除,下次不會(huì)再被選中。選擇3人或5人不能是候選數(shù)據(jù)項(xiàng)中連續(xù)存放的選項(xiàng)。當(dāng)候選數(shù)據(jù)項(xiàng)少于3人或5人時(shí),進(jìn)行對(duì)應(yīng)選擇會(huì)選中少于對(duì)應(yīng)選擇數(shù)的選項(xiàng),即只能選擇出剩余數(shù)據(jù)項(xiàng)中的數(shù)據(jù)項(xiàng)。
每次選擇到的數(shù)據(jù)項(xiàng)會(huì)顯示在右邊本次選擇區(qū)及全部選擇區(qū)。其中本次選擇區(qū)只顯示本次的選擇,自動(dòng)清除上次顯示的名單,而全部選擇區(qū)若未人工清除,將一直顯示所有選擇到的數(shù)據(jù)項(xiàng),可以通過(guò)“保存全部選擇”按鈕將該區(qū)顯示的數(shù)據(jù)項(xiàng)保存成文本文件。
當(dāng)候選數(shù)據(jù)項(xiàng)變化時(shí),在全部選擇區(qū)用一串“************”分隔開(kāi)不同候選數(shù)據(jù)項(xiàng)的選擇結(jié)果。
本次選擇和全部選擇區(qū)域均可通過(guò)相應(yīng)按鈕清除。
在系統(tǒng)設(shè)置區(qū)通過(guò)循環(huán)周期設(shè)置按鈕打開(kāi)相應(yīng)對(duì)話(huà)框,可以設(shè)置循環(huán)顯示時(shí)不同候選數(shù)據(jù)項(xiàng)的變化時(shí)間,系統(tǒng)默認(rèn)該變化時(shí)間為20ms,可以在5~1000ms之間進(jìn)行設(shè)置。
根據(jù)前邊的需求分析,我們?cè)O(shè)計(jì)實(shí)現(xiàn)了該軟件系統(tǒng)。
軟件要完成眾選少的功能,而候選數(shù)據(jù)類(lèi)型各種各樣,有字符串類(lèi)型的人名,又有數(shù)字類(lèi)型的自然數(shù)序列,還有像高鐵座位號(hào)一樣的二維行列編號(hào)。為了處理的方便,設(shè)計(jì)時(shí)將這些不同類(lèi)型數(shù)據(jù)全部當(dāng)作字符串處理,存放在一個(gè)字符串?dāng)?shù)組中。即使是二維行列矩陣編號(hào),也將其行列各種組合全部羅列出來(lái)存放。當(dāng)通過(guò)裝入或設(shè)置等生成處理好候選數(shù)據(jù)項(xiàng)之后,將其存放順序打亂。系統(tǒng)運(yùn)行時(shí)通過(guò)開(kāi)始循環(huán)按鈕啟動(dòng)定時(shí)器,以約定的時(shí)間間隔將候選數(shù)據(jù)項(xiàng)循環(huán)顯示在相應(yīng)區(qū)域,也可以通過(guò)停止循環(huán)按鈕停止定時(shí)器,顯示停止在循環(huán)停止前的最后一個(gè)數(shù)據(jù)項(xiàng)。該循環(huán)及停止功能和傳統(tǒng)的相關(guān)軟件類(lèi)似。本軟件通過(guò)選擇按鈕選擇時(shí),若一次只選擇一個(gè),依據(jù)當(dāng)時(shí)顯示的數(shù)據(jù)項(xiàng)選擇一個(gè),若一次選擇的是多個(gè),則選擇出第一個(gè)之后,再?gòu)乃泻蜻x項(xiàng)中選擇出其它需要的數(shù)據(jù)項(xiàng)。為了防止已選數(shù)據(jù)項(xiàng)的重復(fù),對(duì)于已經(jīng)被選中的數(shù)據(jù)項(xiàng),立即從候選數(shù)據(jù)項(xiàng)中刪除。
在軟件系統(tǒng)設(shè)計(jì)過(guò)程中,設(shè)計(jì)到一些具體的算法。
1)候選數(shù)據(jù)項(xiàng)順序打亂。從文本文件讀入進(jìn)來(lái)候選數(shù)據(jù)項(xiàng),或者通過(guò)設(shè)置處理好的自然數(shù)序列、行列組合序列,首先將其存放在一個(gè)臨時(shí)字符串?dāng)?shù)組中,然后以存放數(shù)據(jù)的數(shù)組下標(biāo)為基準(zhǔn),通過(guò)隨機(jī)函數(shù)Rand()選擇出第一個(gè)數(shù)據(jù)項(xiàng),存放于存儲(chǔ)候選數(shù)據(jù)項(xiàng)數(shù)組的第一個(gè)位置,同時(shí)刪除臨時(shí)字符串中該數(shù)據(jù)項(xiàng)。之后在臨時(shí)字符串?dāng)?shù)組中剩余的候選數(shù)據(jù)項(xiàng)中繼續(xù)通過(guò)隨機(jī)函數(shù)Rand()選擇下一個(gè)數(shù)據(jù)項(xiàng)存放于候選數(shù)據(jù)項(xiàng)數(shù)組的第二個(gè)位置,再刪除臨時(shí)字符串?dāng)?shù)組中該數(shù)據(jù)選項(xiàng)。依次這樣處理,直到將所有候選數(shù)據(jù)項(xiàng)處理完成。完成后刪除臨時(shí)字符串?dāng)?shù)組釋放空間。
2)選擇數(shù)據(jù)項(xiàng)。從所有候選數(shù)據(jù)項(xiàng)進(jìn)行選擇,防止選擇剛好循環(huán)顯示到的數(shù)據(jù)項(xiàng)(因循環(huán)顯示變化的頻率可變),若一次只選擇一個(gè),為了公平,選擇的數(shù)據(jù)項(xiàng)是正在顯示的候選數(shù)據(jù)項(xiàng)緊后邊的候選數(shù)據(jù)項(xiàng)(按照存放順序),不能選擇已經(jīng)顯示出來(lái)的數(shù)據(jù)項(xiàng)。若一次選擇多個(gè)數(shù)據(jù)項(xiàng),則在選擇出第一個(gè)數(shù)據(jù)項(xiàng)之后,通過(guò)隨機(jī)函數(shù)Rand()繼續(xù)在候選數(shù)據(jù)項(xiàng)中選擇其他的數(shù)據(jù)項(xiàng),保證所選的數(shù)據(jù)項(xiàng)不會(huì)是在候選數(shù)據(jù)項(xiàng)中連續(xù)存放的數(shù)據(jù)項(xiàng)[2]。為了保證選中的數(shù)據(jù)項(xiàng)不會(huì)重復(fù),每次選中一個(gè)數(shù)據(jù)項(xiàng)之后,立即將其從候選數(shù)據(jù)項(xiàng)中刪除。刪除的方法是將候選數(shù)據(jù)項(xiàng)數(shù)組最后邊的數(shù)據(jù)項(xiàng)移動(dòng)到被選中對(duì)象處覆蓋被選中對(duì)象,同時(shí)使候選數(shù)據(jù)項(xiàng)個(gè)數(shù)減1。這樣避免大量移動(dòng)數(shù)據(jù),又一次打亂剩余候選數(shù)據(jù)項(xiàng)的排序,既提高了效率,又加強(qiáng)了公平性。
本軟件系統(tǒng)界面以對(duì)話(huà)框的形式設(shè)計(jì),主界面分為不同的區(qū)域,分別顯示候選項(xiàng)信息、本次選中的信息和所有選中的信息以及各種按鈕[3]。各種操作設(shè)置通過(guò)不同按鈕打開(kāi)相應(yīng)的對(duì)話(huà)框進(jìn)行不同操作或設(shè)置。系統(tǒng)界面簡(jiǎn)潔清晰友好,沒(méi)有雜亂信息[4]。
軟件系統(tǒng)設(shè)計(jì)完成后,由兩名學(xué)生分別以黑盒測(cè)試法進(jìn)行了測(cè)試。測(cè)試過(guò)程應(yīng)用了多組測(cè)試用例,其中詳細(xì)記錄測(cè)試過(guò)程并生成測(cè)試過(guò)程記錄文檔的測(cè)試用例如下:
裝入的名單選用了計(jì)算機(jī)科學(xué)技術(shù)專(zhuān)業(yè)2017級(jí)1班48名學(xué)生名單;設(shè)置數(shù)字候選項(xiàng)設(shè)置了1至200,中間去掉了50至120和150至180兩段,即就是候選數(shù)字為 1、2……、48、49、121、122、148、149、181、182、……、199、200共98個(gè);行列設(shè)置以高鐵座位號(hào)為基準(zhǔn),行為1至18行,列為A列至F列,去掉E列,即候選項(xiàng)為1A、1B、1C、1D、1F、2A……,18F,共90個(gè);抽獎(jiǎng)獎(jiǎng)項(xiàng)數(shù)設(shè)置為特等獎(jiǎng)、一等獎(jiǎng)、二等獎(jiǎng)、二等獎(jiǎng)、謝謝參與分別為 1、3、5、10、200;直接輸入名單輸入了我校10名教師的信息。
應(yīng)用這些測(cè)試數(shù)據(jù)運(yùn)行測(cè)試,實(shí)際輸出結(jié)果與期望結(jié)果一致,沒(méi)有發(fā)現(xiàn)問(wèn)題。另外,軟件系統(tǒng)中“開(kāi)始循環(huán)”、“停止循環(huán)”、“清除本次選擇”、“保存全部選擇”等各種功能按鈕以及初始設(shè)置的各種單選按鈕、顯示區(qū)域的顯示情況等,運(yùn)行良好,均未發(fā)現(xiàn)異常。
本文介紹了一種多功能抽簽選擇器軟件,從眾多候選數(shù)據(jù)項(xiàng)中選擇出部分或全部選項(xiàng)。軟件系統(tǒng)可以新裝入候選名單生成候選數(shù)據(jù)項(xiàng),也可以按數(shù)字、按行列等設(shè)置生成候選數(shù)據(jù)項(xiàng),還可以設(shè)置各種獎(jiǎng)項(xiàng)的數(shù)目生成獎(jiǎng)項(xiàng)池用來(lái)完成抽獎(jiǎng)。軟件功能豐富多樣,適合很多場(chǎng)合應(yīng)用,為相關(guān)人員的業(yè)務(wù)工作提供了一個(gè)很好的工具。