网上评教系统app(IDEA,SpringBoot,SSM,MySQL)+全套视频教程

发布于:2022-12-05 ⋅ 阅读:(572) ⋅ 点赞:(0)

【项目功能介绍】

        本系统包含后台管理和前端app双端系统,后台管理的功能包含: 登录, 退出, 修改管理员信息(基本信息与头像),资源管理, 角色管理,资源权限分配, 数据字典管理,学生管理,班级管理,教师管理,课程管理;   app端功能包含学生与老师二种角色, 学生功能:登录,退出, 学生所有学习的课程列表,课程相应信息及课程教师信息展示,学生给教师评分功能,学生成绩排名功能,  用户基本信息管理, 用户头像修改, 密码修改  老师功能:登录,退出, 老师所有授课的课程列表,课程相应信息及课程教师信息展示,老师评价信息,学生成绩设置, 用户基本信息管理, 用户头像修改, 密码修改

代码下载: 

链接:https://pan.baidu.com/s/12BCbLbIF8VioVYACwNicHQ 
提取码:8888 

【项目视频教程

    视频教程每个课时包含的内容见下图, 该套教程具有非常高的知识价值 并且 适合以下人群:

    A. 想了解并且学习代码实现逻辑的同学

    B. 想对代码进行二次开发的同学

    C. 在课题设计和毕业设计中,需要对老师问答做到得心应手的同学

    D.做论文时,需要技术和业务层面帮助进行文字描述以及绘制流程图(时序图, ER图, 原理图)的同学

【项目包含内容

【运行环境】  IDEA, JDK1.8, MAVEN, AndroidStudio

【技术栈】

    Web端                                

    后台前端:layui,js、jQuery、css、html       

    后台框架:Java、Spring boot、Spring Mvc、Mybatis Plus、Shiro、ajax

    数据库:Mysql5.7

    App客户端

    前端框架:xml、LinearLayout、RelativeLayout

    后台框架:OkHttp、fastJson   

