2009年3月15日 星期日

[替代役] 超不elegant的程式 (上)

花了近兩個禮拜,寫了這麼醜的程式~~我想以前教我程式的老師會把我殺了吧~~(好險老師應該看不到這一篇)


寫了一個產生報表的文件程式~


因為不是自己要用的,而且變數多到爆~於是我重啟大三寫完後就再也沒寫過的C#


 


寫了一個視窗介面,並且會產生一個word文件檔


整個程式其實還算中規中矩啦~


不過word的那部份真的很醜


整個程式直觀到爆~~


 


有多直觀啊?如果把word.visible() 設為true的話


就會看到程式碼一直把文字貼貼貼的把文字一段一段的貼上去,貼上去後,還會把剛剛的文字再改變其字型啊、大小啊......


 


整個程式讀取資料也都是無敵爆力的用for loop解決


如果說這是為了要以時間換取空間就算了…但並沒有,因為一堆東西還是宣告了…所以空間也沒有省到


一整個無腦程式碼咩


 


唯一一個好笑的是:我採用divide and conquer的方式


把一堆很長的程式碼切成一小段一小段的…


 


於是主程式碼的裡面變成這樣子:


 


            for (int i = 0; i < people.Count; i++)
            {

                addHeaderTextBox(oDoc);//加上「先簽後稿」、「檔號」兩個物品
                setTitle(oDoc, oDoc.Characters.Count, sendDocDate, sendNumber, isTemporary, isCreated);//設定由 



                if ((i+1) < people.Count)
                    setMainAward(oDoc, (Person) people[i], (Person) people[i+1]);
                else
                    setMainAward(oDoc, (Person)people[i]);


                if(isCreated)
                    setExplainIfCreated(oDoc);
                else
                    setExplainIfNotCreated(oDoc,explain1);

                if ((i + 1) < people.Count)
                    setSendTo(oDoc, (Person)people[i], (Person)people[++i]);
                else
                    setSendTo(oDoc, (Person)people[i]);

                setBigLiao(oDoc, isTemporary);

                if (i == people.Count - 1)
                    setSeal(oDoc);

                nextPage(oDoc);
            }


            isTemporary = false;


            //繼續進行正文產生
            for (int i = 0; i < people.Count; i++)
            {
                setTitle(oDoc, oDoc.Characters.Count, sendDocDate, sendNumber, isTemporary, isCreated);

                if ((i + 1) < people.Count)
                    setMainAward(oDoc, (Person)people[i], (Person)people[i + 1]);
                else
                    setMainAward(oDoc, (Person)people[i]);

                if (isCreated)
                    setExplainIfCreated(oDoc);
                else
                    setExplainIfNotCreated(oDoc, explain1);

                if ((i + 1) < people.Count)
                    setSendTo(oDoc, (Person)people[i], (Person)people[++i]);//這邊會自動多加一個,免的程式有問題
                else
                    setSendTo(oDoc, (Person)people[i]);

                setBigLiao(oDoc, isTemporary);

                if (i != people.Count - 1)
                    nextPage(oDoc);
            }


----------------------------------------------------------------------------------------------------


這些命名真的很醜對吧?


其實他是有一點含意的:


setTitle是因為這邊公文固定每一頁最前方都有近十行的固定格式(但是有一些編號、日期等會改變)


setMainAward是文件最重要的部份~


setExplain是因為每份文件都有一個抗議日期,以及申訴說明…也是要加進去的


setSendTo則是這份文件要送到哪些地方


setBigLiao和setSeal則是後面一堆人要簽名蓋章的地方~~


(Big Liao……我想常看公文的人應該猜得出來吧?)


 


 


至於其他的部份…唉~~我就不秀給大家看了…有這麼醜的程式真的是生平僅見~


---


下一篇我會來解釋一下這個程式為什麼這麼醜…唉


 


沒有留言:

張貼留言