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