计算机毕业设计选题推荐-课程学习微信小程序/安卓APP-项目实战

news2024/11/19 22:33:21

作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

文章目录

  • 一、前言
  • 二、开发环境
  • 三、系统界面展示
  • 四、代码参考
  • 五、论文参考
  • 六、系统视频
  • 结语

一、前言

在当今数字化时代,互联网技术的快速发展以及移动设备的普及,为在线教育提供了新的契机。微信小程序和安卓APP等移动应用已经成为人们获取教育资源的重要途径。特别是在高校环境中,学生、老师和管理人员都需要一个便捷的平台来进行课程管理、学习和交流。因此,开发一款针对课程学习的微信小程序/安卓APP具有鲜明的必要性。

尽管目前已经存在一些课程管理工具,但它们主要集中在简单的信息发布和作业提交上,无法满足多元化和个性化的学习需求。此外,这些工具通常只提供基础的课程信息管理,缺乏对课程学习和作业批改的整合,使得学习过程变得繁琐且低效。因此,我们需要一个更加便捷的解决方案来解决这些问题。

本课题旨在开发一款针对课程学习的微信小程序/安卓APP,以满足学生、老师和管理人员在不同场景下的需求。具体功能包括课程分类管理、课程信息管理、课程学习管理、课后作业管理以及作业批改管理等。通过这款应用,用户可以轻松地浏览和选择课程,管理学习进度,以及跟进和评估作业完成情况。

本课题的研究意义在于提供了一个集成的在线学习平台,可以大大提高学生的学习效率,增强学习的自主性。同时,对于老师和管理人员来说,这款应用也提供了方便的工具来管理和监控学生的学习进度。此外,通过数据分析和挖掘,这款应用还可以帮助用户更好地理解学习过程,优化学习策略,提高学习效果。

二、开发环境

  • 开发语言:Java
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SpringBoot
  • 前端:微信小程序/Android+uniapp+Vue

三、系统界面展示

  • 课程学习微信小程序/安卓APP界面展示:
    课程学习微信小程序/安卓APP-课程信息
    课程学习微信小程序/安卓APP-课程详情
    课程学习微信小程序/安卓APP-提交学习进度
    课程学习微信小程序/安卓APP-提交作业任务
    课程学习微信小程序/安卓APP-课程信息管理
    课程学习微信小程序/安卓APP-课后作业管理
    课程学习微信小程序/安卓APP-课程分类管理

四、代码参考

  • 项目实战代码参考:
@Controller
@RequestMapping("/admin")
public class AdminController {

    @Resource(name = "studentServiceImpl")
    private StudentService studentService;

    @Resource(name = "teacherServiceImpl")
    private TeacherService teacherService;

    @Resource(name = "courseServiceImpl")
    private CourseService courseService;

    @Resource(name = "studentCourseServiceImpl")
    private StudentCourseService studentCourseService;

    @Resource(name = "userloginServiceImpl")
    private UserloginService userloginService;

    /* ----- 普通方法区 START ----- */

    /**
     * List<Course>转List<CourseCustom>
     * @param courseList
     * @return
     * @throws Exception
     */
    List<CourseCustom> getCourseCustomList(List<Course> courseList) throws Exception{
        List<CourseCustom> list = new ArrayList<CourseCustom>();

        for (Course course : courseList) {
            CourseCustom courseCustom = new CourseCustom();
            BeanUtils.copyProperties(course,courseCustom);

            Integer teacherId = course.getTeacherId();

            if(teacherId != null) {
                Teacher teacher = teacherService.findById(teacherId);
                String teacherName = teacher.getName();
                courseCustom.setTeacherName(teacherName);
            } else {
                courseCustom.setTeacherName("");
            }

            list.add(courseCustom);
        }
        return list;
    }

    /**
     * Course转CourseCustom
     * @param course
     * @return
     * @throws Exception
     */
    CourseCustom getCourseCustom(Course course) throws Exception{
        CourseCustom courseCustom = new CourseCustom();
        BeanUtils.copyProperties(course,courseCustom);

        Integer teacherId = course.getTeacherId();

        if(teacherId != null) {
            Teacher teacher = teacherService.findById(teacherId);
            String teacherName = teacher.getName();
            courseCustom.setTeacherName(teacherName);
        } else {
            courseCustom.setTeacherName("");
        }
        return courseCustom;
    }

    /* ----- 普通方法区 END ----- */


    /* ----- 课程管理区 START ----- */

