<nav id="w0g0m"><code id="w0g0m"></code></nav>
  • <xmp id="w0g0m">
    <xmp id="w0g0m"><nav id="w0g0m"></nav><menu id="w0g0m"><strong id="w0g0m"></strong></menu>
  • <xmp id="w0g0m">
  • <nav id="w0g0m"></nav>
    <menu id="w0g0m"><menu id="w0g0m"></menu></menu>
    1. 網站地圖
    2. 設為首頁
    3. 關于我們
    ?

    大學生志愿者信息管理系統的設計與實現

    發布時間:2022-12-25 11:11
    目 錄
    第一章 緒論 1
    1.1本文的研究背景及意義 1
    1.2志愿者管理系統國內外研究現狀 3
    1.3本文的研究目標 5
    1.4論文的組織安排 6
    第二章 系統建設關鍵技術 8
    2.1PHP與Apache技術綜述 8
    2.2PHP的工作原理 9
    2.3Apache 服務器綜述 10
    2.4PHP 與 ASP、JSP 的比較 11
    2.5PHP 的支撐環境 15
    2.6MySQL 數據庫 17
    2.7本章小結 18
    第三章 系統分析與設計 19
    3.1系統的需求分析 19
    3.1.1經濟可行性分析 19
    3.1.2技術可行性分析 20
    3.1.3系統業務需求分析 20
    3.1.4系統用戶需求分析 21
    3.2系統功能需求分析與設計 22
    3.3系統前臺設計 29
    3.4PHP調用EXCEL的實現 31
    3 .5頁面訪問權限的設定 34
    3.6 本章小結 39
    第四章 系統的實現 40
    4.1系統后臺的實現 40
    4.2信息系統后臺管理 40
    4.3系統前臺查詢統計的實現 47
    4.4活動信息主頁面 50
    4.5本章小結 54
    第五章 安全管理及優化 55
    5.1系統安全性 55
    5.2系統優化 56
    5.3本章小結 59
    第六章 系統測試 60
    6.1軟件測試 60
    6.2軟件維護 62
    6.3功能模塊測試 63
    6.3.1用戶測試環境 63
    6.3.2用戶登錄模塊的測試 64
    6.3.3志愿者管理模塊的測試 64
    6.4測試數據結果 65
    6.5本章小結 67
    第七章 結論及展望 68
    7.1結論 68
    7.2研究展望 69
    7.3本章小結 69
    致 謝 70
    參考文獻 71
    第一章 緒論
    1.1本文的研究背景及意義
    “志愿者”這個三字詞語雖然是中國在我國正式使用的時間還不是很長,但 志愿服務卻源遠流長。據一些2008年的統計數據來看,有總數超過了491萬的志 愿者們去參加了汶川的抗震救災以及其周圍地區的災后重建工作,而且據官方數 據來統計,總共是有超過了170萬的志愿者是通過直接服務北京奧運會舉辦來參 與志愿活動的,更有甚者,超過了300萬名志愿者是參與了奧運有關的主題活動, 當然,這些數據并不完全,所以我們有理由相信有更多的大學生,他們以各種各 樣的方式去參與社會的經濟、文化、愛心等等領域的志愿者活動[1-3]。自從1993年 底,中國共青團團中央開始發起并號召青年積極參與志愿者行動以來,全國總共 已經有了3.82億人次的大學在校青年參與了搶險救災、大型賽會、海外服務、扶 貧開發、社區服務、環境保護等各領域的志愿活動,其總計已經提供了超78億小 時的志愿服務,根據《中國注冊志愿者管理辦法》上的數據來看,進行了相關條 例注冊的青年志愿者總人數更是達到了驚人的2946萬名。可以預見,以青年為主 體、多元化發展并帶動全社會參與的志愿活動必將成為我國志愿服務事業的最新 特點[4]。
    從一般意義上來說,志愿活動是一種自發的、不計回報的、單純為了使得社 會得到進步從而進行的一系列集體亦或是個人的活動,這種活動是公眾自身積極 愿意參與到的社會生活中來的重要方式,更是現代社會不斷向前發展的基礎。而 志愿者本人的定義則是指那種本身就具備有志愿精神,且還有一定的專業技能, 并熱心于社會的服務活動或是一些公益事業,志愿去參加各種各樣免費服務工作 的人。所以,志愿精神只能產生于個人對同樣是公民的個人甚至是對社會這個大 集體的愛心以及責任心,這種愛心和責任心更多的決定于個人的成長背景、教育 和經驗,當然也受到社會價值觀的影響。而現在高等學校的學生具備了志愿精神 產生的有利條件,所以大學生已經成為青年志愿服務隊的主要力量,據不完全的 統計,學生志愿者中大學的志愿者更是占到了驚人的46.16%,各大高等學府的志 愿者又是學生志愿者中的主力部隊。在我國的高等學府中,各種各樣的學生志愿 者活動在解決社會矛盾,幫扶弱勢群體,傳播文明理念等各個方面起著非常重要 的作用。從某種意義上來說,大學生志愿者的活動成為了社會的潤滑劑,也成為 政府服務之外另外一個不可或缺的重要社會服務。“高校中開展志愿者活動形式多 樣,除了“中國青年志愿者行動”之外,還有各種高校內部發起的各種志愿者活 動以及大學生自發組織的志愿者活動等。大學生志愿者活動是大學生志愿參加的 活動因為這些學生他們渴望得到社會承認,以期望在進入社會前能夠更多的接觸 社會,成為社會的一個能夠自我存在的主體。所以,我們可以這樣認為,這些參 加大學生志愿者活動的人,一般而言都有自己一定的能力和思想,他們可能是那 種自己擁有了一定專業能力的人,這種人可以通過規范化的程序加入青年志愿者 協會,然后負責專業性、技能行較強的經常性活動,這樣的大學生會是大學生志 愿者中的主力軍,或者是那種只是想臨時參加一些志愿活動以提升自己能力為主 的大學生,他們沒加入規范化的志愿組織,所以其參加的志愿活動多為群眾性和 隨機性的志愿服務活動[5]。
    所以在高校志愿者人數的眾多,以及活動的復雜性,需要越來越多的高校、 團隊的聯合參與,志愿者活動所需人員的招募、培訓以及管理,將面臨越來越大 的困難,包括人員的資料管理、人員的活動召集、活動的倡議以及避免重復的培 養,合理分配人員等等的問題。傳統的人員管理方法將很難適應當前的形式,科 學合理的人員管理,將大大減少人員管理所面臨的巨大問題。依托現代物流技術, 用信息化、網絡化對人員的管理,將徹底扭轉對數量眾多、背景不一的人員管理 難的問題。達到合理組織,召集人員的目的。
    大學生志愿者信息管理系統在理論研究或實際應用方面的意義和價值[6]: ㈠能讓大學生志愿者的服務機構以及服務的團隊可以更為有效地管理目前組 織相對散漫的志愿者并組織起可以開展志愿的服務項目;
    ㈡這種方式可以編制出一套實用的大學生志愿者管理系統,為大學生提供各 種各樣的志愿服務的信息發布、招募、注冊、管理、評價等功能;
    ㈢這樣方式可以完全提高志愿者在注冊過程中和活動過程以及信息管理的效 率以及規范化水平,而且還能為青年志愿協會管理人員提供更為完善的報表統計 功能,也可以為青年志愿者提供服務時長的認證服務以及培訓服務等各項服務, 更可以使之成為全省志愿服務事業服務平臺;
    ㈣這樣也可以在實際運行中采集數據,然后用這些數據進行一些統計和分析, 對管理系統的效用進行評估以及驗證,并可以根據這些分析結果對注冊志愿者的 管理系統進行一系列的改進和完善,這樣就可以讓注冊志愿者管理系統成為國家 志愿服務系統的一些重要組成部分。
    在管理系統開發完成、并投入實際應用后,并將實現大學生志愿者管理流程 的優化和工作效率的一些提高,更能有效地組織青年志愿為社會進行服務,并給 予志愿者的激勵和保護,并使之提高志愿者協會及其管理者的效率與規范
    1.2志愿者管理系統國內外研究現狀
    首先我們先來看看國內的志愿者管理系統的研究現狀,中國雖然在80年代以 前就有非官方的志愿性組織了,但這樣的志愿者組織多為民間組織,發展不夠且 影響力很小。中國真正的開始大規模的志愿者服務其實是隨著改革開放一起建立 的,從改革開放初期開始,雖然那時候志愿者只存在與小型的社區服務層次上的, 但是官方已經注意到這樣的形式了,所以建立了以政府為背景的志愿協會。所以 在這樣的大背景下,我國正式的志愿者協會才逐步的建立起來,并且稍微有了一 定規模,但當時的志愿者活動還僅限于社區這樣的小型志愿活動。以這樣的形式 發展到了90 年代的初期,隨著一支在中國共青團志愿者隊伍的成立,所有的志愿 者協會都找到了一個核心,從而使中國有了屬于中國自己的全國性志愿者組織。 就現在來說志愿者協會基本都有自己的組織架構,其最核心的部門都是直接與政 府相關的,這樣的志愿者協會都有如下的體系結構或是表現形式:
    國內的青年志愿者服務管理系統體系結構對中國而言最主要的一塊就是能夠 隨時得到政府的支持,所以就主哦功能過的志愿者協會中必然有一個部門是與政 府直接相關的,可以很快的領略政府的精神和含義,在此基礎上件起起了志愿者 服務管理組織的其他部門,例如:社區義工聯以及共青團志愿者組織,這種小型 的社區服務管理系統體系結構主要是建立在了上述的部門上,而其自身又衍生去 了很多管理部門,其主要的組成是由志愿者、志愿者直接管理者、志愿者協會管 理專員、以及志愿者協會的團支部來組成的。所以大學生志愿者是這個系統架構 的主要成員。而這些志愿者又被分為在職志愿者以及臨時志愿者,在職志愿者主 要從事的是一些全職的工作由他們負責管理整個志愿者組織,而臨時志愿者則是 來自于社會各界人士,他們平時都有自己的工作,而在空暇之余來參加志愿活動。 因為現在國際化聯系越來越緊密,所以為了更好的跟國際志愿者組織接軌,我國 的志愿者組織在本質上是和聯合國定義一致的。所以,我們的志愿者活動也被定 義為:為弱勢群體、社會公益事業或是有益于全社會的大型活動去自愿地貢獻個 人的時間以及力量。其宗旨就是為想從事志愿活動的人提供服務,這種活動本身 在沒有任何金錢或物質報酬,單純只是從想為改進社會作出自己的貢獻的基礎上 建立的。在這樣的組織中,志愿服務的申請方及志愿服務活動的服務方必須要處 在一個對等的狀態,雙方的目標一定是一致的。志愿者組織的管理專員是志愿者 組織中的全職人員,他們為整個志愿服務體系提供管理,并負責志愿者的注冊審 核以及協調志愿者想參加的服務和服務方本身需求不相同的一系列問題。他們是 整個志愿服務過程中最重要的環節,因為他們提供了整個志愿服務過程中的所有 管理流程,而且他們還必須能針對需求方的志愿服務需求來審核參加的人員,若 是出現雙方意見不一致的情況,還需要調整志愿服務的重定向問題等,最后這些 管理者們還要對服務完成后的需求方以及服務方雙方的意見反饋進行總結,所以 志愿者管理是志愿者服務管理體系結構的核心,他本身在提供相關的服務的同時, 還需要去處理各方面的內容,例如:服務方的申請、服務人員的管理、服務信息 的發布,服務完成后反饋等,而且其在服務階段也起到承上啟下的樞紐作用。當 然,國內志愿者服務管理組織體系肯定不止服務管理者這一個樞紐人物,其中要 涉及的環節還有很多,其中也包括了培訓組織、宣傳組織等更為復雜的體系[7],但 在這里我們就不一一綴述了。
    在討論完了我國的發展狀況后,我們再來飯館國外志愿者服務的情況,國外 的志愿服務發展的比我們要早得多,早在第二次世界大戰結束了以后,因為戰爭 的破壞導致了大量的社會問題,所以西方國家從那個時候就開始對志愿者服務工 作進行深一步的規范,而且在當時如果只是純民間服務是不能滿足社會發展需求 的,所以政府將其擴大為一種由政府可以直接控制并使之發展的廣泛性的社會服 務工作組織。所以西方國家從這個時候開始,對志愿服務工作的定義就已經不僅 僅停留在調整被救助者與社會的關系或是改善他們的社會生活質量,而是將其目 標定位在調整整個社會結構與社會關系,并使之能夠在社會關系中發揮其重大作 用的組織了。現如今,西方國家的志愿者的服務管理工作早已經有了完善的制度, 志愿活動本身已經成為了西方社會制度化、專業化的社會工作了。所以從以上的 敘述可以看出,這樣的結果不僅是因為許多西方國家的志愿服務活動起步早且規 模大,更大的原因則是政府管理措施嚴謹,所以讓志愿活動產生了極高的社會效 益。當然,現在國內也在政府的管理下慢慢的開始步入組織化、規范化和系統化 的道路,政府已經意識到志愿者的服務活動不僅僅是國家進行公民的道德教育的 機會,更是一種維護社會穩定的無形力量和有力措施,現在國內建立志愿者組織 的目標就是為了對志愿者服務的管理形成一套很是完整的運作機制。現在就美國 而言,做志愿者活動幾乎成為了每一個美國人在青年時期的必修課,可以這樣說 美國平均每一個人,不管老人還是小孩都有過志愿者活動的經歷。因為美國的教 育部門是這樣的規定的:如果你是一名中學生,那么你只有成績好是沒用的,想 要升入好的大學,還需要在三年的高中課程以外額外去完成40小時以上的志愿服 務活動,這有滿足了這個條件才有上好大學的機會。這就是美國的志愿者活動現 狀,每一個中學生都明白想要上好大學就得做志愿者,這種的現象也成就了美國 志愿服務活動如此普及,而這其中最重要的原因在大多數人眼里是政府的支持, 不過更應該歸功于這些志愿活動背后完善的信息化志愿服務管理的機制以及手 段。那美國人又是如何去管理如此龐大的志愿者隊伍的呢?答案的得出要追溯到北 京奧運會期間,這是中國的志愿者們通過在美國培訓后總結出來的,美國人通過 信息化、系統化的管理,以及他們所擁有的一系列非常完善且實用的志愿者網絡 信息管理系統,讓他們能夠完整的掌握從志愿者的面試,錄取,培訓甚至是后期 對志愿者的一系列評估和對整個活動的服務流程進行跟蹤,都是使用上述的信息 化管理方式,這種方式能夠很好的保留詳細的服務記錄。而且早在20世紀末尾的 時候,西方國家己經普遍采用了這種基于Web的技術來對志愿者服務進行更好的信 息化管理以及網絡化管理。而且就目前世界上的很多國家來說,他們幾乎每個發 達的國家都會建立起各自屬于官方的志愿服務活動管理的大型綜合性網站,來面 對社會大眾以及志愿服務的各級各類的組織發布制定的法律法規以及志愿者服務 活動的宏觀的規劃以及系統的培訓還有管理等數據,這種方式為社會志愿服務活 動提供了非常有用且大量的公益性信息。
    1.3本文的研究目標
    隨著中國社會一系列的經濟巨大發展以及經濟體形式的轉變,就當今社會而 言,志愿者活動已然成為了我國社會發展時所需的重要推動之力,而其中又以高 校的大學生們為主力,志愿者活動就是要讓整個社會更加的和諧,讓需要幫助的 人得到幫助,以完善體制所不能完善的方面。所以建立信息管理系統,從志愿者 組織這個角度來更好的管理高校的大學生志愿者們,是我們應該先走出的也是必 須的第一步,希望能讓大學生志愿者們更多的更好的參與到這項利國利民的事業 中來[12-13]。
    針對當今社會大學生志愿者的現實情況,該信息管理系統需要解決的主要問 題則是大學生志愿者的數據以及其信息的整合,更需要保持各地志愿者協會的數 據互通性以及數據兼容性可以更好的實現。希望本系統投入運行后,能夠在全國 各地都能進行錄入和更新大學生志愿者的信息數據,并且能夠動態的進行操作與 管理,由于不同的志愿者活動其處理的方式不同,所以處理邏輯也不同。正因如 此,在處理自定義流程中的任務時,就會產生不確定性。為了避免個問題和解決 下文將談到的問題,我們需要在定義任務時統一使用customer類型節點,以便使 用相同任務的處理方式。這樣能大大提高了工作效率。
    該系統實現后,能夠更有效地提高志愿者組織組織志愿者活動的效率,增強 志愿者組織對志愿者信息的管理水平,對于部署在信息系統數據庫中的流程,系 統會為它們分配ID以及版本號,ID會作為整個數據庫流程的唯一性標記,版本號 則會用于區分流程的版本。信息管理系統也支持對整個業務流程進行迭代開發, 而且不會對原始流程及實際活動產生任何影響。迭代開發所產生的業務流程與原 始流程有著相同的名稱,只不過它們有不一樣的ID及版本號。
    綜上所訴,本文的研究目標就是建立大學生志愿者信息管理系統,為管理者 提供快速高效的服務,避免了人工處理的繁瑣或產生的誤差,提高工作效率。以 及自愿者提供快速的注冊,報名,以及最新信息的了解。
    1.4論文的結構安排
    本文各章節的內容安排如下:
    第一章為緒論。首先就介紹了筆者為什么選擇大學生志愿者信息管理系統這 個題目以及選擇該題目的依據,接著又介紹了該課題就目前而言國內外的現狀, 與此同時,簡單的描述了將要開發的管理系統的構架,并就該題目的研究目標做 出了估計,最后在第一章的最后指出了本文的組織結構安排。
    第二章為系統建設關鍵技術。這一章我們通過詳細的分析在系統開發中會用 到的技術以及承載該技術的環境,并且還詳細的介紹了系統開發中最重要的一個 環節——PHP語言、MVC技術、MySQL的數據庫和以及讀寫分離的數據庫高效 訪問技術。
    第三章為志愿者管理系統的需求分析。在本章的開始,我們就對志愿者管理 系統進行了可行性的分析,通過闡述整個分析過程,讓我們能夠了解該系統在設 計上和需求上的可行性。再驗證了系統的各方面可行性后,我們就開始對志愿者 管理系統的功能需求進行分析,我們收集了大部分志愿者協會管理者在其工作上 的業務實際需求,并從這些收集而來的數據出發去考慮功能模塊的建立,從而確 定用戶所需的功能模塊,然后就可以得到系統的功能模型,這樣能夠系統設計和 實現做好準備。
    第四章為系統的實現,在上一章對系統分析的基礎上,根據系統所需的功能 以及這些功能的需求來分析并通過這個分析的結果去完成系統模塊的設計。在這 個系統階段,完成了登陸,上傳,導出excel,信息存儲等各模塊的設計,在模塊 設計完成后,就可以順利的完成了志愿者表、活動表、管理員表等系統數據表設 計。
    第五章大學生志愿者管理系統的優化,這一章主要講述了現在一般系統所存 在的一些性能方面的問題,并就這些問題分析,然后從本系統的實際情況出發, 并就這些情況做出有針對性的系統性能優化。
    第六章大學生志愿者系統測試。首先介紹系統測試方面像單元測試、集成測 試、系統測試這樣的基本的測試概念以及其對應的測試方法,然后通過從我們設 計的信息管理系統的本身分析,并就其實際情況選擇合適的測試方法,然后再根 據我們既定的測試方法設計一套相匹配的測試用例,完成了系統測試后分析測試 結果。
    第七章為結論及展望。在這一章總結了本論文的全部工作并指出了不足之處 和以后的改進方向。
    第二章 系統建設關鍵技術
    2.1PHP5與Apache2的技術綜述
    在我們準備編寫PHP腳本文件之前,一定要先搭建能讓PHP腳本可以被解析 的環境,這種條件主要是建立在硬件、操作系統OS以及腳本解析器(軟件)三方 面上進行說明。現如今,個人電腦的性能已經非常的優異了,不需要用大型主機 都能能滿足PHP腳本運行的需要;而操作系統OS方面可以使用Ubuntu12.04或 Centos6.4;這兩款系統都是基于Linux開發的系統。下面我們介紹一下什么是Linux 操作系統[14-16]:
    Linux操作系統其實是UNIX操作系統的克隆系統,她誕生于1991年的10月 5日。后借助于Internet網絡,并通過世界各地計算機愛好者們的共同努力,已經 成為了當今世界使用的最多的一款 UNIX 類操作系統,并且使用的人數還在迅猛 地增長。Linux是一款免費使用、自由傳播的Unix類操作系統,是一款基于POSIX 和UNIX的多用戶、多任務、多線程和多CPU的操作系統。她能運行Unix中主 要的工具軟件、應用程序以及網絡協議。她支持32位以及64位硬件。Linux系統 則是由Unix系統衍生而來的,它本身已經繼承了 Unix系統以Network為核心的 設計模式與理念,這樣的設計讓這種操作系統不僅性能穩定而且可以承載多用戶 網絡。Linux的操作系統因為網絡和設計方面的需求,所以需要架設在Intel x86 系列CPU的計算機上,而該芯片又是大部分計算機所使用的。Linux系統因為其 開源以及歡迎大家一起做開發的特性,所以吸引了全世界各地的成千上萬的程序 員對其進行設計、實現和修改,這種方式讓該系統的性能趨近于完美。而這種開 源方式的目的就是為了建立一款可以不受商品化軟件版權所制約且能讓全世界的 PC都能免費使用的類Unix操作系統OS。Linux以其高效性及靈活性著稱,其模 塊化設計結構,使得Linux系統既能在價格昂貴的工作站中運行,更能在廉價個人 電腦上面實現所有的 Unix 特性——一種可以具備多任務且多用戶的特性的 OS。 Linux系統本身是沒有圖形操作的界面的,但是為了更方便用戶操作,所以它在得 到了 GNU公共許可的權限下免費獲取了圖形界面的功能,而它本身的操作命令規 則是按照POSIX標準來設計的操作系統。而Linux系統所在的源中包含了 Linux 系統所需要的所有軟件包,這些軟件不僅包括了完整Linux界面操作系統,還包括 了 vim這類文本編輯器、以及像gcc這樣的高級語言編譯器等一系列應用軟件。 不僅如此,現在版本的 Linux 操作系統還帶有多個窗口管理器的 X-Windows 的圖 形用戶操作界面,這些界面有GNOME,GNU以及SEVER-X這樣的大型渲染界 面,這樣就可以讓用戶在Linux和windos下自由切換無縫對接了,這種圖形界面 可以讓用戶像如同使用Windows NT,允許使用window框、圖標以及菜單進行操 作。這也是Linux比Windows處理速度快的原因。
    PHP在腳本運行時,通過一個PHP腳本的一次請求,就會通知INT來給用戶 或是代理(proxy)提供數據或者是可視化的軟件產品,亦或是專業的技術服務, 這樣不僅僅加強了圖形應用程序的性能以及其功能的運作能力,這種方式還能夠 在很大的程度上縮減了系統的開發周期以及系統的維護成本。所以,使用這樣的 INT 系統產品就是為了讓用戶可以把精力更多的可以專注到解決企業所面臨的一 系列戰略方面的問題,也是我們開發系統的目的——盡最大可能的幫助用戶取得 成功。
    綜上可以看出,當腳本在解釋的時候如果發現了 PHP文件上面出現了任何的 語法錯誤,那么這個解析轉換過程就會被中斷,并通過服務端向客戶端的瀏覽器 輸出 Error 對象里的信息,然后客戶端在看到后可以向服務器端發出一個 SEVER 的實例,該SERVER對象中的phplnfo()方法就被執行,通過執行phplnfo()方法就 能讓apache2的服務器log記錄錯誤信息,這樣就能讓開發人員準確的找到錯誤原 因了。
    2.2PHP的工作原理
    PHP(Personal Home Page)是于 1994 年由由 Rasmus Lerdorf 創建,剛剛開始是 Rasmus Lerdorf為了要維護個人網頁而制作的一個簡單的用Perl語言編寫的程序, 后來在Technion IIT公司兩位以色列工程師的發展下形成了現在的PHP5,也就是 我們要使用的版本。PHP是一種類C的語言,獨特的語法混合了 JAVA、C、Perl和 PHP自創語法。它能夠比CGI和Perl更快地渲染出動態的網頁。這樣我們可以看 出用PHP語言所渲染的動態頁面與其他編程語言所渲染的網絡頁面來進行比較, 就很方便的可以看出PHP語言是嵌入到HTML文檔中去執行的,執行效率自然比完 全生成HTML標記的CGI要高出許多;不僅如此,PHP還可以執行被解析器所翻譯 以后編譯器的代碼,這種方式就可以通過編譯器來達到加密和優化代碼運行的目 的,這樣的方式不僅能夠使代碼運行更快,更能夠很大程度上增加和優化代碼其 安全性。因為我們主要還是使用PHP5,所以下面我們將主要討論一下PHP5的特性 [16-18]
    PHP以Zendll為引擎,并加入一些新的功能如PHP Data Objects(PDO)。而 且PHP5版本強化了更多的功能:首先,它完全實現了面向對象,提供了名為PHP 兼容模式的功能;其次是在XML功能,PHP5支持直觀訪問XML數據、一種名字叫 SimpleXML的XML處理用界面;與此同時,還強化了 XMLWeb的服務支持,標準支 持SOAP的擴展模塊;在數據庫方面,PHP5提供了旨在訪問MySQL的全新界面;除 此前界面外,還能夠使用面向對象的界面以及預處理語句等MySQL提供的新功能; 最后,PHP5還捆綁了小容量的RDBMS-SQLite.
    PHP在語言本身擁有非常強大的能力,但是通常,用戶在編程中還會涉及到很 多不同接口之間的通信問題,比如打開文件以及讀取,或者是建立套接字連接來 發送數據。這些過程都是通過各種通信協議完成的。所以,我們還需要來了解一 下PHP的通信協議支持情況。所謂的通信協議,實際上就是系統間發送或者接收 數據時所需要遵循的特定方法°PHP支持FTP、LDAP、IMAP、NNTP、POP3、HTTP、 COM等大量的通信協議。PHP還能夠開放原始的網絡端口,使其他任何的協議都能 夠協同工作。不僅如此,PHP還支持和所有Web開發語言之間的WDDX的復雜數據 交換。就目前而言,PHP語言已經支持了對Java對象的引用,而且可以把它們輕 松的用以作為PHP對象。
    2.3Apache2 服務器綜述
    Apache HTTP Server2 (以下簡稱Apache2)是Apache軟件基金協會所開發的 一通過將源代碼開放來提升其性能的WWW服務器,就目前市場上的反應而言, 我們可以這樣說,Apache2幾乎可以在所有的主流PC平臺上進行工作,這種跨平 臺的特性讓 Apache2 能夠風靡全球,其安全性也非常的好,雖然是開源代碼,但 是由于常年的更新,讓它的安全性反而更好,所以毫不夸張的說,Apache2是現如 今最流行的Web服務器端軟件之一[18-22]。
    Apache2 設計的本來目的,只是希望他能夠服務于一些小型或者試驗 Internet 網頁或者系統,但由于其輕靈的特性,受到了大多數開源開發者的喜歡,所以他 的使用開始逐步擴展到了各種Unix的系統中,而其對Linux的支持幾乎完美的特 性,更是讓它在后來 Linux 風靡全球的同時成為了大部分該系統開發者的常用的 web服務器。在Apache第一版出現后,由于其開源的特性吸引了眾多開發者來開, 所以也衍生出了相關的各色產品,這些產品功能不僅有可以支持SSL技術的,還 有能支持多個虛擬主機的,而且為了方便開發人員甚至給出了有高等級權限的 Config文件。Apache2的結構是以進程以基礎的,這種以進程為基礎的方式因為是 把整個軟件的代碼壓縮到內存上執行,這樣會占用一大部分內存,所以會比以線 程為基礎的那些軟件要消耗多得多的系統開支,Apache的這種特性使得他并不太 適合處理多處理器多線程的環境。由此我們也發現了其一些問題,就是一個 Apache2 所搭建的 Web 站點在需要擴展的時候,不能單純的假設虛擬機這樣簡單 且節約成本的方式來做,而是需要通過增加更多的服務器甚至是擴充一些群集節 點來進行實現的,當然一味的增加處理器是非常耗費資源的,所以大部分情況下 都是建立集群服務器來優化這個功能。從20世紀末一直到現在為止,Apache已經 成為了世界上使用最多的Web服務器,據最新的統計來說,市場的占有率已經達 到了60%左右。
    當然 Apache2 因為其開源的特性所以大多數的開發人員已經開發出了許多支 持 Apache2 服務器的特性,這些功能中大部分的特性是通過開發人員所開發的編 譯模塊實現的。因為有太多的人參與這項開發,所以這些特性會出現一種情況, 就是囊括了太多語言所編譯的模塊,所以能夠得到Apache支持的編程語言都需要 一個身份認證方案。這些服務器的通用的語言接口支持 Perl,Python, Go 以及 PHPo這種認證方案的模塊有很多,其中流行的認證模塊就包括mod_accessed, mod_auther以及mod_digestest。其他的模塊類似SSL和TLS之類的模塊就需要 mod_ssl 支持以及 proxy 代理服務器模塊,以及非常有用的 URL 重寫(通過在 apache2的config文件里面實現mod_rewrite),以及可以自由的定制Log的日志文 件(通過apache2的config文件里面實現mod」og_config)以及實現一些過濾(通過 apache2 的 config 文件里面實現 mod_include 與 mod_ext_filter)。Apache2 的錯誤 以及各種配置文件的日志可以通過網絡上有些免費的資源來使用一些免費的腳本 ANstaus又或者是Whocome來進行分析。
    分布式的服務器系統需要共享數據來對對象的 CACHE 文件進行一系列的分 析,這些分析數據就可以讓開發人員在編制高性能的系統的時候可以極大的提高 系統整體部署的伸縮性。而在這個編制的過程中,這樣的數據就會涉及到獲取與 數據源是否能夠交互,因為在這種情況下大部分是讀取硬盤數據,這種方式是最 耗時,會加速加速推理過程,所以最好是采用能夠與數據源交互的黑板模型。
    2.4PHP 與 ASP、JSP 的比較
    1、ASP技術
    ASP技術英文名為Active Server Pages,其含義就是“動態服務器頁面”這是 微軟公司在開發了Windows IIS系統后順帶開發的一種與該服務器匹配的腳本語 言,所以他雖然也可以作用于執行動態Web服務的應用程序,但是他只能作用于 windows IIS的服務器,而對其他的并不兼容。當然,在他與ArcGIS、ArcSDE這種 的桌面一起鏈接工作時,就可以讓ArcIMS為用戶的PC端電腦去創建一個中心的知 識庫,這樣就兼容其他的語言,能使得Windos IIS用其他的語言系統來在Intranet 上面去發布和修改、刪除數據,而其他的用戶們也能夠通過windows IIS的元數據 服務器以便來查詢已經發布的元數據,這樣就可以使用ASP語言來定制創建于IIS 上面的We b應用了。雖然ASP在國內非常的流行,但是從用戶業務需求上來說是有 缺陷的,首先用戶的需求是有不可預見性,而不同的需求對系統的設計流程以及 系統的設計邏輯都會產生很多不同的要求,第二,這種設計在對錯誤的檢查方面 也并不合理,又很大的不確定性,同一情況在不同業務需求中也許是正確也許是 錯誤的。綜上可知,ASP語言在開發過程中會出現業務需求實現問題和檢查問題無 法完全滿足業務需求的問題。
    2、JSP技術
    JSP技術是由Sun Microsystems公司在開發了 JAVA語言準備涉足互聯網端后, 于是倡導并聯合多家公司一起參與合作開發,最后在JAVA語言的基礎上建立了一 種web動態技術標準。一般而言,傳統的HTML網頁文件像*.htm,*.htm 1這種文件 如果寫入過Java程序片段腳本(Scriptlet)或者是直接給出JSP的標簽的話,就可以 構成了使用JSP以及其對應數據庫0racle的動態網頁。這些在HTML文件中的Java 程序的片段就可以自如的與0racle數據庫進行交互、將網頁渲染的更加絢麗甚至是 通過JSP語句來發送E-ma i郵件等,讓網頁成為動態網站的為所有功能都是可以的。 這些所有程序操作都在Tomcat這樣的服務器上解析了 JSP語句后然后執行服務器 語言,并且通過網絡的上傳來把用戶想要的結果發送給到客戶端的瀏覽器,這樣 的話客戶的要求就可以通過服務器全部來實現,同時就降低了對客戶瀏覽器的要 求,因為現在的大部分客戶瀏覽器端是不支持Java的,但是通過服務器能讓用戶繼 續可以訪問JSP網頁。JSP全部英文名為Java Server Page,他的設計模式就是是一個 把servlet的設計給簡化了然后實現以Html語法的Java擴張(以<% , %>的形
    式)。JSP與Servlet都是在服務器端被解析并且可以執行的,一般而言,在執行之后 會返回給客戶端瀏覽器的一個報文,其主體為純HTML文本,而報頭里面包含了很 多的其他信息,類似cookie還有max-time之類的信息,因此在客戶端瀏覽器上只要 能夠就能瀏覽網頁。而在服務器開始解析JSP了之后,整個過程中,Tomcat的Web 服務器會遇到訪問請求,在這個時候就會首先執行腳本中的JSP程序段,然后JSP 會執行并返回結果給服務器,服務器就會將返回的結果匯同JSP文件中的所有 HTML代碼一起返回給客戶端的瀏覽器去解析[23]。
    JSP語言其根本的技術就是使用Java的編程語言和類似javascript這樣的腳本語 言一起編寫類XML文件的文件的標簽或者是類似于script的一些腳本語言,以封裝 并生成JSP的動態網頁其所需要的邏輯處理語言,使之能夠按需求工作。同時,JSP 語言還能通過MVC的模式將網頁在功能上的設計和網頁頁面的美工設計顯著的分 離,這種MVC的模式可以支持重用類以及基于組件的設計開發,讓這些基于Web 的應用程序開發因為重用組建而變得非常迅捷而且容易。綜上,我們就可以知道 JSP(Java Server Pages)是一種制作動態網頁的技術,他的特點是能夠將表示邏輯從 HTML的tag標簽中分離開來。
    由上面的描述,我們已經知道了 JSP生成的動態頁面是由H TML的TAG標簽和 JAVA代碼與之嵌入的腳本代碼組成的。Tomcat的服務器在收到了瀏覽器的頁面上 通過客戶端發送的請求后,就會對開始解析代碼并通過這些解析出來的功能對這 個數據進行處理,然后再把生成的完整的HTML頁面返回到客戶端所在的瀏覽器 上o JSP本身具備了Java語言的簡單易用性,完全面向對象編程特性,以及具有平 臺兼容性強,安全可靠和主要面向因特網等所有優點。
    自從SUN公司開始把JSP發出市場以后,許多大公司都架設了支持JSP語言解 析的服務器,例如像淘寶,去哪兒這樣的中國大型網絡公司等,因為Oracle的數據 庫和IBM的服務器問題也使得JSP能夠迅速的成為商業應用最為廣泛的服務器端語 [24]
    言。
    3、PHP技術
    PHP語言,從本質上來說他也是一種腳本語言,但這實質上而言他卻與JSP、 ASP有著根本的區別。早期使用的人們將PHP理解為Personal Home Page,即個人 主頁。但現在,更多的人將 PHP 稱作:Professional Hyper text Preprocessor。 一般來說,PHP是一種作用于服務器端、可以跨平臺、適用于HTML的嵌入式腳本 語言。他既能運行在Windows,也能運行在Linux等在內的大多數操作環境中,常 和免費的Web服務器Apache以及免費的數據庫MySQL—起使用在Linux操作系統上, 因為都是免費的,所以在開發中有極高的性能價格比。綜上,我們可以理解為什 么普遍認為PHP的執行效率以及性價比會比JSP和ASP都要高[25]。
    PHP語言的特點都體現在了以下幾個方面:
    (1)快速
    PHP是種功能非常強大的CGI嵌入式腳本語言,其語法是融合了C語言、Java 以及Perl語言所形成的新語法,所以其編譯速度以及執行速度都比類似于CGI或 Perl語言更快,這是他的第一個比較突出特點。
    (2)實用性
    由于PHP是種面對對象編程的并且也是種能夠完全跨平臺開發的新型網絡開 發語言,所以不管是從開發者的角度來考慮還是從開發中經費的角度來考慮都是 相當實用的。不僅如此,PHP本身結構簡單,易于上手,許多功能都只需一個API 函數就能夠實現,而且許多機構都已經推出了專業用來編寫PHP代碼的IDE以及文 字編輯器。
    (3)具有很好的開放性和可擴展性
    PHP語言本身有非常好的開放性以及可擴展性,其開放性體現在他的源代碼是 完全開放的,所以開發者都能為 PHP 增加一些附加的功能是非常的容易,這也說 明了PHP的可擴展性,而且,在許多的大型網站上都能夠找到最新版本的PHP (PHP5.1.3)并提供下載。就目前來說,PHP主要運行于服務器端的,能夠支持 PHP 語言運行腳本的服務器有很多種,而在其中最具有代表性的服務器就是 Apache,PHP語言是不受到平臺的束縛的,所以可以在類似UNIX, Linux這些操 作系統的大多數版本中架設能運行PHP的服務器。所采用LAMP (Linux +Apache +PHP +MySQL )這樣的免費的開源的框架可以省掉許多網站經營所需要的費用。出于這 方面的考慮,本文將采用了LAMP (Linux +Apache +PHP +MySQL )這種開源的免 費的框架來開發大學生志愿者信息系統。
    (4)功能強大
    PHP語言在Web項目的開發中能夠體現出其強大的功能,實現起來也相對簡 單的多,代碼也很容易,表現在如下的幾個方面:
    1)PHP支持多種數據庫,不管是常用的還是非常用的,如:AdabasD、DBA、 dbm、Dbase、Informix、filePro 、Microsoft SQL Server、mSQL、Oracle、Solid、 PostgreSQL、ODBC、InterBase、Sybase等等。考慮了效率與經費問題后,我們發 現PHP與MySQL的組合是最佳的,不僅能夠跨平臺使用,還能高效率開發。
    2)可以通過輕量級目錄來訪問服務器以進行一些信息的交換。
    3)可以在多種協議下進行與服務器的通信,包括HTTP、AIMAP、AP0P3、SMTP、 SOAP以及DNS等協議。
    4)能夠使用混合了 POSIX和Perl的新型正則表達式庫可以解析幾乎所有 的復雜字符串。
    5)能夠對所有的XML文檔進行高效的管理以及創建并且還能這姓調用Web 服務等操作。
    (5)可選擇性
    PHP 語言不僅可以采用面向過程的開發模式還能采用面向對象的開發模式, 程序員可以根據所開發的網站其規模以及以后的維護等多方面考慮,來選擇網站 開發時候應采用的方法。在 PHP 進行網站開發的時候,搭配使用最多的數據庫就 是MySQL數據庫了。PHP 5以上的版本不僅能提供早期MySQL數據庫的操作的函數, 還提供了許多MySQL的擴展技術來對MySQL數據庫進行操縱,這樣使得開發人員 不管從穩定性方面考慮還是從執行效率等方面來考慮,操縱MySQL數據庫都是不 錯的選擇。PHP中大多數的功能都可以通過多方法來實現,程序員完全可以憑自 身的知識掌握的熟練情況來進行一些擇優選取。
    (6)版本升級的速度快
    與多年才會更一次新的ASP語言來相比,PHP語言的升級速度明顯要快很 多,因為其良好的擴展性,PHP可以說是每幾周就會進行一次更新。
    (7)功能全面
    PHP 語言中包括了面向對象而設計、結構化之特性、數據庫之處理、網絡接 口之應用、安全編碼之機制等開發特性,幾乎已經涵蓋了所有開發網站所需要的
    功能。為了方便起見, 下表將JSP、ASP、PHP做了一個比較[24-26]。
    表 2-1 JSP、ASP 及PHP 比較
    JSP ASP PHP
    運行速度 較快 較快
    運行損耗 較小 較小 較大
    難易程度 容易掌握 簡單 簡單
    運行平臺 絕大部分 Windows 絕大部份
    擴展性 較好 較差
    安全性 較差
    函數支持 較少
    數據庫支持 較少
    廠商支持 較少
    對XML支持 支持 不支持 支持
    對組件的支持 支持 支持 不支持
    對分布處理的支持 支持 支持 不支持
    代碼質量 簡潔 冗長 簡潔
    考慮了 PHP語言所特有的所有功能并與ASP語言以及JSP語言做了功能上 面的對比,本文將選擇用PHP來做大學生志愿者信息管理系統的開發工具。
    2.5PHP 的支撐環境
    (1)服務器方面的支持
    PHP 語言被大多數的網絡服務器所支持,包括 Apache、 Information Server(IIS)、Personality Web Servery(PWS)以及 aPlant Server、Caudium、Oreilly Website ProServer、Xitami、AomniHTTP等。而對于許多的網絡服務器而言,PHP 語言還會提供一個模塊。當然,有一些PHP插件能夠支持CGI的標準,能夠讓PHP 腳本作為類CGI的處理器來實現工作。
    綜上所述, PHP 腳本能夠很好地選擇操作系統以及服務器。與此同時,還能 夠在開發的時候根據需要來選擇三使用面向過程變成還是面向對象,或者選擇用 兩種方式混合的方式來進行開發。雖然PHP4不能夠完全支持[26] OOP的標準,但 大多的代碼倉庫以及所有的大型Web應用程序(含PEAR庫)可以使用OOP來代 替。
    (2)數據庫支持 能夠支持幾乎所有的數據庫是PHP語言最強大的功能,也是無數人選擇他的 理由。用戶們在使用他的時候會發現用他編寫數據庫[33]所支持的網站簡單的讓人 難以想象。就眼下來說,PHP5所支持的數據庫列表如下表2-2所示。
    表 2-2 PHP 支持的數據庫
    Adabas D InterBase PostgreSQL
    dBase FrontBase SQLite
    Empress mSQL Solid
    FilePro DirectMS-SQL Sybase
    Hyperwave MySQL Velocis
    IBM DB2 ODBC Unix dbm
    Informix Oracle
    Ingres Ovrimos
    PHP還能提供一個叫做DBX的擴展庫,使PHP能夠自由地利用這個擴展庫來 支持任何的數據庫。此外,PHP還能夠支持EODBC,所以他能連接到任何只要支 持這個標準的數據庫[27-30]。
    (3)工具支持
    1)文字編輯器
    有許多的文字編輯器和集成開發環境( IDE )都可被拿來建立、處理以及管 理PHP格式的文件。在這些工具中,有一部分被列到了PHP編輯器的列表中。
    2)文字處理器
    如StarOffice Writer> Abiword和Microsoft Word這類文字處理器并不適合用以 處理PHP腳本。如果用上述的這些工具處理這些腳本的話,必須要把處理后的結 果另存為純文本的格式,不然服務器將無法解析并運行PHP腳本。
    3)Windows 記事本
    使用Windows的TXT記事本編寫PHP腳本的話,必要要注意保存文件時, 務必將文件后綴名改成.php。因為PHP有這么多的優勢、以及這么多廣泛的應用 和強大的支撐,所以開發大學生志愿者信息管理系統將完全勝任。
     
    2.6MySQL 數據庫
    數據庫是建立系統中最基礎的也是最重要的,所以建立大學生志愿者信息管 理系統是不能離開數據庫支持的。雖然目前為止支持PHP的數據庫變得越來越多, 包括了 Access> Oracle、SQLserver 等,不過在 LAMP( Linux + Apache + MySQL + PHP )的開發結構中,MySQL依然是占據主導地位的。
    MySQL是真正多用戶、多線程的SQL數據庫和服務器,也可以說是到目前為 止最流行也是最受歡迎的開放源碼數據庫服務器之一。作為這樣一款非常優秀的 開源數據庫,他的功能其實一點都不比那些標價昂貴的數據庫差,甚至在某些重 要的Web安全問題上,他還要更好,比如從Linux系統上Copy來的MySQL數 據庫更是具有其他的數據庫所無法企及的優勢。操作上面也越來越人性化了,現 在支持多款圖形界面,這樣使得操作變得越來越簡單。在現在的很多中小型的企 業網站以及門戶網站中占據著相當大的份額,在很多大型的項目開發中,MySQL
    也完全可以應對自如,游刃有余。MySQL結構如圖2-1所示。
     
     
    Eclipse 圖形界面
    工作空間(workspace )
    運行時內核(runtime)
     
    圖2-1MySQL體系結構
    MySQL 作為公開源碼的數據庫,其簡單易操作的特點使得其被許多用戶采用 推崇。MySQL數據庫雖然是免費的,但并不比類似Informix、Sybase、Oracle等 商業數據庫差,并且具有這些數據庫系統不存在的特性,具體特點 [33]如下:
    (1)數據庫的管理系統。我們口中的數據庫其實就是結構化數據的聯合體,并 且提供了對這些數據結構體的查找、刪除、修改、增加以及一些更為復雜的數據 抽取操作等,這些行為需要的是一個支撐系統,而這個支撐系統就是我們通常所 說的數據庫管理系統(簡稱DBMS),所以可以看出MySQL數據庫完全支持這些 功能。
    (2)關系型數據庫的管理系統。通過查找數據庫悠久的發展歷程,我們可以發 現其中曾出現過許多種形式的MySQL數據庫系統,但最后關系型數據庫的管理系 統(簡稱RDBMS)憑借其獨特的特性和優越性被廣為采用,現在的MySQL數據 庫實際上就是種關系型數據庫,能夠支持結構化的查詢語言。
    (3)開放源碼的數據庫。同大多數商業性質的數據庫相比,開源是MySQL最 大的優點。因為MySQL數據庫的源碼是完全公開的,所以意味著只要開發人員能 夠遵守GPL之規則,任何的開發人員均可根據自己實際需要來對MySQL的源碼 進行優化以及修改。
    (4)技術特點。MySQL數據庫是典型的B/S架構服務器,其服務器端為多線 程的,同時其給客戶端提供了許多不同的API以及鏈接庫,例如C++、C、Java、 PHP、Perl 等等,當然也提供了一些簡單易用的管理工具,比如 MySQLadmin、 MySQLmenu 等[24-28]。
    2.7本章小結
    本章介紹了大學生志愿者管理發技術及環境。詳細介紹了系統開發相關的 PHP技術、JavaScript語言、MySQL數據庫訪問技術。
    第三章 系統分析與設計
    3.1系統的需求分析
    一個系統的需求分析一般是放在系統定義階段的最后一步的,也是非常重要 的一步,這一步最基本的任務就是需要我們能夠準確地找到問題“系統必須做什 么?”的答案,即是要我們開發系統之前可以提出一系列完整、清晰、準確和具體 的目標系統的要求。得到需求的分析結果是在系統開發之前的必須步驟,這個結 果會直接影響到系統工程進度及系統設計質量。
    系統本身的需求分析是進一步揭示和判斷系統是否符合常規的的過程。在這 個過程中將對系統的可行性和在研究階段之前所確定的系統所處理范圍進一步的 提煉并更使之進一步的具體化,并通過系統的各個模塊,來找到應該采用的解決 辦法。在我們完成了系統的可行性的所有分析之后,就可以根據系統的業務需求 和用戶的功能需求以及管理員的功能需求等三方面的需求入手來完成系統的一系 列需求分析。系統的可行性方面的分析主要是來自對需要開發的志愿者管理系統 的功能和性能以及限制性等條件的分析,以便在現有的資源條件下,確定管理系 統的開發可行性,以及功能是否能夠完全的實現。
    3.1.1經濟可行性分析
    要考慮經濟方面的可行性的話,通常是考慮系統開發在經濟上是否足夠。經 濟是否可行的研究范圍較廣,其包括了成本和效益的分析、開發時所需的人力成 本以及資源成本還有其潛在的市場前景等等。
    經濟方面的可行性主要從成本和效益等方面分析,通過這方面的分析我們可 以了解到開發的時候所需要的人力成本以及資源成本,然后效益方面則是通過分 析市場前景來看是否可行的。現代化的社會志愿者協會因為是在政府支持下運行 的,其經濟實力是不用擔心的,所以在經濟上開發成本方法是完全能夠接受的, 志愿者協會一般都具有完善的局域網系統,并且有具備運行系統的Linux主機以及 與之相匹配的主機條件以及Apache服務器軟件搭建環境,要想提高我國志愿者組 織的發展空間,志愿者的管理工作已經變得刻不容緩,而在現在信息化時代的大 背景下,信息管理系統的開發則成為了志愿者協會的最核心的工作之一。因為, 開發志愿者信息管理系統能有效的提高志愿者協會工作的效率,保證志愿者協會 其他方面的工作的質量,降低了其在信息管理工作上的成本,所以在經濟上這樣 的付出比起以后的收獲而言,在效益上是絕對可行的。
    目前幾乎所有的志愿者協會都建有局域網,有些甚至還有現成的網絡中心以 及多媒體機房,所以志愿者管理系統只需在網絡中心中的服務器加載就能夠實現 了,或者直接在網絡上訂購虛擬主機來完成。若是有前者的條件,日常維護工作 就可以交給網絡中心的專人來負責管理以及維護,后者的話可以選擇聯系對方機 房的人負責維護,這方面的話花費就會比前者要高一些,但是更為方便。當然從 經濟上考慮的話,就必須要考慮在把志愿者管理系統的管理工作帶入信息化的同 時會不會產生過多的經濟負擔,但是,我們可以預見,帶入信息化以后管理效率 必然會大大增加,所以再次基礎上就可以節約大量的人力成本,所以在經濟上考 慮是可行的。
    3.1.2技術可行性分析
    21 世紀已經是信息化時代了,大量的信息管理系統已經涌入了我們的生活, 我們可以在上面實現各種各樣的功能,可以這樣說信息系統進入了人類社會的各 個領域,并且已經發揮了不可替代的作用。這些系統現在已經成為了計算機應用 的重要組成部分,首先使用計算機系統對大學生志愿者的信息進行管理,能夠比 手工管理這樣巨大的數據快得多且準確的多,通過這樣的信息系統我們能夠快速 的檢閱我們需要察看的內容,并且不用擔心我們的內容會因為意外而丟失,且操 作方便,而且在存儲時也很即時,這些都是傳統技術不能比擬的。
    在技術層面上,志愿者管理信息系統是一種信息的管理系統,信息的管理系 統已經有了一套成熟且完備的流程和可以參考的大量成功案例,還有完善的知識 體系,因此在設計以及開發上其實并不存在仍呵的技術屏障。而其中最重要的技 術之一就是 MySQL 的 CURD 技術,該技術是建立大學生志愿者信息管理系統的 基石,如果沒有這個技術,我們上面提到的優勢將一無所有。MySQL的CURD技 術雖然非常重要,但是并沒有那么復雜,相反他的學習和操作都非常簡單,并且 非常方便開發者使用,這也是為什么我們說他能夠給大學生志愿者信息管理系統 提供很大程度上保障的原因。并且能幾乎完美的與現行大學生志愿者信息管理系 統的后臺 PHP 語言以及 SQL 語句配合使用,然后在開發過程中我們還可以使用 SVN 這樣的版本控制代碼提交軟件,以提高系統代碼管理效率,這樣就能很好的 提高開發效率了。
    3.1.3系統業務需求分析
    大學生志愿者的信息是志愿者協會非常重要的資源,大學生志愿者信息管理 更是志愿者協會不可缺少的部分,另外,這些信息的數據對于志愿者協會的規則 的制定以及其活動的的策劃非常的重要,大學生志愿者管理系統可以在以其強大 的數據基礎為支撐向協會的管理者提供所需的任何信息,并且這些信息的查詢還 有非常便捷的查找途徑。就需求本身而言,因為到目為止,大部分的志愿者組織 中還一一大部分人在使用傳統的人工方式管理志愿者檔案文件,這種方式的管理 效率低,而且還很難管理,因為需要投入人力所以其成本也很高,查找、更新和 維護志愿者的信息存在著相當大的困難。
    全國大學生志愿者目前有共計2000 萬人左右,隨著大學生規模的不斷擴大, 志愿者協會目前面臨著全國各地大學生分布太廣,數量急劇增加,所以信息量也 成倍增加,給目前的大學生志愿者信息管理工作帶來了異常巨大的困難。面對如 此龐大的志愿者信息量,只能采用計算機管理系統這樣的現代化信息技術來提高 志愿者的信息管理工作的效率,而在這樣的信息化時代背景下,必須要通過開發 這樣的大學生志愿者信息管理系統以便保證學生信息的規范性管理、科學的統計 以及快速的查詢,從而可以提高志愿者管理工作的效率,并且能夠減少志愿者管 理工作大量的工作量以便提高志愿者組織管理者在其他業務方面的服務質量。
    3.1.4系統用戶需求分析
    在現代社會,計算機已經變得非常普及,各種單位基本都配備了計算機,有 的甚至配備了服務器。這種情況下,大學生志愿者信息管理系統的使用以及推廣 變得非常容易。大學生志愿者管理系統主要是提供最為方便以及高效的管理功能 以及基于互聯網的信息管理平臺,大學生志愿者們可以通過該管理平臺來進行有 關信息的查閱,而管理員則可以管理和編輯其權限所在的所有信息。
    (1)志愿者管理功能:為了方便志愿者信息的CURD,也就是增加、刪除、修 改、查詢。
    (2)活動管理功能:管理員可以通過填寫表格的形式來發布和編輯活動相關的 所有信息。
    (3)學校管理功能:管理員可以對數據庫中的學校信息進行增加、修改以及編 輯。
    (4)管理員管理功能:超級管理員可以通過此功能對其以下的管理進行增加、 刪除、修改、查詢,并且可以通過下拉菜單選擇對其的授權。
    (5)用戶管理功能:可以查看該系統的所有的登陸用戶,并且超級管理員有權 限設置用戶能夠進入的模塊。
    3.2系統功能需求分析與設計 大學生志愿者信息管理系統是為了給志愿者組織提供更好的志愿者信息管 理,活動發起,志愿者招募而設計的一個網絡管理系統。所以根據網站管理人員 的的工作要求以及要求,大學生志愿者信息管理系統有以下的幾個功能模塊: 前臺:
    1.注冊: 志愿者填寫個人詳細資料,并通過郵箱驗證注冊,待管理人員審核 后,完成注冊。
    2.登陸:憑借注冊郵箱以及密碼登陸。
    3.找回密碼:通過注冊郵箱,發送郵件,并通過郵件找回密碼。
    4.修改個人資料以及密碼:登陸后可以修改個人信息以及密碼。
    5.留言:登陸后,憑借有效的身份認證,給管理員留言。
    6.活動提議:登陸后,可以通過發帖的形式,給管理員提供活動計劃,待計劃 通過管理員審批后,將以人員召集的形式發布在網站上。
    7.人員召集:管理員通過發布召集令,公布活動內容,時間以及當前報名人數。
    8.報名:登陸后,可以報名參加合適的活動,待管理員審核后,將可以參加該 活動。
    9.動態信息:管理員將展示志愿者活動的成果,以及展示其他信息。
    10.評論:志愿者登陸后可以對動態信息以及活動內容以發帖的形式進行評價。
    11.查看個人報名情況,活動提議狀態,留言回復:登陸后可以查看個人報名 以及活動提議是否得到通過,以及留言回復狀況,查看個人參加活動情況。
    后臺:
    1.登陸:管理員憑借用戶名與密碼登陸,根據角色分配不同的權限。
    2.找回密碼:通過注冊郵箱,發送郵件,并通過郵件找回密碼。
    3.權限分配:分普通管理員與超級管理員,普通管理員分不同的模塊管理,具 體權限,由超級管理員分配,超級管理員還將有刪除以及鎖定普通管理員的權限。
    4.修改密碼以及個人資料:登陸后,管理員將可以修改個人資料以及密碼。
    5.志愿者管理:具有自愿者管理權限的管理員將具有刪除,鎖定以及審核志愿 者的權利,并可以發郵件通知審批成功的志愿者。
    6.活動管理:具有活動管理權限的管理員,將可以審批活動提議,完善活動, 發布活動,刪除活動,通知志愿者。發郵件告知活動提議是否通過,以及以郵件 的形式通知審批通過的活動者,并告知活動的具體情況。
    7.志愿者活動報名審批:具有此權限的管理員,將可以根據報名人員的情況, 審批此志愿者,并以郵件的形式告知報名者是否通過審批,以及提供活動的細節。
    8.留言管理:具有此權限的管理員將可以刪除,回復留言。
    9.動態信息管理:具有此權限的管理員,將可以發布,刪除,鎖定動態信息,
    以及按適當情況給動態信息分類;并可以查看,刪除,回復評論。
    10.統計信息:管理員可以查看志愿者的登陸次數,參加的活動數量,以及其他 各類信息。
    11.消息通知:具有此權限的管理員將可以以郵件的形式通知志愿者各類信息 本系統功能模塊設計圖3-1所示如下:
    大學生志愿者管理平臺(后臺)
     
     
    圖3-2是整個信息管理系統的流程圖,這張圖主要闡述了管理著在輸入用戶 名和密碼后,進入了后臺信息管理系統的操作頁面以后,如何去管理以及操作整 個后臺,其中包括了用戶管理,活動管理,志愿者活動報名審批,信息統計,個 人信息的管理以及管理留言等等行為。
    在這個后臺管理中,主要是通過一個菜單以及許多text文本框還有FCKeditor 來進行管理與操作,其功能離不開增刪查改,因為系統主要是通過操作數據庫來 操作網站的,所以所建的表都可以看作獨立的,互相之間或許有些關系,但是并 不會影響起獨立性。下圖像我們演示了管理員是如何通過文本框提交到后臺數據 庫,看其是否存在以及是否需要修改,來實現該信息管理系統功能的。
     
     
    圖3-2 大學生志愿者系統流程圖
    系統后臺頁面風格立求操作簡單容易上手、界面樸實而大氣、結構簡單,一 目了然。系統后臺界面頁面如圖3-3。
    圖3-3系統登陸界面
    信息管理系統登錄成功以后進入系統的后臺菜單,如圖3-4。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    圖3-4系統后臺菜單
     
    該設計階段因為要涉及到的數據,所以必須要建立數據庫,數據庫的建立一定 要秉承很好的擴展性,這就需要外鍵和主鍵良好的配合,在設計的時候對于數據 類型和數據長度的把握也一定要精準,這樣才能夠既不浪費空間又能夠很好的展 示數據,設計思路如下:
    (1)用戶UserM類主要是設計來存儲大學生志愿者信息的,為了更好的保證 方便檢索和不重疊的特性我們會為每個用戶定義UserID的屬性,為了讓這些注冊 的用戶都能登陸我們的系統,更需要配備登錄名、密碼。因為該系統不能只是線 上聯系,很可能涉及到線下的活動,所以聯系電話和用戶郵箱這樣的方法是必不 可少的等。方法有獲取所有用戶信息、獲取指定用戶信息、用戶登錄、用戶信息 加密、添加用戶、修改用戶、刪除用戶和修改密碼等。
    (2)大學學志愿者的StudentM類則是該系統中最重要的環節,因為他包含了 所有大學生志愿者的信息,其信息的key包括了屬性有大學生志愿者的ID (主鍵) 以便識別不同的用戶,而為了更好的了解每一個志愿者的情況我們還需要他的姓 名、年齡大小、入學時間、性別、民族、籍貫、住址、出身日期、文化程度、婚 姻狀況、辦公電話、移動電話、職務所處、學校狀態等,所以我們會在表中設置 所有的以上屬性以便存儲這些信息,在存儲了這些信息以后,就可以利用現有的 一些方法來獲取所有志愿者的信息、獲取指定的志愿者信息、添加志愿者、修改 志愿者信息、刪除志愿者等操作。
    (3)活動CourseM類包括活動的ID、活動的名稱、活動的詳細信息、活動 負責人的ID、活動的開始和結束日期、活動的時間、活動的評價等屬性。該方法 上包括了幾乎所有的活動信息,所以可以獲取指定活動的信息、獲取活動參加的
    學生信息、增加人員、修改指定志愿者的基本信息、刪除志愿活動的信息等。
    (4)類型 ClassM 類中主要是收集我們的志愿者類型,所有他的屬性包含了 類型ID用以識別類型,接下來用類型名稱來定義類型,然后是使用類型負責人ID 來鏈接管理員的標以及屬于該類型的學生數量等屬性。有了這些信息后,我們就 可以通過在PHP文件中定義的方法來是實現像獲取所有類型的信息或者是獲取參 加指定類型的學生人數信息的信,不僅如此我們還可以通過相關的方法來向數據 庫中增加類型、修改指定類型的基本信息、刪除指定類型的信息等。
    (5)評分ScoreM類,是讓管理員可以通過評分ID來識別該評分的編號,然 后通過學生ID鏈接學生信息表,通過活動ID來鏈接活動ID表,其中還包括了活 動評分等屬性。有了這些信息和關聯方式以后,我們就可以通過在PHP文件上定 義的方法獲取所有的活動信息,并可以通過外鍵來獲取指定活動的評分信息,也 能以同樣的方式獲取到指定學生的信息,并通過該數據表能夠在該活動上的評分、 增加活動評分、修改指定參加活動的學生的評分、刪除指定評分的信息等。其圖 與關系如圖3-5、圖3-6以及圖 3-7所示。
     
     
     
    圖3-5 系統中志愿者的的年級、班級和活動狀況類圖
     
     
     
    圖3-6系統中志愿者信息,學校狀況,活動類圖
     
     
     
     
     
     
    圖3-7系統中各表之間的ER圖
    功能模塊表Tree用來存儲大學生志愿者管理系統的的用戶信息以及一些功能 模塊的信息,其中包括功能模塊ID、志愿者的ID、活動ID等等、以下是根據以 上的信息所設計的數據庫表,其詳細設計以及字段說明如下列表所示。
    表3-1管理用戶表(user)
    字段名 數據類型 長度 說明
    id Int 4 用戶編號
    username Text 24 用戶名
    password Text 10 密碼
    limits Int 6 管理員權限
    major Varchar 20 負責板塊
     
    表3-2學生表(student)
    字段名 數據類型 長度 說明 備注
    id int 4 學生編號 自動增長
    name 文本 24 姓名
    sex varchar 4 性別
     
     
    Nation int 4 民族
    adress int 4 住址
    Stu_tel varchar 24 個人電話
    Hom_tel varchar 24 家庭電話
    e_mail int 4 郵箱
    interview_exp int 4 面試成績
    internship_exp int 4 活動成績
    employment_unit double 6 所在學校
    contract_unit double 6 活動次數
    status double 6 職務
    tracking_unit int 4 學校
    classed Int 4 班級編號
    stu_id int 4 學號
     
     
    表3-3學校表(Campus)
    字段名 數據類型 長度 說明 備注
    Major_id Int 12 小區編號 自動增長
    Campus Varchar 12 權限編號
    Stunum Int 80 學生數量
    Teaname Varchar 80 老師名字
    Cam area Varchar 70 學校地址
    Camactive Text 89 校區活動
    Camleader Varchar 20 校區負責人
     
     
    表3-4學校信息表(collage)
    字段名 數據類型 長度 說明 備注
    collage-id Int 4 學校代碼 自動增長
    Collage-name 文本 24 學校名稱
    Collage-teacher 文本 24 學校負責人
     
     
    表3-5活動表(class)
    字段名 數據類型 長度 說明 備注
    id int 4 活動編號 自動增長
    Campus_id Int 24 活動地點編號
    Major_id int 4 針對人群編號
    admission_time int 4 活動時間
    year int 4 舉行時間
     
     
    class_teachervar varchar 24 負責人
    teachr_phone Int 24 負責人電話
    student_total int 4 學生總數
    boy int 4 男生數
    girl int 4 女生數
    employment_rate Varchar 6 活動舉辦地點
    contract_rate Text 6 活動信息
    jw_rate Text 6 活動附件
    graduation_year Text 4 活動反饋
     
     
    表3-6志愿者活動信息表(unit)
    字段名 數據類型 長度 說明 備注
    name Text 24 負責人姓名
    Id int 4 活動編號 自動增長
    Unit-name Text 24 活動信息
    Unit-city Text 24 活動信息
     
     
    表3-7 評分表 (score)
    字段名 數據類型 長度 說明 備注
    id int 4 評分編號 自動增長
    name 文本 24 活動名字
    courseID int 4 活動編號
    studentID int 4 學生編號
    number int 4 參加人數
    Stu_name varchar 24 學生名字
    e_mail int 4 評分郵箱
    interview_exp int 4 活動成績
    contract_unit double 6 活動評分人
    status double 6 評分人職務
    tracking_unit int 4 活動地區
    compus_id int 4 校園編號
     
    3.3系統前臺設計
    該信息管理系統主要是為志愿者協會的工作人員服務的。通過大學生志愿者 管理系統,志愿者協會的指導老師們就可以快速查詢到一個大學生志愿者是來自 哪個學校、哪個學院、哪個專業、哪個班級的情況。以及一個活動參與學生的數 量、參與情況、活動信息等等。這個系統還能夠非常方便地更新數據庫,對一些 活動信息發生變化的活動可以及時的更新甚至于刪除。當然,這些功能三只對超 級管理員開放的,不同的管理員權限不同,其能操作的功能亦有不同。前臺頁面 截圖如圖 3-8所示。
    管理員成功登陸系統后,進入的就是管理系統的后臺操作界面了,該操作界 面主要為實現系統需求而服務的,主要用于業務層,與系統的數據庫通過PHP語 言這個接口來聯系,而其本身只是負責功能,和數據幾乎沒有任何關系,體現了 這個模式的業務集中化以及需求明朗化的特點。而對于數據庫的管理員來講,就 可以很方便的選擇是在數據查詢頁面還是在志愿者信息的登陸維護界面。
    志愿者信息管理系統的主要界面共有兩部分,首先三進入管理系統后,會出 現整個網站的主頁,也可以說是一個索引頁,然后可以從導航欄中選擇需要進入 的板塊后,管理系統就可以進入其主要功能頁面以及控制頁面,
    這些頁面中不僅包含了志愿者的信息,也包含了志愿活動的信息以及志愿者 的招募信息。所以,用戶可以直接在這個頁面得到其想要的資訊亦可以通過這里 注冊報名成為志愿者的一員。
    談到網頁設計的美,這是一種在特殊環境下的美,跟傳統意義上的藝術性審 美有著很明顯的一些區別。一般而言,藝術性質上的美指的是海闊天空,指的是 無所顧忌,而最重要的是要符合人們的欣賞習慣,這樣能夠讓欣賞者心里可以產 生一種美的共鳴;但是網頁的美有很多的不同與限制,因為他是一種布局上的審 美,當然這也使它有優于傳統藝術的一些地方,在這寫方面里最明顯莫過于網頁 的交互性和快捷性。純藝術的形式更多的是作者自我宣泄,而網頁設計則不同。
    為了吸引更多的用戶來注冊使用該平臺管理系統,系統必須要更加的美觀好 看,富有吸引力才行,畢竟先的網頁設計伴隨著互聯網絡的快速發展而變得非常 重要,成為了上網的主要評判標準,所以在人們使用網絡的頻繁的如今,網頁的 美觀性質變得非常非常重要。網頁設計所講究的主要是排版和布局,讓網頁所具 備的功能能以更好的一種形式呈現給每一位上網者,也能夠讓他們可以更好的去 了解這個網站提供的信息。
    需要面對眾多的普通用戶,隨時都會有對網頁設計的反饋,批評贊美兼而有 之,所以得根據實際情況進行修改,例如建站時考慮不周的地方,在設計時并沒 得到重視的細節,都需要根據現實的要求進行調整。在不損整體效果的同時讓使 用者用起來更加友好。這個過程并不能一蹴而就,而且網頁可以融合文字、圖片、 聲音、動畫于一體。這些都是傳統藝術所辦不到的。圖3-8是管理系統前端面向客 戶的頁面。
     
     
    圖 3-8 大學生志愿者信息管理系統前臺截圖
     
    當用戶想要注冊成為志愿者時,需要通過管理員的審核時,這個時候用戶需 要向系統發出申請,然后管理員再通過用戶所提交的信息來審核該用戶是否具備 成為志愿者的資格,在審核完了以后向用戶發送郵件提供驗證服務,這樣用戶才 真的能夠成為一名志愿者。圖 3-9是新用戶注冊流程圖,當用戶信息核對合格后 管理員會通過系統來提示用戶成功的成為一名志愿者。
    3.4PHP調用EXCEL的實現
    為了方便信息的管理與查看,用戶需要可以把志愿者的信息導出并且能夠以
    exce 1文件的形式保存下來,這樣不僅方便查看,也方便管理員調用志愿者們的信
    息以便操作。
     
     
    基本上導出的文件分為兩種:
    類Excel格式,這個其實不是傳統意義上的Exce 1文件,只是因為Exce 1的兼容能 力強,能夠正確打開而已。修改這種文件后再保存,通常會提示你是否要轉換成 Exce 1文件。。Exce 1格式,與類Exce 1相對應,這種方法生成的文件更接近于真正的 Excel格式[34-35]。代碼如下:
    <?php
    require_once 'Exce1/reader.php';
    Exce1Fi1e($fi1ename, $encoding);
    $data = new Spreadsheet_Exce1_Reader();
    Set output Encoding.
    $data->setOutputEncoding('utf8');
    $data->read(' jx1rwtest.x1s');
    error_reporting(E_ALL A E_NOTICE);
    for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    for ($j = 1; $j <= $data->sheets[0]['numCo1s']; $j++) {
    echo "\"".$data->sheets[0]['ce11s'][$i][$j]."\",";
    }
    echo "\n";
    }
    ?>
    Ec1ipse能夠通過添加其兼容的一些插件來分別實現了對Java、Per1、C++以及 Python的支持,現在隨著Ec1ipse能支持的語言不斷的增多,相信Ec1ipse終有一天會 成為能夠進行所有語言開發的IDE,所以在Ec1ipse上開發PHP應用程序導出exce 1文 件時非常不錯的選擇。代碼如下:
    <?
    set_inc1ude_path('.'.
    PATH_SEPARATOR .'D:\workspace\bizna1igy_eh\dev_src\inc1udes\PHPExce1' .
    PATH_SEPARATOR . get_inc1ude_path());
    require_once 'PHPExce1.php';
    require_once ' PHPExce1/Writer/Exce15.php'; // 用于其他低版本 x1s
    require_once 'PHPExce1/Writer/Exce12007.php'; // 用于 exce1-2007 格式 $objExce1 = new PHPExce1();
    //設置文檔基本屬性
    $objProps = $objExce1->getProperties();
    $objProps->setCreator("Zea1 Li"); $objProps->setLastModifiedBy("Zea1 Li");
    $objProps->setTit1e("Office XLS Test Document"); $objProps->setSubject("Office XLS Test Document, Demo"); $objProps->setDescription("Test document, generated by PHPExce1."); $objProps->setKeywords("office exce1 PHPExce1"); $objProps->setCategory("Test");
    $objExce1->setActiveSheetIndex(0);
    $objActSheet = $objExce1->getActiveSheet();
    $objActSheet->setTit1e('測試 Sheet');
    $objActSheet->setCe11Va1ue('A1', '字符串內容'); // 字符串內容 $objActSheet->setCe11Va1ue('A2', 26); // 數值
    $objActSheet->setCe11Va1ue('A3', true); // 布爾值
    ?>
    本文在寫文時主要應用的是utf-8,可能會出現亂碼的問題,當出現中文亂碼 的時候只需要把class-excel-xml.inc.php utf8_encode($v)替換成$v就沒有亂碼問題 了。本文中訪問到的數據都在專業平臺中,該服務器為Linux+Apache的環境,并 且將數據保存在MySQL中,所以要訪問這些數據時,需要通過由RSS封裝的安全 控件組織。最后在php.ini的配置文件中修改一些配置信息,并在配置好的php.ini 文件中存放好exce 1的導出的目錄變量,然后重新啟動服務器即可生效。
    3.5頁面訪問權限的設定
    因為來訪的用戶不同,而不同的用戶需要接觸的信息是并不相同的,所以信 息管理系統需要為不同的登錄用戶提供不同的訪問權限,一般這樣的實現會在數 據庫表中設計一個專門包含了用來指定每個用戶訪問權限(“普通游客”、“注冊用 戶”、“志愿者”、“管理員”等)的列。每個權限的用戶將會看到不同的界面、應 用程序、活動信息以及用戶信息,因為該功能幾乎會涉及整個數據庫的布局,所 以在設計數據庫的表時,在這方面要非常的注意,非常的小心,邏輯一定要清晰。
    對于用戶不同權限不同頁面的變更處理是非常復雜的,會用到的控件有標簽、 Text文本框、日期列表、表格、Slecet下拉框等,而常用操作有確定、提交、下載、 上傳、退出等,能夠實現該操作的代碼如下:
    <custom name="count-sign" class="com-coretek-processcounter-sign"> <transition to="End" />
    </custom>
    首先建立起PHP代碼到XML文件的映射,例如文本框需要映射在XML文件中 為<text>;然后使用這種映射關系生成表單文件;然后再把文件上傳到服務器上。 表單文件的結構如下所示:
    <form action="index.php" method="post">
    用戶名:&n bsp<input type="text" name="username"><br/>
    密碼:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type="password" name="password"><br><input type="submit" name="submit" value="登陸"/><br><a href="enroll.php"><font color="blue">
    加入我們點擊這里 </font></a><hr><?phpwhile($r=mysql_fetch_array($q)){?>
    <table &nbspwidth=500 border="0" cellpadding="5" cellspacing="1" &nbsp 四
    bgcolor="#add3ef">
    <tr bgcolor="#eff3ff"><td>文件名字:<?php echo $r[name];?>
    || 文件類型:<?php echo $r[type];?>|| 文件大小:<?php echo $r[size]?>
    ||上傳人:<?phpecho $r[username]; ?></td></tr>
    <tr bgCo1or="#ffffff"><td><a href="./up/<?php echo "$r[name]";?>">
    <?phpecho "點擊此下載 ”;?></a>
    </td></tr></tab1e></form>
    其中只包含了一個name為"提交”的按鈕控件button,雖然按鈕控件只有一個, 但是它其中包含了一系列的子元素,該表單的解釋器設計是采用的三層架構,分 別為表單的構建層、業務的邏輯層以及流程的管理層。表單的構建層主要負責根 據表單文件的信息來創建表單的實例;而業務的邏輯層主要負責處理一些變更的 業務數據;流程的管理層則是負責控制網站整個流程實例的運行情況。
    表單的構建層封裝了許多控件實例以及創建方法,其中每個方法都能創建相 應的控件實例,且能夠把實例都加入到表單控件序列中。它首先會從包含著變更 的業務數據庫所對應的流程中獲取其需要表單信息,再將這些表單信息組成文件 并下載到本地,最后再根據這些文件創建新的表單。其方法代碼如下:
    protected $tVar = array();
    protected $config=array();
    pub1ic function __construct() { tag('action_begin',$this->config);
    //控制器初始化
    if(method_exists($this,'_initia1ize')) $this->_initia1ize();
    }
    protected function getActionName() {
    if(empty($this->name)) {
    //獲取Action名稱
    $this->name = substr(get_c1ass($this),0,-6);
    }
    return $this->name;
    }
    protected function isAjax() { if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) ) { if('xm1httprequest' strto1ower($_SERVER['HTTP_X_REQUESTED_WITH']))
    return true;
    }
    if(!empty($_POST[C('VAR_AJAX_SUBMIT')])
    || !empty($_GET[C('VAR_AJAX_SUBMIT')]))
    //判斷Ajax方式提交
    return true;
    return false;
    }
    Protectedfunction display($templateFile='',$charset='',$contentType='',$content='',$prefix='') { $this->initView();
    $this->view->display($templateFile,$charset,$contentType,$content,$prefix);
    }
    protected function show($content,$charset='',$contentType='') {
    $this->initView(); $this->view->display('',$charset,$contentType,$content);
    }
    protected function fetch($templateFile='') {
    $this->initView();
    return $this->view->fetch($templateFile);
    }
    private function initView(){ if(!$this->view) $this->view= Think::instance('View'); if($this->tVar) $this->view->assign($this->tVar);
    }
    protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') { $content = $this->fetch($templateFile);
    $htmlpath = !empty($htmlpath)?$htmlpath:HTML_PATH; $htmlfile = $htmlpath.$htmlfile.C('HTML_FILE_SUFFIX'); if(!is_dir(dirname($htmlfile))) mkdir(dirname($htmlfile),0755,true);
    if(false === file_put_contents($htmlfile,$content)) throw_exception(L('_CACHE_WRITE_ERROR_').':'.$htmlfile);
    return $content;
    } 以上就是生成表單對象的代碼,在生成表單對象之后,我們需要判斷該用戶的 權限,然后根據用戶的權限來給予他相應的操作,這個過程是通過數據庫表單及
    PHP代碼共同實現的,而實現的方式有很多種,就目前而言,最主要的三種方式為:
    1)緩存數據庫:通過緩存數據庫,通過 DBinonent 將數據庫信息以及 cookies保存在本地,在調用的時候就可以通過代理直接在本地調用數據來 驗證用戶身份,這種方式速度快但是不安全,不過卻是現在最主要的實現 手段[33];
    2)HTTP響應實現:通過從本地發送請求報文到HTTP服務器,經過服務 器的一些列處理后將生成的響應報文發送回瀏覽器,瀏覽器再根據報文內 容判斷用戶權限,以實現功能;
    3)雙緩存技術:這種技術既集合了緩存數據庫的快速,又同時具備HTTP 響應實現方式的安全與準確,不過代碼過于冗長,且不利于快速開發,所 以大多數時候并不適用該方法。
    因為志愿者管理系統涉及大量大學生的個人資料,如果泄露將造成巨大的損 害,所以為了既快速開發,又能夠保證安全性,我們將使用上述的第三種技術, 也就是雙緩存技術,這種技術恰好為我們解決了所面臨的問題,以下是實現該技 術所用的代碼:
    pub1ic boo1ean submit(productObj,toNode)
    {
    boo1ean isSaved = fas1e,istran = fa1se;
    isSaved = DAO.Save(productObj);
    if(isSaved)
    {
    isTran = ProcessOper.signa1(toNode);
    if(isTran)
    e1se
    {
    return fa1se;
    }
    }
    return true;
    public void signal(String toNode)
    {
    List<Task> tasks = taskService.createTaskQuery().list();
    Task mainTask=null;〃 主任務
    for(Task taskPar:tasks)// 查找主任務
    {
    List subtask = taskService.getSubTasks(taskPar.getId());
    for(Task task:subtask)
    {
    if(task.getExecutionId().equals(executionImpl.getId())){
    mainTask = taskPar;
    break;
    }
    }
    if(mainTask != null)
    break;
    }
    Request to /index.php: 10
    因為該信息管理系統是一個基于Web的數據管理系統,而在這種數據管理系統 中的權限比像論壇這樣的方式中的更顯得要重要的多,論壇中的管理方式因為他 本身就是一個特殊的客戶端,所以在對用戶的權限檢測主要是通過客戶端實現的, 當然,在一定的情況下也必須要通過客戶端和服務器的配合檢測實現的,而我們 所要設計的信息系統中,因為瀏覽器是每一臺計算機都已經具備了的,所以如果 不建立好一個完整的權限檢測,那么一個“非法用戶”就很可能就能通過瀏覽器 的一些漏洞輕易的訪問到信息管理系統中的某些不該他訪問的功能了。因此信息 管理系統的業務系統都需要有一個或多個權限系統來實現訪問權限檢測,讓經過 授權的用戶可以正常合法的使用已授權功能,而對那些未經授權的“非法用戶” 將會將他們徹底的“拒之門外”。下面就讓我們一起了解一下如何設計可以滿足大 部分的信息管理系統中對用戶功能權限控制的權限系統。
    不同職責的人員,對于系統操作的權限應該是不同的。優秀的業務系統,這 是最基本的功能。可以對“組”進行權限分配。對于一個大企業的業務系統來說, 如果要求管理員為其下員工逐一分配系統操作權限的話,是件耗時且不夠方便的 事情。所以,系統中就提出了對“組”進行操作的概念,將權限一致的人員編入 同一組,然后對該組進行權限分配。權限管理系統應該是可擴展的。它應該可以 加入到任何帶有權限管理功能的系統中。就像是組件一樣的可以被不斷的重用, 而不是每開發一套管理系統,就要針對權限管理部分進行重新開發。滿足業務系 統中的功能權限。傳統業務系統中,存在著兩種權限管理,其一是功能權限的管 理,而另外一種則是資源權限的管理,在不同系統之間,功能權限是可以重用的, 而資源權限則不能。
    public void signal(String toNode)
    {
    //獲取流程實例當前活動
    Execution execution = JBPM.getActivityExecution();
    //獲取當前流程實例集合和任務迭代器
    List subtask = taskService.getTasklistById(execution.getPid());
    Iterator tasks = taskService.getTasklistById(execution.getPid()).get Iterator();
    //完成當前用戶持有的子任務
    while(tasks.hasNext())
    {
    tsk = tasks.next();
    if(tsk.getAssignee().equal(currentUser))
    taskService.complete(tsk);
    }
    //判斷是否所有子任務都已完成 以上代碼就可以判斷一個登陸用戶的權限,上面例子中說明用戶沒有查看志 愿者資料的權限,所以禁止該用戶訪問信息頁面,并且讓頁面重新跳轉到Index頁 面,并且顯示提示信息。
    3.6 本章小結
    本章首先對大學生志愿者信息管理系統的可行性進行了分析,并且進行了系 統可行性分析。然后再對大學生志愿者信息管理系統的需求和功能進行詳細的分 析,并且從邏輯業務的需求出發,就用戶需求和功能需求等幾方面進行了分析。 在這些已經進行了的分析的基礎上,接著給出了設計的數據庫表以便能夠存儲數 據,最后還對系統中一些要用到的模塊進行了如何設計的敘述。
    第四章 系統的實現
    4.1系統后臺的實現
    用戶可以在輸入了用戶名以及密碼以后,通過單擊登錄按鈕,使瀏覽器觸發
    POST的事件,這個事件就會讓瀏覽器發送報文給后臺服務器,服務器再將輸入的 用戶名和密碼封裝好了的傳給LoginAction.class.php。Thinkphp提供了一個 Login.class.php的組件來封裝這個登陸程序,不僅在安全性上可以保證,在速度上 也讓人滿意。在服務器端的php文件中,Action類是作為底層,包含著所有Control 層所需要的重用組件,為View層的php文件提供統一的接口與重用組件[34]。
    4.2信息系統后臺管理
    圖4-2展示的是用戶登錄時的流程圖,當用戶輸入了用戶名和密碼后,后臺 代碼回對輸入的內容進行判斷并將結果錄入session中,若session匹配正確, 則會再在數據庫中匹配合適的記錄,若有相關的匹配記錄,則會成功跳轉到后臺 頁面的主界面。
     
    圖 4-1 用戶登錄流程圖
    登錄成功后,轉到信息管理系統后臺的就能看到將功能排布在左邊的信息展
    示頁面的了,然后可以通過點擊tab來進行功能方面的操作,如4-3所示:
    ,其結構如下:
    private function parseConfig($db_config='') {
    if ( !empty($db_config) && is_string($db_config)) {
    //如果DSN字符串則進行解析
    $db_config = $this->parseDSN($db_config);
    }elseif(is_array($db_config)) { // 數組配置
    $db_config = array_change_key_case($db_config);
    $db_config = array(
    'dbms' => $db_config['db_type'],
    'username' => $db_config['db_user'],
    'password' => $db_config['db_pwd'],
    'hostname' => $db_config['db_host'],
    'hostport' => $db_config['db_port'],
    'database' => $db_config['db_name'],
    'dsn' => $db_config['db_dsn'],
    'params' => $db_config['db_params'],
     
    );
    }elseif(empty($db_config)) {
    // 如果配置為空,讀取配置文件設置
    if( C('DB_DSN') && 'pdo' != strtolower(C('DB_TYPE')) ) {
    $db_config = $this->parseDSN(C('DB_DSN'));
    }else{
    $db_config = array (
    'dbms' => C('DB_TYPE'),
    'username' => C('DB_USER'),
    'password' => C('DB_PWD'),
    'hostname' => C('DB_HOST'),
    'hostport' => C('DB_PORT'),
    'database' => C('DB_NAME'),
    'dsn' => C('DB_DSN'),
    'params' => C('DB_PARAMS'),
    );
    }
    }
    return $db_config;
    }} 大學生志愿者信息管理系統的登錄頁面分為前臺登錄和后臺登錄,前臺登錄 的界面跟我們平時看到的網站登錄界面類似,而后臺管理系統所處的登錄頁面如 下圖4-1所示。
     
    圖 4-2 大學生志愿者信息管理系統的后臺管理程序的登錄頁面
     
    后臺管理頁面中一共是有 6 個子菜單,其分別為學生信息管理、活動管理、 前臺頁面欄目管理、后臺管理員管理、志愿者信息管理、志愿者協會新聞管理、 留言板塊的管理以及信息統計的管理,如圖4-3所示。其中學生信息管理師整個系 統中最重要的功能,因為該系統設計的初衷就是為了方便志愿者協會更好的統計 志愿者的信息以及更好的管理這些志愿者,所以這個功能可以說是整個系統的靈 魂,志愿者信息主要包括了以下幾方面的內容:
    1.學生姓名:學生的姓名作為信息最重要的一部分是必不可少的,通過學生姓名 的查詢也可以輕而易舉的查到需要查找的學生。
    2.學生編號:為了避免學生姓名相同而出現無法辨別學生的情況,所以必須加入 學生編號來區分學生,也更便于查找學生的信息(該字段為自動生成)。
    3.學生所屬學校:了解學生所屬的學校,在活動時能夠更好的安排活動。
    4.學生所屬專業:通過該字段能夠更好的為志愿者們安排職責與任務,也是必不 可少的信息。
     
    5.學生所屬組織:通過該字段的信息能夠了解,該學生是在哪個下屬志愿者協會 工作,這樣在安排活動時能快速的分配。
    6.學生所屬地區:通過該字段的信息可以了解學生所在的區域,也是為了在分配 任務時候能夠更好的分配。
    7.學生參加活動情況:該字段是給后期管理員填寫,通過填寫該字段可以了解學 生在參加志愿者活動時候的情況以及學生的表現,通過這些信息也可以在以后活
    動時有參考。
     
     
    —®®Trace 信 IS
    請求時間:2014-04-19 11:12:39
    當前頁面:/aa/index.php/Admin/Index/add
    環選協議:HTTP/1.1 GET
    運行宿息:Process: 0.0244s ( Load:0.0074s Init:0.0095s Exec:0.0006s TemplaceiO.0069s ) | UseMem: 1.245 kb | LoadFile:33 | CallFun:51.1442 會話ID : rj00cic06sdjlmtdclf5q2tqn7
    日志記錄:19條日志
    [2014-04-19TLl:12:39+08:00 ] /aa/index.php/Admin/Index/add | INFO: Tag[ route_check ] -START-
    [2014-04-19TL1:12:39+08:00 ] /aa/index.php/AdmWndex/add | INFO: Run CheckRoute Behavior [ RunTime:0.000602s 1
    [2014-04-19T11:12:39+08:00 ] /aa/index.php/Admin/Index/add | INFO: Tag[ route_check ] -END- [ RunTime:0.000714s ]
    [2014-04-19TL1:12:39+08:00 ] /aa/index.php/Admin/Index/add | INFO: Tag[ app_begin ] -START-
    [2014-04-19T11:12:39+08:00 ] /aa/index.php/Admin/]ndex/add | INFO: Run ReadHtmlCache Behavior【RunTime:0.000389s ]
    [2014-04-19TL1:12:39+08:00 ] /aa/index.php/Admin/]ndex/add | INFO: Tag[ app_begin ] -END- [ RunTime:0.000453s ]
    [2014-04-19T11:12:39+08:00 ] /aa/uidex.php/AdmMndex/add | INFO: Tag[ view_template ] -START-
    [2014-04-19TLl:12:394-08:00 j /aa/index.php/AdmiMndex/add | INFO: Run LocadanTemplate Behavior [ RunTime:0.000226s ]
    [2014-04-19T11:12:39+08:00 ] /aa/index.php/Admin/lndex/add | INFO: Tag( view_template 1 -END-- [ RunTime:0.000305s ]
    [2014-04-19111:12:39*08:00 ] /aa/index.php/Admin/lndex/add | INFO: Tag[ view_parse 1 -START-
    [2014-Q4-19TL1:12:39+08:00 ] /aa/index.php/AdmWndex/add | INFO: Run ParseTemplate Behavior [ RunTime:0.004913s ]
    [2014-04-19T11:12:39+O8:OO ] /aa/index.php/Admin/Index/add | INFO: Tag[ view_parse ] -END- [ RunTinie:0.00500E ]
    r 2014-04-19TL1:12:39+08:00 1 /aa/index.ohD/Admin/Index/add I INFO: TaaF view filter 1 -START -
    圖 4-3 后臺管理系統主界面的頁面截圖
    上面的這塊功能是這個信息系統最為核心的一個功能,實現起來卻并不復雜, 主要的技術問題就是集中在防腳本注入,以及信息的安全性問題。不過,最主要 的問題還是可讀性和方便用戶查詢方面,為了解決該問題我們在上面已經介紹了 一門技術 用php導出excel文件,通過該技術,不僅能夠更好的保存信息,也
    方便管理員查詢與管理用戶的信息,該技術也就是先通過SQL語句來查詢數據庫, 然后將查詢得到的信息導出并生成excel文檔,其流程圖如圖4-4示。管理員通 過該功能能夠完成的事務如下圖4-5所示。下面介紹的是活動信息管理功能以及志 愿者協會新聞管理的功能模塊。
    該信息管理系統是采用PHP+MySQL+Linux+JavaScript的設計方式來設計的, 所以給所有的功能都分配了唯一的標識ID,并且可以從數據庫中查詢ID來得到每 個功能的功能文檔,這樣就能夠更方便用戶使用。其中學生信息管理師整個系統 中最重要的功能,因為該系統設計的初衷就是為了方便志愿者協會更好的統計志 愿者的信息以及更好的管理這些志愿者。
     
     
    圖 4-4 報表功能流程圖
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    在用戶點擊左邊導航菜單時,在客戶端的JavaScript代碼會找到被點擊的節 點,然后通過事件的捕捉來捕捉到該事件,再通過綁定在該節點上面的事件處理 函數來處理該事件來得到效果。如果事件類型是onclick事件,則會執行folder 的事件處理函數,通過該處理程序可以展開選項的字菜單,如果沒菜單的話就是 直接進入頁面;如果類型是dbclick,則會執行goPage事件處理函數,通過該事件 處理函數中使用的screen對象可以直接跳轉頁面讓瀏覽器進入所點擊的頁面不展 開其字菜單。節點中所綁定的事件不同,其處理事件的函數也就不同。所以,在 設計自定義節點事件處理函數時,要考慮實際需求與用戶習慣,這樣才能設計出 有更好用戶體驗的管理系統。
    當然以上的這些功能都是頁面的功能,而該管理系統最主要的功能還是需要 在服務器端賴實現,要實現發布活動信息的功能,需要與服務器和數據庫打交道, 而為了讓數據庫得到信息,并且能夠使編輯的頁面能夠如我們想象的來顯示,需 要使用一個叫做FCKeditor的對象,通過在管理頁面上創建一個FCKeditor的實 例來寫入對頁面的要求[35],然后將寫入的文檔通過報文傳回服務器端寫入數據庫, 再用戶點擊頁面時PHP代碼會讓瀏覽器向服務器發送一個GET的報文,然后通過 查詢字段來查找數據庫中相應的數據并傳回瀏覽器,這樣就能讓用戶看到發布的 活動信息與新聞了。具體的實現代碼如下:
    protected function assign($name,$value='') { if(is_array($name)) {
    $this->tVar = array_merge($this->tVar,$name);
    }else {
    $this->tVar[$name] = $value;
    }
    } public function __set($name,$value) {
    $this->assign($name,$value);
    }
    public function get($name='') {
    if('' === $name) { return $this->tVar;
    }return isset($this->tVar[$name])?$this->tVar[$name]:false;
    }public function __get($name) {
    return $this->get($name);
    } protected function error($message,$jumpUrl='',$ajax=false) { $this->dispatchJump($message,0,$jumpUrl,$ajax);
     
    }protected function success($message,$jumpUrl='',$ajax=false) {
    $this->dispatchJump($message,1,$jumpUrl,$ajax);
    }
    } 其它的管理模塊因為在設計方面有很多的類似之處,他們都是使用重用的組
    件來完成的,而這些組件我們都能從架構中的Model文件庫中進行查找,這里包
    含了大量的重用組件與一些會經常使用的功能模塊。專業信息管理如圖 4-6 和圖
    4-7所示。
    當前用戶:admin修改口令退出糸規
     
     
    圖 4-6 人員信息頁面截圖
     
     
     
    圖 4-7 志愿者培訓計劃頁面截圖
    4.3系統前臺查詢統計的實現
    前臺查詢的實現是一個非常復雜的過程,不過這個功能能夠讓用戶非常方便 的去查找所需要的各種信息或者活動。實現過程中,我們需要一個TEXT文本框, 我們將其命名為coun tSearch,為了方便Javascrip t腳本調用它,我們將其class 取名為coun ter-search。當Javascrip t腳本的搜索引擎搜索到這個文本框時時腳 本程序引擎會自動的調用這個文本框上綁定的處理函數。
    API: API全稱為Application Programming Interface,中文的解釋為應用程序編程 接口,他是各個平臺所自定義的一些預先就定義好的函數,其目的是為開發人員 提供應用程序的幫助函數,有或是為開發人員提供一些基于某軟件或硬件的以訪 問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節,Javascript 中有很多現成的API對象,最經典的就是document對象,通過document中定義的那 些API方法。最經典的幾個API函數如下所示。
    1.all: document.all[]是IE下獨有的一個功能,但是他現在已經被淘汰掉了, 幾乎沒有人會用到這個函數了,但是他又有他的好處,因為他是一個多功能的類 似數組的對象,它本來是為了提供對文檔中所有HTML元素的訪問的,但是all[] 數組是源自 IE 4 ,并且在當時被很多其他的瀏覽器所采用,但現在幾乎沒有人會 用它來調用HTMLELEMENT對象了,大多數的情況反而是讓它來作為一個檢測瀏 覽器的標準。all[]現在來說的話,早就已經被FireFox所定義的一些簡單且容易兼 容的標準方法取代了,這些方法有更強的適應能力且為大多數瀏覽器接受,例如: Document 接口的標準的 getElementById()方法和getElementsByTagName()方法 以及getElementsByName()。盡管如此,這個all[]數組在已有的代碼中仍然會被 偶爾使用到。如同我們上面所說的,通過這種方式的可以檢測瀏覽器的標準以做 兼容性匹配,另外其實all[]能夠使開發人員知道它們在數組中的確切數字化位置, 從而是開發人員能夠直接從數組中提取它們,例如如果多個元素擁有指定的 name 的話,由于他么嗯共享同一名稱,所以要得到一個準確的函數就可以通過這個數 組[36]。
    2.getElementById:前端借口的API中不僅有像all[]這種兼容性很差的方法, 當然也有一些標準化的方法,這些方法除了 getElementById() 之外,還有 getElementsByName()和 getElementsByTagName()。不過,如果開發人員想要快速 的查找文檔中的一個特定的元素且該元素只會出現一次的花,最有效的方法是 getElementById。。所以,當在編寫文檔的時候,可以對這樣的特定的元素時,最 好給該元素一個 id 屬性,為它指定一個(在文檔中)唯一的名稱,然后就可以用 該 ID 查找想要的元素。
    3.cookie: cookie是通過報文來傳播的,他是報文中一個可讀可寫的字符串, 可通過后臺的PHP代碼對其進行一定設置,然后通過他對當前文檔的進行讀取、 創建、修改和刪除操作,。
    4.plugins: plugin是一個對象,他本身的用意是為了返回對文檔中所有嵌入 式對象的引用。例如Jquery.whell.plugin就是一個Plugin對象,其中的whee 1代表瀏 覽器已經安裝的插件,而通過這個插件可以模仿鼠標的滾輪事件。Plug-in對象中 還可以通過一些注釋來提供與該對象相關的信息,這些信息當中最重要的莫過于 它所支持的 MIME 類型的列表,通過這個列表可以很好知道他支持什么東西。雖 然plugins[ii]數組是由IE的老版本瀏覽器定義的,但是在IE瀏覽器中它卻總是空 的,因為IE都不支持插件和Plugin對象,反而利用webkit和genko內核的瀏覽器現 在對其支持很好。
    為了提高系統代碼的結構性,并且為了讓代碼更好維護,為了以后升級打下 基礎,該系統會采用OOP中最經典的高內聚低耦合的設計方式來設計系統的架構, 以降低系統代碼的耦合性,更便于查錯與,而且這樣可以通過不同的功能把系統 的模塊劃分為不同模塊,然后依據劃分好的模塊建立同一模塊中的重用組件,這 樣可以減少大量的工作量。所以,要滿足以上的需求來開發源程序的話必須包括 以下幾個步驟:整體流程的規劃、系統架構的搭建、用戶的登錄組件、通過后臺 組件讓PHP語言來訪問數據庫的程序包。在document的menu對象中有諸如幫助工 具欄、菜單欄、視圖等實現功能的函數;而前綴為history的函數對象中有處理流程 的,包括cookie的調用、和瀏覽器歷史進程的調用等;screen函數對象中則是一些 能夠幫助用戶完成更好操作體驗[37];以下是整個前臺系統的前后臺實現程序:
    <?php
    class Session {
    static function start() { session_start(); Session::setExpire(C('SESSION_EXPIRE'));
    }
    static function pause() { session_write_close();
    }
    static function get($name) {
    if(isset($_SESSION[$name])) {
    return $_SESSION[$name];
    }else {
    return null;
    }
    }
    static function set($name, $value) {
    if (null === $value) {
    unset($_SESSION[$name]);
    } else {
    $_SESSION[$name] = $value;
    }
    return ;
    }
    static function is_setLocal($name) {
    $local = Session::localName();
    return isset($_SESSION[$local][$name]);
    }
    static function is_set($name) {
    return isset($_SESSION[$name]);
    }
    static function _init() {
    ini_set('session.auto_start', 0);
    if (is_null(Session::detectID())) { Session::id(uniqid(dechex(mt_rand())));
    }
    Session::setCookieDomain(C('COOKIE_DOMAIN')); Session::localName(APP_NAME); Session::name(C('SESSION_NAME'));
    Session::path(C('SESSION_PATH'));
    Session::setCallback(C('SESSION_CALLBACK'));
    }
    static function useTransSID($useTransSID = null) {
     
    $return = ini_get('session.use_trans_sid') ? true : false; if (isset($useTransSID)) {
    ini_set('session.use_trans_sid', $useTransSID ? 1 : 0); }
    return $return;
    } 任何用戶要想查詢某個志愿活動或者志愿者的信息,必須先登錄該系統,再輸了查詢的字
    段后,就能查找到數據庫中有記錄的信息。前臺查詢的查詢結果頁面如圖4-8所示。
     
    圖 4-8 前臺查詢查詢結果頁面截圖
     
    4.4活動信息主頁面
    活動信息的頁面對于用戶而言是核心功能。在這個頁面中,上面顯示的是想 要查詢的大學生信息,下面將顯示這個志愿者的信息。ThinkPHP框架中控制器也 就是其Contro 1層,通過這個控制器可以把后臺的數據放上用戶所看的頁面中。通 過ThinkPHP的控制器可以把數據庫中關于活動的數據,以及所帶的附件還有最后 的評測信息都放上頁面。而通過這個頁面,用戶可以直接通過發布時間、發布人、 活動地點、活動內容、活動方式的查詢直接找到需要的活動信息,任何用戶要想查 詢某個志愿活動或者志愿者的信息,必須先登錄該系統,再輸了查詢的字段后,就能查找到數
    據庫中有記錄的信息。其流程框圖如下所示:
     
     
    該查詢是使用PHP中的功能模塊實現的,我們將該功能模塊封裝在
    ActionControl.class.php 的文件中,以便系統條用,而控制器 ActionControl.class.php 文件中的實現代碼如下所示:
    class Cookie {
    static function is_set($name) {
    return isset($_COOKIE[C('COOKIE_PREFIX').$name]);
    }
    static function get($name) {
    $value = $_COOKIE[C('COOKIE_PREFIX').$name];
    $value = unserialize(base64_decode($value));
    return $value;
    }
    static function set($name,$value,$expire='',$path='',$domain='') { if($expire=='') {
    $expire = C('COOKIE_EXPIRE');
    }
    if(empty($path)) {
    $path = C('COOKIE_PATH');
    }
    if(empty($domain)) {
    $domain = C('COOKIE_DOMAIN');
    }
    $expire = !empty($expire)? time()+$expire : 0;
    $value = base64_encode(serialize($value)); setcookie(C('COOKIE_PREFIX').$name, $_COOKIE[C('COOKIE_PREFIX').$name] = $value;
    }
    static function delete($name) {
    Cookie::set($name,'',-3600); unset($_COOKIE[C('COOKIE_PREFIX').$name]);
    }
    static function clear() {
    unset($_COOKIE);
    }
    } 在這個頁面中,每個活動信息標題都是一個能夠查看詳情的超鏈接,而視圖 層——也就是用戶看到的頁面,中能夠通過點擊這些超鏈接來查看自己所需要的 信息,并且通過服務器把用戶所要的信息從數據庫中調出數據并通過CSS轉化美觀 的頁面展現給用戶。而控制器則根據URL流中查詢項的信息從數據庫中調用數據, 并依據圖形文件設置頁面的外在表現。
    上述的過程是Contro 1層如何通過操作數據庫將。就像我們傳統意義上的控制 器一樣,ThinkPHP框架通過模塊、視圖和控制器分離編程的MVC設計思想,來讓 設計整個系統,這也是為什么該系統會選擇PHP來設計的原因[38]。
    String sql="insert Registration values
    ('"+ID+"','"+GF+"','"+DF+"','"+DDG+"','"+YE+"','"+CD+"','"+E+"','"+FDC+"','"+ FSDG+"')";
    通過這樣的一段代碼就可以把志愿者參加活動的信息存儲到數據庫了。而要 想將數據的導出卻和導入有著非常巨大的差別,從以下的代碼即可看出這些差別, 這兒可以舉一段例子來說明導出數據庫的一些代碼:
    class Debug {
    static private $marker = array();
    static public function useTime($start,$end,$decimals = 6) {
    if ( ! isset(self::$marker['time'][$start]))
    return '';
    if ( ! isset(self::$marker['time'][$end]))
    static public function useMemory($start,$end) {
    if(!MEMORY_LIMIT_ON)
    return '';
    if ( ! isset(self::$marker['mem'][$start]))
    return '';
    if ( ! isset(self::$marker['mem'][$end])) self::$marker['mem'][$end] = memory_get_usage();
    return number_format((self::$marker['mem'][$end] -
    self::$marker['mem'][$start])/1024);
    }
    該代碼在本系統很重要,是調用數據庫以及寫入數據庫的主要語句。重用性 非常高,也是安全性問題高發地帶,所以后面還會提到,但在后述中就不再說明 了。具體頁面請參看圖4-7查詢信息主頁面。
     
     
    圖 4-7 前臺新聞信息頁面截圖
     
    4.5本章小結
    本章為大學生志愿者信息管理系統的設計,首先完成了大學生志愿者管理的 結構設計,對各個模塊的設計進行描述,并且對其實現代碼進行部分的解析,接 著就各種模塊的問題以及設計方面的一些問題進行分析和問題的解決。
    第五章 系統的安全管理及其優化
    在如今的社會,隨著個人PC越來越普及,從而造就了web技術的廣泛應用,與 此同時基于網絡而產生的各種各樣的文字圖片媒體信息越來越多,在用戶層面上 來講,這些信息確實帶來了無與倫比的方便。但對于網絡安全來說,卻面臨著很 嚴重的信息安全問題。現在,越來越多的用戶在網上發布自己的信息,他們相信 著上傳網站的安全性,但是大多數時候他們的信息都被盜取,于是每天都會有垃 圾短信到他們的手機中,更嚴重的情況甚至是人身財產安全都得不到保障,這也 是為什么現在網絡安全會成為了大多數上網的人口中必然會提到的詞語。
    據調查,每年我國都會有成千上萬的大學生去參加志愿者活動,在我們的系 統建立后,相信這些志愿者的信息會時時的進入到本系統的數據庫當中,并成為 數據庫的一部分保存起來,如何保存這些數據就成了一個非常現實且嚴重的問題。 在安全性方面,我們使用1 inux系統就是因為其系統有非常嚴謹的權限管理機制, 病毒在其中可以說是寸步難行,另外,為了應對資料的丟失,我們會選擇將這些 原始數據就需要及時的備份起來,以防數據庫服務器不能正常的運行造成原始數 據的丟失。
    5.1系統的安全性
    由于校園網是整個中國大陸各個高校共享的,所以其中必然涉及了大量的隱 私數據,所以毫不夸張的說,我們在設計系統的是時候一定要萬分小心,要隨時 注意系統的安全性,任何小小的問題都必須引起我們的特別注意,而為了避免一 些安全性問題,需要考慮的是一般游客對系統訪問時候的安全性和對志愿者數據 的保證其安全性這兩個方面[36]。
    該信息管理系統的后臺管理頁面會設置一個權限 Most High 的系統超級管理 員,能夠通過創建本地的緩存的數據庫來訪問并取得數據,本地的緩存數據庫雖 然可以極大的提高讀取數據的效率,但于此同時在做數據備份的時候,是一個工 作量非常大、而且非常的復雜,這樣會很大程度的影響該系統的大規模使用。所 以有時候這個用戶需要在前臺也能查詢這些志愿者的信息。因為可能會有不止一 個人參與該系統的管理時,所以不同職責不同角色的管理者們都要參與進管理工 作中,就必須有各自所需要負責的任務。在這樣的管理環境中,每個人都能在各 種時刻注意自己的責任,既不可以不完成自己任務,更不可以越俎代庖去干涉別 人的任務,要不這樣會引起大量的數據變更,這樣非常易造成以后出現管理上的 困難與難處理的問題。所以在這個過程中必須建立有效的并且可隨意變更的管理 模式,讓不同的管理員都能更好的完成自己的任務,同時能夠協調自己的朋友完 成仍無,為整個系統提供管理依據,也能夠使其他的系統管理人員可以隨時了解 到系統現在所處的狀態以及活動或人員審核的處理日志,這樣就能保證系統的高 效而安全的管理了。系統各方面的完善可以讓志愿者的數據信息更具有安全性, 以免被惡意用戶找到SQL注入或竊取數據的機會,防止志愿者們的信息被惡意修 改或盜用[39],或者是遇到管理不善,造成數據的錯亂以及數據的丟失等等問題。
    此外,對志愿者們的原始數據保護也是尤為重要的。所以需要制定標準來完 成一系列的增刪改查連貫操作,系統結合ThinkPHP中的將這些連貫操作通過框架 中已經定義好的一些函數方法來進行有序的串聯。這樣就可以依據這些函數方法 所提供的手冊來定制流程,在不同的頁面都已完成相同的信息交互,從而實現整 個系統的標準定制。防止因存放數據庫的服務器失去正常運行能力時造成的原始 數據丟失[40]。
    最后,由于ThinkPHP是國內現在非常優秀的開源框架、有強大的任務管理系 統、用完全面向對象語言設計的框架[40],最終實現了 MVC的控制器,視圖,模型 分離的模式,通過這種模式,前后端能夠更好的配合,也能使得我們設計的系統 更少的出現意外,而且這個框架可以統一路由接口,可以很大程度的避免SQL注 入或惡意盜取數據。
    5.2系統優化
    設計本系統主要是為了讓志愿者協會的管理者能夠更好的管理以及保存志愿 者的信息。但是一般而言,新建的項目在填寫完表單并且單擊完成以后,并不是 真的做了什么實質性的內容,而僅僅是通過PHP代碼向數據庫中添加了一條項目條 記錄而已,而項目本身是并沒有填充什么實質性內容的。所以項目的定制就顯得 尤為重要了,通過為項目設置一些屬性并且分配系統的資源來使得項目可以處于 激活的狀態,這樣項目就不僅僅是一條記錄了,而是有機的跟系統中的其他信息 聯合在了一起,這樣就能夠按照需求去進行各方面的數據統計工作,以免做出無 用的勞動。因為我們所開發的系統是信息管理系統,所以其查詢統計的功能就是 系統本身的核心功能,從系統的結構出發設計該功能,就能在對系統的一些相關 數據進行統計,比如志愿者數量時能夠有更快且更好的功能了。這樣的優化不僅 能夠讓不同協會的負責人能夠更快且準確掌握志愿者的情況,盡早發現問題并調 整志愿者計劃,確保按時完成志愿者活動,也能夠使得系統的耗費不會那么嚴重, 這樣就能延續系統的壽命了。
    那么要如何優化這個功能呢?我們知道這樣的功能必須要通過表單來完成, 所以表單解釋器的優化就異常重要了,表單解釋器是能夠處理表單數據的服務程 序的解釋性編譯器,在一般情況下它都能很好的解釋填入其中的內容,并按照需 求從數據庫中讀取出的表單文件,建立表單的實例并且展現給用戶,但是如果數 據量太大的情況下就會出現其他的問題了,所以我們需要通過C語言的編寫來優化 這個功能,通過重寫紅黑樹算法來優化其編譯這樣不僅能夠負責處理所有的表單 控件發出的數據操作請求,還能保證每一條請求都能執行,不會出現任何丟包或 死鎖的問題。它和其他各種服務程序的關系如圖5-1所示。
     
    圖 5-1 表單解釋器與其他模塊關系圖
     
    從上圖可以看出,我們通過表單解釋器的編譯器來編譯我們的請求從而開始 處理表單時需要經歷以下的幾個步驟:
    1) 表單的請求發來,然后在編譯器準備完成后,把表單中的數據上傳到編譯 器中進行解析,然后將解析的結果送入數據庫中;
    2) 在請求完成后時,從數據庫獲取表的數據并為下面的的各流程和各狀態對 應的表單設置所需要的編譯器;
    3) 在這些流程的編譯引擎準備好了以后,下面就是執行編譯流程的的時候,
    表單解釋器會從這些編譯的結果中獲取與當前狀態相對應的表單,而在這些結果 可以重會從數據庫獲取指定的表單數據,這樣的方式可以知道表單的結構并且能 夠得到表單實例中所需的數據,然后將這些數據渲染后展現給用戶,最后在再將 這些處理后的結果持久化的儲存到數據庫中;
    4) 在數據庫編譯器以及表單解釋器成功的響應了用戶的操作后,還需要將這 些流程實例中的Success屬性讀取出來再反映回解釋器,以便能夠驅動流程實例向 后繼續運行。
    如此這樣,我們可以發現其實表單構建層已經封裝好了各種實用的方法以及 實例,只我們要做的只是調用他們的創建方法并將他們的返回信息保存起來然后 給下一個調用,每個方法都能在調用后返回相應的控件參數,然后給下一個方法 或者實例使用,并且能夠把所有的實例加入到表單的控件實例所需要的變量中去
    存儲起來[41]。這樣的方式能夠使得表單在變更業務數據時去相應的方法返回實例 中找到需要的表單數據,最后可以通過將表單數據加載到本地的方法和文件創建 表單,然后將所需的數據展現給用戶,這樣整個查詢功能就能提升巨大的效率, 并且幾乎不會出現死鎖的情況。以上表單查詢優化方法偽碼如下:
    class Authority {
    protected $_config = array(
    'AUTH_ON' => true,
    'AUTH_TYPE' => 1,
    'AUTH_GROUP' => 'think_auth_group',
    'AUTH_USER' => 'think_members'
    );
    public function getAuth($name, $uid, $relation='or') {
    if (!$this->_config['AUTH_ON'])
    return true;
    $authList = $this->getAuthList($uid);
    if (is_string($name)) {
    if (strpos($name, ',') !== false) {
    $name = explode(',', $name);
    } else {
    $name = array($name);
    }
    }
    return false;
    }
    $map['id'] = array('in', $ids);
    $authList = array();
    foreach ($rules as $r) {
    if ($r['type'] == 1) {
    $user = $this->getUserInfo($uid);
    //dump($command);//debug
    @(eval('$condition=(' . $command . ');'));
    if ($condition) {
    $authList[] = $r['name'];
    }
    } else {
    $authList[] = $r['name'];
    }
    }
    $_authList[$uid] = $authList;
    if($this->_config['AUTH_TYPE']==2){
    $_SESSION['_AUTH_LIST_'.$uid]=$authList;
    }
    return $authList;
    }
    protected function getUserInfo($uid) {
    return M()->table($this->_config['AUTH_USER'])->find($uid);
    }
    另外,本系統的數據備份的模塊也需要進行一些優化。數據的實時備份是必 須的所以我們必須在配置項中進行設置,而且在設置了以后還需要跟蹤任務的執 行情況,或者統計系統各表的數據情況,是系統管理的核心內容。
    這樣本系統的數據備份以及系統的還原就不需要采用人工的方式了,這樣可 以節約巨大的人力成本,而且這樣做還能保證安全性,不僅可以避免被Hack惡意 盜取數據庫資料,還能夠避免人工操作工程中的失誤。
    5.3本章小結
    本章主要講了一些系統存在的一些問題,然后分析了現在存在的一些系統優 化的方法,然后從本系統的實際狀況出發,描述了一些針對該系統的優化方法。
    第六章 系統測試
    系統的測試過程主要是包括了了以下的幾個重要環節:信息系統的運行測試、 信息系統的需求性測試、信息系統的性能測試、信息系統的設計嚴密性測試、信 息系統的實用性測試。在系統的詳細設計以及開發完成之后,選擇用什么方式來 測試信息系統就是相當關鍵的了,一個合理的測試用例選擇會直接影響到項目測 試的工作量以及成本。
    信息系統的開發是一個漫長的過程,其中自然會遇到各種問題,而且這些問 題可能沒有被發現,這樣的錯誤其實很大程度上是無可避免的。所以,我們需要 定義一個測試用例來檢測項目中的錯誤,而這個測試用例本質上也是一種遞歸, 其中包括了項目名稱、項目的管理人員、每個管理人員的角色劃分、管理人員負 責人的功能測試、測試的開始時間、測試的結束時間、測試的工作量、測試的描 述以及測試中的流程編號。同樣的道理,測試用例完成以后更需要將項目的錯誤 修正,或者對其中的很多東西進行優化,其中會用到一些算法,而這些算法可以 使用標準錯誤中的算法。
    值得注意的是,項目在測試的過程中需要給被測試的產品創建并綁定一些數 據,這樣讓項目能夠經受各種各樣的情況,這樣做也是為了延長系統的生命周期, 這樣就可以保證項目在工作的過程中不至于出現一些特殊的情況而報錯,而是保 證系統能夠在各種各樣的狀態下都能好好的的運行。
    6.1系統的測試
    系統的測試最重要的一步首推數據庫的測試,而數據庫的測試過程主要包括 以下幾點:
    單元測試:通過測試系統中的每一個事務邏輯,然后通過這個業務邏輯向數 據庫發包來查看系統的問題。例如該信息管理系統的增加志愿者的信息、修改志 愿者信息、刪除志愿者信息等需要通過這種單元測試來察看是否會出現丟包或者 死鎖的情況。
    數據庫的系統測試:這種測試方式需要有宏觀的思維,通過把數據庫作為整 體來進行一個外圍的測試,以發現數據庫是否會出現問題,因為MySQL數據庫的 開源特性可以讓我們更好的針對我們要開發的系統修改問題。
    集成測試:測試信息系統是否能夠與個人電腦本身進行匹配,或者是跟局域 網內的電腦進行匹配,甚至是整個網絡環境進行協同工作。
    下面我們將通過每一個測試是如何具體執行來察看信息系統每一塊的能力, 以下的測試工作是分階段進行的。
    1.單元測試
    單元測試中通常會使用兩種測試方法,一種是通過數據庫中的算法是否符合 我們所需的邏輯這個方面來進行測試,俗稱白箱測試;而另一種是通過測試代碼 的功能來測試,又被各類程序員稱為黑箱的測試。這樣我們就可以做到不管數據 庫的管理是否變更,用戶都可以自由的通過自定義通常的表單業務來進行數據的 業處理,還能夠將處理的結果存放在數據庫中[42]。不過因為業務數量以及數量類 型會不斷增多,以后一些業務數據勢必將會會出現一種數據項不能與用戶自定義 數據來進行鍵值配對的情況,因為在以后各種各樣的情況中數據的定義必然會顯 現其不可預見的特性,所以我們在測試的不能使用一種固定的數據結構來測試靜 態數據存儲時,業務數據邏輯表是否會發生意外,應該也要通過使用動態的擴展 數據來進行測試來看用戶所自定義的數據項是否能夠好存儲,這樣可能會有巨大 的工作量,但是卻是必不可少的一步[43] 。
    2.系統測試
    系統測試是對信息系統中的每一項功能進行測試,并對信息系統的整個設計 能力進行評估,經過測試后就能夠確認能力與缺陷以及系統所存在的限制進行一 一說明:
    用戶需要在任意的PC端上都能通過各類主流瀏覽器來訪問數據庫的數據。通 過多臺虛擬主機來進行大量的發包測試,如果每次都要在服務器端里面的log日志 進行閱讀時,都沒有出現任何死鎖或者丟包甚至停止服務的問題,就說明網站的 兼容性已經達標了,就可以符合了大部分的用戶的需求了。不過這樣也會存在不 少的問題,畢竟實際情況下很多時候,數據的壓力會讓我們想象不到,所以這樣 的虛擬發包服務雖然進行一定的負載均衡測試,但是肯定不夠準確,具體的問題 還需要在真正的遇到問題才行。不過,用戶在使用該系統前,我們還會通過發放 用戶手冊的方式來說明來進行所有的操作,這樣可以盡量的避免用戶因為不當操 作而造成的一些網站問題,所以在編寫用戶手冊的時候,就需要考慮這些問題, 如果在這方面的準備足夠充分、足夠完整的話,其實很大程度上可以避免許多的 性能或者是設計上的問題。
    3.集成測試
    通過了單元和系統的測試后,系統基本上就已經可以使用了,但是為了處理 一些數據庫方面比較特殊的問題,就需要使用集成測試來擴展數據表,然后再通 過這張數據表來實現這個測試。這種測試通過在使用的時候記錄用戶的問題來反 饋系統存在的一些問題,可以很大程度上的把系統所出現的所有問題都解決,因 為測試用列不管做的再怎么好總會有一定的漏洞,只有在實際的運行中才能發現 所有的問題,業務數據表的持久性為這種測試方法提供了很好的支持,這種方式 其他的普通的持久類數據庫存儲的設計思想大體上是一樣的,不過這樣的方式是 用來記錄錯誤的,其不同之處只在于前者是用來給系統進行真正的工作所以是必 不可少的,但是這個數據表可以在沒有更新以后是可以取消的。在驗證信息管理 系統能否和PC端以及小型工作站的服務器環境以及其硬件協同工作方面,這種做 法是非常有效果的,因為在做測試的時候很有可能無法顧及到這樣的情況。但是, 隨著這個數據表的字段如果會無止境的增加下去,在達到了一定的數量后,這些 大量的信息肯定會影響信息系統的運行速率。針對這種情況,筆者也提出了一個 解決思路,在管理系統中會為注冊用戶提供分布式數據庫的一系列操作,然后用 戶就可以在分布式數據庫的不同的擴展表的結構下來存儲數據,從而可以消除上 面所說的無限擴展字段所帶來的所有弊端[44]。
    通過上述的三項基本測試以后,系統基本可以正常的運行了。信息系統的狀 態就可以從待機轉向活動狀態了,一般情況下系統的狀態只包括了活動、待機以 及結束這三種狀態。當系統的狀態處于在運行狀態時,就說明用戶能夠正常的使 用信息系統了,在這種情況下任何的問題都是不被允許的,因為這個時候系統已 經面向大眾,一旦出現問題就會損失很大的用戶。所以,我們必須重視信息系統 在處于活動的測試工作,這樣就可以最大限度的來保證信息系統的質量,讓用戶 能夠更好的操作系統。
    6.2軟件維護
    維護軟件是在交付使用之后,還要定期進行的工作。通過維護我們可以修改 在開發時未發現的bug以及可以進行一些升級的工作。以下是幾類主要的維護工 作:
    1) 改正性維護 改正性維護是指對在信息管理系統的開發階段已經存在但在系統測試階段卻
    并沒有發現的錯誤進行改正。這方面的維護工作的工作量要會占據整個維護工作 總量的17%?21%左右。如果所發現的錯誤并不太重要,不會影響信息管理系統的 正常運行,則這方面的維護工作可以隨時的進行,并不急于一時:但是,如果發 現的錯誤是非常重要,重要到會影響到整個系統正常的運行,這樣的維護工作一 定要制定完整計劃來進行修改,不僅如此,還要隨時進行復查和控制。
    2) 適應性維護
    適應性維護則是指通過使用信息系統的適應信息技術的變化以及管理需求的 變化而進行的一系列修改。這方面的維護工作所需要的工作量占據了整個維護工 作的工作量的18%?25%左右。但就目前而言,由于計算機的硬件價格一直在下 降.所以各類系統軟件的開發商推出了許多軟件,所以程序員們常因為改善系統 的硬件環境以及運行環境所產生的系統需求而要進行的維護,以免造成運行環境 上的不兼容。兼容性的問題會造成這方面的維護工作的產生,而在進行適應性維 護的工作的時候也必須要像系統開發的時候一樣,有計劃且有步驟地去進行。
    3)完善性維護
    完善性維護是為了擴充功能或是改善性能而進行的維護性工作,這方面的工 作主要是在已有的系統中去增加一系列在系統的分析,也包括了在設計階段里面 并沒有規定但是后面卻又加入的功能與性能特征,因為這些功能對完善信息系統 非常必要。另外,這方面的工作還包括了處理效率和程序代碼質量的改進,完善 性維護的工作量會占整個維護工作的工作量的50%?60%左右,這方面的工作比較 重要,所以占的比重較大.因為這方面的維護性工作關系到了系統的開發質量, 所以這方面的維護必須要有計劃且有步驟地去完成,當然還要注意將相關的一些 資料加入到對應的文檔中去。
    6.3功能模塊測試
    大學生志愿者管理系統的測試方法是設計并執行一個比較合理的測試用例, 然后按照這個測試用例來進行一套完整的系統功能的測試,即所謂的黑盒子測試。 測試用例由測試人員,進行測試時輸入數據和測試完成后所預期輸出結果以及最 后實際的測試結果這四個部分組成。在我們設計測試用例的時候,不但要仔細的 推敲輸入條件是否是合理的,還要在必要的時候使用一些明顯不夠合理的輸入數 據來進行測試,以便檢測系統是否真的設計完善。
    6.3.1用戶測試環境
    在測試選擇測試環境是必不可少的過程,在測試之前一定要選擇合理的測試 環境,要保證測試環境的多樣性,必要性以及特殊性,因為管理系統是基于 B/S 來設計的,所以對于服務器瀏覽器等等都是有要求的,而測試環境本身就包括硬 件環境和軟件環境兩個部分,表 6- 1列出了該系統測試時的環境。
     
    表 6-1 用戶測試環境
    角色 數量 軟件配置 硬件配置
    WWW服務器 1 操作系統:Ubuntu CPU: 2*2核 內存:8G
    數據庫服務器 1 操作系統:Ubuntu 數據庫:MySQL 5.1 CPU: 2*2核 內存:16G
    負載生成器 2 操作系統:windowsXP、windows7 CPU: 2.0G 內存:2G
    測試瀏覽器 5 操作系統:chrome12.1、IE 7、IE8、
    IE9、IE10、FireFox4.1、Safari4.2 CPU: 2.0G 內存:2G
     
    6.3.2用戶登錄模塊的測試
    因為系統是管理系統,所以讓用戶能夠登錄系統是使用該系統的前提。因此, 用戶登錄所使用的模塊在系統中起著異常重要的作用。對用戶登錄模塊的測試主 要是去驗證用戶是否可以登錄系統,并且驗證系統能否準確的判斷用戶權限以及 系統驗證碼功能是否起到作用。測試中必須輸入錯誤的信息,這些錯誤信息主要 包括用戶名、密碼和驗證碼,通過查看這三個信息在錯誤時,系統的反饋來查看 系統的用戶登錄的模塊能否正常的發揮作用。測試結果如表6-2所示。
    表 6-2 用戶登錄模塊的測試結果
    功能模塊名
    用戶登錄模塊的測試
    功能描述 用戶登錄及驗證用戶的身份和權限
    測試目的 驗證用戶是否能登錄系統、判斷尸 戶權限及系統驗證碼功能
    步驟 操作描述 輸入數據 期望的輸出 實際情況
    1 輸入不存在的用 戶名 用戶名張三,
    密碼 123144 輸入的用戶名 不存在 同期望的輸出
    2 輸入用戶名,錯 誤的密碼 用戶名李四,
    密碼“123456” 用戶密碼錯誤,
    請重新輸入 同期望的輸出
    3 輸入錯誤的驗證 碼。驗證碼圖片 顯示為“3q4e”, 在驗證碼輸入框輸 入:“3q4e” 驗證碼輸入有 誤,請重新輸入 同期望的輸出
    4 正確的用戶名及 密碼,驗證碼 用戶名王六,
    密碼“654321” 登錄成功,跳轉
    到登錄首頁 同期望的輸出
     
    6.3.3志愿者管理模塊的測試
    測試志愿者信息管理模塊主要是設置不同的輸入數據,并就輸入的志愿者的 個人信息進行查詢。然后通過選擇相應欄目,例如志愿者的編號等信息,來查詢 志愿者的信息能否正確的傳輸到數據庫。其次,修改和查詢志愿者的信息,通過 測試與之前操作類似的操作來確定系統的志愿者信息管理模塊是否運行正常。測 試結果如表 6-3所示。
    表 6-3 志愿者管理及查詢模塊的測試結果
    功能模塊名稱 志愿者管理及查詢模塊的測試
    功能描述 志愿者信息記錄的添加、更新和查詢
    測試目的 志愿者管理功能(添加、修改)、學生查詢功能
    步驟 操作描述 輸入數據 期望的輸出 實際情況
    1 添加志愿者信
    輸入添加志愿者 的信息 顯示添加成功的
    提示信息 同期望的輸出
    2 修改志愿者信
    輸入修改后的志 愿者信息 顯示修改成功的 提示信息 同期望的輸出
    3 查詢志愿者信 息 輸入志愿者姓名
    張三 顯示學生張三的
    基本信息 同期望的輸出
     
    6.4測試結果數據
    我們所要做的測試是通過客戶端上的各種瀏覽器進行功能方面的測試,這樣 的測試環境就是一般的個人主機以及小型工作站這樣的客戶端標準測試環境。通 過這樣的測試可以把配置項變成信息系統的配置項目。但是隨著信息系統需要不 斷的更新換代,這樣就必須讓系統的配置項也隨之迅速增加。而此大學生志愿者 信息管理系統的配置項管理就會在以后的升級過程中成為很重要的一個環節,這 樣就避免了在以后升級過程中增加不必要的工作量,所以維護這些測試結果對于 系統的二次開發和升級都有很現實且重要的作用[44]。在完成了以上的測試以后, 我們就能在地址欄內輸入“http://localhost:3000Admin/admin.php",因為該頁面非常 重要,需要很強的安全性,所以端口設置必須修改,普通的80端口很容易受到攻 擊,我們改為3000,這樣普通人很難攻擊了。接下來輸入回車,這樣就能打開登 陸主頁,然后可能看到如圖6-1所示的界面了。
     
     
    圖 6-1 后臺 Admin 人員管理界面
    通過測試,我們還可以發現開發的信息系統能夠在幾乎所有的客戶端所配置 的主流http應用程序中正常使用,還可以支持高并發的網站訪問以及數據庫查詢, 表6-4展示了該系統性能及安全性的部分結果以及并發能力的展示。
    表 6-4 系統性能測試結果
    測試項目 技術目標 說明
    處理能力測試 >測試類型:填充信息
    >測試時間:5分鐘
    >處理能力:1500次/秒
    >并發用戶數:>50
    >平均響應時間:<0.5s
    >錯誤率<3% 在標準生產環境 下的預期值
    穩定性測試 >測試類型:注冊
    >測試時間:48小時
    >總交易數:>500萬
    >錯誤率<3%
    >AAA 服務器:CPU <50%、內存<80%
    >DB 服務器:CPU <50%、內存<80% 在標準生產環境 下的預期值
    負載均衡測試 >測試類型:訪問
    >測試時間:1小時
    >錯誤率<3%
    >2臺Linux服務器能夠同時工作
    >2臺數據庫服務器能夠同時工作 在標準生產環境 下的預期值
    災備測試 >測試類型:登陸
    >Linux服務器:一臺服務器停用,另一臺服 務器夠正常使用 在標準生產環境 下的預期值
    6.5本章小結 本章先介紹了一些系統測試的概念,而且就現在存在的一些方法進行介紹 并就系統的環境找到針對性的測試方法,并就系統的現狀找到合適的測試用例 然后描寫了一部分重要的測試用例內容。
    第七章 總結與展望
    7.1 總結
    本文深入的研究了大學生志愿者信息管理系統的業務流程以及就目前所存在 的問題以后,提出了重新建立一個全新的大學生志愿者信息系統的構思,并采用 了常用開發平臺Eclipse以及PHP語言這樣簡潔的軟件開發技術,而在數據庫管 理方面則是采用了MySQL數據庫,然后實現了集志愿者注冊、志愿者活動的發布以 及志愿者信息的導出等日常的志愿者協會的辦公功能。
    通過本文的研究,主要完成了如下的研究工作:
    (1)對目前國內大學生志愿者信息管理系統建設進行了深入的探討。
    (2)構架了一種基于B/S混合模式的大學生志愿者信息管理系統。大學生們可 以在網上進行了一些志愿者注冊,志愿者活動瀏覽以及志愿者信息的查詢。該模 式有很強的條理性以及可操作性。
    (3)探討了如何利用PHP這樣的網絡語言以及利用MySQL數據庫進行大學生志 愿者管理的業務邏輯處理、數據庫中的數據管理、志愿者活動的信息發布、志愿 者信息的導出,并對志愿者協會所需要的志愿者信息進行詳細的設計。
    本文通過設計繼而實現基于 PHP 的大學生志愿者信息管理系統,滿足了社會 上大學生的需求,同時也達到了志愿者協會需要信息管理的目的,不僅如此,我 們還極大地方便了志愿者協會日常的業務辦理以及信息管理。在該管理系統的設 計以及實現過程中,筆者可以深深體會到為什么說PHP語言是一種簡潔卻又實用的 OOP程序設計語言,當然,采用PHP語言開發系統前要考慮的問題還很多,除了要 考慮用戶所需的功能需求以及UI界面的設計,而在編寫程序代碼的時候,不僅要 注意代碼的可讀性可維護性,還要注意在編碼的時候一些非常細節的東西,例如 符號的輸入是否正確等,這樣的錯誤雖然小,但是卻會造成系統的出錯。總之, 開發大學生志愿信息管理系統前需要認真的思考,而在開發過程中則需要反復的 調試。同時,一定要善于去借鑒他人的理論,去吸收別人的經驗,并且還要涉獵 大量的相關資料,并定期的對自己的工作進度進行評估,并就錯誤進行檢查,并 要即使調整預定的方案,在適當的地方還要進行補充,這樣就能夠讓信息完善。
    7.2研究展望
    目前該信息管理系統已經基本的完成了,但是由于資料與時間的原因,所以 在一些問題的研究上顯得比較的粗略,這些方面還需要探討以及進行深一步的研 究。下一步的研究中,需要從以下的幾個方面來對本信息系統進行改善:
    (1)對活動后志愿者的表現進行評價等其他的業務的辦理需求,并進一步的完 善處理方式,而信息管理系統只完成了主要的功能,其他細枝末節的功能還需要 以后一一實現。
    (2)采用了PHP語言開發后,讓本系統的開放性變得很強,但是系統的功能 中還有些缺陷,所以我們需要進行改進。
    7.3本章小結
    本章就現存的問題進行了一些描述,而且還描述了一些未來的一些展望。
    致 謝
    在本論文結束的時候,我要在這里衷心的感謝在寫作過程中給予我關心和支 持的所有人。
    首先,我要向我的導師唐普英副教授致以我最衷心的謝意!他用他那嚴謹治 學的態度、敬業的可貴精神以及思想的深刻與開闊讓我受益匪淺,這樣的進步會 指引著我以后前進的每一步。而在課題的實現方面,張老師也給了我巨大的幫助, 總能在我遇到無法解決的問題時,幫助我我理清思路,拓寬思路,并幫助我解決 了難題。
    我的學業能夠如此順利的完成,離不開光電信息學院各位老師們的關心與幫 助,在此,我對他們致以我衷心的感謝!
    當然,也感謝在學習生活中給予我知識的各位老師們,如果沒有他們的傾情 傳授,就不會有這篇論文的誕生 。最后,我還要感謝我家人在對我學業方面的理 解以及支持,非常感謝謝他們在平時生活中對我的關心。在此,我謹向我周邊所 有關心過我、愛護過我或是幫助過我的人們致以我最誠摯的謝意!
    在論文的最后,我還要特別感謝我父母,是他們用他們無私的奉獻以及無條 件的鼓勵與支持讓我不斷前進。
    參考文獻
    [1]姜懷梅.高校志愿組織中的志愿者管理研究[D].沈陽:東北大學,2008.14-26.
    [2]張姝.我國志愿者培訓體系研究[D].北京:中央民族大學,2011.26-62.
    [3]張民.上海志愿者管理系統分析與設計[D].上海:華東理工大學,2012.33-65.
    [4]白宏亮.中美大學生志愿服務比較研究[D].哈爾濱:東北林業大學,2009.12-76.
    [5]楊亞洲.高職院校校園網建設的規劃與研究[D].吉林:吉林大學碩士論文,2007.20-53
    [6]程敏.數字化校園管理系統的研究與開發實現[D].吉林:東北師范大學碩士論文,200
    7.120-323.
    [7]倪應華.基于XML在線考試系統的研究與實現[J].北京:計算機應用技術,2005.12-13
    [8]孟愛國,卜勝賢,李鷹,甘文.一種網絡考試系統中主觀題自動評分的算法設計與實現J].計算 機與數字工程,2005(33)-7.
    [9]左強等.為在線考試系統權加三護法[J].安全技術,2005(2).13-15
    [10]蔡曉東.網絡與信息安全[J].西北工業大學出版社,2004.22-88
    [11]石志國.PHP動態網站編程[J]北京:清華大學出版社出版,2008.11-19
    [12]張曉平.基于貼近度的模糊綜合評判結果的集化J].山東大學學報(理學版), 2004,39(2).12-14
    [13 ]張靜.電子商務網站的研究與設計[D].吉林:吉林大學碩士論文,2006.15-23
    [14]武華聰.JSP與網站開發實踐[D].北京:科學出版社,2009.15-23
    [15]高峰.在實戰中成長-JSP開發之路[M].北京:電子工業出版社,2009. 15-23
    [16]周緒,管麗娜,白海波.SQL Server2000入門與提高[M].北京:清華大學出版社,2002. 15-23
    [17]袁赟.Eclipse Rep框架分析和應用研究[D].同濟大學碩士論文.2007. 15-23
    [18]張恒汝.精通Eclipse整合Web開發一Struets Spring Hibernate JBPM[M].北京:人民郵電出版 社.2008. 15-23
    [19]SQL Server 2000.http://baike.baidu.com/view/1133398.htm,2010.12. 15-23
    [20]陳剛.Eclipse從入門到精通(第2版)[M].清華大學出版社.2007.7.15-23
    [21]GEF.http://baike.baidu.com/view/351079.htm,2010.12. 15-23
    [22]Hibernate.http://baike.baidu.com/view/7291.htm,2010.12. 15-23
    [23]第三代配置管理解決方案: 統一變更管理( UCM ) .http://www.ibm.com/developerworks /cn/rational/r-ucm/.1991.4-10
    [24]劉志清.變更管理系統的研究與實現[D].吉林大學碩士論文.2009.12. 15-23
    [25]肖蕾,華竹軒.軟件開發中變更管理的研究[J].電腦知識與技術,2007,(9):775-776
    [26 ]陳宇,鐘林輝等.基于配置管理系統的軟件過程管理機制研究J].計算機科學,2000,27(9):4-5
    [27]李卓玲.數據庫系統原理與應用[M].北京:電子工業出版社,2000.15-27.
    [28]G. Mishne and M. Rijke, A Study of Blog Search. In Proceedings of 28th European Conferenc on Information Retrieval 2006.24-43
    [29]G. Mishne and M. Rijke, Capturing Global Mood Levels using Blog Posts. InProceedings of American Association for Artificial Intelligence 2006. 15-27
    [30]G. Mishne and M. Rijke, MoodViews : Tools for Blog Mood Analysis. In Proceedings of AAA I 2006 Spring Symposium on Computational Approaches to Analysing Weblogs. 15-32
    [31]Pew Internet and the American Life Project. 2005.1-10.
    [32]Pew Internet and the American Life Project. 2005. 15-23.
    [33]N.Glance,M.Hurst,and T.Tornkiyo.Blogpulse:Automated Trend Discovery for Weblogs.In Proceedings of WWW 2004 Workshop on the Weblogging Ecosystem:Aggregation,Analysis and Dynamics,2004.
    [34]D.Gruhl,R.Guha,D.Liben-Nowell,and A.Tomkins.Information Diffusion Through Blogspace.In Proceedings of the 13th International Conference on World Wide Web,pages 491-501,2004
    [35]M.Hodder.Live Web Search. http://www2.sims.berkeley.edu/courses/is141/f05/schedule.html
    [36]http://blog.sina.com/
    [37]http://blogsearch.google.com/
    [38]http://spaces.live.com/
    [39]高杰.深入淺出JBPM .人民郵電出版社.2009. 15-23
    [40]王琳.基于MVC的工作流可視化定義系統的設計與實現[J].北京城市學院學報2003,(3):8-84
    [41]馮相忠.基于MVC設計模式的Struts框架及其應用的研究[J].計算機技術與發展,2006,16(8) :1 31-136.
    [42]鄧亞明,楊邦榮.基于ECLIPSE圖形插件開發的研究[J].電腦開發與應用,2009,22(2) :20-21
    [43 ]李英才.項目管理在軟件開發過程中的體現[J].科技信息,2008,(5):124
    [44]羅鐵清,王瑩,王如龍.軟件項目管理流程分析與設計[J].計算技術與自動化,2005,24:106-10&
    【本文地址:http://www.bzhlmm.com//guanlilei/gongshangguanli/xixinguanli/5844.html

    上一篇:基于JSP的學生就業信息管理系統設計與實現

    下一篇:基于 Android 與 Web Services 的灌區信息管理系統

    相關標簽: