当前位置: 首页 > news >正文

餐厅管理系统

目录

一、 系统简介

1.1需求分析

1.2 编程环境与工具

二、 系统总体设计

2.1 系统的功能模块图。

2.2 各功能模块简介。

三、 主要业务流程

(1)用户及管理员登录流程图

(2)信息添加流程

(3)信息删除流程

四、 数据库的设计

五、 系统功能详细实现及效果图

(1) 首页

(2) 管理页面

(3) 餐厅页面

(4) 登录与退出

六、 总结

  • 系统简介

1.1需求分析

餐厅管理系统是一个基于Javaweb的系统,旨在为音乐餐厅、情侣餐厅和中餐厅提供全面的管理和服务功能。系统主要包括餐厅详情管理、价格管理和加入购物车功能。

1.系统架构:采用 B/S 架构,基于 JavaWeb 技术实现。

2.数据库设计:使用关系型数据库,如 MySQL 或 Oracle 等。

3.技术框架:Servlet JDBC Java JSP 等。

1.2 编程环境与工具

根据本系统体系结构特点和使用本系统的用户特点,编程环境与工具的配置如表1-1所示:

表1-1 开发环境

Tab. 1-1 Development environment table

类别

标准配置

开发语言

Java

开发工具

IDEA

开发环境

JDK 8.0

服务器

Tomcat 8.0

数据库

MySql 5.6

  • 系统总体设计

2.1 系统的功能模块图。

按照系统的分析,本系统采用基于B/S架构的系统,系统分为管理员和普通用户两种身份,其中普通用户可以管理个人用户信息,也可以对数据库进行修改操作;需要先登录,然后才能使用系统的各项功能,会涉及相应的信息。

2.2 各功能模块简介。

  1. 提供餐厅的基本信息,如名称、展示餐厅的图片,包括环境、菜品等;
  2. 支持对餐厅进行分类,如音乐餐厅、情侣餐厅、中餐厅等。

(1)用户及管理员登录流程图

对于系统的安全性的第一关,就是用户想要进入系统,必须通过登录窗口,输入自己的登录信息才可以进行登录,用户输入的信息准确无误后才可以进入到操作系统界面,进行功能模块的相对应操作,如果用户输入的信息不正确,则窗口出现提示框,用户登录失败,返回到第一步进行重新输入,如图3-1所示。

3-1登录流程图

Figure 3-1 Login Flowchart

(2)信息添加流程

对于系统,需要随时添加所需要的数据信息,对于用户添加信息,需要根据添加界面,根据选框的内容进行填写所要添加的数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则需要返回到第一步,重新输入数据信息,再进行判断操作,如图3-2所示。

图3-2信息添加流程图

Figure 3-2 Information is added to the Flowchart

(3)信息删除流程

不管是哪个用户角色进入到不通的系统操作界面,都可以进行不同的信息内容的操作功能,对用系统数据信息的删除,用户一旦将信息删除,那么该删除的数据信息将无法恢复,所以用户在对数据删除事,一定判断删除的内容是否是确定要删除的,确定无误后选择确定删除操作,如图3-3所示。

图3-3信息添加流程图

Figure 3-3 Information Deletion Flowchart

用表格列出表的结构及说明表中主要列的作用。

ID

名称

类型

是否主键

解释

1

id

int

不能

编号

2

username

varchar

不是主键

不能

用户名

3

password

varchar

不是主键

不能

密码

4

xingming

varchar

不是主键

不能

姓名

5

role

int

不是主键

不能

职责

6

dianhua

varchar

不是主键

不能

电话

7

dizhi

varchar

不是主键

不能

地址

此为用户表,包括用户名、密码。

ID

名称

类型

是否主键

解释

1

id

int

不能

编号

2

biaoti

varchar

不是主键

不能

标题

3

neirong

text

不是主键

不能

内容

4

shijian

varchar

不是主键

不能

