20xx-2-25
這次實(shí)習(xí)所需的基本知識基本上都介紹過了,今天正式轉(zhuǎn)入開發(fā)階段。這次實(shí)習(xí)做的是一個(gè)費(fèi)用管理系統(tǒng),上午開始討論這個(gè)系統(tǒng)需求分析,包括實(shí)現(xiàn)項(xiàng)目預(yù)算,費(fèi)用報(bào)銷,人事管理和一些統(tǒng)計(jì)的功能,老師把整個(gè)系統(tǒng)的框架給我們做了一些大體的講解,希望我們能在接下來的幾天里去多思考,深化需求分析,細(xì)化功能設(shè)計(jì)。系統(tǒng)有組織結(jié)構(gòu)維護(hù),費(fèi)用項(xiàng)目維護(hù),審批流程維護(hù),報(bào)銷明細(xì)模塊,以及人員管理和一些統(tǒng)計(jì)的功能。每一個(gè)模塊都是對系統(tǒng)功能模塊的調(diào)整與維護(hù)。
人員管理有添加員工的功能,可以對添加的人員進(jìn)行修改和刪除,并給新增的員工分配權(quán)限。
Ø 費(fèi)用項(xiàng)目維護(hù)模塊:可以進(jìn)行費(fèi)用項(xiàng)目的添加和提交。
Ø 報(bào)銷模塊可以對報(bào)銷的項(xiàng)目在未提交之前進(jìn)行刪除和修改。
Ø 統(tǒng)計(jì)模塊主要是統(tǒng)計(jì)員工提交的報(bào)銷單預(yù)算單,及每個(gè)部門的項(xiàng)目信息和員工信息等。
所有這些操作都是直接對數(shù)據(jù)庫直接進(jìn)行操作。整個(gè)系統(tǒng)都是分角色登陸,每一個(gè)角色所擁有的權(quán)限都不完全相同,登陸進(jìn)去的菜單欄都有所不同,所以每個(gè)員工都應(yīng)該有一個(gè)角色,即有哪些操作權(quán)限。所有的功能和流程理清楚之后,就要開始原型設(shè)計(jì)了。
20xx-2-26
經(jīng)過對需求分析的進(jìn)一步理解,接下來我們開始這個(gè)項(xiàng)目的原型設(shè)計(jì)。我們所開發(fā)的費(fèi)用管理系統(tǒng)主要包括費(fèi)用報(bào)銷、項(xiàng)目預(yù)算管理、員工管理、公司的項(xiàng)目信息維護(hù)及管理、財(cái)務(wù)處項(xiàng)目信息的統(tǒng)計(jì)功能。圍繞這幾個(gè)功能模塊,我們逐個(gè)對其功能進(jìn)行細(xì)節(jié)設(shè)計(jì),比如分不同角色登陸系統(tǒng),登陸界面都是通用的,每個(gè)用戶都用自己的編號進(jìn)行登陸,系統(tǒng)會(huì)根據(jù)用戶的編號進(jìn)行匹配查找,找到角色I(xiàn)D之后進(jìn)入對應(yīng)的管理界面。進(jìn)入管理界面之后,就可以新增費(fèi)用報(bào)銷,可以對添加的費(fèi)用報(bào)銷單在未提交之前進(jìn)行修改、刪除操作,確定之后就可以提交,系統(tǒng)會(huì)根據(jù)session中保存的該用戶的編號查找到所在的部門,然后把用戶提交的申請表保存到該部門經(jīng)理處,當(dāng)該部門經(jīng)理登陸時(shí)就可以看到部門員工提交的申請表單,然后進(jìn)行審批等操作。所有的邏輯統(tǒng)一之后,我們分工開始做JSP界面和之間的邏輯跳轉(zhuǎn)。經(jīng)過一天的時(shí)間系統(tǒng)總算有個(gè)雛形了,。設(shè)計(jì)完大體的功能框架后,我們與老師一起開了一個(gè)小組討論會(huì),我們向老師說明了我們的想法及大體的開發(fā)方向,老師也想我們提出了一些建議,經(jīng)過一番熱烈的爭論,我們對自己的模型做了進(jìn)一步的改動(dòng),功能設(shè)計(jì)也得到進(jìn)一步完善。功能框架的設(shè)計(jì)是整個(gè)開發(fā)階段十分重要的工作,指導(dǎo)小組進(jìn)行后面具體的開發(fā)。功能設(shè)計(jì)的準(zhǔn)確和完善也能夠幫助我們在以后的開發(fā)中少走彎路,達(dá)到事半功倍的效果。原型設(shè)計(jì)的完成是我們小組成員齊心協(xié)力共同完成的,這也讓我們感受到了團(tuán)隊(duì)工作的重要性和強(qiáng)大力量。
20xx-2-28 星期一
今天,我們的主要工作是根據(jù)昨天的原型設(shè)計(jì),做出功能展示頁面,并實(shí)現(xiàn)基本的跳轉(zhuǎn)。由于這些只是一個(gè)邏輯的跳轉(zhuǎn),沒有真正和數(shù)據(jù)庫交互,因此幾個(gè)超鏈接就可以把所有界面聯(lián)系到一塊,再加上一些javascript的提示框,原型幫助我們更深入的理解了這個(gè)系統(tǒng)的流程及功能。下午我們就開始了數(shù)據(jù)庫建表、物理模型的設(shè)計(jì)以及概念設(shè)計(jì)。根據(jù)需求分析及原型,我們很快就確定了系統(tǒng)需要的數(shù)據(jù)表,包括用戶的基本信息、用戶的角色I(xiàn)D、報(bào)銷申請表單、預(yù)算申請表單、部門項(xiàng)目信息等,以及每個(gè)表里面所需的字段,通過在數(shù)據(jù)庫中建表,SQL語句的用法更加熟練。根據(jù)這些數(shù)據(jù)表,物理模型也很快就完成了。因?yàn)閿?shù)據(jù)庫是整個(gè)系統(tǒng)的關(guān)鍵所在,所有前臺的操作都要和數(shù)據(jù)庫交互,所以它設(shè)計(jì)的好壞直接影響到之后程序的編寫。接下來我們繼續(xù)討論我們建立的表的冗余性以及合理性等,在老師的指導(dǎo)下,我們對部分表進(jìn)行了相應(yīng)的修改。
20xx-3-1
在昨天的基礎(chǔ)上,我們進(jìn)行了再次討論,數(shù)據(jù)庫的設(shè)計(jì)最終確定下來。接下來就開始了編碼,建立整個(gè)系統(tǒng)的框架由我負(fù)責(zé),按照開發(fā)的流程,首先根據(jù)數(shù)據(jù)表建立實(shí)體層,也就是javaBean,然后寫數(shù)據(jù)庫連接,數(shù)據(jù)訪問層,業(yè)務(wù)邏輯層,控制層,整個(gè)框架搭建好之后,有利用老師講的Junit,寫了測試程序,對所寫的程序進(jìn)行初步測試,數(shù)據(jù)庫連接的測試順利通過。數(shù)據(jù)庫連通之后,下一步工作就是用戶的分角色登陸,事先在數(shù)據(jù)庫中插入了一些用戶信息,將角色分為五類,然后在數(shù)據(jù)訪問層建立一個(gè)DAO類,創(chuàng)建函數(shù)用于從數(shù)據(jù)庫中讀取用戶的角色I(xiàn)D,然后在業(yè)務(wù)邏輯層判斷DAO層函數(shù)返回的值是否為空,如果不為空則在控制層的servlet類中就可以進(jìn)行判斷分角色登陸;若DAO層函數(shù)返回的值為空,則說明該用戶名與密碼有誤,當(dāng)用戶點(diǎn)擊登陸按鈕時(shí)將轉(zhuǎn)到錯(cuò)誤提示的頁面。當(dāng)這些全部完成之后,我們開始進(jìn)行測試,但測試全未能如愿以償。調(diào)試、檢查了很久全未能發(fā)現(xiàn)錯(cuò)在哪里。今天沒能順利完成計(jì)劃好的任務(wù),深受打擊啊,不過沒關(guān)系,遇到問題,解決問題,也許會(huì)學(xué)到跟多知識。
20xx-3-2
上午接著做昨天未能完成的任務(wù),調(diào)試了兩個(gè)多小時(shí)還是未能所獲,只有請教老師了,看著老師在Debug模式下很快就找了出錯(cuò)的地方,原來在DAO層寫SQL語句時(shí)后面多了一個(gè)逗號,看來編程也是需要非常的細(xì)心。總結(jié)了失敗的原因,記住教訓(xùn),一定不能再出現(xiàn)這樣的低級錯(cuò)誤,而導(dǎo)致降低效率。這一步總算通過之后,我們開始著手不同角色所擁有的操作權(quán)限,比如普通員工只有報(bào)銷申請的權(quán)限(新增報(bào)銷單、刪除、修改、提交、查看等功能),部門經(jīng)理不僅有報(bào)銷申請的權(quán)限,還有審核部門員工提交的報(bào)銷申請單和預(yù)算申請、部門項(xiàng)目管理等權(quán)限,每一種角色登陸到操作界面的功能按鈕不盡相同,所以當(dāng)普通角色登陸后,審核、預(yù)算等按鈕必須隱藏或者不可用。但是我們之前的界面里的按鈕實(shí)現(xiàn)隱藏與子菜單都很難實(shí)現(xiàn),所以不得不考慮改變策略。之后經(jīng)過討論我們將整個(gè)頁面布局改變?yōu)榭蚣苣J剑筮咃@示樹形菜單,top'Frame顯示LOGO,mainFrame顯示主顯示頁面,bottomFrame顯示版權(quán)信息以及系統(tǒng)時(shí)間。這樣我們貌似又回到了原型設(shè)計(jì),,還是沒有項(xiàng)目經(jīng)驗(yàn),最初就沒有考慮清除。
20xx-3-3
涉及到的JSP界面還比較多,每一個(gè)頁面都是用HTML一句一句寫出來,再加上CSS樣式,所以半天的時(shí)間也沒有完成,今天上午繼續(xù)完成。當(dāng)所有的界面完成之后,開始了第一個(gè)功能模塊的編碼。當(dāng)用戶登陸到自己的主頁時(shí),顯示的都是歡迎界面,當(dāng)用戶點(diǎn)擊報(bào)銷單管理時(shí),必須根據(jù)用戶編號動(dòng)態(tài)的從數(shù)據(jù)庫中提取其所有的報(bào)銷單信息,然后顯示在展示界面上,用戶的編號的、是在用戶登陸時(shí)將用戶編號存儲(chǔ)在session中,默認(rèn)該用戶登陸系統(tǒng)30分鐘內(nèi)沒有操作的話,自動(dòng)讓該用戶注銷登陸。當(dāng)點(diǎn)擊報(bào)銷單管理按鈕時(shí),將用戶請求轉(zhuǎn)到servlet類中進(jìn)行后臺處理,讀取成功后,將這些信息傳到用戶的界面上,第一個(gè)原子功能實(shí)現(xiàn)后,我們更加有信心來完成其他模塊的編碼。原來一個(gè)真正的系統(tǒng)也應(yīng)該是這樣的原子操作組合而成的,從這一步的成功點(diǎn)燃了我們對編碼的興趣,不再畏懼和逃避。