




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章緒論1.1課題背景及意義隨著互聯(lián)網的普及越來越快,學生選課工作已經從人工手動選課的方式到線上自主選擇的方式的轉變。但隨著選課使用人數(shù)的增多,就避免不了高并發(fā)選課造成的數(shù)據(jù)庫存儲上限的瓶頸、服務器宕機的情況。在學生選課過程中,尤其是熱點課程和大量學生都感興趣的課程,業(yè)務類型已經由傳統(tǒng)的選課流程變成了對課程剩余庫存的秒殺過程。學生選課請求發(fā)起后,等待服務器的漫長響應,甚至服務器宕機需要重新選課,已成為眾多學生不得不接受的無奈現(xiàn)實。本課題主要運用Redis技術,結合其他適用的高并發(fā)的技術,并考慮自身業(yè)務特點構建自己的基于Redis的選課系統(tǒng)。本課題調查研究了某高校教務系統(tǒng)選課模塊,發(fā)現(xiàn)仍存在學生選課高峰期服務器宕機,安全功能不到位等情況,并對這些問題發(fā)起挑戰(zhàn)。本課題主要以調研學生、老師、管理者的實際需求進行系統(tǒng)業(yè)務功能設計,并結合當前各大門戶、電商、社交媒體平臺等網站的系統(tǒng)部署方案,構建自己的高校教務系統(tǒng),解決學生選課高并發(fā)情況下造成的數(shù)據(jù)庫和存儲上限的瓶頸、網絡擁堵、漫長響應的情況,通過解決這些問題來設計實現(xiàn)一個優(yōu)良的選課系統(tǒng),從而給學生帶來一個更好的體驗的同時,保障教學工作能夠正常、順利的進行。1.2國內外現(xiàn)狀及發(fā)展選課制度起源于19世紀德國的柏林大學,此校的首任校長著名哲學家J·G·費希特提議大學中需要各學派共存和競爭自由,學生能夠結合各自的愛好選修學習的課程,選擇課程研究的方向,在導師的引領各自在科研領域[12]。國外的計算機水平發(fā)展的比較快,因此在教學信息化方面研究比較深入,且經過多年的發(fā)展,已經形成了比較完善、成熟的選課體系。國外的選課系統(tǒng)大多數(shù)是基于C/S結構和B/S結構兩者結合進行開發(fā)的,兩者結合能使教學工作有序的進行,能提高教學的效率。多年的不斷改進、迭代,使得這種模式在國外的高校中的規(guī)模逐漸擴大,系統(tǒng)功能基本完善、平臺運行十分穩(wěn)定,此外也在逐漸利用分布式系統(tǒng)進行性能提升和系統(tǒng)間整合。國內高校的信息化建設雖然起步較晚,但經過多年的努力和發(fā)展獲得了巨大的進步。伴隨著高校信息化進程的推進,計算機技術介入到了校園業(yè)務的方方面面,其中選課工作也逐漸完成從落后的人工安排課程計劃,到學分制中學生自主選課再到線上實時自主選課的改造。我國的學生選課系統(tǒng)大多數(shù)是基于B/S模式進行開發(fā),能使系統(tǒng)的開發(fā)周期大大的縮減,系統(tǒng)的易用性的得到了,用戶可在任意地點操作系統(tǒng)。但隨著我國教學水平的不斷提高,學生人數(shù)在逐年增多,傳統(tǒng)的選課系統(tǒng)已經不能滿足教學需求,學生選課已經由傳統(tǒng)的“選課”操作轉變?yōu)椤皳屨n”操作,大量的并發(fā)請求操作已經成為一個巨大挑戰(zhàn)。1.3論文主要研究內容本文的主要研究內容是開發(fā)一個能滿足某高校選課并發(fā)量的選課系統(tǒng),具體的研究內容如下:1.研究國內外的選課系統(tǒng),對它們的業(yè)務流程進行了解,總結出系統(tǒng)的主要功能模塊為:課程管理、學生選課管理、選課信息管理等;通過結合時代的發(fā)展,使用B/S架構的設計模式,能使系統(tǒng)更具有易用性,使用更便捷。2.通過研究選課系統(tǒng)的可行性,考慮系統(tǒng)的需求以及建設方向和目標,使用SpringBoot框架來完成系統(tǒng)的開發(fā),它的自動裝配能快速的搭建系統(tǒng)環(huán)境,加快開發(fā)速度,再通使用Redis來提高系統(tǒng)的性能,并對系統(tǒng)的具體功能的設計進行介紹。3.結合實際的調研與分析,設計系統(tǒng)的各個功能模塊,除了設計系統(tǒng)的文字表述,還要使用對應的時序圖、類圖、用例圖等進行描述,以此來保證系統(tǒng)是可靠、穩(wěn)定的,學生在選課過程中能穩(wěn)定的運行,給用戶提供良好的體驗。4.實現(xiàn)選課系統(tǒng)的基本功能,并對系統(tǒng)的學生選課管理模塊進行測試,研究系統(tǒng)測試實際結果、性能等,并對系統(tǒng)的未來發(fā)展方向做出展望。1.4論文組織結構本論文的組織結構如下:第一章:緒論。本章主要描述了課題的背景意義,而后介紹了選課系統(tǒng)在國內外的現(xiàn)狀,最后得出課題的研究內容和目標。第二章:系統(tǒng)相關技術介紹。對系統(tǒng)使用到的相關技術進行了介紹,并簡單描述使用這些技術的知識依據(jù)是課題的技術核心。第三章:系統(tǒng)需求分析。本章先對系統(tǒng)的可行性進行分析,接著分析系統(tǒng)角色,最后介紹系統(tǒng)的功能性需求和非功能性需求。第四章:系統(tǒng)總體設計。本章先給出系統(tǒng)總體設計的思路,根據(jù)給出的思路對系統(tǒng)的總體架構進行設計,而后設計系統(tǒng)的功能結構,最后根據(jù)系統(tǒng)的總體架構和功能結構設計出系統(tǒng)的關系數(shù)據(jù)庫。第五章:系統(tǒng)詳細設計與實現(xiàn)。本章是系統(tǒng)主要功能的實現(xiàn),介紹系統(tǒng)的主要功能以及具體功能實現(xiàn),主要針對學生選課模塊實現(xiàn)的詳細介紹,解決選課系統(tǒng)的選課時間過長、高并發(fā)等問題。第六章:系統(tǒng)測試。本章主要介紹系統(tǒng)的功能測試和性能測試,展示具體的測試結果以及測試過程。第七章:總結與展望。本章是對本課題的全部工作進行總結,結合系統(tǒng)指出系統(tǒng)功能的不足,最后對未來的工作進行展望。
第二章系統(tǒng)相關技術介紹2.1B/S結構介紹B/S(Browser/Server)結構即瀏覽器和服務器結構。它是隨著Internet技術的興起而對C/S結構的一種變化或者改進的結構。使用這種結構,用戶與系統(tǒng)進行交互都是在瀏覽器上進行的,不需要額外的安裝指定的客戶端。使用B/S結構能大大降低系統(tǒng)開發(fā)和維護的成本,降低電腦硬件的壓力,工作量相對于客戶端而言也極大減少,加快系統(tǒng)的開發(fā)速度,其原因在于系統(tǒng)的主要邏輯處理在服務端器(Server)進行,只有極少的邏輯處理在瀏覽器端(Browser)執(zhí)行。對比C/S(Client/Server)結構即客戶端和服務器結構,C/S結構需要在計算機安裝客戶端才能與服務端進行交互,且在對系統(tǒng)進行更新維護是,所需的成本更高、效率更低。本文實現(xiàn)選課系統(tǒng)使用的是B/S結構,這能使系統(tǒng)更快速的進行開發(fā),用戶使用系統(tǒng)也能更便捷,能在各個地方使用操作系統(tǒng)。2.2前端技術介紹Layui是一款很不錯的國產前端UI框架,它入門的門檻低,拿來即用,易上手,還是一款輕量級的前端UI框架。Layui主要是面向后端開發(fā)者,它的組件非常豐富,還不需要做前端復雜的配置,因此它能讓開發(fā)者能更快的實現(xiàn)界面開發(fā)工作,也能讓開發(fā)者能更快的整合前端和后端,實現(xiàn)項目編寫。Layui的使用也很簡單輕便,定義了很多底層方法,如全局配置、自定義模塊、加載模塊、本地存儲等,想要調用這些模塊只需要執(zhí)行這些方法即可。2.3后端技術介紹2.3.1SpringBoot介紹SpringBoot是基于Spring推出的全新框架,其設計的目的是為了簡化Spring配置,讓開發(fā)者能夠輕松、快速的構建獨立運行的項目,大大的提升開發(fā)效率。SpringBoot能夠極大的提升開發(fā)者的體驗,主要是在開發(fā)中大量的使用“約定大于配置”的思想來減少許多復雜的手動配置,并提供了許多組件,且直接內嵌了web服務器,讓開發(fā)者更加專注業(yè)務邏輯的實現(xiàn),無需過多的關注框架本身。SpringBoot能讓開發(fā)者無需做過多的配置工作,關鍵在于它的自動配置,SpringBoot自動配置有三個核心注解,分別是配置類、自動配置功能和組件包掃描器,能自動將配置類注冊到IOC容器,減少代碼冗余度,從而實現(xiàn)快速開發(fā)。2.3.2MyBatis介紹MyBatis是一個持久層框架,主要功能是數(shù)據(jù)持久化操作。MyBatis支持持久化SQL、存儲過程和高級映射。MyBatis底層幾乎將JDBC的所有操作封裝了起來,也進行了解耦合,大大降低了代碼冗余度,提高了開發(fā)效率。MyBatis框架也是一個ORM(對象關系映射)框架,主要用來解決面向對象與關系型數(shù)據(jù)庫中數(shù)據(jù)類型不匹配的問題,它的工作原理則是使程序不直接訪問數(shù)據(jù)庫,而是以面向對象的方式自動持久化到關系型數(shù)據(jù)庫中。具體工作原理如圖2-1所示。圖2-1工作原理2.4Redis緩存數(shù)據(jù)庫介紹Redis是BSD許可的一個開源軟件,內存中的數(shù)據(jù)結構存儲系統(tǒng),它可以用作數(shù)據(jù)庫、也可以作為緩存或者消息中間件。Redis的數(shù)據(jù)存取非???,雖說他是單線程的,但它的存值操作可執(zhí)行110000次每秒,讀取操作可執(zhí)行81000次每秒,原因在于它的請求操作幾乎是基于內存來實現(xiàn)的。數(shù)據(jù)結構以及數(shù)據(jù)操作非常簡單,且使用單線程速度非???,原因在于它減少了不必要的上下文切換的競爭,多線程的切換也不消耗CPU性能。Redis是一個高性能的NoSQL數(shù)據(jù)庫,也被稱為數(shù)據(jù)結構服務器,能持久化的保存數(shù)據(jù),主要使用了兩種持久化方式,一種是使用RDB方式來實現(xiàn),將數(shù)據(jù)寫入臨時文件,而后替換之前的臨時文件,再用二進制進行存儲;另一種是使用AOF方式來實現(xiàn),主要是以日志的形式一點一點的將數(shù)據(jù)記錄起來后再進行持久化,而不是一下子將所有數(shù)據(jù)進行持久化。Redis是以鍵值對(key/value)的方式進行數(shù)據(jù)存取,且支持豐富的數(shù)據(jù)類型存儲,例如存取字符串(String)、列表(list)、集合(sets)、哈希(hash)和有序集合(sortedset)。Redis的所有操作是原子性的,對于客戶端的并發(fā)訪問,Redis服務端都能進行處理。2.5RabbitMQ介紹RabbitMQ是基于AMQP協(xié)議實現(xiàn)的,是一個高級消息隊列協(xié)議。AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。RabbitMQ使用的是Erlang語言進行開發(fā),Erlang語言是用來處理高并發(fā)的編程語言,且具有高可用的特性,因此很適合應用于高并發(fā)場景。RabbitMQ還能對數(shù)據(jù)進行持久化,可以將需要持久化的信息寫入磁盤上的持久化日志文件,待消費完成后RabbitMQ會將信息進行垃圾回收,但缺點是容易造成性能降低。RabbitMQ消息中間件能解決許多難題,如應用解耦、異步處理、流量削峰、分布式事務管理等問題,使用消息中間件可開發(fā)出一個高性能、高可用、易擴展的系統(tǒng)。RabbitMQ還是一個第三方消息代理的消息中間件,用于接收發(fā)送者發(fā)布的信息以及消費者推送信息,具體工作過程如圖2-2。圖2-2RabbitMQ工作過程由圖可看出消息由消息發(fā)布者發(fā)送消息,交換機將消息傳遞并存儲到綁定(Bingding)的消息隊列中,最后通過網絡連接(Connection)與消息中間件進行連接,消息消費者在連接內使用了多路復用的信道(Channel)接收信息。2.6本章小結本章對選課系統(tǒng)所用到的技術進行了介紹,先介紹B/S結構的特點以及使用這種設計結構的優(yōu)勢,前端簡單介紹了Layui框架,后端介紹了SpringBoot框架的特點和MyBatis框架的工作原理,而后介紹了Redis的緩存數(shù)據(jù)庫的特點、優(yōu)點以及數(shù)據(jù)緩存的實現(xiàn),最后則是對RabbitMQ中間件進行介紹,介紹它的概念和特征,以及消息中間件的工作過程。
第三章系統(tǒng)需求分析本章主要從選課系統(tǒng)的功能性需求和非功能性需求展開分析和討論,分析Redis數(shù)據(jù)緩存在選課系統(tǒng)中需實現(xiàn)的功能,并根據(jù)分析給出系統(tǒng)的總體設計方案。3.1系統(tǒng)可行性分析3.1.1技術可行性隨著社會的不斷發(fā)展,高校的信息化建設越來越快,高校選課系統(tǒng)已經由傳統(tǒng)的選課演變?yōu)閾屨n,而關系型數(shù)據(jù)庫處理數(shù)據(jù)的能力比較有限,如果還是采用傳統(tǒng)的數(shù)據(jù)庫對數(shù)據(jù)進行處理,過大的并發(fā)量容易造成系統(tǒng)處理能力下降的問題,所以系統(tǒng)的高并發(fā)請求是對系統(tǒng)的穩(wěn)定、性能發(fā)出巨大挑戰(zhàn)。為解決這個問題,對于主要的業(yè)務功能,采用Redis緩存數(shù)據(jù)庫來處理高并發(fā)問題,Redis的讀寫能力非???,讀的速度是110000次/s,寫的速度是81000次/s,對于高并發(fā)下造成的關系型數(shù)據(jù)庫處理能力下降,系統(tǒng)的穩(wěn)定性、系統(tǒng)性能得到很好地提升,足夠滿足學生選課的需求。3.1.2經濟可行性選課系統(tǒng)的主要使用用戶為教務處、教師和學生,用于高校進行學生選課任務,提高學校的教學效率。項目的開發(fā)周期大約在一個半月左右,系統(tǒng)開發(fā)成本主要在系統(tǒng)軟件的開發(fā),在系統(tǒng)投入運行后,大大節(jié)約了人力物力,所以項目在經濟上是可行的。3.1.3操作可行性系統(tǒng)界面簡潔明了,美觀大方,操作簡單,用起來易上手,滿足用戶的基本需求,是社會的發(fā)展趨勢,所以系統(tǒng)在操作上是可行的。3.2系統(tǒng)角色分析系統(tǒng)角色分析主要是對系統(tǒng)所有角色信息進行分析,主要角色有管理員、教務處、教師、學生,通過對系統(tǒng)的分析可得出教務處是基本信息管理、課程管理、數(shù)據(jù)統(tǒng)計的主要參與者;教師是導出學生選課名單的主要參與者;學生是學生選課、查看選課信息的主要參與者,具體分析如下:(1)教務處。教務處可以對二級學院管理、教師管理、學生管理、開設課程管理、開放選課、數(shù)據(jù)統(tǒng)計等進行一系列的操作。(2)教師。教師可以查看授課的課程列表,可以查看具體一門授課課程的學生列表,也可以導出具體一門課程選擇這門課程的學生名單。(3)學生。學生是系統(tǒng)的主要角色,可以進行學生選課操作,也可以查看選課信息,對課程進行退選等相關操作。3.3功能性需求性分析本文通過對高校的調研與分析確定出系統(tǒng)分為五大功能模塊,分別是基本信息管理模塊、課程管理模塊、學生選課模塊、選課信息模塊、數(shù)據(jù)統(tǒng)計模塊,其中學生選課模塊是最主要的功能模塊,具體的功能需求如表3-1所示:表3-1系統(tǒng)功能列表系統(tǒng)模塊功能點功能描述基本信息管理個人信息管理用于教師和學生修改、查看自己的個人信息二級學院管理對二級學院、教務處、教師、學生的管理,包括信息的修改、刪除、添加、查看操作教務處管理教師管理學生管理課程管理開設課程對課程的管理,包括刪除、修改、添加、查詢詳情等開放選課時間對學生選課時間進行開設,設計學生選課時間的開始和結束學生選課管理學生選課可查看課程列表,勾選課程并提交選課信息管理學生選課情況查詢學生可查已選課程,也可對課程進行退課操作教師導出學生選課名單教師可查看自己授課的課程,也可查看具體一門課程選擇本門課程的學生信息,并導出學生信息到excel表數(shù)據(jù)統(tǒng)計學時學分統(tǒng)計教務處可查看學時和學分段各有多少課程統(tǒng)計教務處可查看每個二級學院開設多少門課程3.3.1課程管理分析課程管理模塊的主要操作者為教務處,模塊主要包括開設課程、開放選課時間功能,教務處開設課程可對課程信息的二級學院、授課教師、學時、學分和課程庫存進行增刪改查;開放選課時間還可對選課時間段進行開放,學生只有在開放選課時間段內才能進行選課操作。課程管理模塊用例圖如圖3-1所示。圖3-1課程管理模塊用例圖3.3.2學生選課管理分析學生選課管理是系統(tǒng)的主要模塊,主要操作者為學生,學生在未到選課時間只能查看課程列表,選課開放內學生課進行選課操作,系統(tǒng)并對選課操作進行一系列的校驗。學生選課管理模塊用例圖如圖3-2所示。圖3-2學生選課管理模塊用例圖3.3.3選課信息管理分析選課信息管理模塊的主要操作者是學生和教師,其中選課情況查詢是學生查看已選擇的課程列表信息,還可選擇課程進行退課,點擊退課選線可對課程退選;教師可進行導出學生列表操作,教師進入課程列表頁面查看授課課程,可選擇某一門課程進入查看選擇本門課程的學生,可選擇導出選項即可導出學生所有信息,系統(tǒng)將學生信息導出到excel表。選課信息管理模塊用例圖如圖3-3所示。圖3-3選課信息管理模塊用例圖3.3.4系統(tǒng)統(tǒng)計功能分析系統(tǒng)統(tǒng)計的主要操作者是教務處,包含學時學分統(tǒng)計和課程統(tǒng)計,教務處可以操作這兩個功能,學時學分統(tǒng)計的課程學分統(tǒng)計可以統(tǒng)計查看每個學分段所擁有的課程數(shù)量,課程學時統(tǒng)計可以統(tǒng)計查看每個學時所擁有的的課程數(shù)量;課程統(tǒng)計則是統(tǒng)計查看各二級學院開設的課程數(shù)量。系統(tǒng)統(tǒng)計模塊用例圖如圖3-4所示。圖3-4系統(tǒng)統(tǒng)計模塊用例圖3.4非功能性需求分析非功能性需求分析也是系統(tǒng)分析的重要環(huán)節(jié),是系統(tǒng)能否正常運行,是否滿足需求的重要保障。因此,系統(tǒng)界面設計應有簡潔性、易用性以及系統(tǒng)的安全性和易維護性。對于系統(tǒng)的簡潔性,界面要做到內容簡練,能夠做到立足全局,抓住特征,正確反映整體;系統(tǒng)的易用性要使系統(tǒng)界面操作簡單明了易上手,內容通俗易懂,能讓用戶覺得很好用,很順手;系統(tǒng)的安全性要能夠保證用戶的信息能實時防護,對用戶登錄密碼進行加密處理,還能夠對用戶進行身份認證及請求攔截,為系統(tǒng)的安全提供保障。系統(tǒng)的可維護性要求系統(tǒng)代碼編寫按規(guī)范文檔編寫,使用封裝將經常使用的代碼進行封裝,減少代碼冗余,實現(xiàn)系統(tǒng)代碼的復用性,便于系統(tǒng)的維護。3.5本章小結本章首先介紹了系統(tǒng)的可行性分析,分析系統(tǒng)在各方面上是否可行的,然后對系統(tǒng)角色、功能性和非功能性展開系統(tǒng)需求分析,討論系統(tǒng)設計的大致方向以及實現(xiàn)效果,描述系統(tǒng)的雛形,得出系統(tǒng)的主要功能模塊設計,最后根據(jù)需求分析來對系統(tǒng)進行總體設計。
第四章系統(tǒng)總體設計本章主要對選課系統(tǒng)的功能模塊進行設計,包括系統(tǒng)總體設計思路、系統(tǒng)總體結構設計、系統(tǒng)功能模塊設計以及關系數(shù)據(jù)庫設計。4.1系統(tǒng)總體設計思路學生選課系統(tǒng)總體采用的是B/S(瀏覽器/服務器)架構模式。用戶通過使用PC端對服務器進行訪問,通過服務器獲取后臺數(shù)據(jù)庫的數(shù)據(jù),也可以對數(shù)據(jù)庫數(shù)據(jù)進行操作,主要操作PC端所展示的頁面功能。系統(tǒng)采用MySQL關系型數(shù)據(jù)庫服務器,保證數(shù)據(jù)的唯一性、持久性、一致性等。系統(tǒng)物理架構圖如4-1所示。圖4-1系統(tǒng)物理架構圖4.2系統(tǒng)總體架構設計系統(tǒng)的總體架構設計相當一個工程的施工方向,一個設計嚴謹?shù)目傮w架構,能讓系統(tǒng)的實現(xiàn)更加快速、思路更加清晰,還能使系統(tǒng)更好的進行開發(fā)。本課題是以java語言為基礎,軟件工程理論為指導,以SpringBoot為主要開發(fā)框架的B/S結構系統(tǒng)開發(fā)。SpringBoot框架作為現(xiàn)在最流行的框架之一,是因為它是一個快速整合第三方框架,簡化xml,內置Http服務器也就是之前所用Tomcat服務器。系統(tǒng)前端是使用Layui前端框架,能使系統(tǒng)開發(fā)進度加快,頁面開起來更簡潔。系統(tǒng)開發(fā)工具使用IDEA進行開發(fā),數(shù)據(jù)庫使用MySQL關系型數(shù)據(jù)庫,并使用Redis緩存對熱門數(shù)據(jù)進行存儲,從而減少數(shù)據(jù)庫壓力。系統(tǒng)采用的設計模式是MVC架構,可將系統(tǒng)實現(xiàn)劃分為四層:視圖層、控制層、業(yè)務層、數(shù)據(jù)持久層。下面對具體介紹系統(tǒng)的四層劃分:1.視圖層視圖層是用來將數(shù)據(jù)展示給用戶并用于系統(tǒng)與用戶的交互操作。系統(tǒng)使用的是html結構Layui的界面容器向用戶展示數(shù)據(jù),也使系統(tǒng)更簡潔明了。2.控制層控制層是前端與后臺交互的入口,前端可以通過請求控制層自定義的接口實現(xiàn)數(shù)據(jù)的前后端交互,也可以調用業(yè)務層對應的方法將數(shù)據(jù)傳給業(yè)務層。3.業(yè)務層業(yè)務層是對數(shù)據(jù)進行邏輯處理的地方,主要用來處理系統(tǒng)主要的業(yè)務邏輯,并與數(shù)據(jù)訪問層和控制層交互。4.數(shù)據(jù)持久層數(shù)據(jù)持久層是一個代碼類庫,提供訪問位于持久化容器中數(shù)據(jù)的功能,本系統(tǒng)采用的數(shù)據(jù)持久層框架是Mybatis框架,可以對數(shù)據(jù)庫數(shù)據(jù)進行操作。系統(tǒng)的總體架構設計圖如圖4-2所示。圖4-2系統(tǒng)總體設計圖4.3系統(tǒng)功能結構設計通過系統(tǒng)的需求分析可以知道,系統(tǒng)的使用角色有管理員、教務處、教師和學生四種角色,基于Redis的高校選課系統(tǒng)通過系統(tǒng)分析出主要功能劃分為五個大功能子模塊,分別為用戶登錄子模塊、基本信息管理子模塊、課程管理子模塊、學生選課子模塊和數(shù)據(jù)統(tǒng)計子模塊,除了五大功能子模塊,還細分了許多小模塊。學生選課系統(tǒng)功能結構圖如圖4-3所示。圖4-3學生選課系統(tǒng)功能結構圖(1)基本信息管理模塊的主要功能有用戶個人信息管理、教務處列表、教師列表、二級學院列表、學生列表的增刪改查功能。管理員可以管理此模塊的教務處列表進行增刪改查工作;教務處可以管理此模塊的教師列表、二級學院列表和學生列表進行增刪改查工作;教師和學生可以操作個人信息管理并修改個人密碼。(2)課程管理模塊的主要功能模塊有開設課程和開放課程時間管理,教務處可以管理此模塊的開設課程的增刪改查,對開設本門課程的授課教師進行任命,并設置本門課程庫存數(shù)量;教務處還可以管理開放課程時間,選擇開放學生選課的起始時間,只有在選課時間內才能看到課程列表進行選課。(3)學生選課模塊是系統(tǒng)的主要功能,學生可以進行操作,學生可以查看課程信息,查看課程庫存數(shù)量,在選課時間段內進行選課,學生可以多選但不能重復選課,課程庫存不足不能選課。(4)選課信息管理模塊的主要功能模塊有學生選課情況查詢和教師導出學生選課名單,學生可以管理學生選課情況查詢,查看學生本人已選擇的課程,還可以對選錯或者不想選修的課程進行退課;教師可以管理教師導出學生選課名單,教師可以查看自己授課具體哪一門課程的學生選課名單,并可以將學生選擇本門課程的學生信息導出到excel表格;(5)系統(tǒng)統(tǒng)計模塊的主要功能模塊有學時學分統(tǒng)計和課程統(tǒng)計,管理員和教務處都可以操作這兩個功能,學時學分統(tǒng)計的課程學分統(tǒng)計可以統(tǒng)計查看每個學分段所擁有的課程數(shù)量,課程學時統(tǒng)計可以統(tǒng)計查看每個學時所擁有的的課程數(shù)量;課程統(tǒng)計則是統(tǒng)計查看各二級學院開設的課程數(shù)量。4.4關系數(shù)據(jù)庫設計模塊由于計算機非常擅長處理大量的數(shù)據(jù),作為獨立的實用程序或者其他應用的一部分,數(shù)據(jù)庫管理系統(tǒng)在計算中扮演著非常核心的角色。本系統(tǒng)采用的數(shù)據(jù)庫是MySQL關系型數(shù)據(jù)庫,通過對數(shù)據(jù)庫的增刪改查進行業(yè)務擴展,一個優(yōu)良的數(shù)據(jù)庫結構設計影響了系統(tǒng)的實現(xiàn)效果和系統(tǒng)應用效率。4.4.1數(shù)據(jù)庫概念結構設計根據(jù)前面需求分析得出系統(tǒng)實體,實體的具體屬性如下:1.用戶:用戶賬號(學號、工號)、用戶姓名、密碼、權限id、權限;2.教務處:教務處編號、教務處名稱、電話;3.二級學院:二級部門id、二級部門名稱;4.教師:教師工號、教師姓名、教師職稱、所屬二級學院、電話;5.學生:學生學號、學生姓名、所屬二級學院、專業(yè)、班級、年級;6.課程:課程編號、課程名稱、教師工號、課程屬性、所屬二級學院、課程學時、課程學分、課程庫存數(shù)量;7.學生選課信息:選課編號、課程編號、學生學號;8.開設課程時間:學生選課開始時間、學生選課結束時間;教務處可開設多門課程,與課程是一對多的關系;一個學生可以選擇多門課程,一門課程也可被多個學生選擇,兩者之間的關系是多對多關系;教師可以授課多門課程,與課程的關系是一對多的關系;一門課程只能從屬一個二級學院,一個二級學院可以有多門課程,兩者之間的關系是一對多關系。通過總體的E-R可以更加直觀的看出各不同實體之間的關聯(lián)。高校選課系統(tǒng)總體E-R圖如圖4-4所示。圖4-4系統(tǒng)總體E-R圖4.4.2數(shù)據(jù)庫表設計本小結主要說明系統(tǒng)中數(shù)據(jù)表的設計結構,根據(jù)數(shù)據(jù)庫概念結構設計得的實體類屬性,可將此轉化為數(shù)據(jù)結構模型。表4-1為數(shù)據(jù)結構說明。表4-1數(shù)據(jù)結構說明數(shù)據(jù)庫表名稱功能說明用戶信息表(sys_user)保存用戶登錄的信息教務處信息表(sys_dean)保存教務處的基本信息二級學院表(sys_department)保存二級學院的基本信息教師表(sys_teacher)保存教師的基本信息學生表(sys_student)保存學生的基本信息學生選課信息表(sys_course_selection)保存學生所選課程的基本信息1.用戶信息表用戶信息如表4-2所示。表4-2用戶信息表(sys_user)序號代碼字段名稱類型字段長度可否為空主鍵1IdIdint否是2user_id用戶賬號varchar50是否3user_name用戶名稱varchar30是否4password密碼varchar255是否5authority權限varchar20是否2.教務處信息表教務處信息如表4-3所示。表4-3教務處信息表(sys_dean)序號代碼字段名稱類型字段長度可否為空主鍵外碼1IdIdint否是否2dean_id教務處編號varchar50是否是3dean_name教務處名稱varchar30是否否4dean_tel教務處電話varchar11是否否3.二級學院信息表二級學院信息如表4-4所示。表4-4二級學院信息表(sys_department)序號代碼字段名稱類型字段長度可否為空主鍵外碼1IdIdint否是否2dep_id二級學院編號varchar50是否是3dep_name二級學院名稱varchar30是否否4.教師信息表教師信息如表4-5所示。表4-5教師信息表(sys_teacher)序號代碼字段名稱類型字段長度可否為空主鍵外碼1IdIdint否是否2teacher_id教師工號varchar50是否否3teacher_name教師名稱varchar30是否否4teacher_title教師職稱varchar30是否否5dep_id所屬二級學院varchar50是否是6telephone教師電話varchar11是否否5.學生信息表學生信息如表4-6所示。表4-6學生信息表(sys_student)序號代碼字段名稱類型字段長度可否為空主鍵外碼1IdIdint否是否2student_id學生學號varchar50是否否3student_name學生名稱varchar30是否否4dep_id所屬二級學院varchar50是否是5major專業(yè)varchar30是否否6class_name班級名稱varchar30是否否7grade年級varchar30是否否6.課程信息表課程信息如表4-7所示。表4-7課程信息表(sys_course)序號代碼字段名稱類型字段長度小數(shù)點可否為空主鍵外碼1IdIdint0否是否2course_id課程編號varchar500是否否3course_name課程名稱varchar300是否否4teacher_id教師工號varchar500是否是5course_attribute課程屬性varchar200是否否6dep_id所屬二級學院varchar500是否是7hours課程學時varchar101是否否8credit課程學分float100是否否9limit_number課程庫存int100是否否7.學生選課信息表學生選課信息如表4-8所示。表4-8學生選課信息表(sys_course_selection)序號代碼字段名稱類型字段長度可否為空主鍵外碼1IdIdint否是否2sel_corse_id學生選課編號varchar50是否否3course_id課程編號varchar50是否是4stu_id學生學號varchar50是否是4.5本章小結本章內容為網上選課系統(tǒng)設計,首先對系統(tǒng)總體架構進行設計,而后則是對系統(tǒng)功能結構進行設計,最后則是結合系統(tǒng)架構設計實現(xiàn)系統(tǒng)的功能模塊以及給出流程時序圖介紹模塊,本章末尾介紹了數(shù)據(jù)庫的設計,分別給出了系統(tǒng)的實體類,并通過實體類設計出系統(tǒng)的數(shù)據(jù)庫表,對各數(shù)據(jù)庫表的功能進行了說明。
第五章系統(tǒng)詳細設計與實現(xiàn)本章圍繞網上選課系統(tǒng)的需求分析及系統(tǒng)設計展開,依據(jù)這些業(yè)務需求及具體實現(xiàn)系統(tǒng)的功能,重點講述選課系統(tǒng)的課程管理模塊、選課管理模塊以及教師導出學生名單。5.1課程管理模塊的實現(xiàn)5.1.1開設課程課程管理模塊是系統(tǒng)的重要功能之一,教務處可以管理課程的增刪改查,對課程進行開設修改。具體的流程分析如下所示:1.教務處點在系統(tǒng)頁面點擊開設課程列表鏈接進入課程列表顯示頁面,點擊添加按鈕,系統(tǒng)彈出開設課程彈窗,填寫相關信息,系統(tǒng)會判斷課程編號是否重復,完成開設課程;2.教務處可以對課程選課時間進行開放,設置選課的起始和結束時間,在時間段內可以進行選課,其他時間不能選課;圖5-1課程管理模塊流程圖圖5-2課程列表5.1.2開放選課時間課程管理模塊是系統(tǒng)必不可少的一部分,是學生能否正常進行選課的前提。實現(xiàn)課程管理模塊需要先分別建立開設課程、開放選課時間的相應controller類,去調用service層的對應方法,最后Dao層繼承MyBatis的接口類來對數(shù)據(jù)庫進行操作。具體設計實現(xiàn)步驟如下:1.在entity層新建實體類,用于存放數(shù)據(jù)庫基本字段數(shù)據(jù),并建立get()、set()方法;2.在resources資源目錄下的mapper包下新建xml文件,用來存放數(shù)據(jù)庫語句;3.新建Mapper接口,聲明各種接口方法可以映射到對應的xml文件;4.新建Service接口,在接口內編寫開設課程、開發(fā)選課時間對應操作的方法;5.新建ServiceImpl實現(xiàn)類,實現(xiàn)Service接口內對應的方法;6.新建Controller控制類,用于實現(xiàn)的調用Service層的方法,與前端界面進行交互;7.新建html文件,用于展示后臺數(shù)據(jù)并通過URL的方式對后臺發(fā)起請求獲取數(shù)據(jù),實現(xiàn)前后端交互。該模塊的相關類圖如圖5-3所示。圖5-3課程管理模塊類圖課程管理模塊的開放選課時間為重點實現(xiàn)代碼,具體實現(xiàn)是通過選擇起始時間,系統(tǒng)將數(shù)據(jù)存入數(shù)據(jù)庫和Redis緩存,在需要時只用從Redis獲取,具體實現(xiàn)代碼如下://開放選課先刪除redis存入的時間redisTemplate.delete("startDate");redisTemplate.delete("endDate");//將開始時間存入redisredisTemplate.opsForValue().set("startDate",opentime.getStartDate());//將結束時間存入redisredisTemplate.opsForValue().set("endDate",opentime.getEndDate());系統(tǒng)實現(xiàn)效果如圖5-4所示:圖5-4開放選課時間實現(xiàn)圖前端可以獲取課程起始時間來實現(xiàn)倒計時效果,提示學生選課開始的具體時間,具體實現(xiàn)代碼如下;$(function(){countDown();countDownEnd();});//選課開始倒計時functioncountDown(){//獲取隱藏input框的valuevarremainSeconds=$("#remainSeconds").val();vartimeout;if(remainSeconds>0){//選課未開始時按鈕隱藏$("#toSelectButton").attr("style","display:none;");timeout=setTimeout(function(){$("#countDown").text(remainSeconds-1);$("#remainSeconds").val(remainSeconds-1);countDown();},1000);}elseif(remainSeconds==0){//選課開始時按鈕顯示$("#toSelectButton").attr("style","display:block;");if(timeout){clearTimeout(timeout);}$("#courseTip").html("選課進行中..");}else{//選課結束時按鈕隱藏$("#toSelectButton").attr("style","display:none;");$("#courseTip").html("選課已結束");}}; 系統(tǒng)實現(xiàn)效果如圖5-5所示:圖5-5選課倒計時實現(xiàn)圖5.2學生選課模塊的實現(xiàn)本系統(tǒng)的最主要功能為學生選課,學生只有在選課時間段內才可以進行選擇,系統(tǒng)顯示課程名稱、教師名稱以及課程庫存等,學生可以選擇有庫存的課程,學生選課成功后會提示選課成功,已經選過這門課程會提示課程已選擇,庫存不足學生繼續(xù)選課會提示課程庫存不足。學生選課模塊流程圖如圖5-6所示。圖5-6學生選課模塊流程圖系統(tǒng)的功能重點在學生選課上,主要使用Redis進行開發(fā),系統(tǒng)啟動時,會自動初始化查詢數(shù)據(jù)庫課程庫庫存,然后將查詢到的庫存存入Redis,學生訪問課程選課列表,使用同步代碼塊先從數(shù)據(jù)庫獲取一次數(shù)據(jù)存入Redis進行緩存,后續(xù)的數(shù)據(jù)請求都會從Redis獲取課程列表信息,從而減少對Mysql數(shù)據(jù)庫的訪問,降低數(shù)據(jù)庫的訪問壓力。具體代碼如下。CourseSelectionController.java@OverridepublicvoidafterPropertiesSet()throwsException{//系統(tǒng)初始化,啟動項目時把課程庫存數(shù)量加載到redisList<Course>list=courseService.findCourse();if(CollectionUtils.isEmpty(list)){return;}list.forEach(course->{redisTemplate.opsForValue().set("course:"+course.getCourseId(),course.getLimitNumber());//將課程編號標記為false,如果有課程編號,返回false,沒有返回trueemptyStockMap.put(course.getCourseId(),false);});}學生進行選課過程中,會先判斷課程庫存是否足夠,這里的庫存判斷使用的是系統(tǒng)內存標記,適當減少Redis的訪問;當課程足夠則繼續(xù)判斷學生是否重復搶課,系統(tǒng)會通過自定義的key從Redis獲取當前選課的學生進行是否選課的判斷,查詢到的自定義的key則說明當前學生已選課,這里的Redis的key是通過自主命名加上學生學號作為唯一的標識;選課成功后則是進行預減庫存,預減庫存是先從Redis數(shù)據(jù)庫預減課程庫存,而后再預減數(shù)據(jù)庫的課程庫存。具體代碼如下。CourseSelectionController.javafor(inti=0;i<courseIds.length;i++){//內存標記,減少redis訪問,判斷課程庫存是否足夠,沒有課程編號則返回trueif(emptyStockMap.get(courseIds[i])){returnRespBean.error(RespBeanEnum.EMPTY_STOCK);}//判斷是否重復選課,從redis讀取SelectionMessageselectionMessage1=(SelectionMessage)redisTemplate.opsForValue().get("courseSelection:"+courseIds[i]+":"+principal.getUsername());if(selectionMessage1!=null){returnRespBean.error(RespBeanEnum.REPEATE_ERROR);}//同步代碼塊synchronized(this.getClass()){//redis預減庫存Longstock=redisTemplate.opsForValue().decrement("course:"+courseIds[i]);if(stock<0){emptyStockMap.put(courseIds[i],true);//預減庫存超過0為-1時,redis預增庫存redisTemplate.opsForValue().increment("course:"+courseIds[i]);returnRespBean.error(RespBeanEnum.EMPTY_STOCK);}//數(shù)據(jù)庫預減庫存Coursecourse=courseService.findCourseBycourseId(courseIds[i]);course.setLimitNumber(course.getLimitNumber()-1);courseSelectionMapper.updateCourseLimitNumber(course);}CourseSelectionServiceImpl.java@OverridepublicintaddCourseSelection(SelectionMessageselectionMessage){courseSelectionMapper.addCourseSelection(selectionMessage);//選課成功后存入redis中redisTemplate.opsForValue().set("courseSelection:"+selectionMessage.getCourseId()+":"+selectionMessage.getStuId(),selectionMessage);return0;}最后將選課數(shù)據(jù)寫入Redis緩存和數(shù)據(jù)庫,寫入數(shù)據(jù)庫使用了RabbitMQ,通過消息發(fā)送者將選課數(shù)據(jù)發(fā)送到消息隊列,再從消息隊列將選課數(shù)據(jù)異步發(fā)送給消息接受者,而后消息接受者將選課數(shù)據(jù)寫入數(shù)據(jù)庫。具體實現(xiàn)代碼如下。RabbitMq消息隊列入隊:CourseSelectionController.java//principal.getUsername()為當前用戶的登錄編號//消息隊列入隊SelectionMessageselectionMessage=newSelectionMessage(UUIDUtil.getOrderIdByUUId(),courseIds[i],principal.getUsername());//消息隊列可以發(fā)送字符串、字節(jié)數(shù)組、序列化對courseRabbitmqSender.sendCourseMessage(JsonUtil.object2JsonStr(selectionMessage));}returnRespBean.success(0);添加選課信息發(fā)送者發(fā)送選課數(shù)據(jù):CourseRabbitmqSender.java//消息隊列可以發(fā)送字符串、字節(jié)數(shù)組、序列化對象rabbitTemplate.convertAndSend(CourseRabbitMQConfig.COURSE_EXCHANGE,CourseRabbitMQConfig.COURSE_ROUNTINGKEY,message);消費者接受消息發(fā)送者發(fā)送的信息,而后將選課數(shù)據(jù)存入數(shù)據(jù)庫:CourseRabbitmqReceiver.javaSelectionMessageselectionMessage=JsonUtil.jsonStr2Object(message,SelectionMessage.class);StringselCourseId=selectionMessage.getSelCourseId();StringcourseId=selectionMessage.getCourseId();StringstuId=selectionMessage.getStuId();//判斷是否重復選課,從redis讀取SelectionMessageselectionMessage1=(SelectionMessage)redisTemplate.opsForValue().get("courseSelection:"+courseId+":"+stuId);if(selectionMessage1!=null){return;}courseSelectionService.addCourseSelection(selectionMessage);學生選課模塊的類圖如圖5-7所示:圖5-7學生選課模塊的類圖通過代碼的詳細編寫,實現(xiàn)了學生選課的功能,實現(xiàn)的界面效果如圖5-8所示。圖5-8學生選課實現(xiàn)圖5.3選課信息管理模塊的實現(xiàn)學生選完課可以查看選課信息,查看已選擇的課程列表,對于不滿意或者不想選學的課程可以進行退課。學生選課信息時序圖如圖5-9所示。圖5-9學生選課信息時序圖教師操作導出學生名單功能,點擊導出學生名單選項,系統(tǒng)顯示教師授課課程列表,教師選擇需要導出哪門課程的學生名單,系統(tǒng)顯示選擇本門課程的所有學生的信息,教師點擊導出選項,系統(tǒng)將學生信息導出到Excel表。教師導出學生名單時序圖如圖5-10所示。圖5-10教師導出學生名單時序圖選課信息管理模塊主要是學生退課操作,學生進行退課是先操作Redis緩存的數(shù)據(jù),先對Redis緩存的課程庫存進行操作,使用Redis的自增方法對退選一門課程后Redis緩存的課程庫存數(shù)量加一,而后才是操作數(shù)據(jù)庫的庫存進行加一,具體的代碼實現(xiàn)如下;StuCourseDetailsServiceImpl.java@Override
publicintDropCourse(StringselCourseId,StringcourseId){
//獲取應用上下文
SecurityContextcontext=SecurityContextHolder.getContext();
//獲取用戶相關信息,獲取當前登錄人的賬號id
Authenticationauthentication=context.getAuthentication();
UserDetailsprincipal=(UserDetails)authentication.getPrincipal();
//選課表學生退選課程后增加庫存
Coursecourse=courseMapper.findCourseBycourseId(courseId);
course.setLimitNumber(course.getLimitNumber()+1);
courseSelectionMapper.updateCourseLimitNumber(course);
//退課成功后刪除redis中指定的key
redisTemplate.delete("courseSelection:"+courseId+":"+principal.getUsername());
returnstuCourseDetailsMapper.DropCourse(selCourseId,courseId);
} StuCourseDetailsController.java@ResponseBody
@RequestMapping("/todrop")
publicRespBeantoDropCourse(StringselCourseId,StringcourseId){
//redis退課后返還名額,預增庫存
redisTemplate.opsForValue().increment("course:"+courseId);
//學生退課
stuCourseDetailsService.DropCourse(selCourseId,courseId);
returnRespBean.success(RespBeanEnum.SUCCESS);
}通過代碼的詳細編寫,實現(xiàn)了學生選課信息的功能,實現(xiàn)的界面效果如圖5-11所示。圖5-11學生選課信息實現(xiàn)圖5.4本章小結本章主要對選課系統(tǒng)的主要功能進行了實現(xiàn),通過給出系統(tǒng)流程圖、時序圖進行詳細設計,最終得出了具體的實現(xiàn)代碼,從而得出系統(tǒng)實現(xiàn)的功能截圖,達到了系統(tǒng)設計的目標。
第六章系統(tǒng)測試本章主要實現(xiàn)對選課系統(tǒng)的測試,分別從功能和性能測試系統(tǒng)設定是否滿足要求,測試系統(tǒng)是否存在bug,并對測試結果進行分析。6.1測試內容與目的網上選課系統(tǒng)的系統(tǒng)測試內容主要包括系統(tǒng)的功能測試和性能測試,系統(tǒng)的功能測試主要是測試各個功能模塊是否正常輸入輸出,各項流程能否正常執(zhí)行。系統(tǒng)的性能測試主要是測試系統(tǒng)的并發(fā)情況的處理能、系統(tǒng)穩(wěn)定性等能否滿足用戶的需求。本系統(tǒng)重點在于學生選課模塊,所以主要對這個用例模塊進行測試。6.2系統(tǒng)測試環(huán)境系統(tǒng)的測試環(huán)境通過表格羅列出來,如表6-1所示:表6-1學生選課信息表名稱參數(shù)配置操作系統(tǒng)Windows10專業(yè)版64位操作系統(tǒng)CPU型號Intel(R)Core(TM)i5-7200UCPU@2.50GHz2.71GHz內存配置8.00GB開發(fā)環(huán)境IntelliJIDEA2021.2軟件環(huán)境jdk1.8.0_131、MySQLServer5.7客戶端瀏覽器GoogleChrome6.3系統(tǒng)功能測試1.系統(tǒng)用戶登錄功能測試用例如表6-2所示:表6-2用戶登錄功能測試用例用例編號TEST-001用例說明用戶登錄功能測試用例測試目的測試用戶登錄前置條件用戶打開學生選課系統(tǒng)測試步驟1.用戶打開學生選課系統(tǒng)登錄界面。2.輸入正確的賬號、密碼,是否記住我。3.點擊登錄按鈕。4.系統(tǒng)能根據(jù)用戶的登錄賬號查詢用戶的權限,并顯示權限對應的頁面。5.系統(tǒng)能夠實現(xiàn)記住我功能。期望結果用戶登錄成功系統(tǒng)能顯示出用戶所擁有權限對應的界面,在系統(tǒng)重新啟動或者關閉頁面再重新輸入系統(tǒng)地址,選擇記住我的用戶能不用登錄直接進入系統(tǒng)。實際結果用戶只能看到自己擁有權限對應的界面,記住我功能生效。2.系統(tǒng)開放課程功能測試用例如表6-3所示:表6-3開放課程功能測試用例用例編號TEST-002用例說明開放課程功能測試用例測試目的測試開放課程功能的增刪改查,測試能否自動校驗課程編號是否存在前置條件教務處登錄進入系統(tǒng)測試步驟1.教務處進入學生選課系統(tǒng)點擊“添加課程”選項。2.系統(tǒng)彈出開設課程添加界面。4.教務處輸入已經存在的課程編號點擊“提交”選項。5.系統(tǒng)提示課程編號已存在。6.教務處依次輸入課程編號、課程名稱、課程庫存等信息并點擊“提交”選項。7.系統(tǒng)自動保存信息關閉開設課程彈窗并刷新課程列表。8.教務處點擊要刪除的課程數(shù)據(jù)的“刪除”選項。9.系統(tǒng)彈出確定彈窗。10.教務處點擊“確定”選項。11.系統(tǒng)刪除數(shù)據(jù)并提示刪除成功。12.教務處選中要修改的課程數(shù)據(jù)點擊“編輯”選項。13.系統(tǒng)彈出開設課程修改界面并統(tǒng)顯示對應的課程數(shù)據(jù)。14.教務處修改課程數(shù)據(jù)并點擊“提交”選項。15.系統(tǒng)自動將修改的數(shù)據(jù)保存到數(shù)據(jù)庫,并關閉彈窗刷新課程列表。16.教務處在搜索框輸入課程名稱進行模糊查詢,點擊“搜索”選項。17.系統(tǒng)顯示查詢出來的課程數(shù)據(jù)列表。期望結果教務處輸入已存在的課程編號,系統(tǒng)提示課程編號已存在,教務處對開設課程進行增刪改查,系統(tǒng)實現(xiàn)開設課程的曾刪改查。實際結果開設課程能實現(xiàn)進行增刪改查,系統(tǒng)能自動校驗課程編號是否存在。3.系統(tǒng)學生選課功能測試用例如表6-4所示:表6-4學生選課功能測試用例用例編號TEST-003用例說明學生選課功能測試用例測試目的測試學生選課功能能否正常進行選課,測試課程庫存不足的課程能否繼續(xù)選課,測試已選課程能后還否繼續(xù)選課,測試高并發(fā)下是否會造成課程庫存超選。前置條件學生登錄進入系統(tǒng)測試步驟1.學生勾選課程,可選一門或多門課程后點擊“選擇課程”選項。2.系統(tǒng)彈出確認框確認是否選擇課程。3.學生點擊“確定”選項。4.系統(tǒng)彈出提示框提示選課成功。5.學生選擇課程庫存不足的課程后點擊“選擇課程”選項。6.系統(tǒng)彈出提示框提示課程庫存數(shù)量不足。7.學生勾選已經選擇的課程后點擊“選擇課程”選項。8.系統(tǒng)彈出提示框提示課程已選擇,請重新選課。9.使用測試工具測試高并發(fā)學生選課庫存超選。期望結果學生選課能選課成功,選擇課
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 展會營銷與管理課件
- 尊重教育主題班會課件
- 16 必修1 第三單元 第14講 減數(shù)分裂和受精作用
- 龍舟手工教學課件
- 老舊小區(qū)改造項目拆遷補償合同
- 交通安全預評價與交通安全設施合同
- 醫(yī)療機構專業(yè)保潔及防疫安全服務合同
- 餐飲廢棄物處理與廢棄物能源利用合作協(xié)議
- 通信網絡技術與光纖入戶安裝知識測試試卷
- 艾草課件教學
- 護理事業(yè)十五五發(fā)展規(guī)劃(2026-2030)
- 人教版(2024)七年級下冊英語全冊教案(8個單元整體教學設計)
- 10kV小區(qū)供配電設計、采購、施工EPC投標技術方案技術標
- yamaha貼片機操作規(guī)程
- 管道護理業(yè)務學習課件
- 新求精德語強化教程初級1(第四版)
- GB/T 18601-2001天然花崗石建筑板材
- 中小學校長公開招聘理論考試(試卷)
- 汽封加熱器 說明書
- 07勞動力及資源配備計劃
- 精餾-化工分離工程課件
評論
0/150
提交評論