李留青,張瑩瑩
(1.黃淮學(xué)院,河南駐馬店,463000;2.駐馬店市衛(wèi)生學(xué)校,河南,463000)
隨著計算機網(wǎng)絡(luò)技術(shù)與數(shù)據(jù)庫技術(shù)的發(fā)展,使人們的生活與工作方式發(fā)生了巨大的改觀。從而使得工作更高效地進行。學(xué)生成績管理應(yīng)該能夠提供真實可靠的信息以及快捷方便的方法供學(xué)生、老師以及管理者進行查詢或管理。利用計算機技術(shù)可以有效且便捷的進行學(xué)生成績的管理,使高校向科學(xué)化、正規(guī)化、信息化管理邁出的重要一步。
學(xué)生成績管理系統(tǒng)一直采用人工管理方式。一直以來,這種管理方式已經(jīng)為大多的師生所接受,但隨著科技進步和信息時代的到來,師生們對信息的需求越來越大,對信息處理的各種要求也越來越高,學(xué)生成績管理的人工模式已經(jīng)難以滿足需求。解決這些問題最好的辦法就是實現(xiàn)學(xué)生成績管理自動化,用計算機處理來代替人工操作。
本系統(tǒng)主要分三個部分:學(xué)生模塊、教師模塊、管理員模塊。不同的角色登錄成功后將會有不同的權(quán)限和功能。其中管理員可以管理學(xué)生和教師以及其他所有和該系統(tǒng)有關(guān)的設(shè)置;教師可以管理學(xué)生;而學(xué)生只能查看成績和選課。依據(jù)功能設(shè)計原則,將整個系統(tǒng)進行模塊劃分,得到了如下圖所示的功能模塊,如圖1所示。
圖1 系統(tǒng)功能模塊圖
系統(tǒng)設(shè)計主要對系統(tǒng)的總體功能如何設(shè)計,如何劃分模塊,系統(tǒng)的數(shù)據(jù)庫如何設(shè)計進行研究,它為系統(tǒng)的實現(xiàn)做鋪墊。在系統(tǒng)的設(shè)計過程中起著非常重要的作用。
本項目涉及關(guān)系數(shù)據(jù)庫理論的規(guī)范化,以解決函數(shù)依賴和數(shù)據(jù)依賴問題。整個系統(tǒng)基于SSH2(Struts2 + Spring+ Hibernate)技術(shù),不但可以有效提高系統(tǒng)開發(fā)效率,而且在系統(tǒng)安全性、穩(wěn)定性和健壯性上都有良好的改進。用戶密碼使用MD5加密,以增加系統(tǒng)的安全性。使用Apache的HSSFWorkbook方便數(shù)據(jù)生成Excel文件供用戶下載。
表現(xiàn)層使用了Struts2框架,實現(xiàn)了視圖控制分離。Struts2的優(yōu)點主要集中體現(xiàn)在兩個方面:Taglib和頁面導(dǎo)航。Taglib是Struts2的標(biāo)記庫,靈活使用能大大提高開發(fā)效率。關(guān)于頁面導(dǎo)航,將是今后的一個發(fā)展方向,事實上這樣做,可以使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著很多的好處。
業(yè)務(wù)層使用了Spring框架。Service層需要處理業(yè)務(wù)邏輯和交叉業(yè)務(wù)邏輯、處理事務(wù)、日志、安全等,而這些與Spring的IoC,AOP等不謀而合,完美的實現(xiàn)了業(yè)務(wù)代碼的高效分離。
Hibernate框架是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架。Hibernate的強大緩存機制能一定程度上的緩解服務(wù)器端頻繁讀取數(shù)據(jù)庫的壓力,這也是Hibernate被廣泛使用的重要原因之一。而且Hibernate高效的權(quán)衡了運行效率、內(nèi)存消耗和、開發(fā)效率,并自動封裝了事務(wù)控制和安全性代碼等重要功能。
2.2.1 驗證用戶登錄流程
服務(wù)器首先通過驗證驗證碼是否正確,然后在通過角色判斷用戶名是否存在于相應(yīng)的表中,因為這樣可以盡量減少對數(shù)據(jù)庫不必要的訪問次數(shù)。當(dāng)找到用戶名后,取出該用戶對象的密碼字段與表單中提交過來經(jīng)客戶端MD5加密的密碼再次被服務(wù)器端MD5加密的密碼進行對比,如果相同將會進入相應(yīng)的用戶角色的管理頁面,否則返回該登錄頁面。
2.2.2 學(xué)生總成績計算流程
由于直接在學(xué)生的成績單上只填入考試成績,這樣做是很不符合實際情況的,綜合考慮黃淮學(xué)院的學(xué)生成績統(tǒng)計情況,設(shè)計出了以下成績計算流程,更方便教師對學(xué)生的成績管理。首先系統(tǒng)會按照學(xué)生上機單個成績計算出上機成績總和,然后將教師手動輸入的考試成績、平時成績、教師授課比率、上機成績總和按照規(guī)定的法則進行數(shù)學(xué)運算,最終得到成績總和。
2.2.3 關(guān)鍵技術(shù)設(shè)計
(1)頁面設(shè)計
要實現(xiàn)系統(tǒng)的界面的全面國際化,包括文字,標(biāo)題,JavaScript提示信息、圖片和Flash的國際化就要從Struts2的國際化入手,將“global_zh_CN.properties”和“global_en_US.properties”進行中英文的配置。然后將JavaScript文件、圖片、Flash先準(zhǔn)備中英文兩個版本,分別取不同的文件名。將“global_zh_CN.properties”和“global_en_US.properties”中的vlaue設(shè)置不同版本的路徑。最后在網(wǎng)頁資源的URL中引用其name,即可實現(xiàn)頁面元素的國際化。
(2)防止地址欄URL的非法跳轉(zhuǎn)
所有受保護的頁面都放入WEB-INF目錄中,用戶如果想要通過瀏覽器地址欄中輸入該URL直接訪問本目錄中的資源是不可能的,因為WEB-INF目錄是受Tomcat服務(wù)器所保護的,所以在此只能通過Struts2中的Action跳轉(zhuǎn)來實現(xiàn)訪問。如果用戶自己輸入Action的URL依然能訪問到這些受保護的文件,此時就需要使用Struts2中的攔截器,首先要判斷對應(yīng)用戶的Session是否為null,如果為null則意味著是用戶的非法訪問,直接跳轉(zhuǎn)至登錄頁面,以此來實現(xiàn)用戶登錄后才能訪問所對應(yīng)的資源。最后再在“struts.xml”文件中配置,對應(yīng)受保護Action所在的package,以及普通Action所在的package。如果用戶在瀏覽器地址欄中亂輸入地址,一旦Struts2找不到,它就會直接跳轉(zhuǎn)至登錄頁面。
(3)將Log4j日志存入數(shù)據(jù)庫
只需在“l(fā)og4j.properties”文件中配置如下信息,即可以實現(xiàn)將Log4j日志存入數(shù)據(jù)庫,方便管理員直接在網(wǎng)頁中查看Log4j日志如圖2所示。
圖2 將Log4j日志存入數(shù)據(jù)庫的配置
(4)MySQL與JSP網(wǎng)頁中文亂碼解決
以UTF-8字符集創(chuàng)建數(shù)據(jù)庫和表:用Navicat工具來創(chuàng)建MySQL的數(shù)據(jù)庫及表。創(chuàng)建數(shù)據(jù)庫時,單擊鼠標(biāo)右鍵Navicat菜單“新建數(shù)據(jù)庫”,建立數(shù)據(jù)庫。字符集選“utf8 --UTF-8 Unicode”。另外每個JSP頁面都要聲明該“utf-8”字符集,這樣才能保證頁面中的文字的正常顯示。
構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及其應(yīng)用系統(tǒng),使之能夠有效地存儲數(shù)據(jù),滿足各種用戶的應(yīng)用需求。數(shù)據(jù)庫設(shè)計應(yīng)該與應(yīng)用系統(tǒng)設(shè)計相結(jié)合,結(jié)構(gòu)(數(shù)據(jù))設(shè)計:設(shè)計數(shù)據(jù)庫框架或數(shù)據(jù)庫結(jié)構(gòu),行為(處理)設(shè)計:設(shè)計應(yīng)用程序、事務(wù)處理等,結(jié)構(gòu)和行為分離的設(shè)計。
主要設(shè)計管理員表、課程表、授課表、Log4j日志表、機構(gòu)表、班級-教師關(guān)聯(lián)表、成績表、學(xué)生表、學(xué)生上傳文件表、教師表、教師上傳文件表。
學(xué)生成績管理系統(tǒng),涉及學(xué)生信息、教師信息等等多種保密信息,系統(tǒng)的安全性就顯得尤為重要。本系統(tǒng)的安全主要包括以下三個方面:數(shù)據(jù)庫關(guān)鍵數(shù)據(jù)加密、數(shù)據(jù)在網(wǎng)絡(luò)加密傳遞和用戶權(quán)限的分配。數(shù)據(jù)庫關(guān)鍵數(shù)據(jù)加密主要為了防止數(shù)據(jù)庫的泄密從而導(dǎo)致用戶信息直接被非法獲取,而數(shù)據(jù)在網(wǎng)絡(luò)加密傳遞主要是為了防止不法分子通過抓包工具獲取用戶的密碼,用戶權(quán)限的分配主要是為了不同用戶角色對應(yīng)不同的權(quán)限,防止越權(quán)訪問造成系統(tǒng)的混亂。
以添加學(xué)生為例,首先將學(xué)生的密碼在客戶端經(jīng)過MD5第一次加密,在網(wǎng)絡(luò)上傳輸?shù)椒?wù)器端,從而確保了數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)陌踩?。傳輸?shù)椒?wù)器端后,通過MD5加密方式,進一步在服務(wù)器端加密,在服務(wù)器端將客戶端傳過來的學(xué)生姓名,通過密鑰進行DES加密,這樣做的目的就是學(xué)生姓名在數(shù)據(jù)庫的記錄是加密后的數(shù)據(jù),而在網(wǎng)頁上體現(xiàn)的數(shù)據(jù)是服務(wù)器通過密鑰進行DES解密的學(xué)生真實姓名。最終在數(shù)據(jù)庫中數(shù)據(jù)的體現(xiàn)就是雙重MD5密碼加密和一次DES姓名加密,這樣做的目的就是即使數(shù)據(jù)庫被盜,那么數(shù)據(jù)庫中的關(guān)鍵數(shù)據(jù)還是以密文的形式體現(xiàn),為系統(tǒng)的安全提供最后一層防線。
[1]羅時遠,等.高校學(xué)生成績管理系統(tǒng)的分析探討[J].辦公自動化,2009,(12):31-33.
[2]姜承堯.MySQL技術(shù)內(nèi)幕:SQL編程[M].北京:機械工業(yè)出版社,2012:103-109.