【部分代码】

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="cn.xiaoph.apps">

    <!-- Required -->
    <permission
        android:name="cn.xiaoph.apps.permission.JPUSH_MESSAGE"
        android:protectionLevel="signature" />

    <!-- Required  一些系统要求的权限,如访问网络等-->
    <uses-permission android:name="cn.xiaoph.apps.permission.JPUSH_MESSAGE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <uses-permission
        android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <!-- Optional for location -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />

    <application
        android:name=".Application"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon,android:theme,android:allowBackup,android:label,android:supportsRtl">
        <meta-data
            android:name="domain_name"
            android:value="192.168.0.103:8080" />
        <meta-data
            android:name="timeout"
            android:value="5000" />

        <activity android:name=".activity.LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activity.UserInfoActivity" />
        <activity android:name=".activity.UpdatePwdActivity" />
        <activity android:name=".activity.UpdateNiceActivity" />
        <activity android:name=".activity.UpdateEmailActivity" />
        <activity android:name=".activity.ViewUserActivity" />
        <activity android:name=".activity.HomeActivity" />
        <activity android:name=".activity.RegisterActivity" />
        <activity android:name=".activity.UpdatePhoneActivity" />

        <!-- Rich push 核心功能 since 2.0.6-->
        <activity
            android:name="cn.jpush.android.ui.PopWinActivity"
            android:exported="false"
            android:theme="@style/MyDialogStyle"></activity>

        <!-- Required SDK核心功能-->
        <activity
            android:name="cn.jpush.android.ui.PushActivity"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="cn.jpush.android.ui.PushActivity" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="cn.xiaoph.apps" />
            </intent-filter>
        </activity>
        <activity android:name=".activity.ChatActivity" />
        <activity android:name=".activity.ViewTeacherCourseActivity" />
        <activity android:name=".activity.ViewStudentCourseActivity" />

        <!-- Required SDK 核心功能-->
        <!-- 可配置android:process参数将PushService放在其他进程中 -->
        <service
            android:name="cn.jpush.android.service.PushService"
            android:exported="false"
            android:process=":pushcore">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTER" />
                <action android:name="cn.jpush.android.intent.REPORT" />
                <action android:name="cn.jpush.android.intent.PushService" />
                <action android:name="cn.jpush.android.intent.PUSH_TIME" />
            </intent-filter>
        </service>
        <!-- since 3.0.9 Required SDK 核心功能-->
        <provider
            android:name="cn.jpush.android.service.DataProvider"
            android:authorities="cn.xiaoph.apps.DataProvider"
            android:exported="false"
            android:process=":pushcore" />

        <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
        <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
        <service
            android:name="cn.jpush.android.service.DaemonService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.DaemonService" />
                <category android:name="cn.xiaoph.apps" />
            </intent-filter>

        </service>
        <!-- since 3.1.0 Required SDK 核心功能-->
        <provider
            android:name="cn.jpush.android.service.DownloadProvider"
            android:authorities="cn.xiaoph.apps.DownloadProvider"
            android:exported="true" />
        <!-- Required SDK核心功能-->
        <receiver
            android:name="cn.jpush.android.service.PushReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter android:priority="1000">
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />   <!--Required  显示通知栏 -->
                <category android:name="cn.xiaoph.apps" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <!-- Optional -->
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />

                <data android:scheme="package" />
            </intent-filter>
        </receiver>

        <!-- Required SDK核心功能-->
        <receiver
            android:name="cn.jpush.android.service.AlarmReceiver"
            android:exported="false" />

        <!-- User defined.  For test only  用户自定义的广播接收器-->
        <receiver
            android:name="cn.xiaoph.apps.jpush.MyReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required  用户注册SDK的intent-->
                <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required  用户接收SDK消息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required  用户接收SDK通知栏信息的intent-->
                <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required  用户打开自定义通知栏的intent-->
                <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收网络变化 连接/断开 since 1.6.3 -->
                <category android:name="cn.xiaoph.apps" />
            </intent-filter>
        </receiver>

        <!-- User defined.  For test only  用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调-->
        <receiver android:name="cn.xiaoph.apps.jpush.MyJPushMessageReceiver">
            <intent-filter>
                <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
                <category android:name="cn.xiaoph.apps"></category>
            </intent-filter>
        </receiver>
        <!-- Required  . Enable it you can get statistics data with channel -->
        <meta-data
            android:name="JPUSH_CHANNEL"
            android:value="developer-default" />
        <meta-data
            android:name="JPUSH_APPKEY"
            android:value="9ab81e5c632e870caa0bdc97" /> <!--  </>值来自开发者平台取得的AppKey-->
    </application>

</manifest>

LoginController:

package com.myway.platform.controller.v1.restful;

import com.myway.platform.api.ReturnResult;
import com.myway.platform.controller.BaseController;
import com.myway.platform.utils.MD5Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author bruce
 * @since 2020/4/25 0025 14:43
 */
@Slf4j
@RestController
public class LoginController extends BaseController {

    @PostMapping("login")
    public ReturnResult login(String account, String password, String code) {
        ReturnResult result = new ReturnResult();

//        Object verificationCode = request().getSession().getAttribute("code");
//        if (!StringUtils.isEmpty(verificationCode) && verificationCode.equals(code.toUpperCase())){
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(account, MD5Util.MD5Encode(password, "utf-8"));
            subject.login(usernamePasswordToken);
            String token = SecurityUtils.getSubject().getSession().getId().toString();
            result.set("token", token);
            result.set("mapper", "/master");
//        }else {
//            result.setErrorMsg("验证码错误");
//            result.rollback();
//        }
        return result;
    }

    @PostMapping("logout")
    public ReturnResult logout() {
        ReturnResult result = new ReturnResult();
        SecurityUtils.getSubject().logout();
        result.commit();
        return result;
    }

}

【项目代码截图】

【数据库截图】

【项目运行截图】

                                                                                                                                                       

正在上传…重新上传取消

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到