avatar-avatar
曾文傳

[C#][心情][中長]

今天是我公司歲末年前的最後一個上班日。晚上五點可以提早下班,準備參加公司尾牙。


今年我特地向部門表明了不想參加尾牙,但有關尾牙抽獎程式的撰寫的委託我仍會進行下去。這是我在職場生涯第一次沒參加公司尾牙,希望他們能諒解也別誤會我想離職(笑)。


說起為何會找我做尾牙抽獎程式撰寫的部分也是很神奇,去年的程序本來是利用一個網路上GOOGLE能找到的抽獎程式EXCEL表格,我認為寫得其實盡善盡美各種設定都不錯,能多抽能重複抽獎,也可以選擇單一抽獎,畫面也漂亮。但去年發生一個我現在才知道的小插曲,當時的福委人員在抽獎時沒有注意,所以設定上不小心選取了重複抽獎,而在抽獎資格員工不多的情況下真的發生了這個情況,幸好當時大家也沒計較太多就重抽吧,只是這樣的狀態想必是不敢再發生,所以也就讓我這個軟體工程師有一個機會能寫這個有趣的東西。


我是寫 C# WINFORM的程序,一直以來我寫程序的風格受到我職場上的各種恩師的影響,[為客戶想功能],[防呆],[理解需求],基於以上我找福委相關人員開了一個會,想知道他們有什麼需求,當天想怎麼進行,一問下去果不其然需求就越來越多,要能捐出,要能不在時重抽,要能獎項全抽每次頁面顯示15位名單,要能先抽這個獎項再抽那個獎項先後順序防呆,甚至要有高潮大獎和普獎六獎先抽候選名單,再從候選名單2次抽出大獎得主,當他們講完以後問我一句請問這樣會不會很複雜能做嗎?我心裡想是做都能做,只要不要2次開會和3次開會需求繼續增加就好。


實際寫起來倒是簡單,先從基礎建設做起,把獎項(award)設定為一個class,屬性有名稱,敘述,獎項區域,原始數量,目前剩餘數量等,然後再讀取獎項EXCEL內依序把每個獎項的OBJECT存成list名單,這就先完成了獎項的LIST。


候選人員名單也是先建立候選員(candidate)class,然後依序填上各種屬性,像是姓名,工號,部門,職稱,入職日(嗯,本公司長幼有序,年資影響抽獎資格),以及最重要的是否有參加尾牙這個屬性,然後也是讀取一個EXCEL總表然後存入LIST名單。


接著就是當天會有報到程序,現場有人刷條碼然後紀錄之,報到結束以後會匯出一個EXCEL表格,我的程序再把這個表格與候選名單LIST內的工號做比對,就能設定這位員工是否有抽獎資格,讀完這三個檔案後,抽獎程序的準備就完成了。


抽獎當然是要公平的,所以要用C# RANDOM函式來做,但實際用過後發現有很高機率會有重複現象,因為種子的關係,這邊不牽扯太多,總之用了產生UUID的方式再隨機一次,寫出了想要的RANDOM函示。


接著就是一些動畫表現,防呆設定,誰可以抽這個獎誰不能抽那個獎,選到這個獎跑馬燈顯示目前可以抽這個的有誰(要跑快一點本公司人多),顏色上溫和一點之類的小小細節調整,整個程式就完成了,據第一次發包給我做,到完成大約10個工作天,希望今年他們能沒有意外的在尾牙歡樂遊玩。(喝酒醉的不小心連點好幾下我都做了防呆確認,應該要沒事了吧!!)(哈)

哈斯的採購人生-avatar-img
哈斯的採購人生喜歡這篇
avatar-img
加入討論