基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

🎈系统亮点:协同过滤算法、二维码识别;

一.系统开发工具与环境搭建

1.系统设计开发工具


后端使用Java编程语言的Spring boot框架
项目架构:B/S架构
运行环境:win10/win11、jdk17


前端:
技术:框架Vue.js;UI库:ElementUI;
开发工具:Visual Studio Code;


后端:
技术:Java语言、mybatis plus、Spring boot框架;
开发工具:IDEA 2023.3.3版本;


小程序端:
技术:框架Uniapp;
开发工具:HBuilder X;


数据库:
数据库:mysql5.7
数据库工具:Navicat12版本;


二.系统实现(部分截图)

1. 系统登录模块

管理员输入自己的用户名、密码和图形验证码。点击此按钮后,系统会对输入的用户名、密码和验证码进行验证,如果验证通过,管理员就可以成功登录系统后台。在实现这个功能时,后端需要对管理员输入的信息进行验证。首先,需要查询数据库中是否存在该用户名,如果不存在,返回错误信息提示用户。然后,对比用户输入的密码是否与数据库中存储的密码一致,如果不一致,返回错误信息提示用户。最后,验证用户输入的图形验证码是否正确,如果不正确,返回错误信息提示用户。

2 用户管理模块

用户管理模块,提供表单让管理员输入新用户的信息,提交表单后,系统将验证数据的有效性,并将新用户信息存储到数据库中。除了新增用户,该模块还提供了删除用户的功能。此外,用户管理模块还支持修改用户信息的功能。这可能是更改用户的姓名、地址、联系方式或其他相关信息。最后,该模块还支持导出用户功能。

关键代码:

//声明一个支持用户查询的(拉姆达)表达式
LambdaQueryWrapper<AppUser> queryWrapper = Wrappers.<AppUser>lambdaQuery()
.eq(input.getId()!=null,AppUser::getId,input.getId())
.eq(input.getCreatorId()!=null,AppUser::getCreatorId,input.getCreatorId());

3 资讯管理模块

在资讯管理模块中,可以博物馆相关的资讯进行添加。包括但不限于博物馆的资讯标题、封面、资讯内容等。这些信息将被妥善存储和管理,以便于用户随时查阅和使用。同时,当资讯发布的有问题的时候,我们可以对资讯进行修改。此外,我们还增加了删除功能,用户可以对自己不再需要的资讯进行删除。

关键代码:

//声明一个支持资讯查询的(拉姆达)表达式
LambdaQueryWrapper<ArticleInfo> queryWrapper = Wrappers.<ArticleInfo>lambdaQuery()
.eq(input.getId()!=null,ArticleInfo::getId,input.getId())
.eq(input.getCreatorId()!=null,ArticleInfo::getCreatorId,input.getCreatorId());

4 话题管理模块

话题管理模块是一个功能丰富的系统,它不仅可以增加不同的话题类型,以满足用户对各种话题的需求,还可以对话题进行审核,确保话题的质量和合规性。此外,它还包括了管理话题评论的功能,可以对用户的评论进行管理和监控,以保证评论区的秩序和质量。话题管理模块还提供了话题收藏的功能,同时,该模块还记录了用户的浏览记录,管理员可以查看用户浏览的所有话题记录和话题收藏记录。

关键代码:

//查询出关联的创建用户信息
AppUserDto  CreatorAppUserDTO=new AppUserDto();
AppUser  CreatorAppUserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getCreatorId()));
if(CreatorAppUserEntity!=null) {
BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
item.setCreatorAppUserDto(CreatorAppUserDTO);
}
//查询关联的Comment表信息
List<Comment> CommentEntitys = _CommentMapper.selectList(Wrappers.<Comment>lambdaQuery().eq(Comment::getTopicId, item.getId()));
List<CommentDto> CommentDTOS = Extension.copyBeanList(CommentEntitys, CommentDto.class);
item.setCommentDtos(CommentDTOS);
//查询出关联的TopicType表信息
TopicTypeDto TopicTypeDTO = new TopicTypeDto();
TopicType  TopicTypeEntity= _TopicTypeMapper.selectOne(Wrappers.<TopicType>lambdaQuery().eq(TopicType::getId,item.getTopicTypeId()));
if(TopicTypeEntity!=null) {
BeanUtils.copyProperties(TopicTypeDTO,TopicTypeEntity);
item.setTopicTypeDto(TopicTypeDTO);
}

5 博物馆管理模块

