基于SpringBoot+Vue+小程序+Android的智慧校园电子班牌系统源代码示例

简介: 本系统基于SpringBoot+Vue+微信小程序+Android原生开发,构建多端协同的智慧校园电子班牌平台,支持课表查询、考勤签到、通知推送、班级风采展示及家校互动,通过RESTful API与WebSocket实现实时数据同步,具备高扩展性与工程落地性。

构建智慧校园电子班牌系统:基于SpringBoot+Vue+小程序+Android的完整解决方案

一、系统概述

智慧校园电子班牌系统是一套打通教室、学生、家长和学校管理者的综合性信息平台。系统以电子班牌为前端展示终端,配合教师端Web管理后台、学生/家长微信小程序,实现课表查询、考勤签到、通知发布、班级风采展示、家校互动等功能。后端采用Java SpringBoot框架,前端使用Vue.js,移动端小程序原生开发,电子班牌基于Android(Java)原生开发,真正做到多端统一、数据实时同步。

二、系统架构

┌─────────────────────────────────────────────────┐
│                  电子班牌 (Android Java)          │
│              课表展示 / 人脸考勤 / 通知滚动         │
└────────────────────┬────────────────────────────┘
                     │ HTTP/WebSocket
┌────────────────────┴────────────────────────────┐
│           后端服务 (SpringBoot + MyBatis)         │
│     RESTful API / JWT鉴权 / 数据同步 / 消息推送    │
└────────┬───────────────────────────┬────────────┘
          │                           │
┌─────────┴─────────┐       ┌─────────┴─────────┐
│  Web管理端 (Vue)   │       │  小程序 (原生)     │
│ 班级/用户/课表管理  │       │ 通知/考勤/请假     │
└───────────────────┘       └───────────────────┘

三、后端核心实现 (SpringBoot)

1. 项目依赖 (pom.xml 关键部分)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

2. 实体类示例 – 课表信息

@Data
@TableName("schedule")
public class Schedule {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String className;   // 班级名称
    private Integer weekday;    // 星期几 (1-7)
    private Integer period;     // 第几节课
    private String courseName;
    private String teacher;
    private String classroom;
    private Date createTime;
}

3. 控制器 – 班牌数据接口

@RestController
@RequestMapping("/api/board")
public class BoardController {
    @Autowired
    private ScheduleService scheduleService;
    @Autowired
    private NoticeService noticeService;
    // 获取指定班级今日课表
    @GetMapping("/todaySchedule")
    public Result getTodaySchedule(@RequestParam String className) {
        int todayWeekday = LocalDate.now().getDayOfWeek().getValue();
        List<Schedule> list = scheduleService.lambdaQuery()
                .eq(Schedule::getClassName, className)
                .eq(Schedule::getWeekday, todayWeekday)
                .orderByAsc(Schedule::getPeriod)
                .list();
        return Result.success(list);
    }
    // 获取最新3条通知
    @GetMapping("/latestNotices")
    public Result getLatestNotices(@RequestParam String className) {
        List<Notice> notices = noticeService.lambdaQuery()
                .eq(Notice::getTargetClass, className)
                .orderByDesc(Notice::getCreateTime)
                .last("limit 3")
                .list();
        return Result.success(notices);
    }
}

4. WebSocket 实现实时推送(通知到达时主动刷新班牌)

@Component
@ServerEndpoint("/ws/board/{classId}")
public class WebSocketServer {
    private static ConcurrentHashMap<String, Session> sessionMap = new ConcurrentHashMap<>();
    @OnOpen
    public void onOpen(Session session, @PathParam("classId") String classId) {
        sessionMap.put(classId, session);
    }
    // 推送消息到指定班级班牌
    public static void pushNotice(String classId, String message) {
        Session session = sessionMap.get(classId);
        if (session != null && session.isOpen()) {
            session.getAsyncRemote().sendText(message);
        }
    }
}

四、电子班牌端 (Android Java)

电子班牌运行在教室门口的安卓设备上,主要功能:展示课表、倒计时、天气、滚动通知、考勤打卡。

1. 网络请求封装 (Retrofit + Gson)

// ApiService.java
public interface ApiService {
    @GET("/api/board/todaySchedule")
    Call<List<Schedule>> getTodaySchedule(@Query("className") String className);
    @GET("/api/board/latestNotices")
    Call<List<Notice>> getLatestNotices(@Query("className") String className);
}
// RetrofitClient.java
public class RetrofitClient {
    private static final String BASE_URL = "http://your-server-ip:8080/";
    private static Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    public static ApiService getApiService() {
        return retrofit.create(ApiService.class);
    }
}

2. 课表展示Activity核心代码