时间

此为公告表,包括标题、内容。

ID

名称

类型

是否主键

解释

1

id

int

不能

编号

2

pname

varchar

不是主键

不能

名称

3

imgpath

varchar

不是主键

不能

图片

4

createtime

varchar

不是主键

不能

姓名

5

fenleiid

varchar

不是主键

不能

分类id

6

fname

varchar

不是主键

不能

类型名

7

jiage

float

不是主键

不能

价格

8

tuijian

varchar

不是主键

不能

推荐

9

dianjishu

int

不是主键

不能

点击数

10

xiaoliang

int

不是主键

不能

销量

11

miaoshu

text

不是主键

不能

描述

此为餐厅表,包括餐厅名,图片。

  1. 首页

此为餐厅封面界面,点击进入即可跳转到餐厅页面。

public static String getPagerNormal(int total, int pagesize, int pagenum,String pageurl,String info) {

int count = total / pagesize;

if (total % pagesize > 0) {

count++;

}

if(pageurl.indexOf("?")>-1){

pageurl = pageurl + "&";

}else{

pageurl = pageurl + "?";

}

StringBuffer buf = new StringBuffer();

buf.append(info+"  ");

buf.append(pagenum+"/"+ count +"  ");

if (pagenum == 1) {

// buf.append("<SPAN style='color:#CCCCCC'>【首页】</SPAN><SPAN style='color:#CCCCCC'>【上一页】</SPAN>  ");

} else {

// buf.append("【<a href='" + pageurl + "pagenum=1'>首页</a>】【<a href='" + pageurl + "pagenum=" + (pagenum - 1)

// + "' >上一页</a>】");

}

int bound1 = ((pagenum - 2) <= 0) ? 1 : (pagenum - 2);

int bound2 = ((pagenum + 2) >= count) ? count : (pagenum + 2);

// for (int i = bound1; i <= bound2; i++) {

// if (i == pagenum) {

// buf.append("<SPAN style='color:#FF0000'>" + i

// + "</SPAN>  ");

// } else {

// buf.append("<a href='" + pageurl + "pagenum=" + i + "'>" + i

// + "</a>  ");

// }

// }

if (bound2 < count) {

buf.append("<SPAN>...</SPAN>");

}

if (pagenum == count||count==0) {

// buf.append("<SPAN style='color:#CCCCCC'>【下一页】</SPAN><SPAN style='color:#CCCCCC'>【尾页】</SPAN>");

} else {

// buf.append("【<a href='" + pageurl + "pagenum=" + (pagenum + 1)

// + "'>下一页</a>】【<a href='" + pageurl + "pagenum=" + count

// + "'>尾页</a>】");

}

return buf.toString();

}

}

  1. 管理页面

这是餐厅管理界面包括用户的信息,包括查找和删除方法。

public void insertBean(User bean){

Connection conn = null;

PreparedStatement ps = null;

try{

String sql = "insert into t_User(username,password,xingming,role,dianhua,dizhi) values(?,?,?,?,?,?)";

conn = DBConn.getConn();

ps = conn.prepareStatement(sql);

ps.setString(1, bean.getUsername());

ps.setString(2, bean.getPassword());

ps.setString(3, bean.getXingming());

ps.setInt(4, bean.getRole());

ps.setString(5, bean.getDianhua());

ps.setString(6, bean.getDizhi());

ps.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

DBConn.close(conn, ps, null);

}

}

//更新记录

public void updateBean(User bean){

Connection conn = null;

PreparedStatement ps = null;

try{

String sql = "update  t_User set username=?,password=?,xingming=?,role=?,dianhua=?,dizhi=? where id= "+bean.getId();

conn = DBConn.getConn();

ps = conn.prepareStatement(sql);

ps.setString(1, bean.getUsername());

ps.setString(2, bean.getPassword());

ps.setString(3, bean.getXingming());

ps.setInt(4, bean.getRole());

ps.setString(5, bean.getDianhua());

ps.setString(6, bean.getDizhi());

ps.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

DBConn.close(conn, ps, null);

}}


