一、摘要
1.1 項(xiàng)目介紹
基于JAVA+Vue+SpringBoot+MySQL的班級考勤管理系統(tǒng),分為微信小程序端和管理后臺,包含了學(xué)生檔案、班級檔案、教師檔案、學(xué)生考勤、學(xué)生請假模塊,還包含系統(tǒng)自帶的用戶管理、部門管理、角色管理、菜單管理、日志管理、數(shù)據(jù)字典管理、文件管理、圖表展示等基礎(chǔ)模塊,班級考勤管理系統(tǒng)基于角色的訪問控制,給教師、學(xué)生使用,可將權(quán)限精確到按鈕級別,您可以自定義角色并分配權(quán)限,系統(tǒng)適合設(shè)計(jì)精確的權(quán)限約束需求。
考勤是高校管理學(xué)生的基本方式,也是考核學(xué)生成績的重要一環(huán)。隨著高校考勤數(shù)量的快速增長,面對大類的考勤數(shù)據(jù),人工記錄的方式存在很多弊端。手動考勤很有可能出現(xiàn)記錄錯(cuò)誤、計(jì)算錯(cuò)誤的情況,傳統(tǒng)的考勤記錄方式已經(jīng)不能滿足現(xiàn)有的需求,完善高??记诠芾砟J絼菰诒匦?。
開發(fā)一套基于 Vue.js 的班級考勤管理系統(tǒng),正是為了解決考勤信息管理難的問題,系統(tǒng)化的管理模式可以減輕考勤人員的工作任務(wù),提高考勤效率,系統(tǒng)還支持生成各式各樣的圖表,讓原本枯燥的考勤工作變得簡單而有趣。
1.2 項(xiàng)目錄屏
二、功能模塊
目前,高校對于班級考勤系統(tǒng)的需求包括打卡和請假兩大方面,另外還包括對班級、學(xué)生等基礎(chǔ)檔案的管理,因?yàn)檫€需要對考勤這樣的數(shù)據(jù)進(jìn)行合理存儲,打卡數(shù)據(jù)的準(zhǔn)確性在高校考勤事務(wù)中非常重要,接下來將詳細(xì)闡述班級考勤管理系統(tǒng)的系統(tǒng)需求。
通過對高校實(shí)際需求的研究,我將班級考勤管理系統(tǒng)的功能模塊分為系統(tǒng)基礎(chǔ)支持模塊、班級學(xué)生教師檔案支持模塊、考勤簽到支持模塊、學(xué)生請假支持模塊,在使用場景上分為瀏覽器PC端和微信小程序端。
2.1 系統(tǒng)基礎(chǔ)支持模塊
系統(tǒng)基礎(chǔ)支持模塊包括支撐班級考勤管理系統(tǒng)運(yùn)行的管理模塊。比如系統(tǒng)的菜單管理,維護(hù)了菜單的名稱、前端路由、前端組件信息,是支撐系統(tǒng)運(yùn)行的基礎(chǔ)內(nèi)容。比如日志模塊,用于基礎(chǔ)學(xué)生的登陸、打卡、請假操作,用于留檔。
2.2 班級學(xué)生教師支持模塊
班級檔案、學(xué)生檔案、教師檔案是班級考勤管理系統(tǒng)的基礎(chǔ)檔案信息。班級是學(xué)生的承載體,班級和學(xué)生是一對多的關(guān)系。
班級檔案包括各個(gè)年級段行政班級的檔案,包含了班級名稱、班級代碼、年級、班主任、學(xué)生數(shù)量、學(xué)習(xí)委員等,可以通過此模塊進(jìn)行班級基礎(chǔ)數(shù)據(jù)的維護(hù)。
學(xué)生檔案管理是對班級內(nèi)學(xué)生的信息進(jìn)行管理,其中包括各個(gè)班級下學(xué)生的檔案,包含了學(xué)生姓名、性別、手機(jī)號、年齡等信息,可以通過此模塊進(jìn)行學(xué)生基礎(chǔ)數(shù)據(jù)的維護(hù)。
教師檔案管理是對高校在職教師的信息進(jìn)行管理,其中包括各分院在職教師的檔案,包含了教師姓名、學(xué)歷、職稱、開始工作時(shí)間等,可以通過此模塊進(jìn)行教師基礎(chǔ)數(shù)據(jù)的維護(hù)。
2.3 考勤簽到管理
考勤簽到管理模塊,錄入了教師發(fā)起的考勤信息,包括考勤的開始時(shí)間、結(jié)束時(shí)間、考勤緣由、參與班級等,可以通過此模塊來發(fā)起考勤、操作考勤補(bǔ)錄、查詢考勤報(bào)表。
2.4 學(xué)生請假管理
高校學(xué)生可以在此模塊中發(fā)起請假,該學(xué)生所屬班級的班主任可以對請假單進(jìn)行審批,學(xué)習(xí)委員可以查看班級學(xué)生的請假情況,班級考勤系統(tǒng)所有關(guān)于請假的功能,都在學(xué)生請假管理下。
三、系統(tǒng)設(shè)計(jì)
3.1 功能設(shè)計(jì)
3.1.1 系統(tǒng)基礎(chǔ)支持模塊
系統(tǒng)基礎(chǔ)支持模塊的功能包括了登陸用戶、用戶角色、系統(tǒng)菜單、日志、數(shù)據(jù)字典的模塊支持。
數(shù)據(jù)字典需要包括字典名稱、字典ID、創(chuàng)建人、字典內(nèi)容、字典類型字段,字典值和數(shù)據(jù)字典是一對多的關(guān)系,需要分為兩張表進(jìn)行存儲。
日志需要包括操作名稱、操作IP、操作人、記錄時(shí)間字段,一張關(guān)系表存儲即可。
系統(tǒng)菜單包括了菜單名稱、菜單ID、菜單路由、菜單備注、創(chuàng)建人,一張關(guān)系表存儲即可。
用戶角色包括了角色名稱、角色I(xiàn)D、菜單權(quán)限、備注信息,其中角色和菜單是一對多的關(guān)系,需要分兩張表進(jìn)行存儲。
3.1.2 班級學(xué)生教師檔案模塊
該模塊是對班級、學(xué)生、教師進(jìn)行管理。包括對學(xué)習(xí)委員進(jìn)行管理,主要有班級、學(xué)生、教師的信息以及學(xué)習(xí)委員的設(shè)置,其中包含了對班級、學(xué)生、教師的信息進(jìn)行添加,搜索,該模塊可以詳細(xì)查看班主任的信息檔案。
3.1.3 考勤簽到管理模塊
該模塊是對考勤簽到的管理,主要是教師發(fā)起考勤、修改考勤信息、取消考勤、學(xué)生參與考勤、考勤補(bǔ)錄、考勤報(bào)表。該模塊主要針對考勤的一些信息進(jìn)行維護(hù)。
其中學(xué)生考勤打卡部分,位于微信小程序端,學(xué)生可以進(jìn)入手機(jī)微信完成打卡操作,既方便又高校。管理人員可以對這些信息進(jìn)行修改,包括了基礎(chǔ)的增、刪、改、查。
考勤補(bǔ)錄部分,又具體詳細(xì)顯示了考勤的詳細(xì)信息,具體包括了考勤的應(yīng)參與人數(shù)、實(shí)際參與人數(shù)等,這樣可以更好的分析班級的考勤狀態(tài)。同時(shí),管理人員也可以對這些考勤信息進(jìn)行補(bǔ)錄,也包括基礎(chǔ)的增、刪、改、查。
3.1.4 學(xué)生請假管理模塊
該模塊是維護(hù)學(xué)生的請假數(shù)據(jù),該模塊包含了高校學(xué)生發(fā)起的所有請假信息,經(jīng)過學(xué)生所在行政班班主任審核后生效。同時(shí),在該模塊當(dāng)中,也可以對這些請假數(shù)據(jù)進(jìn)行搜索、查看以及修改。
3.2 數(shù)據(jù)庫設(shè)計(jì)
3.2.1 用戶配置表
3.2.2 學(xué)生檔案表
3.2.3 教師檔案表
3.2.4 學(xué)生請假表
3.2.5 考勤檔案表
四、系統(tǒng)展示
五、核心代碼
5.1 發(fā)起考勤簽到
@RequestMapping(value = "/addAttendance", method = RequestMethod.GET)
@ApiOperation(value = "發(fā)起簽到")
public Result<Attendance> addAttendance(@RequestParam String classId, @RequestParam String date, @RequestParam String type, @RequestParam String ansNumber, @RequestParam String startTime, @RequestParam String endTime, @RequestParam String title, @RequestParam String remark){
User currUser = securityUtil.getCurrUser();
ClassArchives ca = iClassArchivesService.getById(classId);
if(ca == null) {
return ResultUtil.error("班級不存在");
}
Attendance at = new Attendance();
at.setTeacherId(currUser.getId());
at.setTeacherName(currUser.getNickname());
at.setTitle(title);
at.setClassId(ca.getId());
at.setClassTitle(ca.getClassName());
at.setDate(date);
at.setStartTime(startTime);
at.setEndTime(endTime);
at.setType(type);
at.setNumber(ansNumber);
at.setRemark(remark);
at.setStatus("正常");
iAttendanceService.saveOrUpdate(at);
AttendanceClass ac = new AttendanceClass();
ac.setAttendanceId(at.getId());
ac.setClassId(classId);
iAttendanceClassService.saveOrUpdate(ac);
QueryWrapper<StudentArchives> stuQw = new QueryWrapper<>();
stuQw.eq("class_id",classId);
List<StudentArchives> studentArchivesList = iStudentArchivesService.list(stuQw);
for (StudentArchives sa : studentArchivesList) {
AttendanceItem item = new AttendanceItem();
item.setAttendanceId(at.getId());
item.setAttendanceName(at.getTitle());
item.setStudentId(sa.getId());
item.setStudentName(sa.getUserName());
item.setStudentNumber(sa.getStudyNumber());
item.setTeacherId(currUser.getId());
item.setTeacherName(currUser.getNickname());
item.setDate(date);
item.setStartTime(startTime);
item.setEndTime(endTime);
item.setStatus("未參與");
iAttendanceItemService.saveOrUpdate(item);
}
return ResultUtil.success();
}
5.2 考勤補(bǔ)錄
@RequestMapping(value = "/buLu", method = RequestMethod.POST)
@ApiOperation(value = "考勤補(bǔ)錄")
public Result<Object> buLu(@RequestParam String id){
AttendanceItem ai = iAttendanceItemService.getById(id);
if(ai != null) {
ai.setStatus("已參與");
iAttendanceItemService.saveOrUpdate(ai);
}
return ResultUtil.success();
}
5.3 學(xué)生請假
@RequestMapping(value = "/addStudentLeaveOnApp", method = RequestMethod.GET)
@ApiOperation(value = "新增請假-移動端")
public Result<Object> addStudentLeaveOnApp(@RequestParam String userId,@RequestParam String type,@RequestParam String startTime,@RequestParam String endTime,@RequestParam String reason,@RequestParam String remark) {
User currUser = iUserService.getById(userId);
if(currUser == null) {
return ResultUtil.error("用戶不存在");
}
QueryWrapper<StudentArchives> stuQw = new QueryWrapper<>();
stuQw.eq("user_id",currUser.getId());
StudentArchives sa = iStudentArchivesService.getOne(stuQw);
if(sa == null) {
return ResultUtil.error("非學(xué)生賬號");
}
StudentLeave leave = new StudentLeave();
leave.setType(type);
leave.setStartTime(startTime);
leave.setEndTime(endTime);
leave.setStatus("待審批");
leave.setReason(reason);
leave.setStudentId(sa.getId());
leave.setStudentName(sa.getUserName());
leave.setRemark(remark);
iStudentLeaveService.saveOrUpdate(leave);
return ResultUtil.success();
}
5.4 考勤簽到小程序界面
<view class="page-body">
<view class="page-section page-section-gap">
<map
id="myMap"
style="width: 100%; height: 300px;"
latitude="{{latitude}}"
longitude="{{longitude}}"
markers="{{markers}}"
covers="{{covers}}"
show-location
></map>
</view>
<view class="page-body">
<view class="page-section">
<view class="weui-cells__title">考勤數(shù)字</view>
<view class="weui-cells weui-cells_after-title">
<view class="weui-cell weui-cell_input">
<input class="weui-input" auto-focus placeholder="請輸入老師約定的數(shù)字" value="{{myNumber}}" bindblur="changeInputNumber"/>
</view>
</view>
</view>
</view>
<view class="btn-area" style="margin-top: 10px;">
<button bindtap="moveToLocation2" class="page-body-button" type="primary">刷新定位</button>
<button bindtap="moveToLocation" class="page-body-button" type="primary">完成打卡</button>
</view>
<view wx:for="{{cardList}}" wx:key="index" wx:for-item="item">
待簽到{{index}} : {{item.attendanceName}}
</view>
</view>
5.5 小程序登錄頁面
<!-- 鄭為中 -->
<!-- 登入界面的HTML文件 -->
<view class="page">
<view class="page__hd">
<view class="page__title">班級考勤系統(tǒng)</view>
<view class="page__desc">請?zhí)峁┠南嚓P(guān)信息,幫助我們核對您的身份</view>
</view>
<view class="section">
</view>
<view class="swiper-tab">
<view bindtap="swithNav" wx:for="{{tabCont}}" wx:key="item.index" class="swiper-tab-list {{currentTab==item.index?'active':''}}" data-current='{{item.index}}'>{{item.title}}</view>
</view>
<radio-group bindchange="changeRadioFx">
<radio value="學(xué)生" checked>學(xué)生</radio>
<radio value="學(xué)習(xí)委員">學(xué)習(xí)委員</radio>
<radio value="教師">教師</radio>
</radio-group>
<swiper class="swiper-box" current="{{currentTab}}" duration="300" style="height:420px" bindchange="GetCurrentTab" data-current='6'>
<swiper-item wx:for="{{tabCont}}" wx:key="item.index">
<view wx:if="{{item.index==0}}">
<view class="section">
</view>
<button type="primary" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">
手機(jī)一鍵登入
</button>
</view>
<view wx:if="{{item.index==1}}">
<view class="section">
<input placeholder="登入賬號" bindblur="logincode" />
</view>
<view class="section">
<input placeholder="登入密碼" bindblur="loginpassword" password="true" />
</view>
<view class="section"></view>
<view wx:if='{{islogin==""}}' class='btn_box'>
<button type="primary" bindtap="loginTo">登入</button>
</view>
<view wx:else class='btn_box'>
<button type="primary" bindtap="returnmain">退出</button>
</view>
</view>
</swiper-item>
</swiper>
</view>
六、免責(zé)說明
- 本項(xiàng)目僅供個(gè)人學(xué)習(xí)使用,商用授權(quán)請聯(lián)系博主,否則后果自負(fù)。
- 博主擁有本軟件構(gòu)建后的應(yīng)用系統(tǒng)全部內(nèi)容所有權(quán)及獨(dú)立的知識產(chǎn)權(quán),擁有最終解釋權(quán)。
- 如有問題,歡迎在倉庫 Issue 留言,看到后會第一時(shí)間回復(fù),相關(guān)意見會酌情考慮,但沒有一定被采納的承諾或保證。
下載本系統(tǒng)代碼或使用本系統(tǒng)的用戶,必須同意以下內(nèi)容,否則請勿下載!文章來源:http://www.zghlxwxcb.cn/news/detail-835403.html
- 出于自愿而使用/開發(fā)本軟件,了解使用本軟件的風(fēng)險(xiǎn),且同意自己承擔(dān)使用本軟件的風(fēng)險(xiǎn)。
- 利用本軟件構(gòu)建的網(wǎng)站的任何信息內(nèi)容以及導(dǎo)致的任何版權(quán)糾紛和法律爭議及后果和博主無關(guān),博主對此不承擔(dān)任何責(zé)任。
- 在任何情況下,對于因使用或無法使用本軟件而導(dǎo)致的任何難以合理預(yù)估的損失(包括但不僅限于商業(yè)利潤損失、業(yè)務(wù)中斷與業(yè)務(wù)信息丟失),博主概不承擔(dān)任何責(zé)任。
- 必須了解使用本軟件的風(fēng)險(xiǎn),博主不承諾提供一對一的技術(shù)支持、使用擔(dān)保,也不承擔(dān)任何因本軟件而產(chǎn)生的難以預(yù)料的問題的相關(guān)責(zé)任。
文章來源地址http://www.zghlxwxcb.cn/news/detail-835403.html
到了這里,關(guān)于Java實(shí)現(xiàn)班級考勤管理系統(tǒng) JAVA+Vue+SpringBoot+MySQL的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!