public class ScheduleActivity extends AppCompatActivity {
    private TextView tvClassName;
    private GridLayout gridSchedule;
    private String className = "高一(1)班";  // 实际应从配置或扫码获取
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_schedule);
        tvClassName = findViewById(R.id.tv_class_name);
        gridSchedule = findViewById(R.id.grid_schedule);
        tvClassName.setText(className);
        loadSchedule();
    }
    private void loadSchedule() {
        Call<List<Schedule>> call = RetrofitClient.getApiService().getTodaySchedule(className);
        call.enqueue(new Callback<List<Schedule>>() {
            @Override
            public void onResponse(Call<List<Schedule>> call, Response<List<Schedule>> response) {
                if (response.isSuccessful() && response.body() != null) {
                    displaySchedule(response.body());
                }
            }
            @Override
            public void onFailure(Call<List<Schedule>> call, Throwable t) {
                Toast.makeText(ScheduleActivity.this, "网络错误", Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void displaySchedule(List<Schedule> schedules) {
        // 清空gridLayout,动态添加课程卡片
        for (Schedule s : schedules) {
            TextView courseView = new TextView(this);
            courseView.setText(s.getCourseName() + "\n" + s.getTeacher() + "@" + s.getClassroom());
            courseView.setGravity(Gravity.CENTER);
            courseView.setBackgroundResource(R.drawable.course_bg);
            courseView.setPadding(16,16,16,16);
            gridSchedule.addView(courseView);
        }
    }
}

3. WebSocket 客户端实时接收通知

// 在Application或主Activity中初始化
WebSocketConnect();
private void WebSocketConnect() {
    String wsUrl = "ws://your-server-ip:8080/ws/board/class_101";
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder().url(wsUrl).build();
    WebSocket ws = client.newWebSocket(request, new WebSocketListener() {
        @Override
        public void onMessage(@NotNull WebSocket webSocket, @NotNull String text) {
            runOnUiThread(() -> {
                // 收到新通知,刷新界面
                Toast.makeText(ScheduleActivity.this, "新通知:" + text, Toast.LENGTH_SHORT).show();
                loadLatestNotices();
            });
        }
    });
}

五、前端管理端 (Vue3 + Element Plus)

教师或管理员通过Web端管理班级信息、发布通知、导入课表。

1. 课表管理页面示例

<template>
  <div>
    <el-table :data="scheduleList" border>
      <el-table-column prop="weekday" label="星期"></el-table-column>
      <el-table-column prop="period" label="节次"></el-table-column>
      <el-table-column prop="courseName" label="课程"></el-table-column>
      <el-table-column prop="teacher" label="教师"></el-table-column>
      <el-table-column label="操作">
        <template #default="scope">
          <el-button @click="editSchedule(scope.row)">编辑</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'
const scheduleList = ref([])
const loadSchedules = async () => {
  const res = await axios.get('/api/schedule/list', { params: { className: '高一(1)班' } })
  scheduleList.value = res.data.data
}
onMounted(() => {
  loadSchedules()
})
</script>

六、微信小程序端(原生开发)

学生/家长通过小程序查看通知、课表、考勤记录、提交请假申请。

1. 获取课表(小程序JS)

// pages/schedule/schedule.js
Page({
  data: {
    scheduleList: []
  },
  onLoad() {
    this.loadSchedule()
  },
  loadSchedule() {
    wx.request({
      url: 'https://your-domain/api/board/todaySchedule',
      data: { className: '高一(1)班' },
      success: (res) => {
        if (res.data.code === 200) {
          this.setData({ scheduleList: res.data.data })
        }
      }
    })
  }
})

2. 小程序页面展示

<!-- schedule.wxml -->
<view class="container">
  <block wx:for="{{scheduleList}}" wx:key="index">
    <view class="course-card">
      <text>{{item.period}}节</text>
      <text>{{item.courseName}}</text>
      <text>{{item.teacher}}</text>
    </view>
  </block>
</view>

七、数据库表设计(MySQL关键表)

-- 班级表
CREATE TABLE `class` (
  `id` int NOT NULL AUTO_INCREMENT,
  `class_name` varchar(50) NOT NULL,
  `grade` varchar(20),
  PRIMARY KEY (`id`)
);
-- 课表
CREATE TABLE `schedule` (
  `id` int NOT NULL AUTO_INCREMENT,
  `class_name` varchar(50),
  `weekday` tinyint,
  `period` tinyint,
  `course_name` varchar(100),
  `teacher` varchar(50),
  `classroom` varchar(50),
  PRIMARY KEY (`id`)
);
-- 通知表
CREATE TABLE `notice` (
  `id` int NOT NULL AUTO_INCREMENT,
  `title` varchar(200),
  `content` text,
  `target_class` varchar(50),
  `create_time` datetime,
  PRIMARY KEY (`id`)
);

八、系统部署与运行

  1. 后端:打包为jar包 java -jar smart-campus.jar,确保MySQL和Redis已启动。
  2. Web前端npm run build 后放置Nginx。
  3. 电子班牌:Android Studio编译APK,安装到平板或一体机,配置服务器地址。
  4. 小程序:微信开发者工具上传,配置合法域名。

九、总结

本智慧校园电子班牌系统利用SpringBoot高效开发后端API,Vue提供便捷的管理界面,小程序满足移动端需求,Android原生程序保证班牌端稳定流畅。多端采用统一数据接口和WebSocket实时推送,实现了课表同步、通知即时到达、考勤记录互通等智慧校园核心功能。开发者可根据此架构快速扩展如人脸识别考勤、家校聊天、行为评价等模块。

源码结构参考

smart-campus/
├── backend/          # SpringBoot 项目
├── web-admin/        # Vue 管理端
├── miniprogram/      # 微信小程序
└── android-board/    # 电子班牌Android源码

以上代码示例均经过精简,实际项目中需完善异常处理、权限校验、数据缓存等细节。

目录
相关文章
|
7月前
|
人工智能 小程序 安全
【节省百万研发】开箱即用的智慧校园平台源码:含 SaaS 后台、小程序、Android 班牌全套
智慧校园电子班牌系统是一套面向中小学的SaaS云平台解决方案,含Web管理端(Vue2+Element)、微信小程序(教师/家长端)及Android班牌终端,支持考勤、课表、通知、考试管理等全场景应用,采用Spring Boot+MySQL+Redis架构,保障安全高效。
526 0
|
机器学习/深度学习 调度
详解 Diffusion (扩散) 模型
详解 Diffusion (扩散) 模型
2191 0
|
5月前
|
机器学习/深度学习 人工智能 算法
学生3类课堂行为(举手、阅读、书写)识别目标检测数据集(近 4200 张图片已标注)| YOLO训练数据集 AI视觉检测
通过该数据集,研究人员可以开展 课堂行为检测、学习状态分析、智慧教室监测系统开发 等相关研究任务。例如,通过训练目标检测模型识别学生的举手、阅读和书写行为,可以实现课堂参与度分析、学习状态监测以及智能教学辅助等应用,从而为智慧教育与教育数据分析提供可靠的数据基础。
|
2月前
|
存储 人工智能 算法
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
TrendRadar 是一个轻量级、易部署的热点新闻聚合与推送工具。它能够从知乎、抖音、B站、微博、百度、华尔街见闻等11个主流平台抓取热搜榜单,然后根据你设定的关键词进行智能筛选,最终将你最关心的内容推送到手机或邮箱。
693 13
 告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
|
编解码 人工智能 自然语言处理
AIGC基础模型——扩散模型(Diffusion Model)
【1月更文挑战第23天】AIGC基础模型——扩散模型(Diffusion Model)
1230 1
AIGC基础模型——扩散模型(Diffusion Model)
|
4月前
|
存储 Linux 数据安全/隐私保护
自建私人云盘|OpenList 保姆级部署,吊打各大网盘
OpenList是开源网盘聚合工具,支持阿里云盘、百度网盘、夸克等数十种存储服务。一键Docker部署,统一管理多网盘文件,视频直链播放不耗服务器带宽,隐私安全有保障。(239字)
|
6月前
|
机器学习/深度学习 人工智能 监控
基于YOLO26的学生课堂行为检测系统(中英文双版) | 附完整源码与效果演示
本项目基于YOLO26+PyQt5,构建中英文双语可切换的学生课堂行为检测系统,实时识别举手、阅读、写作、用手机、低头、睡觉6类行为,支持图片/视频/摄像头输入、模型训练与评估,含完整源码、预训练模型及数据集。
|
数据可视化 图形学 vr&ar
Unity3D 2023 开发软件完整部署指南:安装详细教程
Unity3D 2023是Unity最新跨平台3D创作引擎,升级URP/HDRP渲染、支持DX12光线追踪与PS VR2/Quest 2;集成Muse/Sentis AI工具,支持文生图与本地AI推理;优化光照烘焙、音频系统与UI Toolkit,显著提升开发效率。
1444 0
Unity3D 2023 开发软件完整部署指南:安装详细教程
|
12月前
|
负载均衡 网络协议 Linux
网络ping不通到底有多少原因?一文搞明白!
网络ping不通是网络中出现频率最高的故障之一,同时也是最让人抓狂的故障,谁没遇到过?今天就和你细说下ping不通的原因,看看能不能和你遇到的情况对上号。
9635 0
|
XML Java Android开发
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer
GSYVideoPlayer是一款国产移动端视频播放器,支持弹幕、滤镜、广告等功能,采用IJKPlayer、Media3(EXOPlayer)、MediaPlayer及AliPlayer多种内核。截至2024年8月,其GitHub星标数达2万。集成时需使用新版Android Studio,并按特定步骤配置依赖与权限。提供了NormalGSYVideoPlayer、GSYADVideoPlayer及ListGSYVideoPlayer三种控件,支持HLS、RTMP等多种直播链接。
880 18
FFmpeg开发笔记(五十二)移动端的国产视频播放器GSYVideoPlayer