基于java Springboot實現(xiàn)教務管理系統(tǒng)詳解
視頻演示
研究背景
在當今信息社會發(fā)展中中,計算機科學的飛速發(fā)展,大多數(shù)學校開始注意辦公效率的發(fā)展是很關鍵,對學校的管理起到舉足輕重的作用?;?Internet 網(wǎng)絡的信息服務,快速成長為現(xiàn)代學校中一項不可或缺的內(nèi)容措施。很多校園都已經(jīng)不滿意商務辦公管理的緩慢成長方式。學院的需求是一個功能強大的,能提供完善管理,管理信息系統(tǒng)的速度。社會持續(xù)向前發(fā)展,尤其是大多地方普及計算機,計算機應用已經(jīng)開始向大容量的數(shù)據(jù)存儲與處理持續(xù)發(fā)展,產(chǎn)生了以計算機為核心,用數(shù)據(jù)庫作為環(huán)境的管理信息現(xiàn)代化系統(tǒng),事務管理方面用大容量和對各種信息動態(tài)管理等方面的綜合應用。建立學校教務管理系統(tǒng)能夠?qū)W校職員對學生信息的管理更為規(guī)范化和合理化。能有效快速記錄大量的學生得信息, 能對學生用戶能夠運用簡便的方法快速的查到他們所需要的課程信息,并且能夠發(fā)布通知等一系列功能,實現(xiàn)了由傳統(tǒng)人工轉向辦公向信息自動化。因此用 Java相關開發(fā)工具,精心構建了一個教務信息管理平臺,實現(xiàn)了一個簡單的管理系統(tǒng)。該系統(tǒng)能實現(xiàn)學生的管理、課程的管理、成績管理、課程選報情況管理、系統(tǒng)用戶的管理;能夠?qū)崿F(xiàn)學生報課程的查詢、已選報課程成績的查詢、個人信息查詢修改等功能、教務信息管理系統(tǒng)的完成給學校管理人員們和學生提供了很多的便利, 能夠更好的提高教學質(zhì)量,其科學性以及合理性對學校的發(fā)展有著舉足輕重的作用。
我國教務現(xiàn)狀與反思
就目前而言,我國絕大多數(shù)高校,和相當一部分的中小學都已經(jīng)開展了基本的信息化教育教學管理系統(tǒng)的建設工作,讓我國整體的教學效率與節(jié)奏得到了提升。但是根據(jù)我自己在使用學校的教務管理系統(tǒng),以及通過查閱文獻了解我國目前教務管理系統(tǒng)的一個發(fā)展現(xiàn)狀之后,我認為其中仍然存在著兩個比較大的問題。一方面,我認為很多學校對于教育教學管理系統(tǒng)的開發(fā),并沒有足夠的投入和付出。他們并沒有真正意識到教育教學管理系統(tǒng)能給學校帶來的東西。從前人的調(diào)查情況來看,很多學校為了方便,會直接將管理系統(tǒng)的設計與開發(fā)外包給其他企業(yè),但他們并不是教育工作者,并不了解教育系統(tǒng)它究竟需要什么樣的功能[1]。這導致了部分教育教學管理系統(tǒng)的收效并不是很理想,是有待商榷的。另一方面,根據(jù)前人研究來看,大多數(shù)學校缺乏對自己系統(tǒng)的維護,很多情況下在開發(fā)完成之后,就不會再考慮對系統(tǒng)的維護升級了[2]。但教育是一個需要與時俱進的事業(yè),無論是教材、教育方法,還是教育系統(tǒng),都需要跟上時代的腳步。很多學校目前采用的系統(tǒng)可能是五年,甚至十年前開發(fā)的,沒有專門的人員對系統(tǒng)進行維護,也沒有根據(jù)師生的使用感受來對系統(tǒng)進行修復、調(diào)整,這一點在我國目前其實是非常嚴重且普遍的。一個落伍的管理系統(tǒng),是無法為教育教學提供有效支持的。
主要技術和環(huán)境:
IDEA+Navicat+SpringBoot+Mysql+Springmvc+Jquery+thymeleaf模板+HTML等
功能截圖:
系統(tǒng)分為三個角色登錄《管理員、老師、學生》每個角色具有不同的功能、具體信息在上面演示視頻可以查看、我就不多做贅述了
登錄:

管理員首頁:

教師首頁:

學生首頁:

部分代碼:
用戶登錄:
<div class="bg"></div>
<div class="container">
<form class="form-signin text-center" action="" id="from" >
<img class="mb-4" th:src="@{/asserts/img/abb.jpg}" alt="" width="72" height="72"/>
<label class="sr-only" >Username</label>
<input type="text" class="form-control" placeholder="用戶名"
id="username"
name="name"/>
<label class="sr-only">Password</label>
<input type="password" class="form-control" placeholder="密碼"
id="password"
name="pwd"
style="margin-top: 20px"/>
<div class="btn-group" role="group" aria-label="...">
<!-- <button type="button" class="but btn btn-default" value="sadmin">超級管理</button>-->
<button type="button" class="but btn btn-default" value="admin">管理員</button>
<button type="button" class="but btn btn-default" value="teacher">教師</button>
</div>
<div class="checkbox mb-3">
<label>
<!--<input type="checkbox" value="remember-me" name="remember-me" /><span></span>-->
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="button"id="sub" @click="login">登錄</button>
<span class="help-block"></span>
<p class="mt-5 mb-3 text-muted">© 2018-2020</p>
</form>
</div>
</body>
<script type="text/javascript" th:src="@{/webjars/jquery/1.9.1/jquery.js}"></script>
<script type="text/javascript" th:src="@{/webjars/bootstrap/3.3.7/js/bootstrap.min.js}"></script>
<script type="text/javascript" th:src="@{/js/Vue.js}"></script>
<script type="text/javascript" th:src="@{/js/element-ui.js}"></script>
<script th:inline="javascript" type="text/javascript">
var basePath= /*[[${#httpServletRequest.getContextPath()}]]*/'ContextPath' ;
var a = new Vue({
el:"#from",
data:{
usertype:0,
url:basePath+"/login"
},
methods:{
login:function () {
if(a.usertype==0)
{
a.point1()
return;
}
if(a.usertype=="sadmin"){
// superadmni
console.log("superadmin");
}
if(a.usertype=="admin"){
// admin
console.log("admin");
$.ajax({
url: this.url,
type: "post",
async: false,
data: $("#from").serializeArray(),
contentType: 'application/x-www-form-urlencoded',
dataType:"json",
success:function (result) {
console.log("result:",result);
if(result.code == 300){
alert(result.msg)
}else if(result.code == 100){
window.location.href = basePath+"/admin/index";
}
},error:function (data) {
console.log("error:",data);
}
});
}
if(a.usertype=="teacher"){
console.log("teacher");
$.ajax({
url: basePath+"/teacher/login",
type: "get",
async: false,
data: $("#from").serializeArray(),
contentType: 'application/x-www-form-urlencoded',
dataType:"json",
success:function (result) {
if(result.extend.info == 300){
a.point2()
}else if(result.extend.info == 200){
window.location.href = basePath+"/teacher/index";
}else
a.point3()
}
point1(){
this.$notify.info({
title: '提示',
message: '請選擇用戶類型'
});
},
point2(){
this.$notify.info({
title: '提示',
message: '賬號不存在'
});
},
point3(){
this.$notify.error({
title: '提示',
message: '密碼錯誤'
});
}
});
$(".but").click(function(){
$(".but").removeClass("active");
$(this).addClass("active");
a.usertype = $(this).val();
});
</script>
</html>
yml配置:
spring:
# 環(huán)境 dev|test|prod | ctp
profiles:
active: pro
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/edumanagement?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5
thymeleaf:
cache: false
mode: HTML
servlet:
content-type: text/html
prefix: classpath:/templates/
servlet:
multipart:
max-file-size: 100MB
max-request-size: 500MB
jackson:
default-property-inclusion: non_null
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
# MybatisPlus 配置
mybatis-plus:
mapper-locations: classpath:mapper/*/*Mapper.xml
type-aliases-package: com.hngy.educationaladministration.plus.entity
logging:
level:
com.hngy.educationaladministration.mapper: debug
server:
port: 8088
servlet:
context-path: /edumanagement
視圖跳轉:
/**
* 添加視圖跳轉
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/teacher/businessView").setViewName("teacher/showtable/businessView");
registry.addViewController("/teacher/workloadView").setViewName("teacher/showtable/workloadView");
registry.addViewController("/teacher/workloadEdit").setViewName("teacher/fillouttable/workloadEdit");
registry.addViewController("/teacher/businessEdit").setViewName("teacher/fillouttable/businessEdit");
registry.addViewController("/teacher/businessPrint").setViewName("teacher/table/business");
registry.addViewController("/teacher/workloadPrint").setViewName("teacher/table/workload");
}
攔截放行:
/**
* 放行路徑,不經(jīng)過攔截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).excludePathPatterns(
"/",
"/login",
"/admin/login",
"/admin/exit",
"/teacher/login",
"/teacher/exit",
"/student/login",
"/student/exit",
"/js/**",
"/asserts/**",
"/webjars/**",
"/css/**",
"/error/**",
"/cs"
);
}
總結:
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
idea啟動多個服務不顯示Services或者RunDashboard窗口的處理方法
這篇文章主要介紹了idea啟動多個服務不顯示Services或者RunDashboard窗口,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
詳解SpringBoot中5種類型參數(shù)傳遞和json數(shù)據(jù)傳參的操作
當涉及到參數(shù)傳遞時,Spring?Boot遵循HTTP協(xié)議,并支持多種參數(shù)傳遞方式,這些參數(shù)傳遞方式可以根據(jù)請求的不同部分進行分類,2023-12-12
關于Java中數(shù)組切片的幾種方法(獲取數(shù)組元素)
這篇文章主要介紹了關于Java中數(shù)組切片的幾種方法(獲取數(shù)組元素),切片是數(shù)組的一個引用,因此切片是引用類型,在進行傳遞時,遵守引用傳遞的機制,需要的朋友可以參考下2023-05-05