博物馆预约管理系统可以帮助博物馆维护其信息。这包括博物馆的开放时间、展览信息、活动安排等。通过系统,博物馆可以方便地更新和管理这些信息,确保用户能够及时了解到最新的展览和活动信息。其次,博物馆预约管理系统可以提供用户预约参观的功能。用户可以通过系统在线预约参观时间,选择参观日期和时间段。在预约成功后,小程序会生成一个独特的二维码,用于用户的入院识别。管理员可以对二维码进行扫码,以验证其预约身份。

关键代码:

try {
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(decodedBytes);//byte[] 转BufferedImage
image = ImageIO.read(byteArrayInputStream);
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
Result result = new MultiFormatReader().decode(binaryBitmap, hints);//解码
System.out.println("图片中内容:  ");
System.out.println("content: " + result.getText());
content = result.getText();
} catch (IOException e) {
e.printStackTrace();
} catch (NotFoundException e) {
e.printStackTrace();
}

6 游客信息管理模块

当有新的游客进入博物馆时,我们需要记录他们的个人信息,包括姓名、身份证、联系方式等。其次,修改游客信息也是常见的操作。有时候,游客可能会提供错误的信息或者需要更新他们的联系方式。在这种情况下,我们需要及时修改游客的信息。最后,当游客离开博物馆或者不再需要我们的服务时,我们需要将他们的信息从系统中删除。

关键代码:

//声明一个游客信息实体
Visitor Visitor = new Visitor();
//把前端传入的input参数拷贝到游客信息实体
BeanUtils.copyProperties(Visitor,input);
//调用数据库的增加或者修改方法
saveOrUpdate(Visitor);
//定义一个返回给前端的游客信息传输模型
VisitorDto VisitorDto=new VisitorDto();
//同理把操作的游客信息实体拷贝给游客信息传输模型
BeanUtils.copyProperties(VisitorDto,Visitor);

7 博物馆小程序首页模块

在小程序首页,用户可以轻松地获取到博物馆的各项信息。这些信息包括博物馆的开放时间、展览内容等。此外,我们的小程序还提供了预约功能。用户可以根据自己的需求,选择预约的时间,预约人数,添加游客信息,然后提交预约申请。除了预约功能,我们的小程序首页还提供了博物馆的相关资讯。这些资讯包括博物馆的最新展览信息、活动预告、优惠信息等,让用户可以随时了解到博物馆的最新动态。

关键代码:

  //创建订单AppointmentRecord AppointmentRecord = new AppointmentRecord();AppointmentRecord.setAppointStatus(Enums.AppointStatus.待使用.index());AppointmentRecord.setPayTime(LocalDateTime.now());AppointmentRecord.setPayType(input.getPayType());AppointmentRecord.setBuyUserId(input.getBuyUserId());AppointmentRecord.setViewSpot(input.getViewSpot());AppointmentRecord.setTotalPeople(input.getTotalPeople());AppointmentRecord.setBeginTime(viewSpotAppointSetting.getBeginTime());AppointmentRecord.setEndTime(viewSpotAppointSetting.getEndTime());AppointmentRecord.setViewSpotAppointSettingId(input.getViewSpotAppointSettingId());AppointmentRecord.setTotalMoney(viewSpotAppointSetting.getPrice() * input.getTotalPeople());saveOrUpdate(AppointmentRecord);//添加预约明细人//循环前端传入的游客集合信息for (AppointmentRecordDetDto appointmentRecordDetDto : input.getDets()) {//创建一个预约明细实体AppointmentRecordDet appointmentRecordDet = new AppointmentRecordDet();//把前端传入的input参数拷贝到预约明细实体BeanUtils.copyProperties(appointmentRecordDet, appointmentRecordDetDto);//设置预约记录idappointmentRecordDet.setAppointmentRecordId(AppointmentRecord.getId());
_AppointmentRecordDetMpper.insert(appointmentRecordDet);    }

8 博物馆小程序话题圈模块

在小程序话题圈,通过浏览话题主页、搜索栏输入关键词或点击相关链接来找到感兴趣的话题。找到话题,用户可以点击进入,查看已有的帖子、评论和讨论。在话题页面,通常会有一个“收藏”按钮。可以将话题保存到个人的收藏夹中。每个帖子下方都会有一个评论区域,用户可以在这里输入自己的观点、想法或问题。用户要发起一个新的讨论,可以选择创建一个新的话题。

关键代码:

if(input.getId()==null)
{
return new TopicRecordDto();
}
PagedResult<TopicRecordDto>  pagedResult =List(input);
return pagedResult.getTotalCount()>0?pagedResult.getItems().stream().findFirst().get():new TopicRecordDto();