这是餐厅分类页面,包括上传图片、查找和删除的方法。

public void insertBean(Product bean){

Connection conn = null;

PreparedStatement ps = null;

try{

String sql = "insert into t_Product(pname,imgpath,createtime,fenleiid,fname,jiage,tuijian,dianjishu,xiaoliang,miaoshu) " +

"values(?,?,?,?,?,?,?,?,?,?)";

conn = DBConn.getConn();

ps = conn.prepareStatement(sql);

ps.setString(1, bean.getPname());

ps.setString(2, bean.getImgpath());

ps.setString(3, bean.getCreatetime());

ps.setString(4, bean.getFenleiid());

ps.setString(5, bean.getFname());

ps.setDouble(6, bean.getJiage());

ps.setString(7, bean.getTuijian());

ps.setInt(8, bean.getDianjishu());

ps.setInt(9, bean.getXiaoliang());

ps.setString(10, bean.getMiaoshu());

ps.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

DBConn.close(conn, ps, null);

}

}

//更新记录

public void updateBean(Product bean){

Connection conn = null;

PreparedStatement ps = null;

try{

String sql = "update  t_Product set pname=?,imgpath=?,createtime=?,fenleiid=?,fname=?,jiage=?,tuijian=?,dianjishu=?,xiaoliang=?,miaoshu=? where id= "+bean.getId();

conn = DBConn.getConn();

ps = conn.prepareStatement(sql);

ps.setString(1, bean.getPname());

ps.setString(2, bean.getImgpath());

ps.setString(3, bean.getCreatetime());

ps.setString(4, bean.getFenleiid());

ps.setString(5, bean.getFname());

ps.setDouble(6, bean.getJiage());

ps.setString(7, bean.getTuijian());

ps.setInt(8, bean.getDianjishu());

ps.setInt(9, bean.getXiaoliang());

ps.setString(10, bean.getMiaoshu());

ps.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

DBConn.close(conn, ps, null);

}

}

  1.  餐厅页面

餐厅主页面展示了餐厅的各种重要信息,页面的顶部将显示一个导航栏,方便用户快速访问不同的页面。

在页面的中心位置,将会有一个明显的区域用于展示餐厅的类别。这里将列出餐厅所提供的各种菜品类型,如中餐、西餐等。

public class Product {

private int id;//主键

private String pname;//餐厅名称

private String imgpath;//餐厅图片

private String createtime;//上架时间

private String fenleiid;//分类ID,外键

private String fname;//分类名

private double jiage;//餐厅价格

private String tuijian;//是否查看  未查看 已推荐

private int dianjishu;//餐厅点击数

private int xiaoliang;//处理数

private String miaoshu;//餐厅介绍

public int getId() {

return id;

}

  1. 登录与退出

这是一个登录界面,它提供了用户登录的功能。通过输入正确的用户名和密码,用户可以成功登录并进入餐厅管理界面。

在 Java 中,我们可以使用UI 框架来创建这样的登录界面。

//用户登录

if("login".equals(method)){

//从jsp页面获取用户名和密码

String username =  request.getParameter("username");

String password =  request.getParameter("password");

//查询用户名和密码是否匹配

User bean = userDao.selectBean(" where username='"+username+"' and password ='"+password+"' and role=1 ");

if(bean!=null){

HttpSession session = request.getSession();

session.setAttribute("manage", bean);

writer.print("<script language='javascript'>alert('登录成功');window.location.href='"+basePath+"manage/index.jsp'; </script>");

}else{

writer.print("<script  language='javascript'>alert('用户名或者密码错误');window.location.href='"+basePath+"manage/login.jsp';</script>");

}

}

//退出操作