    @RequestMapping("/showCourse")
    public String showCourse(Model model, Integer page) throws Exception {

        List<Course> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(courseService.getCountCourse());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = courseService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = courseService.findByPaging(page);
        }

        List<CourseCustom> courseCustomList = getCourseCustomList(list);

        model.addAttribute("courseCustomList", courseCustomList);
        model.addAttribute("pagingVO", pagingVO);

        return "admin/showCourse";

    }

    @RequestMapping(value = "/editCourse", method = {RequestMethod.GET})
    public String editCourseUI(Integer id, Model model) throws Exception {
        if (id == null) {
            return "redirect:/admin/showCourse";
        }
        Course course = courseService.findById(id);
        if (course == null) {
            throw new CustomException("未找到该课程");
        }
        List<Teacher> list = teacherService.findAll();

        model.addAttribute("teacherList", list);
        model.addAttribute("course", course);

        return "admin/editCourse";
    }

    @RequestMapping(value = "/editCourse", method = {RequestMethod.POST})
    public String editCourse(Course course) throws Exception {

        courseService.upadteById(course);

        return "redirect:/admin/showCourse";
    }

    @RequestMapping("/removeCourse")
    public String removeCourse(Integer id) throws Exception {
        if (id == null) {
            return "admin/showCourse";
        }

        boolean flag = courseService.removeById(id);

        //删除失败,说明selectCourse表中存在关联数据,先删除关联信息
        while(flag == false) {
            List<StudentCourse> lists = studentCourseService.findByCourseID(id);
            for (StudentCourse studentCourse: lists) {
                studentCourseService.remove(studentCourse);
            }
            flag = courseService.removeById(id);
        }

        return "redirect:/admin/showCourse";
    }

    @RequestMapping(value = "/selectCourse", method = {RequestMethod.POST})
    public String selectCourse(String name, Model model) throws Exception {

        List<Course> list = courseService.findByName(name);

        List<CourseCustom> courseCustomList = getCourseCustomList(list);

        model.addAttribute("courseCustomList", courseCustomList);

        return "admin/showCourse";
    }

    @RequestMapping(value = "/addCourse", method = {RequestMethod.GET})
    public String addCourseUI(Model model) throws Exception {

        List<Teacher> list = teacherService.findAll();

        model.addAttribute("teacherList", list);

        return "admin/addCourse";
    }

    @RequestMapping(value = "/addCourse", method = {RequestMethod.POST})
    public String addCourse(Course course) throws Exception {

        courseService.save(course);

        return "redirect:/admin/showCourse";
    }

    /* ----- 课程管理区 END ----- */


    /* ----- 学生管理区 START ----- */

    @RequestMapping("/showStudent")
    public String showStudent(Model model, Integer page) throws Exception {
        List<Student> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(studentService.getCountStudent());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = studentService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = studentService.findByPaging(page);
        }

        model.addAttribute("studentList", list);
        model.addAttribute("pagingVO", pagingVO);

        return "admin/showStudent";

    }

    @RequestMapping(value = "/addStudent", method = {RequestMethod.GET})
    public String addStudentUI() throws Exception {
        return "admin/addStudent";
    }

    @RequestMapping(value = "/addStudent", method = {RequestMethod.POST})
    public String addStudent(Student student) throws Exception {
        Userlogin userlogin = null;
        if(userlogin != null) {
            throw new CustomException("该名称已被注册,无法添加!");
        } else {
            userlogin = new Userlogin();
            userlogin.setName(student.getName());
            userlogin.setPassword(SHA1Utils.entryptPassword(GlobalConstant.DEFAULT_PASSWD));
            userlogin.setRole(GlobalConstant.ROle_Type.STUDENT.getIndex());
            userloginService.save(userlogin);

            student.setId(userlogin.getId());
            student.setBalance(GlobalConstant.DEFAULT_BALANCE);
            studentService.save(student);
        }

        return "redirect:/admin/showStudent";
    }

    @RequestMapping(value = "/editStudent", method = {RequestMethod.GET})
    public String editStudentUI(Integer id, Model model) throws Exception {
        Student student = null;

        student = studentService.findById(id);
        if(student == null) {
            throw new CustomException("该用户不存在!");
        }

        model.addAttribute("student", student);

        return "admin/editStudent";
    }

    @RequestMapping(value = "/editStudent", method = {RequestMethod.POST})
    public String editStudent(Student student) throws Exception {

        Userlogin userLogin = userloginService.findById(student.getId());
        userLogin.setName(student.getName());
        userloginService.updateById(student.getId(),userLogin);

        studentService.updataById(student);

        return "redirect:/admin/showStudent";
    }

    @RequestMapping(value = "/removeStudent", method = {RequestMethod.GET} )
    public String removeStudent(Integer id) throws Exception {
        boolean flag = studentService.removeById(id);
        //flag false 表示该学生有课程,递归删除该学生课程
        while(flag == false){
            List<StudentCourse> lists = studentCourseService.findByStudentID(id);
            for (StudentCourse studentCourse: lists) {
                studentCourseService.remove(studentCourse);
            }
            flag = studentService.removeById(id);
        }

        userloginService.removeById(id);

        return "redirect:/admin/showStudent";
    }

    @RequestMapping(value = "selectStudent", method = {RequestMethod.POST})
    public String selectStudent(String name, Model model) throws Exception {

        List<Student> list = studentService.findByName(name);

        model.addAttribute("studentList", list);
        return "admin/showStudent";
    }

    /* ----- 学生管理区 END ----- */


    /* ----- 教师管理区 START ----- */

    @RequestMapping("/showTeacher")
    public String showTeacher(Model model, Integer page) throws Exception {

        List<Teacher> list = null;
        //页码对象
        PagingVO pagingVO = new PagingVO();
        //设置总页数
        pagingVO.setTotalCount(teacherService.getCountTeacher());
        if (page == null || page == 0) {
            pagingVO.setToPageNo(1);
            list = teacherService.findByPaging(1);
        } else {
            pagingVO.setToPageNo(page);
            list = teacherService.findByPaging(page);
        }

        model.addAttribute("teacherList", list);
        model.addAttribute("pagingVO", pagingVO);

        return "admin/showTeacher";

    }

    @RequestMapping(value = "/addTeacher", method = {RequestMethod.GET})
    public String addTeacherUI() throws Exception {

        return "admin/addTeacher";
    }

    @RequestMapping(value = "/addTeacher", method = {RequestMethod.POST})
    public String addTeacher(Teacher teacher) throws Exception {
        Userlogin userlogin = null;
        userlogin = userloginService.findByName(teacher.getName());
        if(userlogin != null) {
            throw new CustomException("该名称已被注册,无法注册!");
        } else {
            userlogin = new Userlogin();
            userlogin.setName(teacher.getName());
            userlogin.setPassword(SHA1Utils.entryptPassword(GlobalConstant.DEFAULT_PASSWD));
            userlogin.setRole(GlobalConstant.ROle_Type.TEACHER.getIndex());
            userloginService.save(userlogin);

            teacher.setId(userlogin.getId());
            teacherService.save(teacher);

        }
        return "redirect:/admin/showTeacher";
    }

    @RequestMapping(value = "/editTeacher", method = {RequestMethod.GET})
    public String editTeacherUI(Integer id, Model model) throws Exception {
        Teacher teacher = teacherService.findById(id);
        if (teacher == null) {
            throw new CustomException("未找到该教师");
        }
        model.addAttribute("teacher", teacher);

        return "admin/editTeacher";
    }

    @RequestMapping(value = "/editTeacher", method = {RequestMethod.POST})
    public String editTeacher(Teacher teacher) throws Exception {
        teacherService.updateById(teacher);

        return "redirect:/admin/showTeacher";
    }

    @RequestMapping("/removeTeacher")
    public String removeTeacher(Integer id) throws Exception {
        boolean flag = teacherService.removeById(id);
        if(flag == false) {
            throw new CustomException("该老师存在相应课程,无法删除");
        }
        userloginService.removeById(id);
        return "redirect:/admin/showTeacher";
    }

    @RequestMapping(value = "selectTeacher", method = {RequestMethod.POST})
    public String selectTeacher(String name, Model model) throws Exception {

        List<Teacher> list = teacherService.findByName(name);

        model.addAttribute("teacherList", list);
        return "admin/showTeacher";
    }

    /* ----- 教师管理区 END ----- */


    /* ----- 其他区 START ----- */

    @RequestMapping(value = "/logout")
    public String logout(){
        return "redirect:/logout";
    }

     /**
     * 普通用户密码重置UI处理
     * @return
     * @throws Exception
     */
    @RequestMapping("/userPasswordRest")
    public String userPasswordRestUI() throws Exception {
        return "admin/userPasswordRest";
    }

    /**
     * 普通用户密码重置处理函数
     * @param userlogin Userlogin对象
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/userPasswordRest", method = {RequestMethod.POST})
    public String userPasswordRest(Userlogin userlogin) throws Exception {

        Userlogin u = userloginService.findByName(userlogin.getName());

        if (u != null) {
            if (u.getRole() == 0) {
                throw new CustomException("该账户为管理员账户,无法修改");
            }
            u.setPassword(SHA1Utils.entryptPassword(userlogin.getPassword()));
            userloginService.updateByName(userlogin.getName(), u);
        } else {
            throw new CustomException("未找到该用户");
        }

        return "admin/userPasswordRest";
    }

    /**
     * 重置当前账户密码
     * @return
     * @throws Exception
     */
    @RequestMapping("/passwordRest")
    public String passwordRestUI() throws Exception {
        return "admin/passwordRest";
    }

    /* ----- 其他区 END ----- */
}
@Controller
public class RestPasswordController {

