基于java+ssm+vue的音乐播放器微信小程序

项目介绍

科技的发展赋予了听音乐新的途径,微信小程序名词的出现改变了用户生活的习惯,同时也为管理者打开了新的市场。微信小程序也可以理解为利用小程序来解决需求,这种方式可以打破时间和地点的限制,可以为用户提供随时听歌的平台,用户可以在平台上随时找喜欢的歌曲进行播放。微信小程序的音乐播放器将用户与音乐更加紧密的结合在一起,减少时间与地点的问题。

本基于微信小程序的音乐播放器采用微信端和服务端相结合的方式进行开发。在服务端采用java语言和mysql数据库进行设计,在运行中需要idea软件的调试。本系统就是采用随听随放的理念进行开发,用户可以在系统上浏览不同歌曲,找到符合要求的歌曲就可以在线播放,也可以在线评论;评论后可以收到其它用户的回复。为了更加方便用户使用本系统,本系统中也加入了会员办理的功能,用户办理了会员后可以享受会员优惠。本系统的实现可以帮助用户听音乐,非常符合现代人的音乐需求。
在这里插入图片描述在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

4.2系统首页界面的设计实现
系统的首页可以看到标题、功能导航栏、搜索框、歌曲信息等,在首页的上方可以看到搜索框、背景图片。系统首页的功能设计效果如下图4.1所示:
在这里插入图片描述

图4.1系统首页界面的运行效果图

4.3用户注册功能的设计实现
为了保证系统的安全性和满足用户的听歌要求,用户需要先进行注册才可以进行操作,用户注册时需要注意表单信息的填写,在表单信息填写完成后,系统可以实现对表单信息进行自我检测,当检测为正确时,可以实现注册成功,当有信息检测为错误时会提示重新填写。用户注册成功后系统会把填写的表单保存到数据库中。用户注册的实现界面如下图4.2所示:
在这里插入图片描述

图4.2用户注册功能的界面实现

4.4用户登录功能的设计实现
用户注册完成后,可以点击登录功能进行登录,在登录时会进行账号和密码的数据验证,账号和密码验证正确则登录成功,账号和密码验证错误则登录失败,需要重新登录。用户登录功能的实现界面如下图4.3所示:
在这里插入图片描述

图4.3用户登录功能实现界面效果

4.5用户个人信息修改功能的设计实现
用户登录后可以对自己的个人资料进行修改维护,包括对图片的设置,在用户个人信息修改界面设置了保存按钮和退出登录按钮,方便用户提交和重新填写信息。用户个人信息修改功能的实现界面如下图4.4所示:
在这里插入图片描述

图4.4用户个人信息修改实现界面

4.6歌曲信息功能的设计实现
歌曲信息为基本的功能,歌曲信息可以按照推荐进行排名,对于歌曲信息的展示以图片展示为主,可以使用户更加的一目了然,歌曲信息的实现界面如下图4.5所示:
在这里插入图片描述

图4.5歌曲信息实现运行效果界面

4.7评价功能的设计实现
在看到喜欢的歌曲后可以在线评论。评论功能的设计界面如下图4.6所示:
在这里插入图片描述

图4.6评论功能的运行效果界面

4.8会员优惠功能界面的设计实现
用户可以通过本功能进行会员卡的信息了解。会员优惠功能的界面实现如下图4.7所示:
在这里插入图片描述

图4.7会员优惠功能的运行界面实现

4.9会员办理功能的设计实现
用户可以选择会员优惠进行会员卡的办理。会员办理功能的界面实现如下图4.8所示:
在这里插入图片描述

图4.8会员办理功能的运行效果界面

4.10我的功能的界面实现
在我的功能里可以查询会员优惠和进行会员办理以及管理会员信息、收藏信息,实现界面如下图4.9所示:
在这里插入图片描述

图4.9我的功能的实现界面

4.11管理员功能模块的设计实现
管理员可以管理用户信息、歌曲信息、会员优惠信息和会员办理信息、歌曲分类信息等。管理员的实现界面如下图4.10所示:
在这里插入图片描述

图4.10管理员功能运行效果界面

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
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.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.GequxinxiEntity;
import com.entity.view.GequxinxiView;

