Java項目:32 基于springboot的課程作業管理系統(含源碼數據庫+文檔免費送)

作者主頁:源碼空間codegym

簡介:Java領域優質創作者、Java項目、學習資料、技術互助

文中獲取源碼

項目介紹

管理員:首頁、個人中心、公告信息管理、班級管理、學生管理、教師管理、課程類型管理、課程信息管理、學生選課管理、作業布置管理、作業提交管理、作業評分管理、課程評價管理、課程資源管理

教師;首頁、個人中心、課程信息管理、學生選課管理、作業布置管理、作業提交管理、作業評分管理、課程評價管理、課程資源管理

學生;首頁、個人中心、公告信息管理、課程信息管理、學生選課管理、作業布置管理、作業提交管理、作業評分管理、課程評價管理、課程資源管理等功能。

點擊查看演示視頻

技術選型

運行環境:MySQL5.7+jdk1.8+Idea2020.3+Tomcat9

服務端技術:jsp+servlet+jdbc+jstl+el表達式

前端技術:bootstrap+jQuery+ajax

環境要求

1.運行環境:最好是java jdk1.8,我們在這個平臺上運行的。其他版本理論上也可以。

2.IDE環境:IDEA,Eclipse,Myeclipse都可以。推薦IDEA;

3.tomcat環境:Tomcat7.x,8.X,9.x版本均可

4.硬件環境:windows7/8/10 4G內存以上;或者Mac OS;

5.是否Maven項目:是;查看源碼目錄中是否包含pom.xml;若包含,則為maven項目,否則為非maven.項目

6.數據庫:MySql5.7/8.0等版本均可;

技術棧

后臺框架:Springboot、MyBatis

數據庫:MySQL

環境:JDK8、TOMCAT、IDEA

使用說明

1.使用Navicati或者其它工具,在mysql中創建對應sq文件名稱的數據庫,并導入項目的sql文件;

2.使用IDEA/Eclipse/MyEclipse導入項目,修改配置,運行項目;

3.將項目中config-propertiesi配置文件中的數據庫配置改為自己的配置,然后運行;

運行指導

idea導入源碼空間站頂目教程說明(Vindows版)-ssm篇:

http://mtw.so/5MHvZq

源碼地址:http://codegym.top

運行截圖

文檔截圖

微信截圖_20240303014507

登錄/注冊頁面

微信截圖_20240303013147

微信截圖_20240303013205

管理員

微信截圖_20240303013232

微信截圖_20240303013238

微信截圖_20240303013244

微信截圖_20240303013250

微信截圖_20240303013256

微信截圖_20240303013302

微信截圖_20240303013308

微信截圖_20240303013315

微信截圖_20240303013321

微信截圖_20240303013327

教師

微信截圖_20240303013343

微信截圖_20240303013349

微信截圖_20240303013353

微信截圖_20240303013357

微信截圖_20240303013402

學生

微信截圖_20240303013412

微信截圖_20240303013417

微信截圖_20240303013421

代碼

CommonController

