博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 翰文编程CSDN博客 翰文编程-CSDN博客
文末下方有源码获取地址
ssm+vue678新媒体视域下的中国古诗词展演
系统结构设计可以比作一棵树的构建,其中主干代表着核心的任务或功能,而各个分支则对应着更细化的小任务。整个设计过程类似于从树干到树枝的逐步延伸,确保每个小任务都能为实现整体目标贡献力量。只有在深入了解需求分析之后,才能准确地确定每个小任务的实现方式,从而保证系统的最终功能和结构符合预期。随着初步设计的推进,系统结构将经历多次优化,逐步完善,最终形成一个切实可行、功能齐全的完整系统架构。
管理员功能模块和用户功能模块是该新媒体视域下的中国古诗词展演的两大部分,系统结构如图4-2所示。
图4-2 系统结构图
开发一个系统时,提前设计数据库是必不可少的步骤。数据库本质上是一个按照特定结构组织的、存储相关数据的集合。这些数据以高效的方式进行存储,使得数据库在处理和存取数据时具有较低的冗余率,能够为多种应用程序提供服务。数据库不仅为程序提供信息存储功能,还能保持与程序的高度独立性,从而实现更好的模块化和灵活性。总的来说,数据库技术经历了长期的发展历程,从最初的鲜为人知到如今的广泛应用,其相关技术日益成熟,理论基础也变得更加坚实。如今,数据库已经成为支撑现代信息系统的重要组成部分。
4.3.1 数据库概念设计
设计数据库时,通常需要借助数据库关系图(E-R图)来清晰地表示实体及其关系。这一过程可以通过专门的工具来完成,例如Visio等工具,可以有效地帮助设计和绘制E-R图。数据库设计遵循一定的流程,首先需要根据需求分析确定系统中的实体,并识别出这些实体的特征(属性)。接着,分析实体之间的关系,明确它们的相互关联。最终,使用E-R模型来表示这些实体、属性和关系,并绘制出系统的E-R图。无论是使用亿图、Visio还是其他绘图工具,E-R模型的符号都是一致的。通常,矩形用来表示实体,菱形表示实体之间的关系,而实体的属性则用椭圆形表示。通过直线将矩形、菱形和椭圆连接起来,形成完整的E-R图。完成这些步骤后,就可以开始绘制本系统的E-R图,确保数据结构的清晰与合理性。
(1)下图是论坛实体和其具备的属性。
图4.1 论坛实体属性图
(2)下图是用户实体和其具备的属性。
图4.2 用户实体属性图
(3)下图是公告信息实体和其具备的属性。
图4.3 公告信息实体属性图
(4)下图是字典表实体和其具备的属性。
图4.4 字典表实体属性图
(5)下图是古诗词视频收藏实体和其具备的属性。
图4.5 古诗词视频收藏实体属性图
(6)下图是古诗词视频留言实体和其具备的属性。
图4.6 古诗词视频留言实体属性图
(7)下图是用户表实体和其具备的属性。
图4.7 用户表实体属性图
(8)下图是古诗词视频实体和其具备的属性。
图4.8 古诗词视频实体属性图
-
-
- 数据库表设计
-
采用MYSQL数据库对该新媒体视域下的中国古诗词展演的数据进行存储,数据库中所包括的各个数据库表的详细信息如下所示:
表4.1字典表表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
dic_code |
String |
字段 |
是 |
3 |
dic_name |
String |
字段名 |
是 |
4 |
code_index |
Integer |
编码 |
是 |
5 |
index_name |
String |
编码名字 |
是 |
6 |
super_id |
Integer |
父字段id |
是 |
7 |
beizhu |
String |
备注 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.2论坛表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
forum_name |
String |
帖子标题 |
是 |
3 |
yonghu_id |
Integer |
用户 |
是 |
4 |
users_id |
Integer |
管理员 |
是 |
5 |
forum_content |
String |
发布内容 |
是 |
6 |
super_ids |
Integer |
父id |
是 |
7 |
forum_state_types |
Integer |
帖子状态 |
是 |
8 |
insert_time |
Date |
发帖时间 |
是 |
9 |
update_time |
Date |
修改时间 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4.3古诗词视频表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
gushicishipin_name |
String |
古诗词视频标题 |
是 |
3 |
gushicishipin_types |
Integer |
古诗词类型 |
是 |
4 |
gushicishipin_photo |
String |
封面 |
是 |
5 |
gushicishipin_video |
String |
视频 |
是 |
6 |
gushicishipin_file |
String |
文件 |
是 |
7 |
gushicishipin_date |
String |
视频时长 |
是 |
8 |
zan_number |
Integer |
赞 |
是 |
9 |
cai_number |
Integer |
踩 |
是 |
10 |
gushicishipin_status_types |
BigDecimal |
古诗词视频类型 |
是 |
11 |
gushicishipin_zuozhe |
String |
作者 |
是 |
12 |
gushicishipin_text |
String |
古诗词翻译 |
是 |
13 |
gushicishipin_content |
String |
古诗词视频详情 |
是 |
14 |
insert_time |
Date |
添加时间 |
是 |
15 |
create_time |
Date |
创建时间 |
是 |
表4.4古诗词视频收藏表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
gushicishipin_id |
Integer |
古诗词视频 |
是 |
3 |
yonghu_id |
Integer |
用户 |
是 |
4 |
gushicishipin_collection_types |
Integer |
类型 |
是 |
5 |
insert_time |
Date |
收藏时间 |
是 |
6 |
create_time |
Date |
创建时间 |
是 |
表4.5古诗词视频留言表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
gushicishipin_id |
Integer |
古诗词视频 |
是 |
3 |
yonghu_id |
Integer |
用户 |
是 |
4 |
gushicishipin_liuyan_text |
String |
留言内容 |
是 |
5 |
insert_time |
Date |
留言时间 |
是 |
6 |
reply_text |
String |
回复内容 |
是 |
7 |
update_time |
Date |
回复时间 |
是 |
8 |
create_time |
Date |
创建时间 |
是 |
表4.6公告信息表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
news_name |
String |
公告标题 |
是 |
3 |
news_types |
Integer |
公告类型 |
是 |
4 |
news_photo |
String |
公告图片 |
是 |
5 |
insert_time |
Date |
公告时间 |
是 |
6 |
news_content |
String |
公告详情 |
是 |
7 |
create_time |
Date |
创建时间 |
是 |
表4.7用户表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
yonghu_name |
String |
用户姓名 |
是 |
3 |
yonghu_photo |
String |
头像 |
是 |
4 |
yonghu_phone |
String |
联系方式 |
是 |
5 |
yonghu_email |
String |
邮箱 |
是 |
6 |
new_money |
BigDecimal |
余额 |
是 |
7 |
huanyuan_types |
Integer |
会员类型 |
是 |
8 |
huiyuandaoqi_time |
Date |
会员到期时间 |
是 |
9 |
yonghu_delete |
Integer |
假删 |
是 |
10 |
create_time |
Date |
创建时间 |
是 |
表4.8用户表表
序号 |
列名 |
数据类型 |
说明 |
允许空 |
1 |
Id |
Int |
id |
否 |
2 |
username |
String |
用户名 |
是 |
3 |
password |
String |
密码 |
是 |
4 |
role |
String |
角色 |
是 |
5 |
addtime |
Date |
新增时间 |
是 |
- 系统的实现
5.1用户信息管理
如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,
还进行了对用户名称的模糊查询的条件
图5.1 用户信息管理页面
5.2 古诗词管理
如图5.2显示的就是古诗词管理页面,此页面提供给管理员的功能有:查看已发布的古诗词数据,修改古诗词,古诗词作废,即可删除,还进行了对古诗词名称的模糊查询 古诗词信息的类型查询等等一些条件。
图5.2 古诗词管理页面
文件导入 poi 关键代码
package com.utils;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 文件导入到处
*/
public class PoiUtil {
/**
* 导入
*
* @param url
* @return
* @throws Exception
*/
public static List<List<String>> poiImport(String url) throws Exception {
List<List<String>> list = new ArrayList<>();
// 创建Excel 读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(new File(url)));
/**
* 第一种方式读取Sheet页
*/
// HSSFSheet sheet = workbook.getSheet("Sheet0");
/**
* 第二种方式读取Sheet页
*/
HSSFSheet sheet = workbook.getSheetAt(0);//获取工作表
for (int i = 0; i < sheet.getLastRowNum()+1; i++) {
HSSFRow row = sheet.getRow(i);//获取行
List<String> rowlist = new ArrayList<>();//行数据
for (int j = 0; j < row.getLastCellNum(); j++) {
HSSFCell cell = row.getCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);
String value = cell.getStringCellValue();
rowlist.add(value);//行中数据添加到行中
}
list.add(rowlist);//将行数据添加到list中
}
return list;
}
// 导出
public static void poiExport(List<List<String>> list, String url) throws Exception {
//创建Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个工作表shheet
HSSFSheet sheet = workbook.createSheet();
for (int i = 0; i < list.size(); i++) {
HSSFRow row = sheet.createRow(i);
List<String> dataList = list.get(i);
for (int j = 0; j < dataList.size(); j++) {
HSSFCell cell = row.createCell(j);
cell.setCellValue(dataList.get(j));
}
}
FileOutputStream stream = FileUtils.openOutputStream(new File(url));
workbook.write(stream);
stream.close();
}
public static void main(String[] args) {
try {
//导入
List<List<String>> lists = PoiUtil.poiImport("C:/Users/Administrator/Desktop/工作1.xls");
System.out.println();
//导出
PoiUtil.poiExport(lists, "C:/Users/Administrator/Desktop/工作1.xls");
//
// List<List<String>> list = new ArrayList<>();
// ArrayList<String> dataList = new ArrayList<>();
// dataList.add("标题1");
// dataList.add("标题2");
// dataList.add("标题3");
// list.add(dataList);
// // 追加数据
// for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
// ArrayList<String> dataList111 = new ArrayList<>();
// dataList111.add("内容" + i);
// dataList111.add("内容1111111121222222222333333333377777777411111111477777777" + i);
// dataList111.add("内容" + i);
// list.add(dataList111);
// }
// PoiUtil.poiExport(list, "C:/Users/Administrator/Desktop/工作1.xls");
} catch (Exception e) {
e.printStackTrace();
}
}
}
主要代码
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = gushicishipinService.queryPage(params);
//字典表数据转换
List<GushicishipinView> list =(List<GushicishipinView>)page.getList();
for(GushicishipinView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
GushicishipinEntity gushicishipin = gushicishipinService.selectById(id);
if(gushicishipin !=null){
//entity转view
GushicishipinView view = new GushicishipinView();
BeanUtils.copyProperties( gushicishipin , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody GushicishipinEntity gushicishipin, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,gushicishipin:{}",this.getClass().getName(),gushicishipin.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<GushicishipinEntity> queryWrapper = new EntityWrapper<GushicishipinEntity>()
.eq("gushicishipin_name", gushicishipin.getGushicishipinName())
.eq("gushicishipin_types", gushicishipin.getGushicishipinTypes())
.eq("gushicishipin_video", gushicishipin.getGushicishipinVideo())
.eq("gushicishipin_date", gushicishipin.getGushicishipinDate())
.eq("zan_number", gushicishipin.getZanNumber())
.eq("cai_number", gushicishipin.getCaiNumber())
.eq("gushicishipin_zuozhe", gushicishipin.getGushicishipinZuozhe())
.eq("gushicishipin_text", gushicishipin.getGushicishipinText())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
GushicishipinEntity gushicishipinEntity = gushicishipinService.selectOne(queryWrapper);
if(gushicishipinEntity==null){
gushicishipin.setInsertTime(new Date());
gushicishipin.setCreateTime(new Date());
gushicishipinService.insert(gushicishipin);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody GushicishipinEntity gushicishipin, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,gushicishipin:{}",this.getClass().getName(),gushicishipin.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<GushicishipinEntity> queryWrapper = new EntityWrapper<GushicishipinEntity>()
.notIn("id",gushicishipin.getId())
.andNew()
.eq("gushicishipin_name", gushicishipin.getGushicishipinName())
.eq("gushicishipin_types", gushicishipin.getGushicishipinTypes())
.eq("gushicishipin_video", gushicishipin.getGushicishipinVideo())
.eq("gushicishipin_date", gushicishipin.getGushicishipinDate())
.eq("zan_number", gushicishipin.getZanNumber())
.eq("cai_number", gushicishipin.getCaiNumber())
.eq("gushicishipin_zuozhe", gushicishipin.getGushicishipinZuozhe())
.eq("gushicishipin_text", gushicishipin.getGushicishipinText())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
GushicishipinEntity gushicishipinEntity = gushicishipinService.selectOne(queryWrapper);
if("".equals(gushicishipin.getGushicishipinPhoto()) || "null".equals(gushicishipin.getGushicishipinPhoto())){
gushicishipin.setGushicishipinPhoto(null);
}
if("".equals(gushicishipin.getGushicishipinVideo()) || "null".equals(gushicishipin.getGushicishipinVideo())){
gushicishipin.setGushicishipinVideo(null);
}
if("".equals(gushicishipin.getGushicishipinFile()) || "null".equals(gushicishipin.getGushicishipinFile())){
gushicishipin.setGushicishipinFile(null);
}
if(gushicishipinEntity==null){
gushicishipinService.updateById(gushicishipin);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
gushicishipinService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
List<GushicishipinEntity> gushicishipinList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
GushicishipinEntity gushicishipinEntity = new GushicishipinEntity();
// gushicishipinEntity.setGushicishipinName(data.get(0)); //古诗词视频标题 要改的
// gushicishipinEntity.setGushicishipinTypes(Integer.valueOf(data.get(0))); //古诗词类型 要改的
// gushicishipinEntity.setGushicishipinPhoto("");//详情和图片
// gushicishipinEntity.setGushicishipinVideo(data.get(0)); //视频 要改的
// gushicishipinEntity.setGushicishipinFile(data.get(0)); //文件 要改的
// gushicishipinEntity.setGushicishipinDate(data.get(0)); //视频时长 要改的
// gushicishipinEntity.setZanNumber(Integer.valueOf(data.get(0))); //赞 要改的
// gushicishipinEntity.setCaiNumber(Integer.valueOf(data.get(0))); //踩 要改的
// gushicishipinEntity.setGushicishipinStatusTypes(data.get(0)); //古诗词视频类型 要改的
// gushicishipinEntity.setGushicishipinZuozhe(data.get(0)); //作者 要改的
// gushicishipinEntity.setGushicishipinText(data.get(0)); //古诗词翻译 要改的
// gushicishipinEntity.setGushicishipinContent("");//详情和图片
// gushicishipinEntity.setInsertTime(date);//时间
// gushicishipinEntity.setCreateTime(date);//时间
gushicishipinList.add(gushicishipinEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
gushicishipinService.insertBatch(gushicishipinList);
return R.ok();
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
5.3古诗词类型管理
如图5.3显示的就是古诗词类型管理页面,此页面提供给管理员的功能有:根据古诗词类型进行条件查询,还可以对古诗词类型进行新增、修改、查询操作等等。
图5.3 古诗词类型管理页
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者