 else if("loginout".equals(method)){

 HttpSession session  =request.getSession();

 session.removeAttribute("manage");

 writer.print("<script  language='javascript'>alert('退出成功');window.location.href='"+basePath+"manage/login.jsp';</script>");

}

//跳转到修改密码页面

else if("passwordupdate".equals(method)){

request.setAttribute("biaoti", "修改密码");

request.setAttribute("url", "manageServlet/passwordupdate2");

RequestDispatcher dispatcher = request.getRequestDispatcher("/manage/passwordupdate.jsp");

dispatcher.forward(request, response);

}

//修改密码操作

else if("passwordupdate2".equals(method)){

//从JSP获取信息

String password1 = request.getParameter("password1");

String password2 = request.getParameter("password2");

HttpSession session = request.getSession();

User user = (User)session.getAttribute("manage");

User u = userDao.selectBean(" where username='"+user.getUsername()+"' and password='"+password1+"'  ");

if(u!=null){

u.setPassword(password2);

userDao.updateBean(u);

writer.print("<script  language='javascript'>alert('操作成功');window.location.href='"+basePath+"manageServlet/passwordupdate'; </script>");

}else{

writer.print("<script  language='javascript'>alert('操作失败,原密码错误!');window.location.href='"+basePath+"manageServlet/passwordupdate'; </script>");

}

  • 总结归纳

基于 Java Web 的餐厅管理系统是一个功能齐全、易于使用的解决方案总的来说,基于 Java Web 的餐厅管理系统提高了餐厅的运营效率和管理水平,为顾客提供了更好的服务体验。

1. 技术选择:JavaWeb 学习过程中 我们主要使用的技术是Java Servlet Tomcat JSP EL表达式等,使开发过程更加高效和规范化。

2. 数据库设计:系统使用 MySQL 数据库进行数据存储,数据表设计合理,符合第三范式,保证了数据的完整性和一致性。

3. 界面设计:系统的界面设计简洁、美观,用户操作方便,提高了用户体验。

4. 安全性设计:系统采用了权限控制和密码加密等安全性措施,保证了系统的安全性。

  • 不足

1. 性能问题:在高并发情况下,系统的响应速度可能会受到影响,需要进一步优化数据库查询和页面渲染。

2. 移动端适配:系统目前主要针对桌面浏览器进行设计,在移动端的适配性方面还有待改进。

3. 数据备份与恢复:系统缺乏完善的数据备份与恢复功能,需要进一步加强以防止数据丢失。

4. 用户体验:尽管界面设计简洁,但在一些用户交互细节上还可以进一步优化,提升用户体验。

综上所述,基于 Java Web 的餐厅管理系统在功能实现和技术运用上相对成熟,但在性能、移动端适配、数据备份以及用户体验等方面仍有提升的空间。通过持续改进和优化,该系统可以更好地满足餐厅管理的实际需求。

完整源码:

相关文章:

餐厅管理系统

目录 一、 系统简介 1.1需求分析 1.2 编程环境与工具 二、 系统总体设计 2.1 系统的功能模块图。 2.2 各功能模块简介。 三、 主要业务流程 &#xff08;1&#xff09;用户及管理员登录流程图 &#xff08;2&#xff09;信息添加流程 &#xff08;3&#xf…...

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者&#xff1a; reAsOn2010 原文来源&#xff1a; https://tidb.net/blog/612103f3 背景 使用 TiDB 作为我们的全量数据库已经有六七年了&#xff0c;当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的&#xff0c;所以从那个时候开始就有每…...

Redis的缓存穿透、击穿、雪崩

目录 缓存穿透 定义&#xff1a; 解决方法&#xff1a; 缓存击穿 定义&#xff1a; 解决方案&#xff1a; 缓存雪崩 定义&#xff1a; 解决方案&#xff1a; 缓存穿透、缓存击穿和缓存雪崩的区别 缓存穿透 定义&#xff1a; 查询一个不存在的数据&#xff0c;数据库未…...

【Django开发】前后端分离django美多商城项目第1篇:欢迎来到美多 项目主要页面介绍【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…...

【软件造价咨询】信息化项目预算评审看什么?

在信息化项目预算评审中&#xff0c;各方往往只重视预算金额部分&#xff0c;而忽视了项目建设的全局性和整体性把关&#xff0c;导致信息系统的重复建设、分散建设、业务和系统两张皮、重功能轻数据、重投资轻方案等问题频出&#xff0c;从而大幅降低财政投资效益。 例如&…...

第37讲:Cephfs文件系统的正确使用姿势

文章目录 1.Cephfs文件系统简介2.Cephfs文件系统细节介绍2.1.Cephfs文件系统多客户端隔离挂载2.2.Ceph集群中多个Cephfs如何单独使用 3.挂载多个Cephfs文件系统4.Cephfs文件系统多客户端隔离挂载实战4.1.创建一个Cephfs文件系统4.2.将Cephfs文件系统挂载到本地路径4.3.在Cephfs…...

单片机烧录

在设计芯片的时候&#xff0c;关于烧录的环节是一个不得不考虑的问题。 我们首先排除掉&#xff0c;由外部直接硬件操控FLASH 的方案&#xff0c;这个方案有很多缺点。 1、每个IC使用的FLASH型号是各不相同的&#xff0c;每种型号的FLASH的烧录命令和流程都有差别&#xff0c;这…...

mysql实现分布式锁

利用数据库的悲观锁实现分布式锁,实际应用中要考虑mysql的高可用。 DistributedLock.h #ifndef DistributedLock_H_ #define DistributedLock_H_// // DistributedLock.h: // #include "base/MySQLDriver.h" class CDistributedLock { public://// Construction/D…...

MySQL快速使用

关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表存储数据&#xff0c;格式统一方便维护&#xff1b;使用SQL语言操作&#xff0c;标准统一使用方便 通用语法&#xff1a; …...

LeetCode41.缺失的第一个正数

1. 题目大意 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 2. 思路分析 示例 1&#xff1a; 输入&#xff1a;nums [3,4,-1,1] 输出&#xff1a;2 解释&#xff1…...

ee trade:黄金投资与股票投资的区别

黄金和股票&#xff0c; 是金融市场中两种常见的投资工具&#xff0c; 它们拥有截然不同的特点和风险&#xff0c; 了解它们的差异&#xff0c; 可以帮助投资者制定更合理的投资策略。 一、 投资性质&#xff1a; 避险与成长&#xff0c; 两种投资方向 黄金&#xff1a; 被视…...

AI视频创作原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败

解决办法&#xff0c;查看node_modules所在盘&#xff0c;右击点击属性-工具&#xff0c;点击检查驱动&#xff0c;查完后修复即可&#xff0c; 就能够成功删除损坏的文件了...

Linux下编译安装-单机模式

1.1 Linux下编译安装-单机模式 1.1.1 安装 (1).把安装包放在Linux文件系统下 (2).解压缩 tar -zxf redis-4.0.2.tar.gz (3).切换到解压后的目录 cd redis-4.0.2(4).编译 make(5).进入到src目录 cd src(6).执行安装 make install(7) .返回上级目录 cd .. (8) .修改配置&…...

RSSI定位算法

文章目录 一、定位算法简介1.1. 定位技术原理1.2. 定位算法二、RSSI测距原理2.1. 建模与测量终端到基站的距离三、定位3.1. 三边定位算法3.2. 加权三边定位算法3.3. 加权三角形质心定位算法3.4. 程序定位算法的执行流程一、定位算法简介 1.1. 定位技术原理 定位终端接收到iBe…...

布局管理(Layouts)-Qt-思维导图-学习笔记

布局管理(Layouts) Qt 提供了非常丰富的布局类&#xff0c;主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理&#xff0c;可以将子部件按行或列排列。根据排列方向的不同&#xff0c;QBoxLayout 分为 QHBoxLayout&#xff08;水平布局&#xff09;和 QVBox…...

《区块链赋能游戏业:破解虚拟资产交易与确权难题》

在当今数字化的时代&#xff0c;游戏行业正以前所未有的速度发展&#xff0c;虚拟资产在游戏中的重要性日益凸显。然而&#xff0c;虚拟资产的交易和确权问题一直困扰着游戏开发者和玩家。随着区块链技术的引入&#xff0c;为解决这些问题带来了新的曙光。 首先&#xff0c;我…...

机器学习第十一章-特征选择与稀疏学习

11.1子集收集与评价 属性称为"特征" &#xff0c;对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程&#xff0c;称为"特征选择"。 特征选择是一个重要的"…...

C#中客户端直接引用服务端Proto文件

gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项&#xff0c;然后继续 到此配置完成&#xff0c;然后就和服务共用一份protocol文件...

SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器

SiLM5932SHO系列是一款单通道隔离驱动器&#xff0c;提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V&#xff0c;输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…...

本地项目上传github

一、先在github&#xff08;GitHub: Let’s build from here GitHub&#xff09;上创建仓库 1&#xff0c;登录github后&#xff0c;点击右上角头像&#xff0c;点击 Your repositories 2&#xff0c;点击new 3&#xff0c;填写仓库名&#xff0c;假设命名 testhub&#xff0…...

使用zip包来安装mysql

下载 下载地址mysql,使用5.7.23 配置环境变量 添加到系统变量中 C:\Users\Admin\Downloads\mysql-5.7.23-win32\bin 添加my.ini配置文件 在C:\Users\Admin\Downloads\mysql-5.7.23-win32目录下添加my.ini [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录 b…...

嵌入式面经篇十——驱动开发

文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么&#xff1f;2、内核程序中申请内存使用什么函数&#xff1f;3、内核程序中申请内存和应用程序时申请内存有什么区别&#xff1f;4、自旋锁和信号量在互斥使用时需要注意什么&#xff1f;在中断服务程序里面的互斥是使用…...

MySQL(四)——常用函数

文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数&#xff0c;是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数&#xff0c;我们只需在合适的场景下调用它们即可&#xff0c;调用函数查询结果直接使用SELECT即可&#xff0c;并且可以嵌套使…...

C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。

C Primer&#xff08;第5版&#xff09; 练习 17.38 练习 17.38 扩展上一题中你的程序&#xff0c;将读入的每个单词打印到它所在的行。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 #include<iostream> #include<…...

NC 丑数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 把只包含质因…...

Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)

当前各种AI项目层出不穷&#xff0c;但绝大多数都是用python写的&#xff0c;现在Spring开源了Spring AI项目&#xff0c;让Java开发者也可以轻松给自己的springboot项目集成AI能力。目前spring AI正式版本为0.8.1&#xff0c;支持接入openAI、Ollama、Azure openAI、Huggingfa…...

react中 useContext 和useReducer的使用

在React中&#xff0c;useContext 和 useReducer 是两个非常有用的Hooks&#xff0c;它们分别用于管理跨组件的状态和复杂的状态逻辑。下面将分别介绍这两个Hooks的使用方式及其结合使用的场景。 1. useContext useContext 允许你订阅React的Context变化。Context提供了一种在…...

Android:动态更新app启动图标和应用名

一、需求背景 每逢重要佳节&#xff0c;很多应用启动图标会自动更新为对应佳节的图标&#xff0c;应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon&#xff0c;因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...

深入探讨 ElementUI 动态渲染 el-table

在前端开发中&#xff0c;表格是不可或缺的一部分。无论是数据展示、数据录入&#xff0c;还是数据分析&#xff0c;表格都扮演着重要的角色。而在 Vue.js 生态系统中&#xff0c;ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...