一、項目介紹
本工程實驗項目是基於學生選課系統,給管理員、教師、學生提供登錄權限,教師可以給學生評定成績,學生可以選擇課程,並查看成績。
本文將通過角度分析了設計模式、軟件架構和各類視圖軟件系統的特點,並包含項目所需的接口API、數據庫設計,給出系統的詳細設計方案。
二、系統架構
本項目采用模型-視圖-控制器模式,也稱為MVC模式(Model View Controller)。用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。它把軟件系統分為三個基本部分:
模型(Model):負責存儲系統的中心數據。
視圖(View):將信息顯示給用戶(可以定義多個視圖)。
控制器(Controller):處理用戶輸入的信息。負責從視圖讀取數據,控制用戶輸入,並向模型發送數據,是應用程序中處理用戶交互的部分。負責管理與用戶交互交互控制。
視圖和控制器共同構成了用戶接口。
整個項目的開發采用WEB開發中十非常重要的SSM框架,也即Spring+SpringMVC+mybatis。前端主要由bootstrap完成,背景用particles.js插件,mysql8.0配置主從復制實現讀寫分離。
3.接口API
在MVC架構下,項目使用23種設計模式中的中介者模式。中介者模式(Mediator Pattern)是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類,該類通常處理不同類之間的通信,並支持松耦合,使代碼易於維護。中介者模式屬於行為型模式。
- 抽象中介者:定義好同事類對象到中介者對象的接口,用於各個同事類之間的通信。一般包括一個或幾個抽象的事件方法,並由子類去實現。
- 中介者實現類:從抽象中介者繼承而來,實現抽象中介者中定義的事件方法。從一個同事類接收消息,然后通過消息影響其他同時類。
- 同事類:如果一個對象會影響其他的對象,同時也會被其他對象影響,那么這兩個對象稱為同事類。在類圖中,同事類只有一個,這其實是現實的省略,在實際應用中,同事類一般由多個組成,他們之間相互影響,相互依賴。同事類越多,關系越復雜。並且,同事類也可以表現為繼承了同一個抽象類的一組實現組成。在中介者模式中,同事類之間必須通過中介者才能進行消息傳遞。
4.系統視圖
4.1分解視圖
分解是構建軟件架構模型的關鍵步驟,分解視圖也是描述軟件架構模型的關鍵視圖,一般分解視圖呈現為較為明晰的分解結構(breakdown structure)特點。分解視圖用軟件模塊勾划出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。將選課系統划分為三個子系統,即登錄子系統、選課子系統和信息子系統,對於這些子系統,可繼續划分使用課程類、學生類、管理員類、教師類。
4.2執行視圖
執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件(Component),都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把它們合並成一個。可以最終分解到軟件的基本元素和軟件的基本結構,可以對系統整體的業務邏輯有較為直觀的體現。
4.3泛化視圖
泛化視圖展現了軟件模塊之間的一般化或具體化的關系,下圖展示了本項目個類的繼承關系,學生、教師以及管理員都繼承與用戶這個接口。
4.3工作分配視圖
工作分配視圖將系統分解成可獨立完成的工作任務,以便分配給各項目團隊和成員。工作分配視圖有利於跟蹤不同項目團隊和成員的工作任務的進度,也有利於在個項目團隊和成員之間合理地分配和調整項目資源。下圖是本項目的工作分配視圖。
5.數據庫設計
(1)學生
字段名稱 |
字段類型 |
字段描述 |
Student_id |
int |
主鍵 |
account |
varchar |
賬號 |
password |
varchar |
密碼 |
name |
varchar |
姓名 |
|
varchar |
電子郵件 |
class |
varchar |
班級 |
lessons |
set |
課程 |
(2)教師
字段名稱 |
字段類型 |
字段描述 |
Teacher_id |
int |
主鍵 |
account |
varchar |
賬號 |
password |
varchar |
密碼 |
name |
varchar |
姓名 |
|
varchar |
電子郵件 |
course |
varchar |
課程 |
(3)管理員
字段名稱 |
字段類型 |
字段描述 |
Administrator_id |
int |
主鍵 |
Account |
varchar |
賬號 |
password |
varchar |
密碼 |
name |
varchar |
姓名 |
|
varchar |
電子郵件 |
jurisdiction |
int |
權限 |
(4)課程
字段名稱 |
字段類型 |
字段描述 |
Course_id |
int |
主鍵 |
Course_name |
varchar |
課程名稱 |
Course_location |
varchar |
上課地點 |
Course_time |
varchar |
上課時間 |
Course_weeks |
varchar |
課程的周數 |
Course_teacher |
varchar |
授課老師 |
Course_credit |
int |
課程學分 |
(5)成績
字段名稱 |
字段類型 |
字段描述 |
Course_id |
Int |
主鍵 |
Course_grade |
set |
成績表 |
Course_student |
set |
學生表 |
6.項目實現視圖
實現視圖是描述軟件架構與源文件之間的映射關系,由軟件項目的源文件目錄樹來呈現典型的實現視圖。下圖給出了本項目的實現視圖:
其中handler文件是屬於架構中的控制器結構,如下所示。
public class LoginHandler { @Autowired AdminService adminServiceImpl; @Autowired StudentService studentService; @Autowired TeacherService teacherService; //管理員登錄 @RequestMapping("/adminlogin") public String loginStudent(@RequestParam("aname") String aname, @RequestParam("apassword") String apassword, Model model, HttpSession httpSession) { ... } // 管理員退出登錄 @RequestMapping("/adminlogout") public ModelAndView adminLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } // 學生登錄 @RequestMapping("/studentlogin") public ModelAndView loginStudent(@RequestParam("sid") String sid, @RequestParam("spassword") String spassword, Model model, HttpSession httpSession, HttpServletRequest httpRequest) { ... } // 學生退出登錄 @RequestMapping("/studentlogout") public ModelAndView studentLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } // 教師登錄 @RequestMapping("/teacherlogin") public ModelAndView loginTeacher(@RequestParam("tid") String tid, @RequestParam("tpassword") String tpassword, Model model, HttpSession httpSession) { ... } // 教師退出登錄 @RequestMapping("/teacherlogout") public ModelAndView teacherLogout(HttpSession httpSession) { ... return new ModelAndView(new RedirectView("/StudentInfo/index.jsp")); } }
其中包含了三個實現類,包括了學生、管理員、教室的了登錄與退出等工作。
7.運行環境和技術選型說明
由SpringMVC+MyBatis為主要框架,mysql8.0配置主從復制實現讀寫分離,主機叢機分別為騰訊雲的服務器,而項目部署在阿里雲上。前端主要由bootstrap完成,背景用particles.js插件。數據庫交互查詢用到pagehelper分頁。
工具 | eclipse、navicat |
環境 | JDK1.8、tomcat9.0、mysql8.0 |
前端 | JavaScript、jQuery、bootstrap4、particles.js |
后端 | maven、SpringMVC、MyBatis、ajax、mysql讀寫分離、mybatis分頁 |
8.概念原型與核心工作機制
一、概念
概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論,概念原型是一種虛擬化的、理想化的軟件產品形式。也就是說,概念原型 = 用例 + 數據模型。
二、工作機制
學生進行登錄,選擇學生窗口登錄,填入賬號以及密碼進行登錄,系統進行校驗,完成登錄。學生可以在登錄界面點擊修改密碼,通過郵件認證方式進行修改確認;學生可以根據課程名稱,選擇課程,或者推選課程,並可以查看課程成績;教師登錄后,可以查看自己課程信息,如課程地點時間,並對學生打分;管理員掌管對用戶信息以及成績課程數據的增刪改查最高權限。
9.總結
本文接着上一篇博客,繼續更加系統的學習了軟件在設計過程中所要經歷的步驟,從設計模式、軟件架構和各類視圖的設計,可以更加清晰的了解到軟件設計的需求,可以幫助更加了解項目結構,以設計出功能更加完備的軟件。
參考文獻
https://www.cnblogs.com/smilekiller/p/14091491.html,基於學生選課系統的需求分析與概念模型
https://github.com/fuzui/StudentInfo, 基於SSM的學生信息管理系統(選課)
https://blog.csdn.net/zhengzhb/article/details/7430098,中介者模式