基于LAMP平臺(tái)的中學(xué)學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
《基于LAMP平臺(tái)的中學(xué)學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于LAMP平臺(tái)的中學(xué)學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(29頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、基于LAMP平臺(tái)的中學(xué)學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 摘 要:成績(jī)管理作為中學(xué)教務(wù)管理的主要任務(wù),其自動(dòng)化的實(shí)現(xiàn)將對(duì)中學(xué)信息化建設(shè)有極大推動(dòng)作用。本系統(tǒng)考慮到基層中學(xué)的實(shí)際情況,基于LAMP平臺(tái)對(duì)系統(tǒng)各功能模塊進(jìn)行設(shè)計(jì),使用PHP結(jié)合MysQL數(shù)據(jù)庫(kù),建立用戶身份驗(yàn)證機(jī)制,實(shí)現(xiàn)成績(jī)錄入、修改和查詢等成績(jī)管理基本功能。著重設(shè)計(jì)了成績(jī)分析功能,實(shí)現(xiàn)對(duì)班級(jí)整體成績(jī)的分析,能快速統(tǒng)計(jì)并顯示各分?jǐn)?shù)段學(xué)生名單,并以直觀的條形圖形式展示總體成績(jī)情況。針對(duì)個(gè)人成績(jī)分析,系統(tǒng)利用PHP動(dòng)態(tài)生成圖像技術(shù)生成學(xué)生個(gè)人成績(jī)波動(dòng)折線圖,對(duì)學(xué)生個(gè)人某一學(xué)科多次考試成績(jī)進(jìn)行縱向比較。系統(tǒng)能有效幫助教師或?qū)W生根據(jù)成績(jī)數(shù)
2、據(jù)調(diào)整教學(xué)方法或?qū)W習(xí)方法。運(yùn)行結(jié)果表明,系統(tǒng)穩(wěn)定、安全、可靠,基本實(shí)現(xiàn)預(yù)先設(shè)計(jì)的功能。 關(guān)鍵詞:成績(jī)管理 PHP MySQL 數(shù)據(jù)分析 教學(xué)輔助 1 引言 辦公自動(dòng)化在信息時(shí)代已成為必然趨勢(shì),近幾年隨著硬件成本降低,個(gè)人計(jì)算機(jī)普及,使得越來(lái)越多基層中學(xué)有條件由傳統(tǒng)手工辦公方式轉(zhuǎn)為電子自動(dòng)化辦公的新方式。教務(wù)管理是學(xué)校日常管理的重要組成部分,據(jù)筆者調(diào)研發(fā)現(xiàn),學(xué)生成績(jī)管理是中學(xué)教務(wù)管理的主要任務(wù),成績(jī)管理自動(dòng)化能使教務(wù)管理工作更加高效,方便各職能部門協(xié)同作業(yè)[1],加快校園信息化建設(shè)步伐;能更加準(zhǔn)確、科學(xué)的反映學(xué)生學(xué)習(xí)情況,為學(xué)校課程的調(diào)整和設(shè)置提供有效數(shù)據(jù);能讓基層中學(xué)教師更
3、方便管理和分析學(xué)生成績(jī);能讓學(xué)生通過(guò)查看分析圖表更直觀了解自己成績(jī)的變化情況。 Excel等數(shù)據(jù)管理分析軟件能為中學(xué)成績(jī)管理提供較好的解決方案。但處于由手工到自動(dòng)化的轉(zhuǎn)型期的很多基層中學(xué)教師,由于計(jì)算機(jī)基礎(chǔ)較差,未能使用Excel在數(shù)據(jù)管理分析方面出色的功能。而Excel等軟件由于桌面軟件固有的局限性,不方便學(xué)校對(duì)學(xué)生成績(jī)進(jìn)行統(tǒng)一管理。 當(dāng)前,全國(guó)各高?;旧隙加凶约旱慕虅?wù)管理軟件,為學(xué)校統(tǒng)一管理學(xué)生成績(jī)提供有效的解決方案。如筆者所在的陜西師范大學(xué)所使用的由某軟件公司開發(fā)的教務(wù)管理系統(tǒng),該系統(tǒng)由校方向軟件公司定制,由專業(yè)團(tuán)隊(duì)負(fù)責(zé)開發(fā)并維護(hù)。系統(tǒng)基于B/S架構(gòu),有豐富的教務(wù)管理功能,實(shí)現(xiàn)了高
4、校適用的選課管理、學(xué)分管理、成績(jī)管理等功能。但高校所使用的教務(wù)管理軟件相對(duì)基層中學(xué)而言成本太高,又因系統(tǒng)過(guò)于龐大導(dǎo)致維護(hù)工作量大,而一般基層中學(xué)地處偏遠(yuǎn),沒有專業(yè)人員負(fù)責(zé)維護(hù)。另一方面,這類系統(tǒng)所實(shí)現(xiàn)的功能如選課管理等在當(dāng)前中學(xué)并不需要,中學(xué)教務(wù)管理的主要任務(wù)是成績(jī)管理,高校的教務(wù)管理系統(tǒng)普遍沒有對(duì)成績(jī)管理和分析功能進(jìn)行深入研究。 一些硬件設(shè)施條件較好的中學(xué)已經(jīng)部署教務(wù)管理相關(guān)軟件,這類系統(tǒng)軟件大多由當(dāng)?shù)匾?guī)模較小的軟件公司開發(fā),沒有遵循基本的軟件工程方法,隨意堆積代碼,以最快的開發(fā)方式(無(wú)論系統(tǒng)設(shè)計(jì)是否符合規(guī)范)低價(jià)格出售給基層中學(xué)使用,有數(shù)據(jù)安全隱患[2],可能會(huì)導(dǎo)致不可預(yù)知的、難以維護(hù)的
5、錯(cuò)誤。在成績(jī)分析方面這類系統(tǒng)沒有實(shí)現(xiàn)或沒有做深入研究,只有成績(jī)錄入、修改等基本功能,未對(duì)學(xué)生成績(jī)數(shù)據(jù)進(jìn)行挖掘研究[3],不能實(shí)現(xiàn)對(duì)學(xué)生成績(jī)進(jìn)行科學(xué)分析后,以科學(xué)的數(shù)據(jù)幫助教師改進(jìn)教學(xué)方法,幫助學(xué)生改進(jìn)學(xué)習(xí)方法。 本系統(tǒng)基于LAMP平臺(tái),即使用Apache作為Web服務(wù)器,在Linux環(huán)境下,以MysQL為后臺(tái)數(shù)據(jù)庫(kù)支持,以PHP為后臺(tái)腳本語(yǔ)言,嚴(yán)格遵從軟件工程開發(fā)方法,為中學(xué)學(xué)生成績(jī)管理提出有針對(duì)性的解決方案。系統(tǒng)基于B/S架構(gòu),可多地域任意時(shí)間段訪問(wèn),方便學(xué)校和教師統(tǒng)一管理成績(jī)。對(duì)系統(tǒng)界面進(jìn)行優(yōu)化,加強(qiáng)人機(jī)交互,方便計(jì)算機(jī)水平較低的教師使用。因LAMP平臺(tái)開源技術(shù)[4]特點(diǎn),系統(tǒng)具有開發(fā)成
6、本及硬件成本低、穩(wěn)定可靠、跨平臺(tái)等特點(diǎn)。使用功能模塊化設(shè)計(jì),后期維護(hù)方便,有良好的可擴(kuò)展性,可作為中學(xué)教務(wù)管理系統(tǒng)的子系統(tǒng)[5]。系統(tǒng)實(shí)現(xiàn)了有安全訪問(wèn)控制[6]的用戶身份驗(yàn)證機(jī)制,分為教師管理后臺(tái)和學(xué)生瀏覽前臺(tái)界面。在實(shí)現(xiàn)基本的成績(jī)錄入、修改和查詢等基本功能的前提下,對(duì)成績(jī)分析模塊進(jìn)行了深入研究,實(shí)現(xiàn)從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)并動(dòng)態(tài)生成相應(yīng)成績(jī)分析圖表,一方面能直觀反映整體成績(jī)情況,另一方面能以圖表的方式更直觀的反映各個(gè)學(xué)生的個(gè)人成績(jī)波動(dòng)情況[7]。 2 系統(tǒng)開發(fā)的關(guān)鍵技術(shù) 2.1 LAMP平臺(tái) LAMP是Linux+Apache+MySQL+PHP網(wǎng)站架構(gòu)的通用縮寫,是目前國(guó)際流行的Web框架
7、,該框架包括:Linux操作系統(tǒng),Apache網(wǎng)絡(luò)服務(wù)器,MySQL數(shù)據(jù)庫(kù),PHP后臺(tái)腳本編程語(yǔ)言,框架所有組成產(chǎn)品均是開源軟件。與微軟的.NET架構(gòu)相比,LAMP具有通用、跨平臺(tái)、高性能、低價(jià)格等優(yōu)勢(shì),與Java/J2EE架構(gòu)相比,LAMP具有Web資源豐富、輕量、快速開發(fā)等特點(diǎn),因此無(wú)論是從性能、質(zhì)量還是開發(fā)成本上考慮,LAMP平臺(tái)都是實(shí)現(xiàn)中學(xué)學(xué)生成績(jī)管理系統(tǒng)的首選[8],以下對(duì)該平臺(tái)各個(gè)組成部分作簡(jiǎn)要介紹。 (1)GPL版權(quán)聲明:GPL授權(quán)是開源技術(shù)得以發(fā)展壯大的原因之一,LAMP平臺(tái)的組成軟件幾乎都使用GPL版權(quán)聲明。GPL全稱為General Public License,即通用公
8、共許可證,有GPL版權(quán)聲明的軟件即是通常所說(shuō)的“自由軟件”,GPL的創(chuàng)立者史托曼(Richard Mathew Stallman)對(duì)“自由”的定義是:用戶可以自由執(zhí)行、復(fù)制、再發(fā)行、學(xué)習(xí)、修改與強(qiáng)化自由軟件。正是因?yàn)檫@一開放精神,使得遍布世界各地的工程師們組成一個(gè)技術(shù)力量雄厚的“虛擬團(tuán)隊(duì)”,不斷對(duì)自由軟件源碼查找漏洞進(jìn)一步完善,使得自由軟件具有安全性好、執(zhí)行效率高等顯著特點(diǎn)。當(dāng)然,并不是任何自由軟件都是完全免費(fèi),事實(shí)上自由軟件是可以銷售的,只是不能僅僅銷售軟件,還需搭配相應(yīng)的售后服務(wù)。如目前有很多Linux開發(fā)商在銷售各種Linux發(fā)行版,但他們不能僅僅銷售Linux系統(tǒng),還需給用戶提供特定的
9、技術(shù)升級(jí)服務(wù)。 (2)Linux:Linux是類Unix開源系統(tǒng),內(nèi)核原型是由托瓦茲(Linus Torvalds)于1991年基于GPL版權(quán)聲明發(fā)布。由于使用GPL授權(quán),自Linux發(fā)行以來(lái)很多優(yōu)秀工程師不斷對(duì)其核心進(jìn)行改善,對(duì)硬件的兼容性比Unix系統(tǒng)好,且很好繼承了Unix系統(tǒng)良好性能,使Linux擁有很高的穩(wěn)定性、完全性,是當(dāng)前眾多企業(yè)搭建Web站點(diǎn)服務(wù)器的首選平臺(tái)。Linux有很多發(fā)行版本,本系統(tǒng)所選用的CentOS(Community Enterprise Operating System)是Linux發(fā)行版之一,CentOS源代碼與著名的商業(yè)Linux系統(tǒng)RHEL(Red Ha
10、t Enterprise Linux)相同,擁有與RHEL相當(dāng)?shù)母叻€(wěn)定性。RHEL、SUSE LE等Linux企業(yè)版,提供的后期升級(jí)服務(wù)均是收費(fèi),無(wú)法免費(fèi)在線升級(jí),而CentOS是由開源社區(qū)開發(fā),免費(fèi)提供升級(jí)服務(wù),因此成績(jī)管理系統(tǒng)用CentOS替代RHEL做服務(wù)器。 (3)Apache:Apache是目前世界使用最多的Web服務(wù)器,使用率超過(guò)60%。它是自由軟件,開發(fā)人員可以根據(jù)自己的需要對(duì)相關(guān)模塊進(jìn)行改寫,有良好的可擴(kuò)展性。另外,Apache可以兼容Linux和Windows等主流平臺(tái),以其輕量、運(yùn)行速度快和穩(wěn)定[9-10]等特點(diǎn)深受Web開發(fā)人員喜愛。 (4)MySQL:MySQL是使
11、用GPL授權(quán)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),兼容Windows和Linux系統(tǒng)。在GPL許可下,可以免費(fèi)使用,在商業(yè)許可下,其費(fèi)用也很少。相比于價(jià)格昂貴的Mircrosoft SQL Server、Orcal等關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),MySQL大大減少了系統(tǒng)成本,而它擁有高性能、可跨平臺(tái)、使用和管理方便、運(yùn)行速度快、安全可靠性高等優(yōu)點(diǎn),可以高效地存儲(chǔ)、搜索、排序和檢索數(shù)據(jù)[11]。本系統(tǒng)使用MySQL作后臺(tái)數(shù)據(jù)庫(kù)支持軟件,在降低系統(tǒng)成本的同時(shí),能方便、高效的對(duì)學(xué)生成績(jī)數(shù)據(jù)進(jìn)行管理和分析[12]。 (5)PHP:PHP是服務(wù)器端解釋腳本編程語(yǔ)言,是開放源代碼的自由軟件,專門為Web開發(fā)設(shè)計(jì),是
12、目前最流行的Web編程腳本語(yǔ)言之一,與JSP、ASP、ASP.NET相比具有簡(jiǎn)易性、高安全性、開發(fā)速度快和執(zhí)行靈活等優(yōu)點(diǎn)[13]。由于PHP是自由軟件,其網(wǎng)絡(luò)資源豐富,基于PHP的開發(fā)框架[14]眾多,如較為成熟的Smarty,Yii和Zend Framework等。本系統(tǒng)的實(shí)現(xiàn)主要使用PHP作為后臺(tái)腳本編寫語(yǔ)言,結(jié)合MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)了成績(jī)管理和分析等相關(guān)功能[15]。 2.2 框架與布局 系統(tǒng)嚴(yán)格遵循軟件工程方法,使用分層設(shè)計(jì)[16],保證系統(tǒng)安全性,方便系統(tǒng)維護(hù)及擴(kuò)展。頁(yè)面布局全部采用DIV+CSS技術(shù),便于系統(tǒng)重構(gòu)。 2.2.1 系統(tǒng)框架 為了使開發(fā)更加高效,系統(tǒng)安全穩(wěn)定,
13、后期維護(hù)簡(jiǎn)單、方便,系統(tǒng)綜合采用多種分層技術(shù)構(gòu)造框架。在目錄結(jié)構(gòu)上,按照組件、邏輯、內(nèi)容和源代碼庫(kù)將目錄分成多個(gè)部分,目錄結(jié)構(gòu)圖如圖1所示。整個(gè)系統(tǒng)包含于SRMS目錄,其它組件存放于SRMS的子目錄。公共可訪問(wèn)的文件如系統(tǒng)登錄首頁(yè)login.php等頁(yè)面存放在pulic_files目錄,另外,在public_files專門下創(chuàng)建css、img和js分別存放樣式代碼、系統(tǒng)使用的圖像及Javascript文件。lib文件存放系統(tǒng)運(yùn)行過(guò)程中會(huì)調(diào)用的庫(kù)文件,sql是使用SQL語(yǔ)句操作數(shù)據(jù)庫(kù)的相關(guān)文件。 圖 1 系統(tǒng)目錄結(jié)構(gòu) Fig.1 System’s Directory Structure
14、 除了目錄結(jié)構(gòu)分層設(shè)計(jì)外,代碼也使用了代碼分解技術(shù)。將各個(gè)功能模塊的代碼分解,構(gòu)造相關(guān)函數(shù),再通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)相關(guān)功能。這樣避免了單段代碼過(guò)長(zhǎng),使代碼容易閱讀,易于理解,方便代碼重用,避免重復(fù)編寫大量代碼,提高系統(tǒng)開發(fā)速度。系統(tǒng)在實(shí)現(xiàn)過(guò)程中多處使用該技術(shù)。例如,在系統(tǒng)中多處需要連接數(shù)據(jù)庫(kù),可以在lib目錄下創(chuàng)建專門連接數(shù)據(jù)庫(kù)的函數(shù)db_fns.php,代碼如下:
15、nnect() { $result = new mysqli(localhost, srmsuser, 120587, srms); if (!$result) { throw new Exception(連接數(shù)據(jù)庫(kù)失??!); } else { return $result; } } ?> 該函數(shù)能拋出錯(cuò)誤信息,在需要連接數(shù)據(jù)庫(kù)的頁(yè)面使用require_once(db_fns.php);包含該函數(shù),再使用$conn = db_connect();便能取得數(shù)據(jù)庫(kù)連接句柄。為了更加便于函數(shù)調(diào)用,把常用的函數(shù)全部包含于functions.
16、php文件,如下所示:
17、er_auth_fns.php); //用戶身份驗(yàn)證相關(guān)函數(shù) require_once(db_fns.php); //數(shù)據(jù)庫(kù)連接函數(shù) require_once(teacher/teacher.php); //教師后臺(tái)管理界面 require_once(student/student.php); //學(xué)生瀏覽界面 ?> 在其它頁(yè)面只需寫一行代碼:require_once(functions.php);就能實(shí)現(xiàn)在頁(yè)面中調(diào)用特定函數(shù)。 在設(shè)計(jì)系統(tǒng)框架時(shí)還使用了邏輯和內(nèi)容分離技術(shù),即PHP與HTML分離。將邏輯從內(nèi)容分離、內(nèi)容從外觀分離可以使系統(tǒng)更易于長(zhǎng)期使用和維護(hù)
18、。系統(tǒng)把常用的顯示內(nèi)容的HTML代碼存放于output.php文件里,其中代碼類似于下面代碼:
19、; //主體的頭部 do_text($e->getMessage()); //獲取錯(cuò)誤信息 do_html_url(../public_files/login.php, 重新登錄); //創(chuàng)建超鏈接 do_html_url(../public_files/register_form.php, 注冊(cè)); do_html_main_footer(); //主體內(nèi)容結(jié)束 do_html_footer1(); //顯示頁(yè)面頁(yè)腳信息 ?> 2.2.2 用DIV+CSS布局頁(yè)面 傳統(tǒng)的網(wǎng)頁(yè)布局方式一般采用表格,但層疊樣式表CSS出現(xiàn)后,以其在Web頁(yè)面外觀控制上的
20、優(yōu)越性能迅速取代了傳統(tǒng)的布局方式,目前幾乎所有站點(diǎn)都使用CSS布局頁(yè)面。使用CSS技術(shù)能將內(nèi)容和外觀分離,使得開發(fā)人員可以更加專注于后臺(tái)內(nèi)容開發(fā),外觀由專門負(fù)責(zé)界面設(shè)計(jì)的前端設(shè)計(jì)師設(shè)計(jì),這有利于系統(tǒng)的邏輯和內(nèi)容研發(fā),而由專業(yè)界面設(shè)計(jì)人員負(fù)責(zé)外觀,人機(jī)交互會(huì)更好。即便如這個(gè)系統(tǒng)一樣開發(fā)和布局都由一個(gè)人完成,也容易系統(tǒng)的后期維護(hù)和長(zhǎng)期使用。在布局頁(yè)面時(shí)使用HTML的塊元素div配合CSS使用,還能達(dá)到傳統(tǒng)表格無(wú)法完成的效果。本系統(tǒng)專門建立存放CSS文件的目錄,在目錄下為不同頁(yè)面的布局創(chuàng)建不同的布局文件。如系統(tǒng)登錄首頁(yè)的布局文件為login.css,在login.php頁(yè)面的頭部標(biāo)簽
21、head>里加上一行代碼:即可配合使用login.css文件定義的布局。系統(tǒng)利用CSS,使首頁(yè)的登錄框于頁(yè)面居中,如圖2所示。 圖 2 系統(tǒng)登錄首頁(yè)界面 Fig.2 System’s Login Page 該頁(yè)面能在瀏覽器窗口大小調(diào)動(dòng)情況下始終居中,實(shí)現(xiàn)該功能的主要CSS代碼如下: #login_form { width:280px; height:170px; position:absolute
22、; /*隨著瀏覽器大小的改變,頁(yè)面始終居中*/ left:50%; top:50%; margin-left:-140px; margin-top:-85px; } 3 系統(tǒng)設(shè)計(jì) 在確定系統(tǒng)框架及頁(yè)面布局使用的技術(shù)后,對(duì)系統(tǒng)進(jìn)行總體設(shè)計(jì)。本系統(tǒng)設(shè)計(jì)分為兩個(gè)部分:系統(tǒng)功能模塊設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì)。它們?cè)谙到y(tǒng)流程圖(圖3)框架下進(jìn)行設(shè)計(jì)。 圖 3 系統(tǒng)流程圖 Fig.3 System’s Flowchart 3.1 系統(tǒng)功能模塊設(shè)計(jì) 使用模塊化設(shè)計(jì),按功能將系統(tǒng)分為幾個(gè)模塊分別進(jìn)行編碼,各模塊編碼實(shí)現(xiàn)后再整合調(diào)試,提高代碼重用,使系統(tǒng)邏輯更為清晰,便于后期
23、維護(hù)和功能擴(kuò)展。系統(tǒng)最主要的兩個(gè)模塊分別是教師管理后臺(tái)和學(xué)生可瀏覽的前臺(tái)。這兩個(gè)模塊均使用HTML的frame框架布局,利用用戶身份驗(yàn)證機(jī)制為特定用戶顯示個(gè)性化界面,模塊與模塊之間存在相互調(diào)用關(guān)系。 3.1.1 前臺(tái)功能模塊 系統(tǒng)前臺(tái)包括系統(tǒng)登錄首頁(yè)、用戶注冊(cè)、重置密碼、修改密碼及錯(cuò)誤提示頁(yè)面,這些頁(yè)面都使用DIV+CSS控制外觀,除登錄頁(yè)面單獨(dú)使用login.css進(jìn)行布局外,其它頁(yè)面都通過(guò)給各自的div塊元素定義不同的id或class來(lái)使用同一個(gè)CSS文件layout.css進(jìn)行布局,便于維護(hù)。還通過(guò)命名相同的class,共用某個(gè)樣式,使界面風(fēng)格統(tǒng)一,減少編寫CSS樣式代碼工作量。前臺(tái)
24、功能模塊中最重要的是學(xué)生用戶可以瀏覽的成績(jī)管理模塊。該模塊的框架如圖4所示: 圖 4 學(xué)生界面框架 Fig.4 The Frame of Student’s Page 學(xué)生從首頁(yè)登錄系統(tǒng),由身份識(shí)別系統(tǒng)對(duì)學(xué)生的身份屬性進(jìn)行識(shí)別,系統(tǒng)自動(dòng)導(dǎo)向?qū)W生界面。 學(xué)生界面由兩大模塊及大模塊下的相關(guān)小模塊組成。用戶識(shí)別模塊可識(shí)別學(xué)生身份,針對(duì)不同的學(xué)生顯示與“歡迎陳建康同學(xué)”相類似的個(gè)性化信息,該模塊還將集成注銷登錄及修改密碼功能。成績(jī)管理模塊有查詢成績(jī)功能和分析成績(jī)功能。在查詢功能中,學(xué)生用戶可按學(xué)科快速查詢?cè)搶W(xué)科總體成績(jī)。在分析成績(jī)功能中,學(xué)生可按學(xué)科和考
25、試時(shí)間查看班級(jí)整體成績(jī)分析情況,包括平均分、各分?jǐn)?shù)段人數(shù)及該分?jǐn)?shù)段學(xué)生名單,能通過(guò)圖表直觀查看分析結(jié)果。通過(guò)整體分析功能進(jìn)行成績(jī)橫向比較,讓學(xué)生了解自己當(dāng)次考試成績(jī)?cè)诎嗉?jí)的位置,及時(shí)調(diào)整自己的學(xué)習(xí)計(jì)劃和心態(tài)。另外,作為本系統(tǒng)最重要的功能,學(xué)生可通過(guò)分析成績(jī)模塊中的個(gè)人分析功能對(duì)自己某學(xué)科的成績(jī)進(jìn)行縱向比較,通過(guò)查看系統(tǒng)自動(dòng)生成的有數(shù)據(jù)描點(diǎn)的折線圖了解自己幾次考試成績(jī)的波動(dòng)情況,以數(shù)據(jù)為依據(jù),聯(lián)系學(xué)生生活實(shí)際,分析自己在某一時(shí)間段內(nèi)成績(jī)上升或下滑的具體原因,為保持一個(gè)良好的學(xué)習(xí)狀態(tài)制定周詳?shù)膶W(xué)習(xí)計(jì)劃。 3.1.2 后臺(tái)功能模塊 教師管理后臺(tái)模塊與學(xué)生的前臺(tái)界面相類似,在系統(tǒng)開發(fā)時(shí)通過(guò)代碼復(fù)用
26、及函數(shù)調(diào)用實(shí)現(xiàn)相同功能。教師管理后臺(tái)模塊的框架圖如圖5所示: 圖 5 教師管理后臺(tái)框架 Fig.5 The Teacher Admin Frame 系統(tǒng)對(duì)教師身份進(jìn)行識(shí)別后,將在用戶識(shí)別模塊顯示“歡迎盧俊嶺老師”一類個(gè)性化信息。其它模塊功能與學(xué)生前臺(tái)界面相似。在教師管理后臺(tái)模塊中,主要增加了錄入成績(jī)和修改成績(jī)功能。只允許教師從后臺(tái)對(duì)成績(jī)進(jìn)行錄入和修改操作,學(xué)生沒有修改成績(jī)的權(quán)限,這保證了系統(tǒng)的可靠性。在錄入成績(jī)模塊中,教師能夠非常直觀的、簡(jiǎn)便的按照學(xué)科及考試月份對(duì)全班學(xué)習(xí)成績(jī)進(jìn)行錄入工作,錄入成功后系統(tǒng)立即返回錄入結(jié)果,如果發(fā)現(xiàn)有錄入錯(cuò)誤,使用修改成績(jī)功能修改。在修改成績(jī)模塊中,同樣
27、按照學(xué)科及相應(yīng)考試月份進(jìn)行修改,修改時(shí),系統(tǒng)可顯示成績(jī)修改前的數(shù)據(jù),方便修改,修改成功后立即返回修改后的成績(jī)表。 教師通過(guò)使用教師管理后臺(tái),能便捷的對(duì)學(xué)生成績(jī)進(jìn)行錄入、修改和查詢等基本管理。系統(tǒng)還能幫助教師實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的分析。通過(guò)對(duì)本班整體成績(jī)的分析,了解各個(gè)分?jǐn)?shù)段的人數(shù),針對(duì)不同分?jǐn)?shù)段的學(xué)生采取不同的指導(dǎo)方式,以求取得更好的成績(jī)。對(duì)比多次考試平均分,了解教師在某段時(shí)間教學(xué)上的狀態(tài),以科學(xué)的數(shù)據(jù)指導(dǎo)自己教學(xué)方法的改進(jìn)。另外,還可通過(guò)分析學(xué)生個(gè)人成績(jī)波動(dòng)情況,對(duì)個(gè)別學(xué)生進(jìn)行有針對(duì)性的指導(dǎo)。 3.2 數(shù)據(jù)庫(kù)設(shè)計(jì) 系統(tǒng)中所使用的數(shù)據(jù)全部使用數(shù)據(jù)庫(kù)存儲(chǔ),方便統(tǒng)一管理數(shù)據(jù),結(jié)合PHP和MysQL
28、數(shù)據(jù)庫(kù),可以實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行分析。系統(tǒng)以功能為驅(qū)動(dòng),遵行數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范,對(duì)該系統(tǒng)需要使用的教師和學(xué)生數(shù)據(jù)建模,系統(tǒng)的分析各個(gè)數(shù)據(jù)之間的關(guān)系,避免數(shù)據(jù)庫(kù)保存冗余數(shù)據(jù),為每個(gè)表選擇有意義的主鍵。最后構(gòu)造的數(shù)據(jù)庫(kù)模型圖如圖6所示: 圖 6 SRMS數(shù)據(jù)庫(kù)模型 Fig.6 SRMS Database Moduel 在SRMS數(shù)據(jù)庫(kù)里創(chuàng)建如模型所示的7張數(shù)據(jù)表。teacher和student表分別記錄教師和學(xué)生的id(學(xué)號(hào)或工號(hào))、名字、密碼和email,兩張數(shù)據(jù)表的結(jié)構(gòu)如圖7所示。用id字段作為表的主鍵,id,name,passwd和email
29、的值均不能缺省,如果允許缺省可能會(huì)導(dǎo)致數(shù)據(jù)冗余,因?yàn)橹挥袑W(xué)號(hào)沒有學(xué)生姓名或只有教師名字沒有別的相關(guān)信息這種情況是不允許存在。 圖7 student和teacher表結(jié)構(gòu) Fig.7 The Structure of Student and Teacher’s Database Table yw、sx、yy、wl、hx分別存放學(xué)生語(yǔ)文、數(shù)學(xué)、英語(yǔ)、物理、化學(xué)成績(jī)數(shù)據(jù)。為了把更多精力放在分析功能的設(shè)計(jì)上,系統(tǒng)僅以5個(gè)學(xué)科4次考試成績(jī)這個(gè)簡(jiǎn)單的模型作為系統(tǒng)開發(fā)的測(cè)試數(shù)據(jù),作為測(cè)試模型,該方法是可行的。這5個(gè)表的結(jié)構(gòu)如圖8所示,sid是學(xué)生學(xué)號(hào),是其所處關(guān)系的外鍵,當(dāng)查詢數(shù)據(jù)
30、時(shí),可利用外鍵,引用student表的數(shù)據(jù),達(dá)到同時(shí)顯示學(xué)生學(xué)號(hào)、姓名和成績(jī)目的,避免了空間的浪費(fèi)。記錄成績(jī)的字段皆設(shè)置為float浮點(diǎn)型數(shù)據(jù),以中學(xué)實(shí)際成績(jī)?yōu)橐罁?jù),設(shè)置為5位有效數(shù)字,精確到小數(shù)后兩位,在教師錄入數(shù)據(jù)時(shí),對(duì)錄入數(shù)據(jù)的最大值做限定。 圖 8 成績(jī)表結(jié)構(gòu) Fig.8 The Structure of Score’s Database Table 4 系統(tǒng)功能模塊的實(shí)現(xiàn) 系統(tǒng)所有功能模塊以成績(jī)管理模塊為核心,為提供安全、穩(wěn)定、方便可用、可維護(hù)性好的成績(jī)管理模塊而進(jìn)行設(shè)計(jì)并實(shí)現(xiàn)。 4.1 成績(jī)管理模塊的實(shí)現(xiàn) 成績(jī)管理模塊是本系統(tǒng)的核心,該模塊的
31、實(shí)現(xiàn)分為成績(jī)的錄入、修改和查詢基本操作部分及對(duì)成績(jī)分析功能的深度研發(fā)部分。模塊的實(shí)現(xiàn)主要是利用PHP腳本語(yǔ)言結(jié)合MySQL對(duì)數(shù)據(jù)進(jìn)行查詢和分析。此外,對(duì)該模塊使用界面優(yōu)化技術(shù),使教師和學(xué)生更容易使用本系統(tǒng)。 4.1.1 成績(jī)管理的基本操作 成績(jī)管理的基本操作分為錄入、修改和查詢3個(gè)部分,在教師管理后臺(tái)可使用全部功能,學(xué)生界面去掉錄入、修改成績(jī)功能,查詢功能為教師管理后臺(tái)和學(xué)生前臺(tái)界面所共用。 (1)錄入成績(jī):錄入成績(jī)需按學(xué)科和考試月份進(jìn)行錄入,通過(guò)表單傳遞學(xué)科和月份信息,創(chuàng)建insert_form.php文件作為學(xué)科和月份信息選擇頁(yè)面,主要代碼如下:
頁(yè)面顯示結(jié)果如圖9所示: 圖9 成績(jī)錄入選擇表單 Fig.9 The Select Form of Insert Score Page 點(diǎn)擊“開始錄入”后,表單將以post34、方式向insert.php頁(yè)面?zhèn)鬟fcourse和month相對(duì)應(yīng)的值。在insert.php頁(yè)面中,使用: $course = $_POST[course]; $month = $_POST[month]; 從全局?jǐn)?shù)組$_POST里接受數(shù)據(jù),并分別創(chuàng)建短變量名$course和$month,便于程序中其它地方使用。 在insert.php頁(yè)面中,首先使用require_once(../db_fns.php);包含數(shù)據(jù)庫(kù)連接函數(shù),在頁(yè)面中以$conn = db_connect();實(shí)例化php的mysqli類,創(chuàng)建到數(shù)據(jù)庫(kù)的連接。成績(jī)的錄入以表格形式(見圖10)顯示錄入框,該系統(tǒng)在創(chuàng)建這類
35、表格時(shí)大量使用了動(dòng)態(tài)顯示表格技術(shù),根據(jù)數(shù)據(jù)庫(kù)記錄的實(shí)際數(shù)據(jù)顯示表格的行數(shù)。實(shí)現(xiàn)這一功能的主要代碼如下: $conn = db_connect(); $result = $conn->query("select * from student order by id asc"); fetch_object()) { ?>
36、stu->id;?>
37、stu賦值,在每個(gè)循環(huán)體里使用對(duì)象屬性值生成特定的表格行。另外,在表單中還設(shè)置一些標(biāo)簽的type設(shè)置為“hidden”以隱藏的方式向insert.php頁(yè)面?zhèn)髦?,從而使在前端如圖10的頁(yè)面中并沒有看到使用hidden的input元素,但能夠向指定頁(yè)面?zhèn)鬟f數(shù)據(jù)。insert.php頁(yè)面僅僅完成成績(jī)數(shù)據(jù)收集工作,真正往數(shù)據(jù)庫(kù)里寫入數(shù)據(jù)的操作是在insert_fns.php,主要的代碼如下: if ($month == "ks1") { $sql = "insert into ".$course." (sid,".$month.") values "; //構(gòu)造插入SQ
38、L語(yǔ)句 for ($i=0;$i<$count;$i++) { if($sid[$i]!= and $result[$i]!= ) { $sql .= "(".$sid[$i].", ".$result[$i]."),"; $rows++; } } //去掉原$sql后的","符號(hào),query()里最后不能有“,” if ($rows>0) { $sql = substr($sql,0,strlen($sql)-1); $conn->query($sql); } 當(dāng)選擇的月份是1月份時(shí)會(huì)執(zhí)行上述代
39、碼,使用for循環(huán)創(chuàng)建SQL查詢語(yǔ)句,使用insert關(guān)鍵字把學(xué)生成績(jī)插入到數(shù)據(jù)庫(kù)中。該技術(shù)結(jié)合循環(huán)實(shí)現(xiàn)批量查詢數(shù)據(jù),這一技術(shù)在本系統(tǒng)其它地方也多次使用,能利用數(shù)組及程序控制,實(shí)現(xiàn)批量向數(shù)據(jù)庫(kù)錄入數(shù)據(jù)。導(dǎo)入完數(shù)據(jù)后,使用select語(yǔ)句,立即返回錄入結(jié)果。 (2)修改成績(jī):修改成績(jī)的實(shí)現(xiàn)方法與錄入成績(jī)大致類似,使用SQL里的update關(guān)鍵字對(duì)數(shù)據(jù)進(jìn)行修改。從update_form.php頁(yè)面選擇需要修改的學(xué)科及考試月份,使用表單的post方式向update.php頁(yè)面?zhèn)鬟fcourse和month兩個(gè)變量信息,update.php根據(jù)變量的不同,自動(dòng)生成相應(yīng)行數(shù)的成績(jī)修改表格,最后再由upd
40、ate_fns.php更新數(shù)據(jù)庫(kù)中相應(yīng)數(shù)據(jù)表的數(shù)據(jù),并返回修改后的成績(jī)。在生成修改成績(jī)輸入表時(shí),update.php使用了一個(gè)關(guān)鍵技術(shù),使得教師可以看到未修改前的成績(jī),如圖11所示: 圖11 修改成績(jī)表格 Fig.11 The Table of Update Score Page 該技術(shù)實(shí)現(xiàn)的關(guān)鍵代碼如下:
41、錄的原來(lái)的成績(jī)值,當(dāng)往表單元素input重新賦值時(shí),新值會(huì)更新到數(shù)據(jù)庫(kù)中,這大大方便了教師進(jìn)行成績(jī)的修改。 (3)查詢成績(jī):成績(jī)錄入和修改的實(shí)現(xiàn)已經(jīng)涉及成績(jī)查詢功能,查詢功能的實(shí)現(xiàn)較為簡(jiǎn)單,單獨(dú)以功能模塊的形式來(lái)完成該功能其一是為了便于教師更快速的查詢到相應(yīng)成績(jī),其二是學(xué)生前臺(tái)可以通過(guò)查詢的方式查看成績(jī)。無(wú)論是教師管理后臺(tái)還是學(xué)生的前臺(tái),默認(rèn)的顯示頁(yè)面就是查詢功能,如圖12所示。 圖12 系統(tǒng)默認(rèn)顯示界面 Fig.12 The Default Display Interface 4.1.2 成績(jī)分析
42、成績(jī)分析是成績(jī)管理模塊的核心,分為整體分析和個(gè)人分析兩部分。系統(tǒng)使用PHP調(diào)用MySQL中的成績(jī)數(shù)據(jù),分別對(duì)班級(jí)總體成績(jī)情況和各個(gè)學(xué)生的成績(jī)波動(dòng)情況進(jìn)行了分析,并將所獲取的數(shù)據(jù)動(dòng)態(tài)生成圖表,直觀明了的表現(xiàn)整體及個(gè)人的成績(jī)水平,以方便快捷的方式為教師改進(jìn)教學(xué)方法和學(xué)生調(diào)整學(xué)習(xí)計(jì)劃提供科學(xué)的數(shù)據(jù)。 (1)整體分析:整體分析是以班級(jí)為研究對(duì)象,按學(xué)科按考試月份分析。如圖13所示,在顯示各分?jǐn)?shù)段學(xué)生名單的同時(shí),整體分析功能還列出了班級(jí)該學(xué)科當(dāng)次考試總體成績(jī)情況表。分?jǐn)?shù)段劃分為不及格(小于60分)、60以上、70以上、80以上、90以上共5個(gè)分?jǐn)?shù)段,在選定學(xué)科及考試月份情況下,系統(tǒng)自動(dòng)顯示5個(gè)分?jǐn)?shù)段學(xué)
43、生名單,便于教師查看處在某一分?jǐn)?shù)段的學(xué)生群體,對(duì)不同分?jǐn)?shù)段的學(xué)生群體根據(jù)實(shí)際情況作有針對(duì)性的輔導(dǎo)和幫助。學(xué)生也可通過(guò)該功能了解與自己同處一分?jǐn)?shù)段的同學(xué)都是哪些,比自己成績(jī)更出色的還有哪些同學(xué),找準(zhǔn)自己在班級(jí)里成績(jī)水平的位置,通過(guò)與那些相對(duì)自己處在更高分?jǐn)?shù)段的同學(xué)對(duì)比,評(píng)估自己成績(jī)應(yīng)該能夠達(dá)到的高度,進(jìn)而調(diào)整學(xué)習(xí)計(jì)劃,實(shí)現(xiàn)自己的預(yù)期目標(biāo)。此外,系統(tǒng)還通過(guò)自動(dòng)生成總體成績(jī)情況表,列出平均分及各分?jǐn)?shù)段學(xué)生人數(shù),讓教師和學(xué)生更易把握該學(xué)科當(dāng)次考試的總體情況,該情況分析表還可以選擇以如圖14所示的條形圖方式顯示,這個(gè)條形圖比表格更直觀的反應(yīng)了各分?jǐn)?shù)段人數(shù)所占的比例。 圖
44、13 整體分析圖 Fig.13 The Overall’s Analysis Chart 圖14 總體情況條形圖 Fig.14 The Overall’s Bar Chart 整體分析功能的實(shí)現(xiàn)重用了部分成績(jī)管理的基本操作模塊里的功能,學(xué)科和考試月份的選擇功能與基礎(chǔ)操作部分相似,都是利用表單向服務(wù)器傳遞數(shù)據(jù)。整體分析的具體實(shí)現(xiàn)在all_analyse.php頁(yè)面完成。首先創(chuàng)建相應(yīng)的SQL查詢語(yǔ)句,從數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)分?jǐn)?shù)段的學(xué)生名單,如取得某學(xué)科1月份考試成績(jī)大于等于80的學(xué)生名單的主要代碼如下: $conn = db_conne
45、ct(); $sql = "select id , name , ".$month." from student , ".$course." where student.id = ".$course.".sid and ".$course.".".$month." >= 80 order by ".$month." desc" ; $result = $conn->query($sql); 在這段代碼中,創(chuàng)建SQL查詢語(yǔ)句時(shí)使用外鍵關(guān)聯(lián)兩個(gè)數(shù)據(jù)表,從student表和選定的學(xué)科course對(duì)應(yīng)的表中獲取數(shù)據(jù),在查詢數(shù)據(jù)時(shí)使用相關(guān)SQL子句獲取特定條件的數(shù)據(jù),如and
46、 ".$course.".".$month." >= 80使所獲取的成績(jī)數(shù)據(jù)必須大于或等于80。然后還需對(duì)所獲取的數(shù)據(jù)進(jìn)行排序,order by ".$month." desc表示結(jié)果以成績(jī)值的大小遞減排序。最后,以表格的形式動(dòng)態(tài)顯示數(shù)據(jù)來(lái)顯示最終結(jié)果,效果如圖15所示。其它分?jǐn)?shù)段實(shí)現(xiàn)的方法與此類似。 圖15 在某一分?jǐn)?shù)段學(xué)生名單 Fig.15 List of Students in A Fraction of The Segment 另外,在使用SQL語(yǔ)句查詢數(shù)據(jù)并獲得特定分?jǐn)?shù)段的名單后,可調(diào)用數(shù)據(jù)對(duì)象$result的num_rows成員
47、獲取當(dāng)前分?jǐn)?shù)段的記錄行數(shù),即學(xué)生總數(shù)。如使用$totalNum = $result->num_rows;把符合條件的學(xué)生總數(shù)記錄在變量$totalNum中,然后把所有統(tǒng)計(jì)出來(lái)的各分?jǐn)?shù)段人數(shù)據(jù)制作成如圖16所示的表格。 圖16 總體情況表格 Fig.16 Overall Form 點(diǎn)擊圖16中的“查看圖表”,可顯示如圖14所示的條形圖,該條形圖是由PHP創(chuàng)建的動(dòng)態(tài)圖像,相關(guān)技術(shù)實(shí)現(xiàn)見個(gè)人分析功能。 (2)個(gè)人分析:個(gè)人分析功能是以學(xué)生個(gè)人為研究對(duì)象,對(duì)其在某學(xué)科多次考試成績(jī)的波動(dòng)情況進(jìn)行分析。使用整體分析功能可以實(shí)現(xiàn)對(duì)學(xué)生個(gè)人成績(jī)?cè)诎嗉?jí)中位置的橫向
48、比較,但整體分析未能反應(yīng)個(gè)人成績(jī)的波動(dòng)情況,不利于掌握學(xué)生個(gè)人學(xué)習(xí)狀態(tài)的變化。個(gè)人分析功能利用GD2函數(shù)庫(kù)與數(shù)據(jù)庫(kù),動(dòng)態(tài)繪制反應(yīng)學(xué)生個(gè)人多次考試成績(jī)波動(dòng)情況的折線圖,如圖17所示。 圖17 學(xué)生成績(jī)波動(dòng)折線圖 Fig.17 The Line of Student Chievement 學(xué)生成績(jī)波動(dòng)圖能根據(jù)學(xué)生的不同,動(dòng)態(tài)生成以學(xué)生自己名字命名的圖表標(biāo)題,并將該學(xué)生在幾次考試的成績(jī)作為圖像有關(guān)坐標(biāo)的數(shù)據(jù),最終繪制成折線圖。實(shí)現(xiàn)該功能,首先連接數(shù)據(jù)庫(kù),獲取學(xué)生的成績(jī)數(shù)據(jù)并以數(shù)組變量$ks存放,主要代碼如下: $conn = db_con
49、nect(); $sql = "select id, name, ks1, ks2, ks3 from student,".$course." where student.id = ".$course.".sid and student.id = ".$id.""; $result = $conn->query($sql); $rows = $result->fetch_row(); $stuNam = $rows[1]; //獲得學(xué)生姓名 $ks[] = $rows[2]; //1月份考試成績(jī) $ks[] = $rows[3]; //2月份考試成績(jī)
50、 $ks[] = $rows[4]; //3月份考試成績(jī) $ks[] = $rows[5]; //3月份考試成績(jī) 取得數(shù)據(jù)后,將進(jìn)行繪制圖像步驟。在實(shí)際繪圖之前,提倡先預(yù)定義在繪圖過(guò)程中需要經(jīng)常使用的參數(shù),如圖形尺寸、字體和顏色值等,這方便后期調(diào)整和修改,使用有意義的變量名,能夠使代碼更容易閱讀。在準(zhǔn)備工作做完后,使用$im = imagecreatetruecolor($width, $height);創(chuàng)建一個(gè)圖像標(biāo)識(shí)符,利用GD2圖像函數(shù)繪制圖像時(shí)必須有一個(gè)圖像標(biāo)識(shí)符。接著可以開始繪制圖像的框架: //繪制有背景顏色的畫布--給指定大小的矩形填充顏色 imagefill
51、edrectangle($im, 0, 0, $width, $height, $bg_color); //給畫布繪制外邊框 imagerectangle($im, 0,0, $width-1, $height-1, $line_color); //繪制Y軸 imageline($im, $x, $y, $x, $height-$bottom_margin, $line_color); //繪制X軸 imageline($im, $x, $height-$bottom_margin, $width-$right_margin, $height
52、-$bottom_margin, $line_color); //繪制圖表標(biāo)題 $title = $stuNam."成績(jī)變化表"; //取得文字外面的虛框。這一步主要是為了準(zhǔn)確定位標(biāo)題的位置 $title_dimensions = imagettfbbox($title_size, 0, $font, $title); $title_length = $title_dimensions[2] - $title_dimensions[0]; $title_x = ($width - $title_length) / 2; //X軸居中 $title_y = $y
53、 / 2 + 10; //Y軸居中 imagettftext($im, $title_size, 0, $title_x, $title_y, $text_color, $font, $title); //把X軸的標(biāo)識(shí)寫入X軸末端靠下位置 $title_x = "月份"; //X軸標(biāo)識(shí) imagettftext($im, $main_size, 0, $width-$right_margin, $height-($bottom_margin/2), $text_color, $font, $title_x); //把Y軸的標(biāo)識(shí)寫入Y
54、軸頂端偏左位置 $title_y = "成績(jī)"; //Y軸標(biāo)識(shí) //起始坐標(biāo)要對(duì)照?qǐng)D形慢慢調(diào), //$left_margin/2 $y是基本的值,所加減的數(shù)字只是為了更加美觀、合理 imagettftext($im, $main_size, 0, $left_margin/2 +10, $y-18, $text_color, $font, $title_y); 以上主要完成了繪制畫布外邊框、坐標(biāo)軸和相關(guān)標(biāo)題,至此圖像的大致輪廓已經(jīng)繪制完畢。為了所繪制的折線圖更容易閱讀,表現(xiàn)更為細(xì)致,系統(tǒng)為圖像繪制了網(wǎng)格,標(biāo)出在坐標(biāo)軸上坐標(biāo)的值。在該圖像的繪制過(guò)程中,最重要的
55、是部分是折線圖的繪制,主要代碼如下: $y_length = ($height-$bottom_margin) - $y; //Y軸的總長(zhǎng)度 for ($i=1; $i<4; $i++) { //設(shè)置前一點(diǎn)的Y坐標(biāo)值 $y_begin = $height-$bottom_margin - ($ks[$i-1]*$y_length)/100; //設(shè)置后一點(diǎn)的Y坐標(biāo)值 $y_end = $height-$bottom_margin - ($ks[$i]*$y_length)/100; imageline($im, $x
56、+ ($i-1)*200, $y_begin, $x + $i*200, $y_end, $zhexian_color); imagettftext($im, $small_size, 0, $x+($i-1)*200 + 5, $y_begin - 5, $miaodian_color, $font, $ks[$i-1]); } //補(bǔ)上最后一個(gè)描點(diǎn),因?yàn)檠h(huán)里沒有實(shí)現(xiàn) $i = 4; $y_begin = $height-$bottom_margin - ($ks[$i-1]*$y_length)/100; i
57、magettftext($im, $small_size, 0, $x+($i-1)*200 + 5, $y_begin - 5, $miaodian_color, $font, $ks[$i-1]); 根據(jù)圖像的尺寸及位置計(jì)算出坐標(biāo)軸原點(diǎn)的位置,再根據(jù)成績(jī)占滿分100分的比例與在圖像中每一點(diǎn)縱坐標(biāo)占總長(zhǎng)度$y的比例相等這一原理,計(jì)算得出的數(shù)據(jù)點(diǎn)的縱坐標(biāo),橫坐標(biāo)以當(dāng)次成績(jī)所對(duì)應(yīng)的月份為數(shù)據(jù)。然后以該點(diǎn)為線段的起始坐標(biāo),以下一次考試成績(jī)數(shù)據(jù)點(diǎn)作為線段的終止坐標(biāo),結(jié)合循環(huán),便能繪制出折線圖,在循環(huán)里還實(shí)現(xiàn)了在數(shù)據(jù)點(diǎn)的右上方動(dòng)態(tài)打印相對(duì)應(yīng)的成績(jī)值,便于查看圖表時(shí)理解數(shù)據(jù)。
58、通過(guò)折線圖,學(xué)生個(gè)人能清楚的看到自己成績(jī)的變化情況,結(jié)合生活實(shí)際,分析成績(jī)上升或下降的原因,總結(jié)成績(jī)上升時(shí)段自己的學(xué)習(xí)方法,以及導(dǎo)致自己成績(jī)下降時(shí)的原因,綜合得出個(gè)人提高成績(jī)的有效途徑,及時(shí)調(diào)整個(gè)人的學(xué)習(xí)計(jì)劃和狀態(tài)。教師也可以通過(guò)該功能了解學(xué)生成績(jī),及時(shí)關(guān)心到成績(jī)波動(dòng)較大的學(xué)生,幫助學(xué)生找出成績(jī)不正常波動(dòng)的原因。個(gè)人分析功能無(wú)論對(duì)學(xué)生還是老師,都是有益的幫助。 4.1.3 界面優(yōu)化 為使系統(tǒng)便于使用及美觀,在實(shí)現(xiàn)成績(jī)管理各模塊過(guò)程中結(jié)合CSS對(duì)界面進(jìn)行優(yōu)化,例如在功能選擇窗口,對(duì)功能選擇菜單進(jìn)行了優(yōu)化,正常情況下功能選擇菜單如圖18所示,而當(dāng)把鼠標(biāo)移動(dòng)到某一菜單上面時(shí),字體顏色變成藍(lán)色,并
59、有向右下方輕微下沉的效果,顯示如圖19所示。 圖19 已選擇菜單 Fig.19 The Menu is Selected 圖18 未選擇菜單 Fig.18 The Menu is Not Selected 該優(yōu)化的效果使用CSS中的偽類元素:hover來(lái)控制當(dāng)鼠標(biāo)放置到a標(biāo)簽上的樣式實(shí)現(xiàn): a:hover { position:relative; top:1px; left:1px; color:blue; } 在系統(tǒng)的其它模塊也使用了該技術(shù),使系統(tǒng)美觀的同時(shí)給用戶一些提示,便于使用。 4.2 系統(tǒng)的安全性 能安全、穩(wěn)定的
60、運(yùn)行是WEB應(yīng)用程序的基本要求,同時(shí)也是非常復(fù)雜的工程,本文討論的安全性僅包括兩個(gè)方面:系統(tǒng)服務(wù)器環(huán)境和數(shù)據(jù)的安全性,其它方面的安全性考慮已超出本文的討論范圍。 4.2.1 用戶身份驗(yàn)證機(jī)制和個(gè)性化設(shè)置 為防止非法用戶入侵本系統(tǒng),導(dǎo)致系統(tǒng)功能的不正常運(yùn)行,系統(tǒng)建立了較為嚴(yán)格的用戶身份驗(yàn)證機(jī)制,針對(duì)不同身份的用戶,系統(tǒng)能進(jìn)行識(shí)別,把用戶導(dǎo)向教師后臺(tái)管理界面或?qū)W生界面。另外,考慮用戶未注冊(cè)或忘記密碼的情況,系統(tǒng)提供注冊(cè)新用戶及密碼重置功能,保證了系統(tǒng)的安全運(yùn)行和完整性。 圖20 系統(tǒng)登錄頁(yè)面 Fig.20 System Login Page 用戶在如圖20所示的登錄界面輸入相關(guān)信息并
61、提出登錄請(qǐng)求后,系統(tǒng)利用login()函數(shù)對(duì)用戶信息進(jìn)行匹配,如果數(shù)據(jù)庫(kù)中有該用戶名,并且密碼相匹配,登錄成功,否則登錄失敗,系統(tǒng)給出如圖21所示提示頁(yè)面: 圖21 登錄出錯(cuò)提示頁(yè)面 Fig.21 Login Error Message Page Login()函數(shù)的實(shí)現(xiàn)代碼如下: function login($identity, $username, $passwd) { $conn = db_connect(); $db_table = identity($identity); // 檢查用戶名和
62、密碼是否匹配 $result = $conn->query("select * from ".$db_table." where name=".$username." and passwd = sha1(".$passwd.")"); if ($result->num_rows>0) { return true; } else { throw new Exception(用戶名或密碼不正確,請(qǐng)重新登錄); } } 在驗(yàn)證用戶密碼時(shí),為提高數(shù)據(jù)的安
63、全性,使用PHP內(nèi)置sha1()函數(shù),該函數(shù)使用哈希算法對(duì)指定字符串生成固定長(zhǎng)度的字符串,該字符串無(wú)法使用軟件破解。用戶注冊(cè)時(shí)使用sha1()函數(shù)生成密碼字符串存儲(chǔ)于數(shù)據(jù)庫(kù)中,用戶登錄驗(yàn)證時(shí)先將用戶輸入的密碼利用sha1()函數(shù)再次生成密碼字符串與數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行匹配。如果登錄成功,使用會(huì)話控制技術(shù),用$_SESSION[valid_user] = $username;為該用戶注冊(cè)一個(gè)會(huì)話變量,利用這個(gè)會(huì)話變量對(duì)用戶進(jìn)行個(gè)性化設(shè)置,在系統(tǒng)的用戶識(shí)別模塊中顯示個(gè)人登錄信息,如圖22所示: 圖22 個(gè)性化信息 Fig.22 Personalized Informati
64、on 同樣利用會(huì)話控制技術(shù),在系統(tǒng)的其它界面中使用check_valid_user()函數(shù)檢查用戶是否登錄,函數(shù)原型如下: function check_valid_user() { if (isset($_SESSION[valid_user])) { } else { // 沒有登錄 do_html_header1(錯(cuò)誤); do_html_main(你還未登錄, ../public_files/login.php, 重新登錄); do_html_footer1(); exit; } } 在這個(gè)用戶身份
65、驗(yàn)證機(jī)制下,系統(tǒng)能保證為不同用戶顯示不同界面的同時(shí),避免非法用戶使用系統(tǒng)。此外,如果出現(xiàn)用戶忘記密碼的情況,系統(tǒng)提供重置密碼功能,解決的方法是根據(jù)用戶提供的用戶名及對(duì)應(yīng)的身份在數(shù)據(jù)庫(kù)中進(jìn)行匹配,如果用戶確實(shí)已經(jīng)存在,那么利用隨機(jī)函數(shù)生成新的密碼字符串,并調(diào)用mail()函數(shù)通過(guò)用戶注冊(cè)時(shí)登記的郵箱通知用戶。實(shí)現(xiàn)的主要代碼如下: function notify_password($identity, $username, $password) { $conn = db_connect(); //連接數(shù)據(jù)庫(kù) $db_table = identity($identity); //判
66、斷身份 $query = "select email from ".$db_table." where name=".$username.""; $result = $conn->query($query); if (!$result) { throw new Exception(沒有找到E-mail地址。); } else if ($result->num_rows == 0) { throw new Exception(用戶未注冊(cè)。); } else { $row = $result->fetch_object(); //返回當(dāng)前行 $email = $row->email; $from = "From: 學(xué)生成績(jī)管理系統(tǒng)--陳建康畢業(yè)設(shè)計(jì)作品 admin@ \r\n";
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公有云業(yè)務(wù)能力和應(yīng)用場(chǎng)景課件
- 第二章教育與人發(fā)展總結(jié)課件
- 2020年各平臺(tái)品牌藍(lán)V“成長(zhǎng)”指南ppt課件
- 全能型生產(chǎn)主管資料
- 【人教版音樂(lè)】小學(xué)2二年級(jí)上冊(cè):小貓釣魚-ppt課件
- 三叉神經(jīng)痛的治療護(hù)理常識(shí)課件
- 滿分作文:家有寵物(第二課時(shí))課件
- 莫言文學(xué)小說(shuō)《檀香刑》讀書分享會(huì)
- 《小毛蟲》完整ppt課件
- 五年級(jí)下冊(cè)語(yǔ)文第一單元語(yǔ)文園地人教部編版課件
- 人教新課標(biāo)版五年級(jí)下語(yǔ)文同步備課資料包(ppt課件)-第七組:24.金錢的魔力
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)5.1旋轉(zhuǎn)ppt課件
- 精算基礎(chǔ)知識(shí)課件
- 第七章--寶石的分類及命名課件
- 詠懷八十二首課件