劉繼華,路曉夢(mèng),張志宏,李佳儀
(1.呂梁學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,山西 離石 033001;2.太原理工大學(xué) 軟件學(xué)院,山西 榆次 030600)
畢業(yè)設(shè)計(jì)是本科生培養(yǎng)過(guò)程中的重要環(huán)節(jié),是學(xué)生通過(guò)深入實(shí)踐、了解社會(huì)、完成設(shè)計(jì)任務(wù)、撰寫(xiě)論文等諸環(huán)節(jié),著重培養(yǎng)學(xué)生綜合分析問(wèn)題、解決問(wèn)題能力,獨(dú)立工作能力、組織管理和社交能力,是學(xué)習(xí)深化、拓寬、綜合運(yùn)用所學(xué)知識(shí)的重要過(guò)程[1].在畢業(yè)設(shè)計(jì)管理中,涉及導(dǎo)師題目擬定、題目審核、選題選導(dǎo)師、開(kāi)題報(bào)告、中期檢查、導(dǎo)師指導(dǎo)、畢業(yè)答辯、提交設(shè)計(jì)、提交論文等多個(gè)環(huán)節(jié),也涉及指導(dǎo)教師、學(xué)生、秘書(shū)等多種角色人員,因此畢業(yè)設(shè)計(jì)教學(xué)管理工作是一項(xiàng)系統(tǒng)而復(fù)雜的工作.就目前該項(xiàng)目的實(shí)施情況分析,國(guó)內(nèi)大多數(shù)院校在實(shí)施此流程時(shí),很多環(huán)節(jié)的工作是傳統(tǒng)人工管理辦法,工作效率較低.畢業(yè)設(shè)計(jì)管理系統(tǒng)的開(kāi)發(fā),不但能夠提高工作效率、減輕管理人員的負(fù)擔(dān),也為學(xué)生和教師的工作提供更大的方便,因此開(kāi)發(fā)畢業(yè)設(shè)計(jì)管理系統(tǒng)具有較強(qiáng)的現(xiàn)實(shí)意義.
三層架構(gòu)是一個(gè)分層式的軟件體系架構(gòu)設(shè)計(jì),通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪(fǎng)問(wèn)層(DAL)[2].區(qū)分層次的目的即為了“高內(nèi)聚,低耦合”的思想.該項(xiàng)目使用Java語(yǔ)言開(kāi)發(fā),利用Spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,Spring MVC負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā)和視圖管理, MyBatis作為數(shù)據(jù)對(duì)象持久化引擎.
Spring是一個(gè)開(kāi)源框架,是一個(gè)輕量級(jí)的Java 開(kāi)發(fā)框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來(lái).它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的.框架的主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,同時(shí)為 J2EE 應(yīng)用程序開(kāi)發(fā)提供集成的框架.Spring使用基本JavaBean來(lái)完成以前只可能由EJB完成的事情.然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)[3].從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益.Spring的核心是控制反轉(zhuǎn)(IoC)和面向切面(AOP).簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)分層的JavaSE/EE full-stack(一站式) 輕量級(jí)開(kāi)源框架.
很多應(yīng)用程序的問(wèn)題在于處理業(yè)務(wù)數(shù)據(jù)的對(duì)象和顯示業(yè)務(wù)數(shù)據(jù)的視圖之間存在緊密耦合,通常,更新業(yè)務(wù)對(duì)象的命令都是從視圖本身發(fā)起的,使視圖對(duì)任何業(yè)務(wù)對(duì)象更改都有高度敏感性.而且,當(dāng)多個(gè)視圖依賴(lài)于同一個(gè)業(yè)務(wù)對(duì)象時(shí)是沒(méi)有靈活性的[4].SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦.基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā).
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射.MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集[5].MyBatis 可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄[6].
系統(tǒng)圍繞呂梁學(xué)院畢業(yè)設(shè)計(jì)管理中和為各個(gè)角色和管理過(guò)程的所有階段.
(1)學(xué)生端:
①用戶(hù)管理:登錄、激活、修改密碼、個(gè)人信息維護(hù);
②選題功能:學(xué)生可以選擇畢業(yè)設(shè)計(jì)題目,查看題目信息等;
③文件模板下載:學(xué)生可以下載相應(yīng)的文件模板;
④相關(guān)資料的上傳與下載:學(xué)生能上傳查看不同階段的資料(如:開(kāi)題報(bào)告、中期報(bào)告、畢業(yè)論文等等),可以下載教師的指導(dǎo)意見(jiàn);
⑤公告查看:能查看來(lái)自系統(tǒng)管理員的公告信息.
(2)教師端:
①教師登錄:登錄、修改密碼、個(gè)人信息維護(hù);
②添加選題功能:教師可以添加和修改畢業(yè)設(shè)計(jì)題目;
③文件模板下載:教師可以下載相應(yīng)的文件模板;
④相關(guān)資料的上傳與下載:教師能查看學(xué)生不同階段的資料(如:開(kāi)題報(bào)告、中期報(bào)告、畢業(yè)論文等等),可以上傳對(duì)學(xué)生的指導(dǎo)意見(jiàn);
⑤公告信息查看:能查看來(lái)自系統(tǒng)管理員的公告信息.
(3)管理員端:
①教師信息維護(hù):教師信息的增刪改查.
②學(xué)生信息維護(hù):學(xué)生信息的增刪改查.
③畢業(yè)設(shè)計(jì)信息維護(hù):對(duì)畢業(yè)設(shè)計(jì)所有信息的維護(hù).
④信息維護(hù):對(duì)公告信息的維護(hù).
系統(tǒng)的數(shù)據(jù)流圖如下:(見(jiàn)圖1)
整個(gè)系統(tǒng)采用java web三層架構(gòu),即持久層、業(yè)務(wù)邏輯層和網(wǎng)絡(luò)層。持久層用來(lái)持久化數(shù)據(jù)記錄,也就是和數(shù)據(jù)庫(kù)打交道[7];業(yè)務(wù)邏輯層用來(lái)處理系統(tǒng)相關(guān)的一些業(yè)務(wù);網(wǎng)絡(luò)層用來(lái)處理頁(yè)面請(qǐng)求.當(dāng)今流行的SSM框架中Spring MVC對(duì)應(yīng)網(wǎng)絡(luò)層,mybatis對(duì)應(yīng)持久層,Spring統(tǒng)籌全局,業(yè)務(wù)邏輯層也交給Spring框架處理[8].
總體架構(gòu)如下圖:(見(jiàn)圖2)
經(jīng)調(diào)研分析后,根據(jù)系統(tǒng)需求分析和總體框架結(jié)構(gòu)設(shè)計(jì),設(shè)計(jì)出系統(tǒng)的用例圖與類(lèi)圖.
系統(tǒng)用例圖如下:(見(jiàn)圖3)
系統(tǒng)類(lèi)圖如下:(見(jiàn)圖4)
圖1 系統(tǒng)數(shù)據(jù)流圖圖2 系統(tǒng)總體架構(gòu)
圖3 系統(tǒng)用例圖
圖4 系統(tǒng)類(lèi)圖
畢業(yè)設(shè)計(jì)管理系統(tǒng)中選題管理最為關(guān)鍵,主要功能包括:導(dǎo)入畢業(yè)設(shè)計(jì)選題、查看畢業(yè)設(shè)計(jì)選題、查看選題結(jié)果.采用POI來(lái)實(shí)現(xiàn)以Excel形式導(dǎo)入和導(dǎo)出選題,控制器類(lèi)有:TeacherController,StudentController,AdminController,主要負(fù)責(zé)對(duì)相關(guān)角色的選題請(qǐng)求做處理;實(shí)體類(lèi)包括:Topic類(lèi)、Student類(lèi)、Teacher類(lèi),和數(shù)據(jù)庫(kù)里的選題表對(duì)應(yīng),頁(yè)面主要有s_topicselect.jsp、t_topicselect.jsp等.
表現(xiàn)層:當(dāng)用戶(hù)點(diǎn)擊選題按鈕時(shí),JSP頁(yè)面通過(guò)ajax攜帶題目id請(qǐng)求到后端Spring Mvc的Controller.因?yàn)橛脩?hù)登錄后,系統(tǒng)會(huì)將用戶(hù)信息存放到Session之中,所以這里會(huì)先判斷用戶(hù)是否已經(jīng)選題,用戶(hù)是否存在,防止非法操作.當(dāng)符合條件后,通過(guò)業(yè)務(wù)邏輯層提供的接口更改用戶(hù)對(duì)應(yīng)的選題信息.最終將結(jié)果返回,并將Session刷新.
核心代碼:
……
@RequestMapping(value = "/topic/select.action")
public void updataTopic(HttpServletRequest request, HttpServletResponse response) throws IOException {
long topic_id = Long.parseLong(request.getParameter("topic_id"));
Student student = (Student) request.getSession().getAttribute(Constants.STUDENT_ID);
if (student.getTopic_id() == null) {
boolean flag = topicService.updateTopic(topic_id, student);
if (flag) {
student.setTopic_id(topic_id);
sessionProvider.setAttribute(request, Constants.STUDENT_ID, student);
}
String json = "{"isTure":" + flag + "}";
response.getWriter().write(json);
} else {
String json = "{"isTure":" + false + "}";
response.getWriter().write(json);
}
}
……
業(yè)務(wù)邏輯層:表現(xiàn)層通過(guò)后,調(diào)用業(yè)務(wù)邏輯層處理業(yè)務(wù)邏輯,更新課題信息.修改一個(gè)課題信息時(shí),需要先查詢(xún)?cè)撜n題是否存在,如果存在并處于可選狀態(tài)再通過(guò)持久層接口最終修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),并將結(jié)果返回表現(xiàn)層.
public boolean updateTopic(long topic_id, Student student) {
Topic topic = topicMapper.selectTopicByid(topic_id);
if (topic!=null &&topic.getIs_select()==0){
topic.setSid(student.getUsername());
topic.setSname(student.getRealname());
topic.setIs_select(1);
int i = topicMapper.updateTopicByPrimaryKey(topic);
if(i>0){
student.setTopic_id(topic.getId());
int i1 = studentMapper.updateStudentByPrimaryKey(student);
return true;
}else {
return false;
}
}else{
return false;
}
}
持久層:通過(guò)SQL語(yǔ)句,將信息持久化到數(shù)據(jù)庫(kù).Mapper文件詳細(xì)代碼如下:
update student
set topic_id = #{topic_id,jdbcType=BIGINT}
where id = #{id,jdbcType=VARCHAR}
畢業(yè)設(shè)計(jì)管理系統(tǒng)由當(dāng)下流行的三層架構(gòu)思想,以及JavaEE中流行的SSM開(kāi)發(fā)框架,通過(guò)實(shí)時(shí)跟隨學(xué)生與教師的畢業(yè)設(shè)計(jì)工作環(huán)節(jié),進(jìn)行了具體詳細(xì)的分析設(shè)計(jì),解決了傳統(tǒng)逐層紙質(zhì)文件提交,逐級(jí)消息通知效率低,畢業(yè)設(shè)計(jì)管理不規(guī)范等問(wèn)題.系統(tǒng)最主要的選題功能和文檔上傳與下載,已通過(guò)性能測(cè)試和安全性兼容性測(cè)試,經(jīng)實(shí)際應(yīng)用,該系統(tǒng)對(duì)于當(dāng)前高校畢業(yè)設(shè)計(jì)管理的規(guī)范化、科學(xué)化具有一定意義,值得推廣和應(yīng)用.