import com.service.GequxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 歌曲信息
 * 后端接口
 * @author 
 * @email 
 * @date 
 */
@RestController
@RequestMapping("/gequxinxi")
public class GequxinxiController {
    @Autowired
    private GequxinxiService gequxinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,GequxinxiEntity gequxinxi, 
		HttpServletRequest request){

        EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
		PageUtils page = gequxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gequxinxi), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,GequxinxiEntity gequxinxi, HttpServletRequest request){
        EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
		PageUtils page = gequxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gequxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( GequxinxiEntity gequxinxi){
       	EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( gequxinxi, "gequxinxi")); 
        return R.ok().put("data", gequxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(GequxinxiEntity gequxinxi){
        EntityWrapper< GequxinxiEntity> ew = new EntityWrapper< GequxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( gequxinxi, "gequxinxi")); 
		GequxinxiView gequxinxiView =  gequxinxiService.selectView(ew);
		return R.ok("查询歌曲信息成功").put("data", gequxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        GequxinxiEntity gequxinxi = gequxinxiService.selectById(id);
		gequxinxi.setClicknum(gequxinxi.getClicknum()+1);
		gequxinxi.setClicktime(new Date());
		gequxinxiService.updateById(gequxinxi);
        return R.ok().put("data", gequxinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        GequxinxiEntity gequxinxi = gequxinxiService.selectById(id);
		gequxinxi.setClicknum(gequxinxi.getClicknum()+1);
		gequxinxi.setClicktime(new Date());
		gequxinxiService.updateById(gequxinxi);
        return R.ok().put("data", gequxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody GequxinxiEntity gequxinxi, HttpServletRequest request){
    	gequxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gequxinxi);

        gequxinxiService.insert(gequxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody GequxinxiEntity gequxinxi, HttpServletRequest request){
    	gequxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(gequxinxi);

        gequxinxiService.insert(gequxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody GequxinxiEntity gequxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(gequxinxi);
        gequxinxiService.updateById(gequxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        gequxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<GequxinxiEntity> wrapper = new EntityWrapper<GequxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = gequxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,GequxinxiEntity gequxinxi, HttpServletRequest request,String pre){
        EntityWrapper<GequxinxiEntity> ew = new EntityWrapper<GequxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicknum");
        
        params.put("order", "desc");
		PageUtils page = gequxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, gequxinxi), params), params));
        return R.ok().put("data", page);
    }


}

论文参考

在这里插入图片描述

目 录
摘 要 1
Abstract 2
第1章 绪论 1
1.1课题开发背景 1
1.2课题开发目的和意义 1
1.3课题开发的目标 2
1.4论文结构安排 3
第2章 系统分析 4
2.1系统使用相关开发技术分析 4
2.1.1 Jsp技术介绍 4
2.1.2 Idea介绍 4
2.1.3 b/s架构 5
2.2系统需求分析 6
2.3系统可行性分析 6
2.3.1技术可行性分析 6
2.3.2经济可行性分析 7
2.3.3 操作可行性分析 7
2.4业务流程分析 7
2.4.1数据流程分析 10
第3章 总体设计 13
3.1系统模块总体设计 13
3.2数据库设计 15
3.2.1数据ER图设计 15
3.2.2数据库表设计 17
第4章 系统详细设计与实现 21
4.1系统运行平台设置 21
4.2系统首页界面的设计实现 21
4.3用户注册功能的设计实现 22
4.4用户登录功能的设计实现 24
4.5用户个人信息修改功能的设计实现 25
4.6歌曲信息功能的设计实现 26
4.7评价功能的设计实现 26
4.8会员优惠功能界面的设计实现 27
4.9会员办理功能的设计实现 28
4.10我的功能的界面实现 29
4.11管理员功能模块的设计实现 30
第5章 系统测试 32
5.1系统测试的目的 32
5.2系统测试的步骤 32
5.3具体实例测试 33
5.3.1搜索功能、分类功能测试 33
5.3.2评论功能测试 34
5.3.3用户注册功能测试 35
5.3.4歌曲信息管理功能测试 36
5.4测试总结 37
结 论 38
致 谢 39
参考文献 40

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值