package com.controller;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;/*** 通用接口*/
@RestController
public class CommonController{@Autowiredprivate CommonService commonService;@Autowiredprivate ConfigService configService;private static AipFace client = null;private static String BAIDU_DITU_AK = null;@RequestMapping("/location")public R location(String lng,String lat) {if(BAIDU_DITU_AK==null) {BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();if(BAIDU_DITU_AK==null) {return R.error("請在配置管理中正確配置baidu_ditu_ak");}}Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);return R.ok().put("data", map);}/*** 人臉比對* * @param face1 人臉1* @param face2 人臉2* @return*/@RequestMapping("/matchFace")public R matchFace(String face1, String face2) {if(client==null) {/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();String token = BaiduUtil.getAuth(APIKey, SecretKey);if(token==null) {return R.error("請在配置管理中正確配置APIKey和SecretKey");}client = new AipFace(null, APIKey, SecretKey);client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);}JSONObject res = null;try {File file1 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face1);File file2 = new File(ResourceUtils.getFile("classpath:static/upload").getAbsolutePath()+"/"+face2);String img1 = Base64Util.encode(FileUtil.FileToByte(file1));String img2 = Base64Util.encode(FileUtil.FileToByte(file2));MatchRequest req1 = new MatchRequest(img1, "BASE64");MatchRequest req2 = new MatchRequest(img2, "BASE64");ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();requests.add(req1);requests.add(req2);res = client.match(requests);System.out.println(res.get("result"));} catch (FileNotFoundException e) {e.printStackTrace();return R.error("文件不存在");} catch (IOException e) {e.printStackTrace();} return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));}/*** 獲取table表中的column列表(聯動接口)* @param table* @param column* @return*/@IgnoreAuth@RequestMapping("/option/{tableName}/{columnName}")public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {Map<String, Object> params = new HashMap<String, Object>();params.put("table", tableName);params.put("column", columnName);if(StringUtils.isNotBlank(level)) {params.put("level", level);}if(StringUtils.isNotBlank(parent)) {params.put("parent", parent);}List<String> data = commonService.getOption(params);return R.ok().put("data", data);}/*** 根據table中的column獲取單條記錄* @param table* @param column* @return*/@IgnoreAuth@RequestMapping("/follow/{tableName}/{columnName}")public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {Map<String, Object> params = new HashMap<String, Object>();params.put("table", tableName);params.put("column", columnName);params.put("columnValue", columnValue);Map<String, Object> result = commonService.getFollowByOption(params);return R.ok().put("data", result);}/*** 修改table表的sfsh狀態* @param table* @param map* @return*/@RequestMapping("/sh/{tableName}")public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {map.put("table", tableName);commonService.sh(map);return R.ok();}/*** 獲取需要提醒的記錄數* @param tableName* @param columnName* @param type 1:數字 2:日期* @param map* @return*/@IgnoreAuth@RequestMapping("/remind/{tableName}/{columnName}/{type}")public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("table", tableName);map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}int count = commonService.remindCount(map);return R.ok().put("count", count);}/*** 單列求和*/@IgnoreAuth@RequestMapping("/cal/{tableName}/{columnName}")public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {Map<String, Object> params = new HashMap<String, Object>();params.put("table", tableName);params.put("column", columnName);Map<String, Object> result = commonService.selectCal(params);return R.ok().put("data", result);}/*** 分組統計*/@IgnoreAuth@RequestMapping("/group/{tableName}/{columnName}")public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {Map<String, Object> params = new HashMap<String, Object>();params.put("table", tableName);params.put("column", columnName);List<Map<String, Object>> result = commonService.selectGroup(params);return R.ok().put("data", result);}/*** (按值統計)*/@IgnoreAuth@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {Map<String, Object> params = new HashMap<String, Object>();params.put("table", tableName);params.put("xColumn", xColumnName);params.put("yColumn", yColumnName);List<Map<String, Object>> result = commonService.selectValue(params);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for(Map<String, Object> m : result) {for(String k : m.keySet()) {if(m.get(k) instanceof Date) {m.put(k, sdf.format((Date)m.get(k)));}}}return R.ok().put("data", result);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CK98-數學家鍵盤配置

官方驅動和說明書下載地址 https://www.coolkiller.cn/download/lists_6.html 介紹&#xff1a;https://new.qq.com/rain/a/20221229A09B1M00 官方CK-98數學家驅動版本&#xff08;謹慎更新&#xff09; 如果升級驅動出現問題&#xff0c;重啟驅動軟件后會默認讓你恢復的。 …

[藍橋杯 2020 省 AB3] 日期識別

每日一道算法題之日期識別 一、題目描述二、思路三、C代碼 一、題目描述 題目來源&#xff1a;洛谷 【藍橋杯 2020 第三輪省賽 AB 組 F 題】小藍要處理非常多的數據, 其中有一些數據是日期。 在小藍處理的日期中有兩種常用的形式&#xff1a;英文形式和數字形式。英文形式采用…

利用小蜜蜂AI智能問答ChatGPT+AI高清繪圖生成圖文故事案例

利用小蜜蜂AI智能問答ChatGPTAI高清繪圖生成圖文故事案例 這段時間利用小蜜蜂AI網站做了一些編程、繪圖以及數據分析方面的案例。再過幾個月&#xff0c;我的大孫子就要出生了。我要用小蜜蜂AI智能問答和AI高清繪圖為大孫子生成一個1-9的數字圖文故事。 小蜜蜂AI網站可以掃如…

程序項目打包發布方法,采用InstallShield軟件

重點&#xff1a; 1.程序項目做出來了&#xff0c;需要打包發布給用戶。如何打包是關鍵。 2.采用InstallShield軟件進行發布。 步驟一&#xff1a;創建一個依賴三方庫配置環境的bat文件的項目。 &#xff08;主要測試三方庫打包 和如果有bat文件&#xff0c;需要先創建環境&…

讀書筆記-三國演義-曹操

魏武帝曹操&#xff08;155年&#xff0d;220年&#xff09;&#xff0c;是中國東漢末年至三國時期的重要政治家、軍事家和文學家&#xff0c;同時也是三國時期魏國的建立者。他以其雄才大略、果斷機敏的領導才能以及卓越的軍事才華而聞名于世。 生平 曹操出生于豫州譙縣&…

C++STL排序原理簡介

../chromedriver 一份簡化的代碼(可讀性較強)一份簡化的代碼(可讀性較強) 一份簡化的代碼(可讀性較強) c 的sort用了很多年&#xff0c;一直不知道具體是怎么寫的 決定看看代碼&#xff0c;以下文章結構可能有點混亂&#xff0c;建議讀者同時打開vs同步跳轉 https://www.geeksf…

一文認識藍牙(驗證基于Aduino IDE的ESP32)

1、簡介 藍牙技術是一種無線通信的方式&#xff0c;利用特定頻率的波段&#xff08;2.4GHz-2.485GHz左右&#xff09;&#xff0c;進行電磁波傳輸&#xff0c;總共有83.5MHz的帶寬資源。 1.1、背景 藍牙&#xff08;Bluetooth&#xff09;一詞取自于十世紀丹麥國王哈拉爾Haral…

Thread.start() run()

Thread.start() & run() public static void main(String[] args) { new Thread(new Runnable() {Overridepublic void run() {System.out.println("2432");}}).start(); }public class Thread implements Runnable {//通過構造方法調用init方法&#xff0c;在…

Springboot+vue的商業輔助決策系統的設計與實現(有報告)。Javaee項目,springboot vue前后端分離項目

演示視頻&#xff1a; Springbootvue的商業輔助決策系統的設計與實現&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot vue前后端分離項目 項目介紹&#xff1a; 本文設計了一個基于Springbootvue的前后端分離的商業輔助決策系統的設計與實現&#xff0c;采…

Leetcode210. 課程表 II

Every day a Leetcode 題目來源&#xff1a;210. 課程表 II 解法1&#xff1a; 什么是拓撲排序&#xff1f; 我們考慮拓撲排序中最前面的節點&#xff0c;該節點一定不會有任何入邊&#xff0c;也就是它沒有任何的先修課程要求。當我們將一個節點加入答案中后&#xff0c;我…

html5新增標簽+css3新增標簽

新增標簽 一.html5新增標簽1.語義化標簽2.多媒體標簽&#xff08;1&#xff09;視頻video&#xff08;2&#xff09;音頻audio&#xff08;3&#xff09;.總結 3.input屬性4.表單屬性 二.css3新增選擇器1.新增選擇器&#xff08;1&#xff09;屬性選擇器&#xff08;2&#xff…

Ubuntu進入python時報錯:找不到命令 “python”,“python3” 命令來自 Debian 軟件包 python3

一、錯誤描述 二、解決辦法 進入”/usr/bin”目錄下&#xff0c;查看/usr/bin目錄中所有與python相關的文件和鏈接&#xff1a; cd /usr/bin ls -l | grep python 可以看到Python3指向的是Python3.10&#xff0c;而并無指向python3的軟連接 只需要在python與python3之間手動…

微服務治理:Nacos, Zookeeper, consul, etcd, Eureka等 5 個常用微服務注冊工具對比

當然&#xff01;下面是 Nacos、Zookeeper、Consul、etcd 和 Eureka 這五個常用的注冊中心的詳細對比&#xff1a; Nacos&#xff1a; Nacos 是由 HashiCorp 開發的高度可擴展和可靠的服務發現、配置管理和服務網格解決方案。它的架構基于一組服務器代理形成的共識組和與服務器…

Github配置SSH免密認證

以Ubuntu Server為例 生成SSH ssh-keygen -t ed25519 -C "your_emailexample.com" 如果系統不支持Ed25519算法&#xff0c;使用舊的命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 根據提示生成公私鑰文件&#xff0c;記下位置…

前端學習、CSS

CSS可以嵌入到HTML中使用。 每個CSS語法包含兩部分&#xff0c;選擇器和應用的屬性。 div用來聲明針對頁面上的哪些元素生效。 具體設置的屬性以鍵值對形式表示&#xff0c;屬性都在{}里&#xff0c;屬性之間用;分割&#xff0c;鍵和值之間用:分割。 因為CSS的特殊命名風格…

MySQL 常用優化方式

MySQL 常用優化方式 sql 書寫順序與執行順序SQL設計優化使用索引避免索引失效分析慢查詢合理使用子查詢和臨時表列相關使用 日常SQL優化場景limit語句隱式類型轉換嵌套子查詢混合排序查詢重寫 sql 書寫順序與執行順序 (7) SELECT (8) DISTINCT <select_list> (1) FROM &…

ctf_show筆記篇(web入門---php特性)

目錄 php特性 89&#xff1a;直接數組繞過preg_match當遇到數組時會直接報錯輸出0 90&#xff1a;這里利用了intval的特性 91&#xff1a;這里需要細節一點 92-93&#xff1a;這兩題的方法很多可以發散思維 94&#xff1a;還是利用小數繞過例如4476.0 95&#xff1a;這里…

HTML和CSS (前端共三篇)【詳解】

目錄 一、前端開發介紹 二、HTML入門 三、HTML基礎標簽 四、CSS樣式修飾 五、HTML表格標簽 六、HTML表單標簽 一、前端開發介紹 web應用有BS和CS架構兩種&#xff0c;其中我們主要涉及的是BS架構。而BS架構里&#xff0c;B&#xff08;Browser瀏覽器&#xff09;是客戶端的…

藍橋杯(3.1)

92. 遞歸實現指數型枚舉 import java.util.Scanner;public class Main {static int N 16;static int n;static int[] st new int[N]; public static void dfs(int u) {if(u > n) {for(int i1;i<n;i) {if(st[i] 1)System.out.print(i" ");}System.out.print…

798. 差分矩陣

Problem: 798. 差分矩陣 文章目錄 思路解題方法復雜度Code 思路 這是一個差分矩陣的問題。差分矩陣是一種用于處理區間修改問題的數據結構&#xff0c;它可以在O(1)的時間復雜度內完成區間的修改操作&#xff0c;然后在O(n)的時間復雜度內完成所有元素的更新操作。 在這個問題中…