天津網(wǎng)站建設(shè)哪家有百度市場應(yīng)用官方app
qq(2829419543)獲取源碼
開發(fā)語言:Java
Java開發(fā)工具:JDK1.8
后端框架:springboot
前端:采用vue技術(shù)開發(fā)
數(shù)據(jù)庫:MySQL5.7和Navicat管理工具結(jié)合
服務(wù)器:Tomcat8.5
開發(fā)軟件:IDEA?/?Eclipse
支持定制,實現(xiàn)自己的需求
目錄
一、項目簡介
1系統(tǒng)概述
1.1 研究背景
1.2研究目的
二、開發(fā)技術(shù)與環(huán)境配置
2.1.SpringBoot框架
2.2Java語言簡介
2.3 Vue的介紹
2.4 mysql數(shù)據(jù)庫介紹
2.5 B/S架構(gòu)
三、系統(tǒng)功能實現(xiàn)
四、系統(tǒng)項目截圖
4.1 管理員模塊的實現(xiàn)
4.1.1 學(xué)生信息管理
4.1.2 教師信息管理
4.2 教師模塊的實現(xiàn)
4.2.1 競賽報名審核
4.2.2 競賽信息管理
4.3 學(xué)生模塊的實現(xiàn)
4.3.1 競賽信息管理
4.3.2 競賽報名管理
五、核心代碼
文件上傳
登錄功能實現(xiàn)
一、項目簡介
隨著信息技術(shù)在管理上越來越深入而廣泛的應(yīng)用,管理信息系統(tǒng)的實施在技術(shù)上已逐步成熟。本文介紹了大學(xué)生競賽管理系統(tǒng)的開發(fā)全過程。通過分析大學(xué)生競賽管理系統(tǒng)管理的不足,創(chuàng)建了一個計算機(jī)管理大學(xué)生競賽管理系統(tǒng)的方案。文章介紹了大學(xué)生競賽管理系統(tǒng)的系統(tǒng)分析部分,包括可行性分析等,系統(tǒng)設(shè)計部分主要介紹了系統(tǒng)功能設(shè)計和數(shù)據(jù)庫設(shè)計
1系統(tǒng)概述
1.1 研究背景
隨著計算機(jī)技術(shù)的發(fā)展以及計算機(jī)網(wǎng)絡(luò)的逐漸普及,互聯(lián)網(wǎng)成為人們查找信息的重要場所,二十一世紀(jì)是信息的時代,所以信息的管理顯得特別重要。因此,使用計算機(jī)來管理大學(xué)生競賽管理系統(tǒng)的相關(guān)信息成為必然。開發(fā)合適的大學(xué)生競賽管理系統(tǒng),可以方便管理人員對大學(xué)生競賽管理系統(tǒng)的管理,提高信息管理工作效率及查詢效率,有利于更好的為人們服務(wù)。
1.2研究目的
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,網(wǎng)絡(luò)時代的到來,網(wǎng)絡(luò)信息也將會改變當(dāng)今社會。各行各業(yè)在日常企業(yè)經(jīng)營管理等方面也在慢慢的向規(guī)范化和網(wǎng)絡(luò)化趨勢匯合。大學(xué)生競賽管理系統(tǒng)的信息化程度體現(xiàn)在將互聯(lián)網(wǎng)與信息技術(shù)應(yīng)用于經(jīng)營與管理,以現(xiàn)代化工具代替?zhèn)鹘y(tǒng)手工作業(yè)。無疑,使用網(wǎng)絡(luò)信息化管理使信息管理更先進(jìn)、更高效、更科學(xué),信息交流更迅速。
對于之前大學(xué)生競賽管理系統(tǒng)的管理,大部分都是使用傳統(tǒng)的人工方式去管理,這樣導(dǎo)致了管理效率低下、出錯頻率高。而且,時間一長的話,積累下來的數(shù)據(jù)信息不容易保存,對于查詢、更新還有維護(hù)會帶來不少問題。對于數(shù)據(jù)交接也存在很大的隱患。如果采用電子化的存儲方式就會帶來很大的改善,而且給用戶的查詢帶來了很大便利,因此設(shè)計一個大學(xué)生競賽管理系統(tǒng)刻不容緩,能夠提高信息的管理水平。
二、開發(fā)技術(shù)與環(huán)境配置
以Java語言為開發(fā)工具,利用了當(dāng)前先進(jìn)的springboot框架,以IDEA為系統(tǒng)開發(fā)工具,MySQL為后臺數(shù)據(jù)庫,vue為后臺管理頁面開發(fā)的一個大學(xué)生競賽管理系統(tǒng)。
2.1.SpringBoot框架
SpringBoot是一個全新開源的輕量級框架。基于Spring4.0設(shè)計,其不僅繼承了Spring框架原來有的優(yōu)秀特性,而且還通過簡化配置文件來進(jìn)一步簡化了Spring應(yīng)用的整個搭建以及開發(fā)過程。另外在原本的Spring中由于隨著項目的擴(kuò)大導(dǎo)入的jar包數(shù)量越來越大,隨之出現(xiàn)了jar包版本之間的兼容性問題,而此時SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及引用的不穩(wěn)定性問題得到了很好的解決。
SpringBoot可以看做是Spring的加強(qiáng)版本,但實質(zhì)上都是Spring的相關(guān)技術(shù),有了這些優(yōu)秀的開源框架,程序員在開發(fā)過程中將事半功倍。
2.2Java語言簡介
Java是由SUN公司推出,該公司于2010年被oracle公司收購。Java本是印度尼西亞的一個叫做爪洼島的英文名稱,也因此得來java是一杯正冒著熱氣咖啡的標(biāo)識。Java語言在移動互聯(lián)網(wǎng)的大背景下具備了顯著的優(yōu)勢和廣闊的前景,它是面向?qū)ο蟮?#xff0c;分布式的,動態(tài)的,具有平臺無關(guān)性、安全性、健壯性。Java語言的基本語句語法和C++一樣,但是它面向?qū)ο蟮募夹g(shù)更加徹底,因為Java要求將所有的內(nèi)容都必須封裝成類,把類作為程序的基本單位。由于不允許類外有變量、方法。 Java語言的分布式體現(xiàn)在數(shù)據(jù)分布和操作分布,它是面向網(wǎng)絡(luò)的語言,可以處理TCP/IP協(xié)議,它也支持客戶機(jī)/服務(wù)器的計算模式。Java語言的動態(tài)性是指類在運(yùn)行時是動態(tài)安裝的,使得Java可以動態(tài)的維護(hù)程序。Java不支持指針,對內(nèi)存訪問的所有操作都是通過對象實例化實現(xiàn)的,這樣就避免了指針操作中易產(chǎn)生的錯誤,同時也預(yù)防了病毒對系統(tǒng)的破壞和威脅。
Java語言的編程風(fēng)格與C語言非常接近,它繼承了C++面向?qū)ο蠹夹g(shù)的核心,它面世之后發(fā)展迅速,非常流行,對高級C語言形成了很大的沖擊。業(yè)內(nèi)人士稱之為“一次編譯、到處執(zhí)行”。當(dāng)然java也有缺點,在每次執(zhí)行編譯后,字節(jié)碼都需要消耗一定的時間,在某些程度上降低了性能。但是這并不影響java成為此次設(shè)計語言的選擇。Java語言簡單易學(xué),使用它的編程時間短,功能性強(qiáng),開發(fā)者學(xué)習(xí)起來更簡便、更快。Java的主要特性有以下幾個:
面向?qū)ο?br /> 面向?qū)ο笥兴膫€特點:封裝、繼承、多態(tài)、抽象。抽象是指忽略一個問題中的次要部分,關(guān)注主要部分。多態(tài)是指對同一種消息做出的不同反應(yīng)。繼承是指在原有的父類方法基礎(chǔ)上增加自己獨(dú)有的方法,而不改變原來父類。
平臺無關(guān)性、
Java編譯出來的是字節(jié)碼,直接由虛擬機(jī)執(zhí)行。在任何平臺上,只要有Java虛擬機(jī),Java代碼都能運(yùn)行。
可靠性和安全性
Java對內(nèi)存的訪問都必須通過對象的實例變量來實現(xiàn),避免了指針中出現(xiàn)的錯誤。
多線程
Java提供了多線程功能,利用編程實現(xiàn)同一時間同時工作的功能。
2.3 Vue的介紹
Vue.js致力于構(gòu)建數(shù)據(jù)驅(qū)動的web應(yīng)用開發(fā)框架,以簡潔化,輕量級,數(shù)據(jù)驅(qū)動,模塊友好等優(yōu)勢深受企業(yè)以及前端開發(fā)者的喜愛,成為前端開發(fā)人員必備的技能。Vue3.0的出現(xiàn),又帶動周邊生態(tài)的發(fā)展,奠定了vue在企業(yè)級開發(fā)的重要地位。
Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。與其它大型框架不同的是,Vue 被設(shè)計為可以自底向上逐層應(yīng)用。Vue 的核心庫只關(guān)注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時,Vue 也完全能夠為復(fù)雜的單頁應(yīng)用提供驅(qū)動。
漸進(jìn)式框架做分層設(shè)計,每層都可選,不同層可以靈活接入其他方案。而當(dāng)你都想用官方的實現(xiàn)時,會發(fā)現(xiàn)也早已準(zhǔn)備好,各層之間包括配套工具都能比接入其他方案更便捷地協(xié)同工作。 一個個放入,放多少就做多少。
2.4 mysql數(shù)據(jù)庫介紹
利用MYSQL的數(shù)據(jù)獨(dú)立性、安全性等特點,在軟件項目中對數(shù)據(jù)進(jìn)行操作,可以保證數(shù)據(jù)準(zhǔn)確無誤,并降低了程序員的應(yīng)用開發(fā)時間。
MYSQL的特點是支持多線程,能方便的對系統(tǒng)資源充分利用,有效提高速度,還提供多種方式途徑來對數(shù)據(jù)庫進(jìn)行連接;MYSQL的功能相對弱小、規(guī)模也小,但本系統(tǒng)要求不高,MYSQL完全可以滿足本系統(tǒng)使用。
利用MYSQL建立系統(tǒng)數(shù)據(jù)庫,不僅有利于數(shù)據(jù)處理業(yè)務(wù)的早期整合,還能利于發(fā)展后兩種數(shù)據(jù)擴(kuò)展的操作。
2.5 B/S架構(gòu)
B/S結(jié)構(gòu)是目前使用最多的結(jié)構(gòu)模式,它可以使得系統(tǒng)的開發(fā)更加的簡單,好操作,而且還可以對其進(jìn)行維護(hù)。使用該結(jié)構(gòu)時只需要在計算機(jī)中安裝數(shù)據(jù)庫,和一些很常用的瀏覽器就可以了。瀏覽器就會與數(shù)據(jù)庫進(jìn)行信息的連接,可以實現(xiàn)很多的功能,B/S結(jié)構(gòu)是可以直接進(jìn)行使用的,而且B/S結(jié)構(gòu)在使用中極大的減少了工作的維護(hù)?;贐/S的軟件,所有的數(shù)據(jù)庫之間都是相互獨(dú)立的,因此是非常安全的。因為基于B/S結(jié)構(gòu)可以清楚的看到系統(tǒng)正在處理的業(yè)務(wù),并且能夠及時的讓管理人員做出決策,這樣就可以避免企業(yè)的損失。B/S結(jié)構(gòu)的基本特點是集中式的管理模式,用戶使用系統(tǒng)生成數(shù)據(jù)后,這些數(shù)據(jù)就可以存儲到系統(tǒng)的數(shù)據(jù)庫中,方便日后能夠用到,這樣就可以滿足人們的所有的需求。
用戶角色
管理員
三、系統(tǒng)功能實現(xiàn)
本大學(xué)生競賽管理系統(tǒng)管理員功能有個人中心,學(xué)生管理,教師管理,競賽信息管理,競賽報名管理,班級類型管理。教師功能有個人中心,競賽信息管理,競賽報名管理,作品打分管理。學(xué)生功能有個人中心,競賽信息管理,競賽報名管理,作品打分管理。因而具有一定的實用性。
四、系統(tǒng)項目截圖
4.1 管理員模塊的實現(xiàn)
4.1.1 學(xué)生信息管理
大學(xué)生競賽管理系統(tǒng)的系統(tǒng)管理員可以管理用戶,可以對學(xué)生信息修改刪除以及查詢操作。
4.1.2 教師信息管理
系統(tǒng)管理員可以查看對教師信息進(jìn)行添加,修改,刪除以及查詢操作。
4.2 教師模塊的實現(xiàn)
4.2.1 競賽報名審核
教師可以對學(xué)生的競賽報名進(jìn)行審核操作。
4.2.2 競賽信息管理
教師可以對競賽信息進(jìn)行添加修改刪除操作。
4.3 學(xué)生模塊的實現(xiàn)
4.3.1 競賽信息管理
學(xué)生可以在競賽信息管理里面進(jìn)行報名操作。
4.3.2 競賽報名管理
學(xué)生報名可以在競賽報名里面查看自己的報名情況。
五、核心代碼
文件上傳
/*** 上傳文件映射表*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{@Autowiredprivate ConfigService configService;/*** 上傳文件*/@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上傳文件不能為空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload.getAbsolutePath()+"/"+fileName);file.transferTo(dest);/*** 如果使用idea或者eclipse重啟項目,發(fā)現(xiàn)之前上傳的圖片或者文件丟失,將下面一行代碼注釋打開* 請將以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替換成你本地項目的upload路徑,* 并且項目路徑不能存在中文、空格等特殊字符*/
// FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路徑以后請將該行最前面的//注釋去掉**/if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下載文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", fileName); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}
登錄功能實現(xiàn)
package com.controller;import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登錄相關(guān)*/
@RequestMapping("users")
@RestController
public class UserController{@Autowiredprivate UserService userService;@Autowiredprivate TokenService tokenService;/*** 登錄*/@IgnoreAuth@PostMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user==null || !user.getPassword().equals(password)) {return R.error("賬號或密碼不正確");}String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注冊*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody UserEntity user){if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用戶已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密碼重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UserEntity user = userService.selectOne(new EntityWrapper<UserEntity> ().eq("username", username));if(user==null) {return R.error("賬號不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密碼已重置為:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UserEntity user){EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 獲取用戶的session用戶信息*/@RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id = (Long)request.getSession().getAttribute("userId");UserEntity user = userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody UserEntity user){if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {return R.error("用戶已存在");}userService.insert(user);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody UserEntity user){userService.updateById(user);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}