项目介绍
随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,微信被用户普遍使用,为方便用户能够可以随时原创音乐信息管理,特开发了基于微信的原创音乐小程序。
微信的原创音乐小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以在手机微信小程序上进行查看歌曲信息歌手信息等操作,还有系统平台后期的可操作性,通过对个人中心、歌曲信息、歌手信息、新闻资讯、系统管理等内容的详细了解和处理进行技术的开发。
微信的原创音乐小程序的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与微信的原创音乐小程序管理的实际需求相结合,讨论了基于微信开发的微信的原创音乐小程序管理小程序的使用。
开发环境
编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net
系统实现
5.1管理员功能模块
管理员通过登录窗口,进行在线填写管理员的用户名和密码,信息编辑完成后核对所输入的信息,信息编辑完成后核对信息准确无误后进行提交,进入到系统操作界面,如图5.1所示。
图5.1管理员登录界面
管理员进入后台页面,可以查看个人中心、用户管理、歌曲类型管理、歌曲信息管理、热门歌手管理、音乐资讯管理、系统管理等功能模块进行查看操作。
用户管理:通过列表可以查看用户账号、用户姓名、性别、年龄、头像、用户手机等信息进行查看、修改或删除操作,也可以通过新增进行添加用户信息,进行用户名查询或重置操作,如图5.2所示。
图5.2用户信息管理界面
歌曲息管理:通过列表可以查看歌曲名称、歌曲类型、封面、歌手、专辑、时长、音频、发行方、版权方等信息,进行查看详情、或修改或删除等操作,并通过查看评论进行查看或删除操作,并通过输入歌曲名称、歌手、专辑进行查询,如图5.3所示。
图5-3歌曲信息界面图
热门歌手管理:通过列表可以查看歌手姓名、歌手性别、头像、歌曲流派、标签、热门歌曲等信息,进行查看歌手信息、新增、修改或删除操作,还可以通过歌手信息,进行查看评论,也可以通过输入歌手姓名、歌手性别、歌曲流派、标签进行查找操作,如图5-4所示。
图5.4热门歌手管理界面
音乐资讯管理:通过列表可以查看标题、发布时间、图片、摘要、资讯来源等信息,进行查看详情或修改或删除操作,并通过音乐资讯进行查看评论,也可以通过填写标题进行查询或重置操作,如图5.5所示。
图5.5音乐资讯管理界面
5.2用户功能模块
用户通过到界面,通过界面的原创音乐小程序,可以进行通过注册输入用户账号、密码、用户姓名、性别、年龄、用户手机等信息,进行注册操作,如图5-6所示。用户通过登录页面,输入账号、密码、验证码输入无误后进行登录操作,如图5-7所示。
图5-6注册用户界面图
图5-7用户登录界面图
用户进入到原创音乐小程序界面,通过首页可以进行查看首页、歌曲信息、热门歌手、音乐资讯、我的等功能模块,进行相对应操作,如图5-8所示。
图5-8用户功能模块界面图
歌曲信息:通过列表可以进行查看歌曲名、封面、歌曲类型、歌手、专辑、时长、专辑、音频、发行方、版权方、歌词等信息内容,进行查看歌曲详细信息或收藏操作,并通过查看评论或添加评价操作,如图5-9所示。
图5-9歌曲信息界面图
歌手信息:通过列表可以查看歌手姓名、歌手性别、头像、歌曲流派、标签、热门歌曲等信息,进行查看歌手信息、或进行收藏歌手或进行查看评价信息或在线评价操作,,如图5-10所示。
图5-10歌手界面图
音乐资讯:通过列表可以查看标题、发布时间、图片、摘要、资讯来源等信息,进行查看音乐资讯信息、或进行收藏资讯或进行查看评价信息或在线评价操作,如图5-11所示。
图5-11音乐资讯界面图
用户信息:通过列表可以进行输入用户账号、密码、用户姓名、性别、年龄、头像、用户手机等信息,进行保存或退出登录操作,如图5-12所示。
图5-12个人信息界面图
核心代码
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.RemengeshouEntity;
import com.entity.view.RemengeshouView;
import com.service.RemengeshouService;
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("/remengeshou")
public class RemengeshouController {
@Autowired
private RemengeshouService remengeshouService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,RemengeshouEntity remengeshou,
HttpServletRequest request){
EntityWrapper<RemengeshouEntity> ew = new EntityWrapper<RemengeshouEntity>();
PageUtils page = remengeshouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, remengeshou), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("st")
public R list(@RequestParam Map<String, Object> params,RemengeshouEntity remengeshou, HttpServletRequest request){
EntityWrapper<RemengeshouEntity> ew = new EntityWrapper<RemengeshouEntity>();
PageUtils page = remengeshouService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, remengeshou), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("sts")
public R list( RemengeshouEntity remengeshou){
EntityWrapper<RemengeshouEntity> ew = new EntityWrapper<RemengeshouEntity>();
ew.allEq(MPUtil.allEQMapPre( remengeshou, "remengeshou"));
return R.ok().put("data", remengeshouService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(RemengeshouEntity remengeshou){
EntityWrapper< RemengeshouEntity> ew = new EntityWrapper< RemengeshouEntity>();
ew.allEq(MPUtil.allEQMapPre( remengeshou, "remengeshou"));
RemengeshouView remengeshouView = remengeshouService.selectView(ew);
return R.ok("查询热门歌手成功").put("data", remengeshouView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
RemengeshouEntity remengeshou = remengeshouService.selectById(id);
return R.ok().put("data", remengeshou);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
RemengeshouEntity remengeshou = remengeshouService.selectById(id);
return R.ok().put("data", remengeshou);
}
/**
* 后端保存
*/
@RequestMapping("ve")
public R save(@RequestBody RemengeshouEntity remengeshou, HttpServletRequest request){
remengeshou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(remengeshou);
remengeshouService.insert(remengeshou);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody RemengeshouEntity remengeshou, HttpServletRequest request){
remengeshou.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(remengeshou);
remengeshouService.insert(remengeshou);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody RemengeshouEntity remengeshou, HttpServletRequest request){
//ValidatorUtils.validateEntity(remengeshou);
remengeshouService.updateById(remengeshou);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
remengeshouService.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<RemengeshouEntity> wrapper = new EntityWrapper<RemengeshouEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = remengeshouService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
论文参考
目 录
摘 要 1
Abstract 2
目 录 3
第一章 绪 论 5
1.1选题背景 5
1.2研究现状 5
1.3研究内容 6
第二章 开发工具及关键技术介绍 7
2.1 JAVA技术 7
2.2 Mysql数据库 7
2.3 B/S结构 8
第三章 系统分析 9
3.1需求分析 9
3.2可行性分析 9
3.2.1技术可行性:技术背景 9
3.2.2经济可行性 9
3.2.3操作可行性: 10
3.3性能分析 10
3.4系统操作流程 10
3.4.1用户登录流程 10
3.4.2信息添加流程 11
3.4.3信息删除流程 12
第四章 系统设计与实现 14
4.1系统架构设计 14
4.2开发流程设计 14
4.3数据库设计 15
4.3.1实体ER图 15
4.3.2数据表 17
第五章 系统实现 20
5.1管理员功能模块 20
5.2教师功能模块 24
第六章 系统的测试 35
6.1系统测试的目的 35
6.2系统测试分析 35
结 论 36
参考文献 37
致 谢 38