    @Resource(name = "userloginServiceImpl")
    private UserloginService userloginService;

    /**
     * 重置当前账户密码
     * @param oldPassword
     * @param password1
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/passwordRest", method = {RequestMethod.POST})
    public String passwordRest(String oldPassword, String password1) throws Exception {
        Subject subject = SecurityUtils.getSubject();
        String username = (String) subject.getPrincipal();

        Userlogin userlogin = userloginService.findByName(username);

        if (!SHA1Utils.validatePassword(oldPassword,userlogin.getPassword())) {
            throw new CustomException("旧密码不正确");
        } else {
            userlogin.setPassword(SHA1Utils.entryptPassword(password1));
            userloginService.updateByName(username, userlogin);
        }

        return "redirect:/logout";
    }

}

五、论文参考

  • 计算机毕业设计选题推荐-课程学习微信小程序/安卓APP论文参考:
    计算机毕业设计选题推荐-课程学习微信小程序/安卓APP论文参考

六、系统视频

课程学习微信小程序/安卓APP项目视频:

计算机毕业设计选题推荐-课程学习课微信小程序/安卓APP

结语

计算机毕业设计选题推荐-课程学习微信小程序/安卓APP-项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1204279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jmeter 性能 —— 负载阶梯场景!

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格&#xff0c;然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100&#xff0c;并发数从0开始&#xff0c;5秒内增加10个并发数&#xff0c;增加10个后持续30s&#xff0c;…

基于RK3399的室内健身魔镜方案

I 方案背景 一、健身魔镜的兴起 2020年疫情席卷全球&#xff0c;宅家是防疫的措施之一&#xff0c;因而宅家运动火爆&#xff0c;随之而来的宅家运动器材也风靡起来&#xff0c;其中包含既有颜值又具有多种功能的健身魔镜。 Ⅱ 方案介绍 一、健身魔镜的方案介绍 …

文件上传 [SUCTF 2019]CheckIn1

打开题目 我们用cmd curl --head url 查看网站使用的是什么服务器 此题用的是openresty&#xff0c;OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台 我们上传php&#xff0c;phtml的一句话木马都显示不合法 那我们试试传a.jpg的一句话木马 显示我们一句话木马内容里面…

[C++ 从入门到精通] 12.拷贝构造函数

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

22.能被7整除,并且求和。

#include<stdio.h>int main(){int i ,sum0;printf("1-1000能被7整除的数字有&#xff1a;\n");for(i1;i<1000;i){if(i%70){printf("%d ",i);sumsumi;} }printf("\n");printf("能被7整除的数字的和是&#xff1a;%d ",sum);re…

stm32 WIFI模块_8266使用

使用以上配置可以正常回应&#xff0c;其中无论勾选或者不勾选DTR/RTS都可以得到正常回应 ATCWMODE?表示查询当前WiFi状态是处于热点模式&#xff08;AP模式&#xff09;或者是连接其他WiFi的那个模式。通过图片看出这个符号不能省略。 设置AP热点命令格式&#xff1a;ATCWSAP…

手写线性表C++ vector

目录 一、vector基本概念 1.1、构造函数 1.2、析构函数 1.3、插入元素 1.4、删除元素 1.5、重载运算符 二、完整代码 一、vector基本概念 C中的vector是一种动态数组&#xff0c;它可以根据需要自动调整大小。vector是C标准模板库&#xff08;STL&#xff09;中的一个容…

通信原理板块——线性分组码之汉明码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、汉明码 (1)常见概念 代数码&…

2756基于微信小程序的图书商城系统

摘要 本文将详细介绍基于微信小程序的图书商城系统的设计和实现。该系统包括服务器端和客户端两部分&#xff0c;能够满足管理员和普通用户的需求。通过对用户需求和功能的分析&#xff0c;本文将详细阐述系统设计的关键环节&#xff0c;包括数据库设计和界面设计。最后&#…

C语言ZZULIOJ1148:组合三位数之一

题目描述 把1、2、3、4、5、6、7、8、9组合成3个3位数&#xff0c;要求每个数字仅使用一次&#xff0c;使每个3位数均为完全平方数。按从小到大的顺序输出这三个三位数。 输入:无 输出:按从小到大的顺序输出这三个三位数&#xff0c;由空格隔开。输出占一行。 提示 若一个数能表…

select在标准输出和套接字上进行监控

selectServerInTCPIPbook.c的内容如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/…

教育局档案室智慧档案库房建设方案

教育局档案室智慧档案库房建设是指教育局为了更好地保存和管理学校、教师、学生等相关档案资料&#xff0c;以及保证这些档案资料的安全性、可靠性和完整性&#xff0c;而建设的一个专门的存储、管理和保护档案资料的场所。 专久智能提供的教育局档案库房建设方案从以下几个方面…

高密度统一存储在影视后期剪辑媒资应用中的优势

影视媒体行业是存储技术发展的重要推动力。Infortrend一直专注于存储的研发&#xff0c; EonStor GS 横向扩展统一存储是适合影视应用的解决方案&#xff0c;高密度机型性能卓越&#xff0c;扩展性高&#xff0c;数据保护技术安全可靠。非常具有性价比&#xff0c;在保证性能和…

msvcp71.dll,msvcr71.dll丢失的最简单的解决方法

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是MSVCR71.dll缺失。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。本文将介绍5个修复MSVCR71.dll缺失的方案&#xff0c;帮助用户解决这一问题。 一、重新安装相关…

U盘怎么加密?U盘数据该怎么加密?

在使用U盘的过程中&#xff0c;我们会将很多重要数据存放在电脑中&#xff0c;但为了保护文件的安全性&#xff0c;我们需要使用加密来进行保护。那么&#xff0c;U盘数据该怎么加密呢&#xff1f; U盘数据加密方法 想要将普通U盘变成加密U盘&#xff0c;我们需要使用专业的U盘…

如何防止听力下降?

听力受损是不可逆的&#xff0c;一旦听力下降了是无法恢复的&#xff0c;所以当我们出现听力障碍的时候&#xff0c;我们更应该注意我们的耳朵&#xff0c;想想如何能保护我们的残余听力&#xff01; 今天来告诉大家&#xff0c;哪些事是有易于听力的&#xff0c;一起来看看吧…

企业数据备份方案:如何选择适合企业的备份方法?

企事业单位通常配备文件服务器以存储涉及单位无形资产和商业机密的重要数据文件。尽管许多文件服务器配备了Raid以防止数据丢失风险&#xff0c;但员工恶意访问或黑客入侵仍可能导致数据的删除、恶意修改或加密。因此&#xff0c;为维护数据安全&#xff0c;企业需要及时备份操…

nodejs express vue uniapp电影购票系统源码

开发技术&#xff1a; node.js&#xff0c;vscode&#xff0c;HBuilder X express vue elementui uniapp 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索电影&#xff0c;轮播图&#xff0c;电影分类&#xff0c;最近上架电影 点击电影进入电影详情&am…

基于ssm+vue协同过滤算法的电影推荐系统

基于ssmvue协同过滤算法的电影推荐系统 摘要 电影推荐系统在信息技术发展的背景下日益成为研究的焦点&#xff0c;本研究基于SSM&#xff08;Spring SpringMVC MyBatis&#xff09;框架与Vue.js技术&#xff0c;以协同过滤算法为核心&#xff0c;旨在构建一种高效、准确的电影…

软考网络工程师知识点总结(三)

目录 41、特殊地址 42、子网划分 43、CIDR路由汇聚 44、IP数据报 45、ARP协议 46、ICMP协议 47、IPv6地址表示及类型 48、IPv6地址前缀 49、IPv4过渡IPv6 50、UDP传输层协议 51、TCP传输层协议 52、TCP头部中常见字段的含义&#xff1a; 53、TCP的流量控制和拥塞控…