【文章內(nèi)容簡(jiǎn)介】
“添加新學(xué)生”鏈接,進(jìn)入學(xué)生新增頁(yè)面,新增一條學(xué)生信息。 類(lèi)設(shè)計(jì) 本系統(tǒng)主要分 Entity類(lèi) (實(shí)體類(lèi) )和 Bean類(lèi)(業(yè)務(wù)管理類(lèi))兩部分。 (1) Entity類(lèi) 面向?qū)ο蟮木幊趟枷胫?,所有的東西都可以視為對(duì)象,我們將主要的對(duì)象抽象出來(lái),在實(shí)體類(lèi)中進(jìn)行描述,而我們的業(yè)務(wù),主要就是操作這些實(shí)體類(lèi)。系統(tǒng)中主要的實(shí)體類(lèi)有:用戶( User)、所有題目( Topic)、學(xué)生( Student)、教師( Teacher)、院系( Department)、角色( Role)、專(zhuān)業(yè)( Major)、開(kāi)題報(bào)告( OpeningReport)、已選題目( SelectedTopic)、論文( Paper)。 系統(tǒng)內(nèi)部分實(shí)體類(lèi)關(guān)系如圖 。 Entity類(lèi) (實(shí)體類(lèi) )放于 包內(nèi)。實(shí)體類(lèi)的變化都將由 Hibernate傳輸?shù)綌?shù)據(jù)庫(kù)中。 圖 部分實(shí)體類(lèi)關(guān)系 (2) 業(yè)務(wù)類(lèi) 根據(jù) Action、 service、 DAO 三層分類(lèi)的不同,我們將業(yè)務(wù)代碼主要分為三類(lèi),用于接收用戶業(yè)務(wù)請(qǐng)求的代碼屬于 Action類(lèi),主要放在 。用 于 處理 詳細(xì) 業(yè)務(wù) 的邏 輯處 理的 代碼 屬 于 service 類(lèi) , 主要 放 在 包中,負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)操作的屬于 DAO 類(lèi),主要放在 中。除此之 外,一些公用的如加密解密的工具類(lèi),則放在 的包中。 C la s s _ Ma jo r D e p a r tm e n tStu d e n tte a c h e r TopicSe le c te d Su b je c t O p e n in g r e p o r t1* 1**1 *1*111 11Pa p e r*1u s e r1111R o leU s e r R o le*11* ① 論文選題: 首先教師在系統(tǒng)中出題,出題時(shí),調(diào)用請(qǐng)求 ,然后再 TopicService中進(jìn)行邏輯處理,然后調(diào)用 TopicDao,進(jìn)行數(shù)據(jù)庫(kù)操作,當(dāng)操作成功后,會(huì)返回驗(yàn)證信息,前臺(tái)頁(yè)面根據(jù)返回的信息,從而判斷是進(jìn)入成功提示頁(yè)面還是失敗提示頁(yè)面。上傳題目時(shí)會(huì)上傳題目的參考資料,在邏輯處理層 TopicService 中,進(jìn)入另外一條處理通道,調(diào)用文件處理服務(wù),將文檔保存在服 務(wù)器上。 整個(gè)流程的時(shí)序圖如圖 所示。 圖 出題教師添加畢業(yè)設(shè)計(jì)題目時(shí)序圖 教師在出題完畢之后,學(xué)生可以進(jìn)行選題操作。系統(tǒng)首先獲取所有的可選題目Topic,然后選題 selectsubject,當(dāng)選題成功后,系統(tǒng)就在數(shù)據(jù)庫(kù)中生成一條新的選題記錄,同時(shí)在該題目的選擇狀態(tài)進(jìn)行修改,并且在題目表 Topic 中,將是否已選擇修改為已選擇。 圖 學(xué)生選題過(guò)程 其中 ChooseTopicAction主要的方法包括: input()、 list ()、 choose ()、 cancel ()、myTopic()五個(gè)方法。這些方法的具體描述如表 所示。 表 ChooseTopicAction類(lèi)主要方法描述 方法名 參數(shù) 返回值 功能描述 Input 無(wú) String, Struts 2 的 result 名稱(chēng) 為學(xué)生分頁(yè)顯示題目列表 list 無(wú) String, Struts 2 的 result 名稱(chēng) 獲取并顯示題目的參考資料列表 choose 無(wú) String, Struts 2 的 result 名稱(chēng) 判斷題目是否可選并完成選題 cancel 無(wú) String, Struts 2 的 result 名稱(chēng) 學(xué)生取消選題 myTopic 無(wú) String, Struts 2 的 result 名稱(chēng) 學(xué)生查看自己的選題 : 學(xué)生 : 教師 : T o p i c : Se l e ct e d Su b j e ct : O p e n i n g re p o rt1 : C re a t e ()2 : L i st ()3 : Se l e ct Su b j e ct ()3 . 1 : C re a t e ()3 . 2 : C h a n g e St a t u s( )4 : L i st ()5 : L i st () 業(yè)務(wù)邏輯類(lèi) TopicService 的主要方法描述如表 所示。 表 TopicService 類(lèi)主要方法描述 方法名 參數(shù) 返回值 功能描述 list 無(wú) ListTopic 顯示所有選題 search Page page, Integer majorID, String tid, String title, Boolean isSelected, Integer year ListTopic 根據(jù)條件查詢(xún)選題 get int id Topic 根據(jù) ID 查找題目 delete int id, String savePath String 根據(jù) ID刪除題目,返回執(zhí)行結(jié)果信息 save String title, String tid, File[] upload, String[] uploadFileName, String savePath String 教師添加畢業(yè)設(shè)計(jì)題目 返回結(jié)果信息 remove int fileid, String attach, String savePath String 刪除參考資料 返回結(jié)果信息 cancel final int stid String 取消選題 changeFinalTitle int stid, String ft Void 學(xué)生更改最終題目 choose final String stuID, final String topicID String 學(xué)生選題 返回結(jié)果信息 append int id, String tid File[] upload, String[] uploadFileName, String savePath String 添加參考資料 返回結(jié)果信息 ② 參數(shù)設(shè)置 本系統(tǒng)使用 XML文件存儲(chǔ)系統(tǒng)的運(yùn)行參數(shù)。為減少服務(wù)器的開(kāi)銷(xiāo),當(dāng)初始運(yùn)行系統(tǒng)時(shí),我們通過(guò)公共類(lèi)讀取文件中的參數(shù)。并且公共類(lèi)采用單例模式,無(wú)需每次調(diào)用都要?jiǎng)?chuàng)建新的對(duì)象。該類(lèi)主要方法如表 所述。 表 CommonInfo 類(lèi)主要方法 方法名 參數(shù) 返回值 功能描述 getXXX 無(wú) String/int 獲取參數(shù) setXXX String/int Void 設(shè)置參數(shù)值 update 無(wú) 無(wú) 將參數(shù)寫(xiě)入文件 init 無(wú) 無(wú) 初始化類(lèi)時(shí)讀取文件內(nèi)參數(shù) getInstance 無(wú) CommonInfo 獲取 CommonInfo 類(lèi)實(shí)例 ③ 用戶登錄及管理 系統(tǒng)在登錄時(shí),通過(guò) UserAction 獲取用戶的登陸請(qǐng)求,獲得請(qǐng)求中的用戶名和密碼,將用戶名和密碼傳入 UserService 中進(jìn)行正確性驗(yàn)證,驗(yàn)證通過(guò)后,將前臺(tái)所需要的數(shù)據(jù)傳輸?shù)角芭_(tái),為了系統(tǒng)安全性,在登陸請(qǐng)求傳輸時(shí),我們對(duì)密碼進(jìn)行了 MD5 加密,以防止通過(guò)截取數(shù)據(jù)包的方式獲取用戶名和密碼。登陸之后,用戶可以修改個(gè)人的一些非關(guān)鍵信息,如 地址,同時(shí),用戶可重置密碼,重置密碼的操作,也將由 UserAction操作。 ④ 權(quán)限控制 為防止有惡意用戶進(jìn)行不當(dāng)操作,系統(tǒng)加入了權(quán)限控制。主要通過(guò)自定義的攔截器 SecurityAdmin 完成。在操作之前判斷用戶是否有足夠的權(quán)限可以執(zhí)行對(duì)應(yīng)的action。該類(lèi)放在 。 通過(guò)注解的方式我們進(jìn)行權(quán)限控制。當(dāng)執(zhí)行方法時(shí),攔截器會(huì)獲取 action類(lèi)中相關(guān)方法的注解,由此可以判斷當(dāng)前用戶是否有權(quán)限執(zhí)行該方法。如果有則執(zhí)行該 方法,否則在后臺(tái)添加錯(cuò)誤信息傳遞到前臺(tái)提醒用戶登錄。 SecurityAdmin工作流程如圖 所示。 圖 SecutrityAdmin工作流程 數(shù)據(jù)庫(kù)設(shè)計(jì) 數(shù)據(jù)庫(kù)在信息管理系統(tǒng)中,處于中心位置,用戶可操作的所有信息都存儲(chǔ)在數(shù)據(jù)庫(kù)中。設(shè)計(jì)優(yōu)良的數(shù)據(jù)庫(kù)對(duì)于系統(tǒng)的運(yùn)行效率有著極大的提高。本節(jié)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)和表結(jié)構(gòu)的設(shè)計(jì)進(jìn)行了講解。 (1) 數(shù)據(jù)庫(kù)系統(tǒng) MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典 MySQL AB 公司開(kāi)發(fā),目前屬于Oracle公司。 Mysql是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),在 WEB應(yīng)用方面 MySQL是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) )應(yīng)用軟件之一 .它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。 (2) 數(shù)據(jù)庫(kù)表設(shè)計(jì) ① 學(xué)生和教師的信息 表 Student 表結(jié)構(gòu) 列名 類(lèi)型 長(zhǎng)度 約束 備注 Id Varchar 13 主鍵 學(xué)號(hào) Grade Int 11 非空 年級(jí),如 2020 : U se rS t ru t s 2 A ct i o nS e cu ri t yI n t e rc e p t o r1 : re q u e st () 1 . 1 : i n t e rc e p t ()1 . 1 . 1 : i n vo ke () Name Varchar 10 學(xué)生姓名 Sex Varchar 1 男,女 MajorID Int 11 外鍵 () 專(zhuān)業(yè)號(hào) ClassID Varchar 20 外鍵 () 班級(jí)號(hào) Email Varchar 30 Phone Varchar 20 MinorID Int 11 外鍵 () 表 Teacher 表結(jié)構(gòu) 列名 類(lèi)型 長(zhǎng)度 約束 備注 Id Int 11 主鍵 教師號(hào) Name Varchar 10 教師姓名 Sex Varchar 1 男,女 MajorID Int 11 外鍵 () 專(zhuān)業(yè)號(hào) Desc_ Varchar 202000 Email Varchar 30 Phone Varchar 20 學(xué)生表( Student)用于存儲(chǔ)學(xué)生的學(xué)號(hào)、年級(jí)、姓名、性別、專(zhuān)業(yè)代碼、班級(jí)代碼、郵箱地址、電話號(hào)碼等相關(guān)身份信息,表結(jié)構(gòu)參見(jiàn)表 。外鍵專(zhuān)業(yè)號(hào)和班級(jí)號(hào)則分別對(duì)應(yīng)專(zhuān)業(yè)表 (Major)和班級(jí)表 (Class)。 教師表( Teacher)用于存儲(chǔ)出題教師的號(hào)碼、姓名、性別等身份信息,表結(jié)構(gòu)參見(jiàn)表 。專(zhuān)業(yè)號(hào) (majorID)通過(guò)外鍵參照專(zhuān)業(yè)表( Major)。 ③ 用戶信息存儲(chǔ) 用戶表主要包括用戶 Id、用戶名稱(chēng)、密碼、類(lèi)型、最后登錄時(shí)間等字段。通過(guò)用戶類(lèi)型 (Type)來(lái)劃分學(xué)生和老師。表結(jié)構(gòu)參見(jiàn)表 。 角色表存儲(chǔ)系統(tǒng)內(nèi)可用的角色,主要包括角色 ID,角色名等字段,目前有學(xué)生、教師、管理員等角色,角色的劃分以角色等級(jí) level字段區(qū)分。表結(jié)構(gòu)參見(jiàn)表 。 用戶 角色表存儲(chǔ)了用戶 id 和角色 id 字段。表結(jié)構(gòu)參見(jiàn)表 。用于在登陸時(shí)獲取登陸用戶的權(quán)限信息,前臺(tái)以此判斷需要展現(xiàn)的內(nèi)容。 表 User 表結(jié)構(gòu) 列名 類(lèi)型 長(zhǎng)度 約束 備注 Userid Varchar 20 主鍵 用戶 ID Username Varchar 20 非空 用戶名字 Password Varchar 32 非空 密碼 Type Varchar 20 非空 類(lèi)型 _grant Bit 1 非空 是否能授權(quán) Enable Bit 1 非空 是否可用 lastLoginTime Datetime 0 最后登錄時(shí)間 lastLoginAddress Varchar 30 最后登陸 IP 地址 lastLogoutTime Datetime 0 最后登出時(shí)間 表 role 表結(jié)構(gòu) 列名 類(lèi)型 長(zhǎng)度 約束 備注 Id Int 11 主鍵 自增主鍵 Rolename Varchar 20 非空 角色名稱(chēng) _desc Varchar 50 角色描述 Level Int 2 非空 角色級(jí)別 表 Userrole 表結(jié)構(gòu) 列名 類(lèi)型 長(zhǎng)度 約束 備注 Id Int 11 主鍵 Userid Varchar 20 外鍵 () 用戶 ID Roleid Int 11 外鍵 () ④ 畢業(yè)設(shè)計(jì)題目及論文選題 題目表( Topic)用于存儲(chǔ)教師提供的所有可選題目。表結(jié)構(gòu)參見(jiàn)表 。題目表中字段包括:論文題目,出題教師 ID,論文對(duì)應(yīng)屆數(shù),是否被選以及參考資料 對(duì)應(yīng)的文件組。論文題目被學(xué)生選中后需要更新該表的 Selected 字段。 選題表( SelectedTopic)用于存儲(chǔ)學(xué)生已選的題目的信息,主要字段包括:學(xué)生學(xué)號(hào),題目的 ID,出題教師 ID,選題學(xué)生屆數(shù),學(xué)生最終確定的題目和答辯小組評(píng)分和教師評(píng)分。選題表結(jié)構(gòu)見(jiàn)表 。 表 Topic