9 博物馆小程序个人信息模块

在小程序个人信息模块,可以查看和管理个人相关信息,可以查看您已经预约的次数,可以浏览和查找之前参与或发布的话题。允许您查看您之前浏览过的内容,方便您找到感兴趣的话题或信息。此外,也可以对个人信息进行修改,查看个人订单,话题收藏保存的都是你收藏的话题。

关键代码:

//查询出关联的创建用户信息
AppUserDto  CreatorAppUserDTO=new AppUserDto();
AppUser  CreatorAppUserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getCreatorId()));
if(CreatorAppUserEntity!=null) {
BeanUtils.copyProperties(CreatorAppUserDTO, CreatorAppUserEntity);
item.setCreatorAppUserDto(CreatorAppUserDTO);
}        
//查询出关联的Topic表信息
TopicDto TopicDTO = new TopicDto();        
Topic  TopicEntity= _TopicMapper.selectOne(Wrappers.<Topic>lambdaQuery().eq(Topic::getId,item.getTopicId()));
if(TopicEntity!=null) {  
BeanUtils.copyProperties(TopicDTO,TopicEntity);
item.setTopicDto(TopicDTO); 
}  
//查询出关联的AppUser表信息
AppUserDto UserDTO = new AppUserDto();        
AppUser  UserEntity= _AppUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getId,item.getUserId()));
if(UserEntity!=null) {  
BeanUtils.copyProperties(UserDTO,UserEntity);
item.setUserDto(UserDTO); 
}

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

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

相关文章

Scaling Law的“终结“还是新起点?——开源实践者的深度思考

作者&#xff1a;宋大宝&#xff0c;与大宝同学因那篇《回顾总结展望「融合RL与LLM思想&#xff0c;探寻世界模型以迈向AGI」》结识于今年春天&#xff0c;虽我们当时某些思想观念有些出入&#xff0c;也碰撞出了很多火花与共鸣&#xff0c;并持续地相互启发的走到了现在。他是…

【qt】控件4

1.Qradiobutton(单选按钮) ui界面有三个按钮&#xff0c;应该文本框&#xff0c;根据不同的按钮来改变不同文本框的内容 根据不同的单选按钮改变不同的文本框。 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->radioB…

Day02_AJAX综合案例 (黑马笔记)

Day02_AJAX综合案例 目录 Day02_AJAX综合案例 学习目标 01.案例_图书管理-介绍 目标 讲解 小结 02.Bootstrap 弹框_属性控制 目标 讲解 小结 03.Bootstrap 弹框_JS控制 目标 讲解 小结 04.案例_图书管理_渲染列表 目标 讲解 小结 05.案例_图书管理_新增图书…

六、代码生成,《编译原理》(本科教学版),第2版

文章目录 零、前言0.1 编译器前端到后端 一、代码生成1.1 代码生成的任务1.2 给数据分配计算资源1.3 给代码选择合适的机器指令1.4 栈式计算机1.4.1 栈式计算机Stack的结构1.4.2 栈计算机的指令集1.4.3 变量的内存分配伪指令1.4.4 栈式计算机的代码生成1.4.4.1 递归下降代码生成…

Android集成FCM(Firebace Cloud Messaging )

集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面&#xff0c;创建自己的项目 2、点击自己创建好的项目&#xff0c;在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…

D2076——一款双通道音频功率放大器【青牛科技】

概述&#xff1a; D2076是一款双通道音频功率放大器&#xff0c;最低工作电压可到1.0V。适用于 便携式小型收音机或立体声耳机作双通道或BTL应用。 主要特点&#xff1a; BTL工作&#xff0c;Po90mW&#xff08;典型值&#xff09; 外接元器件少 通过外接PNP三极管作为…

智慧社区平台系统提升物业管理效率与居民生活质量

内容概要 智慧社区平台系统是为应对现代城市管理挑战而诞生的重要工具。随着城市化进程的加快&#xff0c;传统的物业管理方式已经难以满足日益增长的居民需求和管理复杂性。因此&#xff0c;引入智能化管理手段显得尤为重要。这个系统不仅仅是一个简单的软件&#xff0c;它是…

【langchain4j】AIservices能够实现更加灵活的chain

文章目录 AI service介绍如何工作的AiServices提供的能力支持的返回形式 简单的例子&#xff1a;接收用户消息&#xff0c;并按规定返回接收单个变量接收更多动态变量 advanced RAGChaining multiple AI Services&#xff1a;多个AiSerives合并到一起相关教程&#xff1a;[Lang…

