【基于SSM技術學生信息管理系統設計】13000字(論文)_第1頁
【基于SSM技術學生信息管理系統設計】13000字(論文)_第2頁
【基于SSM技術學生信息管理系統設計】13000字(論文)_第3頁
【基于SSM技術學生信息管理系統設計】13000字(論文)_第4頁
【基于SSM技術學生信息管理系統設計】13000字(論文)_第5頁
已閱讀5頁,還剩46頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

緒論研究背景與意義隨著我國高等教育水平近年來的不斷提升,對于管理學生的日常生活變得越來越難。在目前的高校學生管理工作中,很多高校已經采用了各種形式的信息管理系統REF_Ref24098\r\h[1]。此外,計算機相對于人工,工作會更精準也更加安全可靠。計算機技術憑借著自己無可撼動的絕對優勢,很快就成為了各個高校不可或缺的重要的工作工具,我們的生活也無時無刻都需要數據處理,這也因此是人們廣泛的私用計算機來做為數據庫管理系統的原因。計算機最突出的優點在于,能使用他能夠精確化管理大批量的數據,也可以控制數據的精確量,這不但大幅提高了學校的工作效率,有了這些豐富的記錄方式,人們可以按照自身的需求和愛好進行選擇REF_Ref24363\r\h[2],這也極大的提高了數據存儲的安全性。隨著高校招生規模的不斷擴大,學生數量不斷增加REF_Ref24396\r\h[3],學生信息管理依舊是高等院校日常管理工作的基礎之一。目前,很多學校已經建立了學生個人信息查詢窗口,大多數學校都有自己的局域網絡,登錄校園網便可查詢個人信息REF_Ref24468\r\h[4],但在教師對學生的日常管理中,經常需要修改學生的信息,例如對學生的課程信息的添加或修改、考試信息、成績信息等,重復的操作加重了教師對學生信息管理的復雜度也消耗了教師的教學熱情。并且,隨著技術的不斷進步,現有的學生信息管理系統已經不能夠滿足學生工作的發展需要,這出現了許多問題REF_Ref25846\r\h[5]例如,所使用的數據庫存儲量小,無法支持大量且長時間的數據穩定性和安全性保障;部分高校目前所使用的依舊是較老的單機版信息管理系統,這使得教師和學生無法在校外得到信息,這使得軟件的維護成本較高REF_Ref25901\r\h[6]。尤其重要的是要開發一套學生信息管理系統,提高教師管理工作的成果,實現信息的交流和分享,能很大程度的提升整個教育教學的質量,能夠更加規范化。學生管理系統的應用也方便了學生和教師在線的信息查詢,很大程度的降低了管理學生信息的工作難度,適當降低了老師的工作復雜性,提高了學校的信息化校園的建設以及數字化教學的建設。1.2國內外現狀學生管理也是各高校的最主要的日常管理工作項目之一,這涉及到了高校、院系、教師、學生等的許多方面,由于我國教育系統的日益更新換代,特別是隨著高校的學分制、選課制度改革的深入開展,學生信息的日常管理和保存工作都變得越來越繁瑣,使用老舊的管理系統非常容易被黑客滲透,導致信息的大規模泄露、病毒感染等信息安全事件REF_Ref25940\r\h[7]。因此迫切需要研制和開發一種功能齊全、運行簡單、安全可靠且富有個性化特點的學生信息管理系統。國外的高等院校,和我國國內高等院校明顯不同的是,他們通常都擁有相當規模且固定的信息技術隊伍,來為信息系統建設進行業務和技術上的支撐,而反觀我國國內高等院校的信息化建設,則因為相對起步較晚,技術水平也相對比較滯后,這就造成了學校的信息化建設依舊只能在后面看別人的臉色,在數字學校理論逐步應用的過程中,由于我國的信息化基礎建設程度與理念相對落后并且常常因為經濟跟不上等原因,國內高等院校的信息管理在人員、結構設置、服務范圍、服務質量等方面都略差于國外的高校,因此國內的學生管理信息化建設還有很長的路要走??v觀我國當前信息化建設的研究狀況,在信息系統的可靠性和保證信息系統迭代更新等方面還存在著相當打的不足,而且目前的信息系統每一個項目都需要單獨建立,信息共享性也不好;在以管理者為主導的方式中,獲得的方式取決于領導者自身對于需要獲取信息的認識及理解,必較不容易清楚了解用戶們的真正需求,也因此沒有辦法充分地滿足他們的實際需要。信息管理系統他所服務的對象是數據,而數據經過封裝之后,保證了安全和實用,對高校管理工作具有突出應用價值REF_Ref26097\r\h[8]。因此,學生管理系統應該充分使用學校的校園網絡資源做到實現集中同一管理學校信息、用戶分散管理、教育資源的共用,能促進傳統的學校管理方法盡快地向著現代化、綜合化、數字化、無紙化的方向穩固推進,根據現狀規劃人才建設方案,提出人才再教育方法,拓展當前人才質量REF_Ref26126\r\h[9]。1.3主要研究內容本文的主要研究內容如下:1.了解相關系統現有的狀況,通過走訪和調查多個信息系統的運行模式,經過消化學習并納入自己的系統使用,進行多方比對分析,發現了系統在運行工作中存在問題并加以改進。2.了解客戶需求,充分了解客戶對于系統所需要的服務,并完善記錄,對的系統架構、功能需求等工作做好前期規劃。3.對系統進行設計,創建E-R圖等結構,根據項目所需的功能,規范化設計進行系統設計,系統雛形出現后,開始設計客戶提到的功能需求和其他需求,對于系統的模塊化功能和Mysql數據庫等其他內容,需要進行更為細致的設計且加以測試。4.在編寫了實現本系統的系統代碼并且通過測試之后,完成了設計和開發學生信息管理系統的工作。1.4論文組織結構本文的組織結構如下:第一章,緒論:對于學生管理的歷史背景、管理系統能夠對產生高校的現狀、課題研究的目和為什么要設計這個系統進行了簡單的描述,最后結合描述。第二章,理論和技術:對設計和開發這款系統的技術進行了特點說明,為什么要用這些技術來開發系統,他們對開發有什么好處,通過實際的開發過程進行技術闡述。第三章,系統需求分析:從用戶和管理員到數據庫的多方面進行需求分析,通過使用軟件畫出ER圖和用例圖,并畫出用例圖。第四章,系統設計:從最開始需要的架構框架開始設計,在完成框架之后,進行體系結構的設計,最后設計系統的功能模塊部分。第五章,系統實現:大致說明了主要功能所需要的技術要點,并附上核心代碼加以介紹。第六章,系統測試:編寫測試用例,對系統進行軟件測試,使用黑白盒方法和測試工具,完成性能測試和壓力測試,并寫下測試結果。相關技術綜述B/S結構B/S結構是Browser/Server的簡稱REF_Ref28089\r\h[10],由此可以看出B/S結構體系主要由瀏覽器、服務器和服務器兩部分組成。B/S中的服務器能夠將數據和應用程序整合在一起,服務器的這一特性,決定了B/S結構的拓展性和靈活性。Java上世紀的90年代,由詹姆斯.高斯林、帕特里克、等幾位杰出的美國工程師在C語言的基礎上,設計并開發了一款面向對象且極為好用的編程語言,在1995年被SUN公司正式將其命名為Java。目前java任然是使用最廣泛的編程語言之一REF_Ref17428\r\h[11]。SSM企業中,最受歡迎同時也是使用最多的框架就是SSM,SSM是Java語言中最能夠代表web框架的一種。MVC的設計框架參照是SSM的標準進行設計的,但是MVC與SSM并不相同,MVC主要分為分為四層:視圖層、控制層、dao層與服務層。而SSM則是三個模塊:SpringMVC、Spring和mybatis所組成,他們結合起來完成整個業務。SpringSpring是一種亦在解決企業應用開發所設計創建的,他的存在是為了解決邏輯類和其他類之間所產生出來的問題。Spring它是基于接口編程而來,不管是從他自生的體積還是開發的成本來說,最好最優的必定是Spring。Spring的Java工廠模式是他的核心技術之一。這個模式是開發人員最為喜愛的一種創建模式之一。開發人員可以通過new關鍵字創建一個新的對象。SpringMVCSpringMVC是用于Web開發的一個功能模塊,MVC是model(模型)、views(視圖)以及controller(控制器)REF_Ref19531\r\h[12]三個部分的縮寫。它也是目前使用得最多的一種Web框架,在開發界非常的受歡迎,同時也在辦公開發領域也全面施展。MyBatisMyBatis其實就是一個JDBC包,它能使底層的數據庫操作更加透明。MyBatis解決了JDBC代碼中參數在Java類中手動配置問題和對結果集的手工檢索問題REF_Ref12755\r\h[13],MyBatis能夠通過配置文件關聯實體類映射器文件,數據庫中的類可以通過配置SQL映射到數據庫中進行操作。用戶通過點擊瀏覽器,控制器獲取到動作后發送請求。只有所有業務都被處理完畢之后,才會把數據送到控制臺,控制臺接收到處理完畢的數據后,通過視圖將處理完畢的數據顯示在當前頁面,從而完成處理工作。Ajax自從Ajax誕生以后,Ajax技術廣泛應用于web應用中REF_Ref28530\r\h[14]。Ajax它允許頁面的本地刷新,以及前后站之間的異步數據交換,對于交互方面,他能夠給客戶帶來更好的一個體驗。Ajax技術對比Web技術具有以下特點優點:1.與傳統的Web程序不一樣的是,Ajax要完成數據的請求的話,只能使用JavaScript中的XMLHttprequest對象。2.Ajax發出數據請求之后,服務端收到請求并開始處理,Ajax的服務的只處理客戶端發出請求的數據,而不是像以前的web服務對整個界面進行響應,這樣的好處就是在客戶的體驗上要明顯高于之前。3.Ajax不需要像web端一樣,要等數據響應處理完才能打開界面,它通過特有的異步刷新模式,減少了客戶等待的時間。MySQLMySQL他是一款關系型的數據庫,它擁有很多版本。MySQL中有五個部分負責日常的工作,他們分別是:連接模塊單元、SQL解析模塊單元、查詢緩存模塊單元、SQL優化器模塊單元和存儲引擎模塊單元。數據庫操作組件DatabaseOperator為了保留調試和SQL優化的特性,選擇采用JDBC來直接操作數據庫。REF_Ref28569\r\h[15]需求分析每一款程序系統在設計初期,通常第一步就是獲得用戶的需求,通過客戶的需求來制定這款系統的主體功能。系統需求第一步得看系統的整體,第二步看用例的分析報告,從而得出分析方案。系統其他細微功能則是看系統完成后的整體性能、各個功能模塊的交互性時候達標和系統的安全性等方面。系統可行性是從經濟可行性、技術可行性、使用可行性等多個角度來判斷該系統的開發能不能行得通。系統流程分析每一個系統在開發的時候都有一個流程,在收到開發任務之后的第一時間,找到用戶詢問對于系統想要的功能,然后對癥下藥進行分析,最后,根據自己獲取到的功能需求,做前期的數據庫設計和系統框架的設計。學生信息管理系統的開發過程如圖3-1所示。圖3-1系統流程系統完成開發后,用戶就可以登錄系統了,在登錄之前需要用戶注冊賬號,完成后登錄系統。當在此登錄界面時,用戶需要已注冊的賬號和驗證碼,完成后點擊登錄,數據庫對拿注冊時的信息進行比對,成功的話,就可以順利的進入系統,失敗就會收到提示,告訴用戶哪里出錯了,需要改哪里的信息進行登錄。系統登錄執行流程如圖3-2所示。圖3-2系統執行流程圖系統功能需求分析功能需求也是設計系統功能模塊的一部分,是根據用戶提出的要求進行分析的過程,同時對分析出來的信息和用戶的實際情況進行調查,唯一的目標是實現用戶所期望的學生信息管理系統。根據不同用戶提出來的不同需求,系統在開始開發之前,需要和用戶詳細溝通,了解用戶喜好,與客戶溝通協商的基本功能需求,為下個階段的設計開發做準備。系統非功能需求性分析為了設計和開發系統,需要檢測和準備系統的功能模塊和能需求,為了在體驗上給客戶帶來良好的感受,非功能需求也同樣不能少。對于系統非功能性的要求必須具備以下幾點:便捷性、安全性、可增添性、低延時等。這直接掌握著系統能夠給客戶帶來良好體驗的關鍵,下面簡要介紹一下系統非功能性的分析指標。1.易操作性:用戶永遠是開發前第一個考慮到的,在各行各業或多或少都存在使用學生信息管理系統的用戶,因此,在設計學生信息管理系統的頁面結構和業務邏輯時,要保證系統的干凈整潔、簡單實用。2.安全性:用戶是否使用本系統,它的安全性是需要特別關注的,用戶的個人信息將會大量的存著與學生信息管理系統中,如果發生大面積的數據信息泄露,會給用戶造成很多不必要的影響。因此,應加強系統安全性設計,如防御SQL注入、頁面授權等。3.可增添性:隨著系統運行的時間增加,用戶數量也在不斷增加。因此,在系統設計開始時,一定要考慮到系統未來的升級,做好后背模塊的預留,并根據可擴展性的要求編寫一些關鍵代碼,而不是直接編寫一些簡單的函數來快速開發。4.系統日志:系統日志要搭配著系統的安全來使用,系統在運行時,系統日志需要記錄整個系統運行時的狀態,并保存備份,此外,管理員也要時刻注意日志的報錯信息和收攻擊的信息,做到及時發現及時處理。5.低延時:延時低才能給用戶帶來最好的體驗,在開發之前,想好用什么技術,必須要保證系統的延時不能夠高于500毫秒。系統可行性分析經濟可行性分析為了確保系統的開發不會因為資金問題而暫停或終止,我首先分析了開發整個系統的經濟可行性。本系統所使用的軟件都是開源的軟件,在官網就能下載。在開發的時候,可以把自己的主機當作服務器并直接部署,當系統能夠完成并下線,這樣就可以部署到企業的服務器中了,所以,本項目不存在資金問題是可行的。技術可行性分析系統所使用的開發語言為Java語言,數據庫則采用Mysql。從編程語言到數據庫所涉及的知識通常是學習的,此外,這些都是目前非常實用的主流技術,不清楚的可以直接上網搜索教程,非常的方便。MySQL在操作上非常簡單,可以在Navicat等可視化工具的幫助下建表和構圖。對于以上介紹得出結論,開發學生信息管理系統所用到的技術是完全沒問題的。使用可行性分析學生信息管理系統頁面結構美觀大氣,操作功能時方便快捷。不管用戶能不能很好的使用電腦,用戶都可以快速啟動系統。對于以上介紹得出結論,該系統在實際應用中是完全沒問題的。管理可行性分析學生信息管理系統是一款web應用系統,它對于學生管理工作有著很好的意義。對于前端管理、后臺管理、用戶管理、日志管理等,都是由管理員進行日常的維護。系統用例分析管理員用例分析管理員的功能有:老師信息管理、學生信息管理、通知公告發布、課程信息管理、留言信息管理、教學任務管理、成績信息管理和成績統計管理功能的操作。為了方便用戶賬戶信息的管理工作,當發現用戶的帳戶出現了問題時,管理員能夠及時處理,發現用戶的賬號做出疑問行操作后,管理員在數據庫中有權禁用賬戶、解除禁用甚至可以直接刪除該帳戶。管理員的用例如圖3-3所示。圖3-3管理員用例圖教師用例分析在本系統中,只有登錄的教師才能進行通知公告查看、課程信息管理、選課學生管理、學生留言管理,教學任務管理,成績信息管理,成績統計操作。教師的用例如圖3-4所示。圖3-4教師用例圖學生用例分析在本系統中,只有登錄的學生才可以進行通知公告查看、課程信息查看、我的選課操作、我的留言管理、成績信息查看操作。學生的用例如圖3-5所示。圖3-5學生用例圖系統設計系統總體架構本系統的整體架構是在B/S體系結構上進行搭建和完善的,整個系統從上到下分別為:前端UI、展示層、業務層、數據層和數據庫。系統的架構圖如圖4-1所示。圖4-1系統整體架構圖系統流程系統的流程圖如圖4-2所示。圖4-2系統操作流程圖數據庫設計通過對系統的需求分析,本系統分為三個角色,分別是:管理員和教師和學生。每個角色都有不同的權限。數據庫主要表的表結構如下:1.課程信息(course)表,如表4-1所示。表4-1course表序號字段名數據類型主鍵非空描述1idint(20)是是2namevarchar(255)否否名稱3userint(20)否否所屬教師4contenttext否否課程介紹5xieshivarchar(255)否否課程學時6gmtTimedatetime否否添加時間7begindatetime否否8enddatetime否否2.選課信息(courseord)表,如表4-2所示。表4-2courseord表序號字段名數據類型主鍵非空描述1idint(20)是是2courseint(20)否否課程3userint(20)否否選課學生4teacherint(20)否否所屬教師5gmtTimedatetime否否添加時間6statevarchar(255)否否7scoredouble(22)否否3.通知公告(news)表,如表4-3所示。表4-3news表序號字段名數據類型主鍵非空描述1idint(20)是是2titlevarchar(255)否否標題3contenttext否否內容4gmtTimedatetime否否添加時間4.留言信息(reply)表,如表4-4所示。表4-4reply表序號字段名數據類型主鍵非空描述1idint(20)是是2contenttext否否內容3userint(20)否否留言人4teacherint(20)否否老師5replyvarchar(255)否否回復6gmtTimedatetime否否添加時間5.角色(sys_role)表,如表4-5所示。表4-5sys_role表序號字段名數據類型主鍵非空描述1role_idint(20)是是2role_namevarchar(100)否否角色名稱3remarkvarchar(100)否否備注4create_user_idint(20)否否創建者ID5create_timedatetime否否創建時間6.系統用戶(sys_user)表,如表4-6所示。表4-6sys_user表序號字段名數據類型主鍵非空描述1user_idint(20)是是2usernamevarchar(50)否是用戶名3passwordvarchar(100)否否密碼4emailvarchar(100)否否郵箱5mobilevarchar(100)否否手機號6statustinyint(4)否否狀態0:禁用1:正常7create_user_idint(20)否否創建者ID8create_timedatetime否否創建時間9typevarchar(255)否否7.教學任務(task)表,如表4-7所示。表4-7task表序號字段名數據類型主鍵非空描述1idint(20)是是2namevarchar(255)否否名稱3userint(20)否否教學教師4timedatetime否否教學日期5contentnvarchar(255)否否教學內容6urlvarchar(255)否否備案文件7gmtTimedatetime否否添加時間系統功能設計登錄注冊對于沒有賬號的用戶,本系統將不開發給這類用戶使用,如果想使用,那就必須要注冊,注冊成功夠測才能使用系統。如圖4-10,4-11所示。圖4-10注冊時序圖圖4-11用戶登錄時序圖用戶管理管理員可以對教師和學生的賬戶進行增刪查改鎖等管理性操作。如圖4-12所示:圖4-12用戶信息管理活動圖信息管理為了確保個人信息在系統中的安全,就必須先成功登錄系統,才能夠使用。系統時序圖如圖4-13所示。圖4-13信息管理時序圖信息檢索用戶可以使用搜索查詢功能對想查找的信息進行快速查詢。信息查詢功能流程圖如圖4-14所示。圖4-14信息檢索流程圖系統功能實現管理員在進入系統后,用戶需要輸入之前注冊的賬戶信息和驗證碼。系統判斷信息和驗證碼是否正確。只有當數據庫中的信息驗證通過,才能夠成功登錄系統并跳轉到系統的主頁。如果輸入的信息和驗證碼其中一個錯誤,系統也不會成功登錄,登錄失敗后,會向用戶提示錯誤消息,讓用戶自行修改信息。登錄界面如圖5-1所示。圖5-1登錄界面管理員依次輸入賬號、密碼,點擊登陸按鈕,login頁面調用login方法把數據傳送到后端SysLoginController中,之后數據會傳到shiro中的UserRealm中驗證賬號、密碼是否正確。代碼如下Login.html代碼login:function(event){vardata="username="+this.username+"&password="+this.password+"&captcha="+this.captcha;$.ajax({type:"POST",url:"sys/login",data:data,dataType:"json",success:function(result){if(result.code==0){//登錄成功parent.location.href='index.html';}else{vm.error=true;vm.errorMsg=result.msg;vm.refreshCode();}}});}SysLoginController代碼/***登錄*/@ResponseBody@RequestMapping(value="/sys/login",method=RequestMethod.POST)publicRlogin(Stringusername,Stringpassword,Stringcaptcha)throwsIOException{ Stringkaptcha=ShiroUtils.getKaptcha(Constants.KAPTCHA_SESSION_KEY); if(!captcha.equalsIgnoreCase(kaptcha)){ returnR.error("驗證碼不正確"); }try{Subjectsubject=ShiroUtils.getSubject();//sha256加密password=newSha256Hash(password).toHex();UsernamePasswordTokentoken=newUsernamePasswordToken(username,password);subject.login(token);}catch(UnknownAccountExceptione){returnR.error(e.getMessage());}catch(IncorrectCredentialsExceptione){returnR.error(e.getMessage());}catch(LockedAccountExceptione){returnR.error(e.getMessage());}catch(AuthenticationExceptione){returnR.error("賬戶驗證失敗");}returnR.ok();}UserRealm代碼/***認證(登錄時調用)*/@OverrideprotectedAuthenticationInfodoGetAuthenticationInfo( AuthenticationTokentoken)throwsAuthenticationException{Stringusername=(String)token.getPrincipal();Stringpassword=newString((char[])token.getCredentials());//查詢用戶信息SysUserEntityuser=sysUserService.queryByUserName(username);//賬號不存在if(user==null){thrownewUnknownAccountException("賬號不正確");}//密碼錯誤if(!password.equals(user.getPassword())){thrownewIncorrectCredentialsException("密碼不正確");}//賬號鎖定if(user.getStatus()==0){ thrownewLockedAccountException("賬號已鎖定,請通知管理員");}SimpleAuthenticationInfoinfo=newSimpleAuthenticationInfo(user,password,getName());returninfo;}}教師信息管理教師信息管理頁面如圖5-2所示。圖5-2教師信息管理管理員點擊系統教師信息后,頁面會調用List方式跳轉到SysUserControlle之后SysUserControlle中的list查詢到學生信息并列表返回user,js中,之后user.js通過type查詢到教師信息并列表返回到前端界面到前端界面。教師信息管理關鍵代碼如下。SysUserControlle代碼@RestController@RequestMapping("/sys/user")publicclassSysUserControllerextendsAbstractController{@AutowiredprivateSysUserServicesysUserService;@AutowiredprivateSysUserRoleServicesysUserRoleService;/***所有用戶列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){//查詢列表數據Queryquery=newQuery(params);List<SysUserEntity>userList=sysUserService.queryList(query);inttotal=sysUserService.queryTotal(query);PageUtilspageUtil=newPageUtils(userList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}/sys/user.js代碼$(function(){$("#jqGrid").jqGrid({url:'../sys/user/list?type=1',datatype:"json",colModel:[{name:'userId',index:'userId',width:0,hidden:true,key:true}, {label:'用戶名',name:'username',width:75},{label:'郵箱',name:'email',width:90}, {label:'手機號',name:'mobile',width:100}, {label:'狀態',name:'status',width:80,formatter:function(value,options,row){returnvalue===0? '<spanclass="labellabel-danger">禁用</span>': '<spanclass="labellabel-success">正常</span>';}}, {label:'創建時間',name:'createTime',index:"create_time",width:80}],學生信息管理學生信息管理如圖5-3所示。圖5-3學生信息管理頁面管理員點擊系統學生信息后,頁面會調用List方式跳轉到SysUserControlle之后SysUserControlle中的list查詢到學生信息并列表返回user,js中,之后user.js通過type查詢到學生信息并列表返回到前端界面到前端界面。學生信息管理關鍵代碼如下。SysUserControlle代碼@RestController@RequestMapping("/sys/user")publicclassSysUserControllerextendsAbstractController{@AutowiredprivateSysUserServicesysUserService;@AutowiredprivateSysUserRoleServicesysUserRoleService;/***所有用戶列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){//查詢列表數據Queryquery=newQuery(params);List<SysUserEntity>userList=sysUserService.queryList(query);inttotal=sysUserService.queryTotal(query);PageUtilspageUtil=newPageUtils(userList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}/admin/user.js代碼$(function(){$("#jqGrid").jqGrid({url:'../sys/user/list?type=3',datatype:"json",colModel:[{name:'userId',index:'userId',width:0,hidden:true,key:true}, {label:'用戶名',name:'username',width:75},{label:'郵箱',name:'email',width:90}, {label:'手機號',name:'mobile',width:100}, {label:'狀態',name:'status',width:80,formatter:function(value,options,row){returnvalue===0? '<spanclass="labellabel-danger">禁用</span>': '<spanclass="labellabel-success">正常</span>';}}, {label:'創建時間',name:'createTime',index:"create_time",width:80}],通知公告信息管理通知公告信息管理頁面如圖5-4所示。圖5-4通知公告管理頁面管理員點擊通知公告后,頁面會調用list方法跳轉到NewController,之后NewController中的list方法查詢到通知公告信息并返回到前端。相關代碼如下。***通知公告*/@RestController@RequestMapping("news")publicclassNewsControllerextendsAbstractController{@AutowiredprivateNewsServicenewsService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){//查詢列表數據Queryquery=newQuery(params); List<NewsEntity>newsList=newsService.queryList(query);inttotal=newsService.queryTotal(query); pageUtilspageUtil=newPageUtils(newsList,total,query.getLimit(),query.getPage()); returnR.ok().put("page",pageUtil);}留言信息管理留言信息頁面如圖5-5所示。圖5-5留言信息頁面管理員點擊留言信息后,頁面會調用list方法跳轉到ReplyController,之后ReplyController中的list方法查詢到留言信息并返回到前端。相關代碼如下。/***留言信息*/@RestController@RequestMapping("reply")publicclassReplyControllerextendsAbstractController{@AutowiredprivateReplyServicereplyService;/***列表*/@RequestMapping("/list") publicRlist(@RequestParamMap<String,Object>params){ if(super.getUserId()>1&&"3".equals(super.getUser().getType()))params.put("user",super.getUserId()); if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("teacher",super.getUserId());//查詢列表數據Queryquery=newQuery(params); List<ReplyEntity>replyList=replyService.queryList(query);inttotal=replyService.queryTotal(query); PageUtilspageUtil=newPageUtils(replyList,total,query.getLimit(),query.getPage()); returnR.ok().put("page",pageUtil);}教學任務信息教學任務信息頁面如圖5-6所示。圖5-6教學任務頁面管理員點擊教學任務后,頁面會調用list方法跳轉到TaskController,之后TaskController中的list方法查詢到教學任務信息并返回到前端。相關代碼如下。/***教學任務*/@RestController@RequestMapping("task")publicclassTaskControllerextendsAbstractController{@AutowiredprivateTaskServicetaskService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){if(super.getUserId()>1)params.put("user",super.getUserId());//查詢列表數據Queryquery=newQuery(params);List<TaskEntity>taskList=taskService.queryList(query);inttotal=taskService.queryTotal(query); PageUtilspageUtil=newPageUtils(taskList,total,query.getLimit(),query.getPage()); returnR.ok().put("page",pageUtil);}成績信息管理成績信息頁面如圖5-7所示。圖5-7成績信息頁面管理員點擊成績信息后,頁面會調用list方法跳轉到CourseordController,之后CourseordController中的list方法查詢到成績信息并返回到前端。相關代碼如下。/***成績信息*/@RestController@RequestMapping("courseord")publicclassCourseordControllerextendsAbstractController{@AutowiredprivateCourseordServicecourseordService;@AutowiredprivateSysUserServicesysUserService;@AutowiredprivateCourseServicecourseService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){if(super.getUserId()>1&&"3".equals(super.getUser().getType()))params.put("user",super.getUserId());if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("teacher",super.getUserId());//查詢列表數據Queryquery=newQuery(params);List<CourseordEntity>courseordList=courseordService.queryList(query);inttotal=courseordService.queryTotal(query);PageUtilspageUtil=newPageUtils(courseordList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}課程信息管理課程信息頁面如圖5-8所示。圖5-8課程信息頁面管理員點擊課程信息后,頁面會調用list方法跳轉到CourseController,之后CourseController中的list方法查詢到課程信息并返回到前端。相關代碼如下。/***課程信息*/@RestController@RequestMapping("course")publicclassCourseControllerextendsAbstractController{@AutowiredprivateCourseServicecourseService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("user",super.getUserId());//查詢列表數據Queryquery=newQuery(params);List<CourseEntity>courseList=courseService.queryList(query);inttotal=courseService.queryTotal(query);PageUtilspageUtil=newPageUtils(courseList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}成績統計成績統計頁面如圖5-9所示。圖5-9成績統計頁面管理員點擊成績統計后,頁面會調用map方法跳轉到CourseordController,之后CourseordController中的map方法查詢到信息并返回到前端。相關代碼如下。//成績統計@RequestMapping("/tj/{id}")publicRtj(@PathVariable("id")Longid){Map<String,Object>params=newHashMap<>();params.put("course",id);Map<String,Integer>params1=newHashMap<>();for(CourseordEntityentity:this.courseordService.queryList(params)){if(entity.getScore()>0&&entity.getScore()<60){Integernum=params1.get("0-59");num=num==null?1:num+1;params1.put("0-59",num);}if(entity.getScore()>=60&&entity.getScore()<80){Integernum=params1.get("60-79");num=num==null?1:num+1;params1.put("60-79",num);}if(entity.getScore()>=80&&entity.getScore()<90){Integernum=params1.get("80-89");num=num==null?1:num+1;params1.put("80-89",num);}if(entity.getScore()>=90&&entity.getScore()<=100){Integernum=params1.get("90-100");num=num==null?1:num+1;params1.put("90-100",num);}}學生公告信息學生用戶打開公告信息,可以查看所有的公告信息,課程信息頁面如圖5-10所示。圖5-10公告信息頁面學生點擊通知公告后,頁面會調用list方法跳轉到NewsController,之后NewsController中的list方法查詢到通知公告信息并返回到前端。相關代碼如下。***通知公告*/@RestController@RequestMapping("news")publicclassNewsControllerextendsAbstractController{@AutowiredprivateNewsServicenewsService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){//查詢列表數據Queryquery=newQuery(params); List<NewsEntity>newsList=newsService.queryList(query);inttotal=newsService.queryTotal(query); pageUtilspageUtil=newPageUtils(newsList,total,query.getLimit(),query.getPage()); returnR.ok().put("page",pageUtil);}課程信息課程信息頁面如圖5-11所示。圖5-11課程信息頁面學生點擊課程信息后,頁面會調用list方法跳轉到CourseController,之后CourseController中的list方法查詢到課程信息并返回到前端。相關代碼如下。/***課程信息*/@RestController@RequestMapping("course")publicclassCourseControllerextendsAbstractController{@AutowiredprivateCourseServicecourseService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("user",super.getUserId());//查詢列表數據Queryquery=newQuery(params);List<CourseEntity>courseList=courseService.queryList(query);inttotal=courseService.queryTotal(query);PageUtilspageUtil=newPageUtils(courseList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}我的選課我的選課頁面如圖5-12所示。圖5-12我的選課頁面學生點擊我要選課后,頁面會調用方法跳轉到CourseServicelmpl。相關代碼如下。@Overridepublicvoidsave(CourseordEntitycourseord){ courseord.setTeacher(this.courseService.queryObject(courseord.getCourse()).getUser());Map<String,Object>map=newHashMap<>();map.put("user",courseord.getUser());map.put("course",courseord.getCourse());if(this.courseordDao.queryList(map).size()>0){thrownewRRException("請勿重復選擇");} CourseEntitycourse=this.courseService.queryObject(courseord.getCourse()); if(System.currentTimeMillis()<course.getBegin().getTime()||System.currentTimeMillis()>course.getEnd().getTime()){ thrownewRRException("無法選課,課程時間未到或者已過");}我的成績成績信息頁面如圖5-13所示。圖5-13成績信息頁面學生點擊成績信息后,頁面會調用list方法跳轉到CourseordController,之后CourseordController中的list方法查詢到成績信息并返回到前端。相關代碼如下。/***成績信息*/@RestController@RequestMapping("courseord")publicclassCourseordControllerextendsAbstractController{@AutowiredprivateCourseordServicecourseordService;@AutowiredprivateSysUserServicesysUserService;@AutowiredprivateCourseServicecourseService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){if(super.getUserId()>1&&"3".equals(super.getUser().getType()))params.put("user",super.getUserId());if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("teacher",super.getUserId());//查詢列表數據Queryquery=newQuery(params);List<CourseordEntity>courseordList=courseordService.queryList(query);inttotal=courseordService.queryTotal(query);PageUtilspageUtil=newPageUtils(courseordList,total,query.getLimit(),query.getPage());returnR.ok().put("page",pageUtil);}教師通知公告通知公告頁面如圖5-14所示。圖5-14通知公告頁面教師點擊通知公告后,頁面會調用list方法跳轉到NewsController,之后NewsController中的list方法查詢到通知公告信息并返回到前端。相關代碼如下。***通知公告*/@RestController@RequestMapping("news")publicclassNewsControllerextendsAbstractController{@AutowiredprivateNewsServicenewsService;/***列表*/@RequestMapping("/list")publicRlist(@RequestParamMap<String,Object>params){//查詢列表數據Queryquery=newQuery(params); List<NewsEntity>newsList=newsService.queryList(query);inttotal=newsService.queryTotal(query); pageUtilspageUtil=newPageUtils(newsList,total,query.getLimit(),query.getPage()); returnR.ok().put("page",pageUtil);}課程信息課程信息頁面如圖5-15所示。圖5-15課程信息頁面教師點擊課程信息后,頁面會調用list方法跳轉到CourseController,之后CourseController中的list方法查詢到通知課程信息并返回到前端。相關代碼如下。/***列表*/@RequestMapping("/list2")publicRlist2(@RequestParamMap<String,Object>params){if(super.getUserId()>1&&"1".equals(super.getUser().getType()))params.put("user",super.getUserId());Queryquery=newQuery(params);List<CourseEntity>courseList=courseService.queryList(query);returnR.ok().put("list",courseList);}/***信息*/@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid){CourseEntitycourse=courseService.queryObject(id);returnR.ok().put("course",course);}/***保存*/@RequestMapping("/save")publicRsave(@RequestBodyCourseEntitycourse){if(course.getUser()==null)course.setUser(super.getUserId());courseService.save(course);returnR.ok();}/***修改*/@RequestMapping("/update")publicRupdate(@RequestBodyCourseEntitycourse){courseService.update(course);returnR.ok();}/***刪除*/@RequestMapping("/delete")publicRdelete(@RequestBodyLong[]ids){courseService.deleteBatch(ids);returnR.ok();}}選課學生選課學生頁面如圖5-16所示。圖5-16選課學生頁面教師點擊選課學生后,頁面會調用list方法跳轉到CourseordController,之后CourseordController中的list方法查詢到選課學生信息并返回到前端。相關代碼如下。/***列表*/@RequestMapping("/list2")publicRlist2(@RequestParamMap<String,Object>params){Queryquery=newQuery(params);List<CourseordEntity>courseordList=courseordService.queryList(query);returnR.ok().put("list",courseordList);}/***信息*/@RequestMapping("/info/{id}")publicRinfo(@PathVariable("id")Longid){CourseordEntitycourseord=courseordService.queryObject(id);returnR.ok().put("courseord",courseord);}教學任務教學任務頁面如圖5-17所示。圖5-17教學任務頁面教師點擊教學任務后,頁面會調用list方法跳轉到TaskController,之后TaskController中的list方法查詢到教學任務信息并返回到前端。相關代碼如下。/** *列表 */ @RequestMapping("/list2") publicRlist2(@RequestParamMap<String,Object>params){Queryquery=newQuery(params); List<TaskEntity>taskList=taskService.queryList(query); returnR.ok().put("list",taskList); } /** *信息 */ @RequestMapping("/info/{id}") publicRinfo(@PathVariable("id")Longid){ TaskEntitytask=taskService.queryObject(id); returnR.ok().put("task",task); }成績信息成績信息頁面如圖5-18所示。圖5-18成績信息頁面成績批量導入頁面如圖5-19所示。圖5-19成績批量導入頁面教師點擊導入成績后,頁面會調用map方法跳轉到CourseordController,之后CourseordController會把獲取到的excel表上傳到tomcat服務器中并分析數據,完成后返回前端。相關代碼如下。//從用戶表中查詢出老師idSysUserEntityteacher=sysUserService.queryByUserName(teacherNm);if(teacher==null){thrownewRRException("老師"+teacherNm+"不存在,錄入失敗");}LongteacherId=teacher.getUserId();if(super.getUserId()>1&&"1".equals(super.getUser().getType())){if(super.getUserId()!=teacherId){thrownewRRException("僅可導入老師自己的課程成績,錄入失敗");}}//獲取課程名稱lineContent=recordList.get(2);lineArr=lineContent.split("\t");StringcourseNm=lineArr[0].substring(lineArr[0].indexOf(":")+1);//從課程表中查詢出課程idqueryMap.put("name",courseNm);queryMap.put("user",teacherId);List<CourseEntity>courseList=courseService.queryList(queryMap);if(courseList==null||courseList.size()==0){thrownewRRException("老師"+teacherNm+"的課程《"+courseNm+"》不存在,錄入失敗");}LongcourseId=courseList.get(0).getId();queryMap.put("course",courseId);//獲取學生成績intrecordSize=recordList.size();for(inti=6;i<recordSize;i++){lineContent=recordList.get(i);lineArr=lineContent.split("\t");StringstudentNm=lineArr[2];//從用戶表中查詢學生idSysUserEntitystudent=sysUserService.queryByUserName(studentNm);if(student==null){StringerrMsg="學生"+studentNm+"不存在,該條錄入失敗";rslt.add(errMsg);continue;}LongstudentId=student.getUserId();queryMap.put("user",studentId);Stringscore=lineArr[3];//判斷這個用戶是否選擇這門課List<CourseordEntity>qrycourseList=courseordService.queryList(queryMap);if(qrycourseList.size()>0){courseordEntitycourseord=qrycourseList.get(0);courseord.setCourse(courseId);courseord.setScore(Double.valueOf(score));courseord.setUser(studentId);courseord.setTeacher(teacherId);courseord.setGmttime(newDate());courseord.setState("最終");courseordService.update(courseord);}else{StringerrMsg="學生"+studentNm+"沒選這個課,無法錄入";rslt.add(errMsg);continue;}}StringconcludeStr="成功條數為:"+(recordSize-6-rslt.size())+",失敗條數為:"+rslt.size();rslt.add(concludeStr);JSONObjectrsltStr=newJSONObject();rsltStr.put("code","00");rsltStr.put("rslt",rslt);returnrsltStr;}}系統測試測試基礎對于軟件的測試,通常都是在開發進入了收尾階段,通常很多問題都是在測試中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論