JavaScript 中字符串和数组的概念解析与多角度对比区分

文章目录 &#x1f4af;前言&#x1f4af;字符串&#xff08;String&#xff09;&#x1f4af;数组&#xff08;Array&#xff09;&#x1f4af;字符串与数组的相同点与不同点&#x1f4af;字符串和数组的实际应用场景&#x1f4af;字符串与数组的互转&#x1f4af;字符串和数组…

4K双模MiniLED显示器哪个好

4K双模MiniLED显示器哪个好&#xff1f;现在市面上的4K双模MiniLED显示器太多了&#xff0c;琳琅满目&#xff0c;今天就给大家列举一下7款当下火热到爆炸的品牌&#xff0c;看看4K双模MiniLED显示器哪个好。 4K双模MiniLED显示器哪个好 - HKC G27M7PRO HKC G27M7Pro 是一款性…

每天五分钟深度学习pytorch:批归一化全连接网络完成手写字体识别

本文重点 前面我们学习了普通的全连接神经网络,后面我们学习了带有激活层的全连接神经网络,本文我们继续进一步升级,我们学习带有批归一化的全连接神经网络,批归一化可以加快神经网络的训练速度,减少过拟合,具体它的原理,大家可以看我们的《每天五分钟深度学习》专栏,…

excel打开csv文件乱码的问题

如图所示&#xff0c;在保存csv文件时已指定编码为utf-8&#xff0c;用excel打开后仍然乱码 解决方法&#xff1a; 在保存csv文件时指定编码为utf-8-sig 该编码方式会在文件开头加入一个 BOM&#xff08;Byte Order Mark&#xff09;&#xff0c;有助于 Excel 正确识别 UTF-8…

QQ音乐 11.3.4 | 魅族定制版,极致简洁,无广告,不限机型

QQ音乐魅族定制版&#xff0c;界面设计极致简洁&#xff0c;没有任何广告干扰&#xff0c;支持听限免歌曲&#xff0c;不限机型使用。用户可以通过微信和QQ直接登录&#xff0c;享受纯净的音乐体验。 大小&#xff1a;94.6M 下载地址&#xff1a; 百度网盘&#xff1a;https:…

使用TensorFlow实现简化版 GoogLeNet 模型进行 MNIST 图像分类

在本文中&#xff0c;我们将使用 TensorFlow 和 Keras 实现一个简化版的 GoogLeNet 模型来进行 MNIST 数据集的手写数字分类任务。GoogLeNet 采用了 Inception 模块&#xff0c;这使得它在处理图像数据时能更高效地提取特征。本教程将详细介绍如何在 MNIST 数据集上训练和测试这…

TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞

随着区块链技术的快速发展&#xff0c;去中心化应用&#xff08;DApp&#xff09;逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用&#xff0c;不仅仅满足于传统的社交功能&#xff0c;更在区块链领域大胆探索&#xff0c;推出了基于其去中心化网络的…

vulhub之log4j

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…

web服务nginx实验4:访问控制

4-1&#xff1a;基于不同用户的访问控制&#xff1a; 安装软件&#xff1a; 创建HTTP基本认证用户密码文件&#xff0c;tom&#xff0c;密码&#xff1a;1&#xff0c;lisa&#xff0c;密码&#xff1a;1&#xff1a; -c&#xff1a;表示创建一个新的密码文件。如果该文件已经…

基于FastAPI实现本地大模型API封装调用

关于FastAPI FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Python Web 框架&#xff0c;用于构建基于标准 Python 类型提示的 API。它以简洁、直观和高效的方式提供工具&#xff0c;特别适合开发现代 web 服务和后端应用程序。 问题&#xff1a;_pad() got an un…

数字化点亮库布其沙漠的绿色梦想

Bentley 应用程序助力提升设计和施工效率&#xff0c;提前六周交付设计成果 清洁能源为沙漠带来新活力 库布其光伏治沙项目&#xff08;以下简称“该项目”&#xff09;位于内蒙古鄂尔多斯市库布其沙漠&#xff0c;占地约 10 万亩&#xff0c;是中国单体规模最大的光伏治沙项目…

基于单片机的风能太阳能供电的路灯智能控制系统设计(论文+源码)

1系统总体设计 本课题为风能太阳能供电的路灯智能控制系统设计&#xff0c;系统的主要功能设计如下&#xff1a; &#xff08;1&#xff09; 供电模块&#xff1a;采用太阳能板以及风机模拟风扇充电&#xff0c;经过充电电路给锂电池进行充电。再由锂电池给照明模块以及整个项…