实战项目——用Java实现图书管理系统
前言
首先既然是管理系统,那咱们就要实现以下这几个功能了-->
分析
1.首先是用户分为两种,一个是管理员,另一个是普通用户,既如此,可以定义一个用户类(user),在定义管理员类,普通用户类去继承。
2.还有就是书这个对象,首先是书的属性(书名,作者,价格,种类,是否借出),这可以定义成一个Book类,其实就是存储这些新的容器-- 书架类(Booklist)
3.最后这些功能,仔细观察,由于身份不同,操作也不同,一般来讲,我们可以把对应的方法放到对应的类当中去,但这次用接口也可以巧妙实现
分模块进行编码
book包
为了方便查看,就把这两个类放进一个book的包里。
Book类
package book;public class Book {private String name;//姓名private String author;//作者private int price;//价格private String type;//类型private boolean isLead;//是否被借出public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isLead() {return isLead;}public void setLead(boolean lead) {isLead = lead;}public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +(isLead==true ? "已借出":" 未借出")+//", isLead=" + isLead +'}';}
}
在这个类中,把书的属性成员定义为私有,通过公共成员函数去访问和调用,最后重写toString 方法来表示输出。
Booklist类
package book;public class Booklist {private Book[] books =new Book[10];private int usedSize;//记录存放次数public Booklist() {books[0]=new Book("红楼梦","曹雪芹",25,"小说");books[1]=new Book("月华","小明",27,"小说");books[2]=new Book("多少","小花",20,"小说");this.usedSize=3;}public boolean isFull(){//判断书架是否满if(this.usedSize==books.length){return true;}else{return false;}}public int getUsedSize() {//获取存了多少本书return usedSize;}//设定书的数量public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBooks(int pos) {//获取书架中pos位置书的信息return books[pos];}//把新增的图书信息放到pos位置上去public void setBooks(int pos,Book book) {books[pos]=book;}}
在这个书架类中,定义一个容量为10的对象数组来存储书的信息,事先存入三本书,同时usedSize 用来记录书的数量,而后面的方法则与实现对应的功能相关。且往后细看~接口类
package operater;import book.Booklist;public interface IOperation {void work(Booklist booklist);
}
在这个接口里定义了一个方法 work,该方法需要一个 Booklist 对象作为参数。任何实现 IOperation 接口的类都必须提供 work 方法的具体实现。这样一来就方便不同的用户进行操作了。
User包
user类
package User;import book.Booklist;
import operater.IOperation;// 定义一个抽象类 user,表示用户
public abstract class user {protected String name;// 构造方法,初始化用户名称public user(String name) {this.name = name;}//抽象方法,显示菜单并返回用户选择的操作编号public abstract int menu();//存储用户可以执行的操作数组protected IOperation[] iOperations;//根据用户选择执行相应的操作public void DoIoperation(int choice, Booklist booklist) {//调用用户选择的操作的 work 方法this.iOperations[choice].work(booklist);}
}
因为身份不同,所以显示的菜单也不同,所以便声明一个抽象方法 menu(),同时定义一个操作数组,来进行对应的操作,如图
普通用户类(Normaluser)
package User;import operater.*;import java.util.Scanner;public class Normaluser extends user{//重写构造方法public Normaluser(String name) {super(name);//根据不同的输入进行对应的操作,已经方法按顺序放入数组,所以位置别搞错了this.iOperations=new IOperation[]{new Exit(),new Find(),new Borrow(),new Return()};}public int menu(){System.out.println("******普通用户菜单*****");System.out.println("******1.查找图书******** ");System.out.println("******2.借阅图书******** ");System.out.println("******3.归还图书******** ");System.out.println("******0.退出系统******** ");System.out.println("请输入你的操作:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}
管理员类(Adminuser)
package User;import operater.*;import java.util.Scanner;public class Adminuser extends user{public Adminuser(String name) {super(name);this.iOperations=new IOperation[]{new Exit(),new Find(),new Add(),new Del(),new Show()};}public int menu(){System.out.println("******管理员菜单********");System.out.println("******1.查找图书******** ");System.out.println("******2.新增图书******** ");System.out.println("******3.删除图书******** ");System.out.println("******4.显示图书******** ");System.out.println("******0.退出系统********");System.out.println("************************");System.out.println("请输入你的操作:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}}
operater包
Add类
package operater;import book.Book;
import book.Booklist;import java.util.Scanner;public class Add implements IOperation{public void work(Booklist booklist1){if(booklist1.isFull()){System.out.println("书架已满,不能新增!");}System.out.println("新增图书");System.out.println("请输入你要新增的图书的书名:");Scanner scanner=new Scanner(System.in);String bookName=scanner.nextLine();System.out.println("请输入你要新增的图书的作者:");String bookAuthor= scanner.nextLine();System.out.println("请输入你要新增的图书的价格:");int bookPrice = scanner.nextInt();scanner.nextLine();System.out.println("请输入你要新增的图书的类型:");String bookType = scanner.nextLine();Book book=new Book(bookName,bookAuthor,bookPrice,bookType);int currentSize=booklist1.getUsedSize();//新增图书的位置其实就是i本书的位置booklist1.setBooks(currentSize,book);booklist1.setUsedSize(currentSize+1);//书的数量+1System.out.println("成功添加图书");}
}
在新增图书的过程中,要分别添加书的属性才行,这时切不可直接用booklist,这时类对象,不是数组,创建一个对象数组book,之前Booklist中方法便派上用场, 看图就更好理解了~
Borrow类
package operater;import book.Book;
import book.Booklist;import java.util.Scanner;public class Borrow implements IOperation{public void work(Booklist booklist1){System.out.println("借阅图书");System.out.println("请输入你要借阅的书名:");Scanner scanner=new Scanner(System.in);String bookName=scanner.nextLine();//找到要借阅的书的下标for (int i=0; i < booklist1.getUsedSize() ; i++) {Book book1=booklist1.getBooks(i);if(book1.getName().equals(bookName)) {book1.setLead(true);System.out.println("借阅成功!");return;}}System.out.println("借阅失败!");}}
借阅图书其实和删除差不多,只要改变状态为已借出。
Del类
package operater;import book.Book;
import book.Booklist;import java.util.Scanner;public class Del implements IOperation{public void work(Booklist booklist1){System.out.println("删除图书");System.out.println("请输入你要删除的书名:");Scanner scanner=new Scanner(System.in);String bookName=scanner.nextLine();int current=booklist1.getUsedSize();int pos=-1;int i = 0;//找到要删除的书的下标for (; i < current ; i++) {Book book1=booklist1.getBooks(i);if(bookName.equals(book1.getName())) {//System.out.println("找到了");pos=i;}}if(pos>=current){System.out.println("没有你要找的书!");}//开始删除for (int j = pos; j <current-1; j++) {// booklist1[j]=booklist1[j+1];不能直接用类对象Book book= booklist1.getBooks(j+1);booklist1.setBooks(j,book);}booklist1.setUsedSize(current-1);booklist1.setBooks(current-1,null);System.out.println("删除成功!");}
}
删除图书,首先要找到要删除图书的下标pos, 找到后要把后面的图书全都往前移动一格,从pos位置开始遍历,将j+1位置的图书存放到book对象中去,在调用setBook方法传给j位置。后面的位置设置成null,同时更新书的数量~
Exit类
package operater;import book.Booklist;public class Exit implements IOperation{public void work(Booklist booklist1){System.out.println("退出系统");//避免退出系统后内存被回收int current=booklist1.getUsedSize();for (int i = 0; i < current ; i++) {booklist1.setBooks(i,null);}System.exit(0);}
}
直接调用系统的退出即可~
Find类
package operater;import book.Book;
import book.Booklist;import java.util.Scanner;public class Find implements IOperation{public void work(Booklist booklist1){System.out.println("查找图书");System.out.println("请输入你要查找的书名:");Scanner scanner=new Scanner(System.in);String bookName=scanner.nextLine();int current=booklist1.getUsedSize();for (int i = 0; i < current ; i++) {Book book1=booklist1.getBooks(i);if(bookName.equals(book1.getName())) {System.out.println("找到了");System.out.println(book1);return;}}System.out.println("没找到这本书!");}
}
Return类
package operater;import book.Book;
import book.Booklist;
import java.util.Scanner;public class Return implements IOperation{public void work(Booklist booklist1){System.out.println("归还图书....");System.out.println("请输入你要归还的书名:");Scanner scanner=new Scanner(System.in);String bookName=scanner.nextLine();//找到要归还的书的下标for (int i=0; i < booklist1.getUsedSize() ; i++) {Book book1=booklist1.getBooks(i);if(book1.getName().equals(bookName)) {book1.setLead(false);System.out.println("归还成功!");return;}}System.out.println("归还失败!");}}
Show类
package operater;import book.Book;
import book.Booklist;public class Show implements IOperation{public void work(Booklist booklist1){System.out.println("展示图书");int current=booklist1.getUsedSize();for (int i = 0; i < current ; i++) {Book book1=booklist1.getBooks(i);System.out.println(book1);}}
}
这三个其实是大同小异的,都是循环遍历再进行对应的操作,这里主要记住的是String类型的数据比较不能直接用==,而是要用equals()方法。
看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力
相关文章:
![](https://img-blog.csdnimg.cn/direct/3421613c25994e7597072b84d45a3390.jpeg)
实战项目——用Java实现图书管理系统
前言 首先既然是管理系统,那咱们就要实现以下这几个功能了--> 分析 1.首先是用户分为两种,一个是管理员,另一个是普通用户,既如此,可以定义一个用户类(user),在定义管理员类&am…...
![](https://img-blog.csdnimg.cn/img_convert/3175b0b03dba692823d02190b50ab2f2.jpeg)
利用DeepFlow解决APISIX故障诊断中的方向偏差问题
概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“…...
![](https://www.ngui.cc/images/no-images.jpg)
sqlalchemy获取数据条数
1、sqlalchemy获取数据条数 在SQLAlchemy中,你可以使用count()函数来获取数据表中的记录条数。 from sqlalchemy import create_engine, MetaData, Table# 数据库连接字符串 DATABASE_URI = dialect+driver://username:password@host:port/database# 创建引擎 engine = crea…...
![](https://img-blog.csdnimg.cn/direct/f48eb522a23645038b9a40f47f06e098.png)
SpringBoot的自动配置核心原理及拓展点
Spring Boot 的核心原理几个关键点 约定优于配置: Spring Boot 遵循约定优于配置的理念,通过预定义的约定,大大简化了 Spring 应用程序的配置和部署。例如,它自动配置了许多常见的开发任务(如数据库连接、Web 服务器配…...
![](https://img-blog.csdnimg.cn/img_convert/ee6f9987906740c645b0a9c110df57f3.webp?x-oss-process=image/format,png)
用随机森林算法进行的一次故障预测
本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果。 实验目标 掌握使用机器学习方法训练模型的基本流程;掌握使用pandas做数据分析的基本方法;掌握使用scikit-l…...
![](https://img-blog.csdnimg.cn/direct/7fcc36b23bd54e98ac7229011751d313.png)
24位DAC转换的FPGA设计及将其封装成自定义IP核的方法
在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…...
![](https://img-blog.csdnimg.cn/direct/fcfb43b1d27a442fbb7744dcac41844f.png)
【大模型LLM面试合集】大语言模型基础_llm概念
1.llm概念 1.目前 主流的开源模型体系 有哪些? 目前主流的开源LLM(语言模型)模型体系包括以下几个: GPT(Generative Pre-trained Transformer)系列:由OpenAI发布的一系列基于Transformer架构…...
![](https://img-blog.csdnimg.cn/direct/2eab7e16162344fda3911debb2cd07d4.png)
Qt时间日期处理与定时器使用总结
一、日期时间数据 1.QTime 用于存储和操作时间数据的类,其中包括小时(h)、分钟(m)、秒(s)、毫秒(ms)。函数定义如下: //注:秒(s)和毫秒(ms)有默认值0 QTime::QTime(int h, int m, int s 0, int ms 0) 若无须初始化时间数据,可…...
![](https://www.ngui.cc/images/no-images.jpg)
数据结构——Hash Map
1. Hash Map简介 Hash Map是一种基于键值对的数据结构,通过散列函数将键映射到存储位置,实现快速的数据查找和存储。它可以在常数时间内完成查找、插入和删除操作,因此在需要频繁进行这些操作时非常高效。 2. Hash Map的定义 散列表ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/e6ae1b18297748fa1d50c37630182550.jpeg)
剪画小程序:视频剪辑-视频播放倍数的调整与应用
在这个快节奏的时代,时间变得越来越宝贵,而视频倍数播放功能就像是我们的时间管理小助手,为我们的视频观看带来了极大的便利。你是否好奇它到底能在哪些地方发挥作用呢?让我们一起来看看! 只要使用小程序【剪画】的里…...
![](https://img-blog.csdnimg.cn/img_convert/62070e9a90928f67228a797ab8497aed.png)
使用 Java Swing 和 XChart 创建多种图表
在现代应用程序开发中,数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库,支持多种类型的图表,非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…...
![](https://img-blog.csdnimg.cn/img_convert/965cdaa6abaaaf1a5357d72caf3550bd.png)
信息系统运维管理:实践与发展
信息系统运维管理:实践与发展 信息系统运维管理在现代企业中扮演着至关重要的角色,确保信息系统的高效、安全和稳定运行。本文结合《信息系统运维管理》文档内容,探讨了服务设计阶段、服务转换阶段、委托系统维护管理三个主要章节࿰…...
![](https://img-blog.csdnimg.cn/588a2c28d5a24f1cbdf2195b2569be92.jpg)
html+js+css登录注册界面
拥有向服务器发送登录或注册数据并接收返回数据的功能 点赞关注 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Login and Registration Form</title> <style> * …...
![](https://www.ngui.cc/images/no-images.jpg)
英伟达(NVIDIA)数据中心GPU介绍
英伟达(NVIDIA)数据中心GPU按性能由高到低排行: 1. NVIDIA H100 架构:Hopper 核心数量:18352 CUDA Cores, 1456 Tensor Cores 显存:80 GB HBM3 峰值性能: 单精度(FP32)…...
![](https://www.ngui.cc/images/no-images.jpg)
Leetcode 3202. Find the Maximum Length of Valid Subsequence II
Leetcode 3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路2. 代码实现 题目链接:3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路 这一题的话是上一题3201. Find the Maximum Length of Valid Subsequence I的升级版&am…...
![](https://www.ngui.cc/images/no-images.jpg)
通过Spring Boot结合实时流媒体技术对考试过程进行实时监控
本章将深入探讨考试系统中常见的复杂技术问题,并提供基于Spring Boot 3.x的解决方案。涵盖屏幕切换检测与防护、接打电话识别处理、行为监控摄像头使用、网络不稳定应对等,每篇文章详细剖析问题并提供实际案例与代码示例,帮助开发者应对挑战&…...
![](https://www.ngui.cc/images/no-images.jpg)
智能扫地机器人避障与防跌落问题解决方案
智能扫地机器人出现避障与防跌落问题时,可以通过以下几种方式来解决: 一、避障问题的解决方案 1.升级避障技术: ① 激光雷达避障:激光雷达通过发射和接收激光信号来判断与障碍物的距离,具有延迟低、效果稳定、准确度…...
![](https://img-blog.csdnimg.cn/img_convert/0708625db5d4d97efff088e41003973d.png)
德旺训练营称重问题
这是考小学的分治策略,小学的分治策略几乎都是分三组。本着这个策略,我们做看看。 第一次称重: 分三组,16,16,17,拿两个16称,得到A情况,一样重,那么假铜钱在那组17个里面。B情况不…...
![](https://www.ngui.cc/images/no-images.jpg)
数据决策系统详解
文章目录 数据决策系统的核心组成部分:1. **数据收集与整合**:2. **数据处理与分析**:3. **数据可视化**:4. **决策支持**: 数据决策系统的功能:决策类型:数据决策系统对企业的重要性࿱…...
![](https://www.ngui.cc/images/no-images.jpg)
JSON 简述与应用
1. JSON 简述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于客户端与服务器之间的数据传递。它基于JavaScript对象表示法,但独立于语言,可以被多种编程语言解析和生成。 1.1 特点 轻量级&#…...
![](https://img-blog.csdnimg.cn/direct/77aa2041eb85414b8f81627a18af0475.png)
ResNet50V2
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、ResNetV1和ResNetV2的区别 ResNetV2 和 ResNetV1 都是深度残差网络(ResNet)的变体,它们的主要区别在于残差块的设计和…...
![](https://www.ngui.cc/images/no-images.jpg)
基于深度学习的虚拟换装
基于深度学习的虚拟换装技术旨在通过计算机视觉和图像处理技术,将不同的服装虚拟地穿在用户身上,实现快速的试穿和展示。这项技术在电商、时尚和虚拟现实领域具有广泛的应用,能够提升用户体验,增加互动性。以下是关于这一领域的系…...
![](https://img-blog.csdnimg.cn/direct/1dc337521ad0403f8b31f1f5ba2f0527.png#pic_center)
单段时间最优S型速度规划算法
一,背景 在做机械臂轨迹规划的单段路径的速度规划时,除了参考《Trajectory Planning for Automatic Machines and Robots》等文献之外,还在知乎找到了这位大佬 韩冰 写的在线规划方法: https://zhuanlan.zhihu.com/p/585253101/e…...
![](https://www.ngui.cc/images/no-images.jpg)
pom文件-微服务项目结构
一、微服务项目结构 my-microservices-project/ ├── pom.xml <!-- 父模块的pom.xml --> ├── ry-system/ │ ├── pom.xml <!-- 子模块ry-system的pom.xml --> │ └── src/main/java/com/example/rysystem/ │ └── RySystemApplication.…...
![](https://www.ngui.cc/images/no-images.jpg)
解析Kotlin中的Nothing【笔记摘要】
1.Nothing的本质 Nothing 的源码很简单: public class Nothing private constructor()可以看到它是个class,但它的构造函数是 private 的,这就导致我们没法创建它的实例,并且在源码里 Kotlin 也没有帮我们创建它的实例。 基于这…...
![](https://www.ngui.cc/images/no-images.jpg)
toRefs 和 toRef
文章目录 toRefs 和 toReftoRefstoRef toRefs 和 toRef toRefs toRefs 把一个由reactive对象的值变为一个一个ref的响应式的值 import { ref, reactive, toRefs, toRef } from vue; let person reactive({name: 张三,age: 18, }); // toRefs 把一个由reactive对象的值变为一…...
![](https://img-blog.csdnimg.cn/img_convert/5f86325aceef5ec2b87b3744d417605e.jpeg)
Vision Transformer论文阅读笔记
目录 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale -- Vision Transformer摘要Introduction—简介RELATED WORK—相关工作METHOD—方法VISION TRANSFORMER (VIT)—视觉Transformer(ViT) 分析与评估PRE-TRAINING DATA REQUIREMENTS—预训练数据…...
![](https://www.ngui.cc/images/no-images.jpg)
MapReduce的执行流程排序
MapReduce 是一种用于处理大规模数据集的分布式计算模型。它将作业分成多个阶段,以并行处理和分布式存储的方式来提高计算效率。以下是 MapReduce 的执行流程以及各个阶段的详细解释: 1. 作业提交(Job Submission) 用户通过客户端…...
![](https://www.ngui.cc/images/no-images.jpg)
雅思词汇及发音积累 2024.7.3
银行 check (美)支票 cheque /tʃek/ (英)支票 ATM 自动取款机 cashier 收银员 teller /ˈtelə(r)/ (银行)出纳员 loan 贷款 draw/withdraw money 提款 pin number/passsword/code …...
![](https://img-blog.csdnimg.cn/direct/67c64049147741939b85489caefbb597.png)
Vue2和Vue3的区别Vue3的组合式API
一、Vue2和Vue3的区别 1、创建方式的不同: (1)、vue2:是一个构造函数,通过该构造函数创建一个Vue实例 new Vue({})(2)、Vue3:是一个对象。并通过该对象的createApp()方法,创建一个vue实例。 Vue…...
![](https://www.ngui.cc/images/no-images.jpg)
ML307R OpenCPU HTTP使用
一、函数介绍 二、示例代码 三、代码下载地址 一、函数介绍 具体函数可以参考cm_http.h文件,这里给出几个我用到的函数 1、创建客户端实例 /*** @brief 创建客户端实例** @param [in] url 服务器地址(服务器地址url需要填写完整,例如(服务器url仅为格式示…...
![](https://www.ngui.cc/images/no-images.jpg)
【状态估计】线性高斯系统的状态估计——离散时间的递归滤波
前两篇文章介绍了离散时间的批量估计、离散时间的递归平滑,本文着重介绍离散时间的递归滤波。 前两篇位置:【状态估计】线性高斯系统的状态估计——离散时间的批量估计、【状态估计】线性高斯系统的状态估计——离散时间的递归平滑。 离散时间的递归滤波…...
![](https://img-blog.csdnimg.cn/direct/1a824024aa8842caaff8605b263c4aa8.png)
架构设计上中的master三种架构,单节点,主从节点,多节点分析
文章目录 背景单节点优点缺点 主从节点优点缺点 多节点优点缺点 多节点,多backup设计优点缺点 总结 背景 在很多分布式系统里会有master,work这种结构。 master 节点负责管理资源,分发任务。下面着重讨论下master 数量不同带来的影响 单节点 优点 1.设…...
![](https://img-blog.csdnimg.cn/img_convert/3a084006253b6d6f6c2278b17411c1d2.png)
如何在 SQL 中删除一条记录?
如何在 SQL 中删除一条记录? 在 SQL 中,您可以使用DELETE查询和WHERE子句删除表中的一条记录。在本文中,我将向您介绍如何使用DELETE查询和WHERE子句删除记录。我还将向您展示如何一次从表中删除多条记录 如何在 SQL 中使用 DELETE 这是使…...
![](https://img-blog.csdnimg.cn/direct/d5b823ea14dc4a359287c44f9ae20e05.png)
JavaSE (Java基础):面向对象(上)
8 面向对象 面向对象编程的本质就是:以类的方法组织代码,以对象的组织(封装)数据。 8.1 方法的回顾 package com.oop.demo01;// Demo01 类 public class Demo01 {// main方法public static void main(String[] args) {int c 10…...
![](https://img-blog.csdnimg.cn/direct/cf39d15da11b4b12ad258f753b925823.png)
flink使用StatementSet降低资源浪费
背景 项目中有很多ods层(mysql 通过cannal)kafka,需要对这些ods kakfa做一些etl操作后写入下一层的kafka(dwd层)。 一开始采用的是executeSql方式来执行每个ods→dwd层操作,即类似: def main(…...
![](https://img-blog.csdnimg.cn/direct/f15679af56a541cabd81cb24e8a9f63c.png)
FineDataLink4.1.9支持Kettle调用
FDL更新至4.1.9后,新增kettle调用功能,支持不增加额外负担的情况下,将现有的Kettle任务平滑迁移到FineDataLink。 一、更新版本前存在的问题与痛点 在此次功能更新前,用户可能会遇到以下问题: 1.对于仅使用kettle的…...
![](https://img-blog.csdnimg.cn/img_convert/f9424d07f5f822d307e4978ae4313a84.jpeg)
SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联
在刚刚落下帷幕的华为开发者大会2024上,伴随全场景智能操作系统HarmonyOS Next的盛大发布,作为基于OpenHarmony的同根同源系统生态,软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通,率先攻克基…...
![](https://img-blog.csdnimg.cn/img_convert/c2e4301d8e8385e4892d8e875c9561ca.png)
Win11禁止右键菜单折叠的方法
背景 在使用windows11的时候,会发现默认情况下,右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单,然后再点击。而且每次在显示菜单时先是全部展示,再隐藏一下,看着着实难…...
![](https://img-blog.csdnimg.cn/direct/e4a74b510a8e4981892d9753e64bb420.png)
Maven列出所有的依赖树
在 IntelliJ IDEA 中,你可以使用 Maven 插件来列出项目的依赖树。Maven 插件提供了一个名为dependency:tree的目标,可以帮助你获取项目的依赖树详细信息。 要列出项目的依赖树,可以执行以下步骤: 打开 IntelliJ IDEA,…...
![](https://www.ngui.cc/images/no-images.jpg)
测试开发面试题和答案
Python 请解释Python中的列表推导式(List Comprehension)是什么,并给出一个示例。 答案: 列表推导式是Python中一种简洁的构建列表的方法。它允许从一个已存在的列表创建新列表,同时应用一个表达式来修改或选择元素。…...
![](https://img-blog.csdnimg.cn/direct/15f493b469cb48879320a52ddf49e796.png)
llm学习-3(向量数据库的使用)
1:数据读取和加载 接着上面的常规操作 加载环境变量---》获取所有路径---》加载文档---》切分文档 代码如下: import os from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv()) # 获取folder_path下所有文件路径,储存在…...
![](https://img-blog.csdnimg.cn/direct/668257b35e2d44a9a7b79f0b6f8542f4.png)
【01-02】Mybatis的配置文件与基于XML的使用
1、引入日志 在这里我们引入SLF4J的日志门面,使用logback的具体日志实现;引入相关依赖: <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux-进程间通信(IPC)
进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同的进程之间传播或交换信息。IPC 的方式包括管道(无名管道和命名管道)、消息队列、信号量、共享内存、Socket、Stre…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ STL: std::vector与std::array的深入对比
什么是 std::vector 和 std::array 首先,让我们简要介绍一下这两种容器: • std::vector:一个动态数组,可以根据需要动态调整其大小。 • std::array:一个固定大小的数组,其大小在编译时确定。 虽然…...
![](https://img-blog.csdnimg.cn/img_convert/cd39730e1c510a153a2f37436b5a0d89.jpeg)
哈哈看到这条消息感觉就像是打开了窗户
在这个信息爆炸的时代,每一条动态可能成为我们情绪的小小触发器。今天,当我无意间滑过那条由杜海涛亲自发布的“自曝式”消息时,不禁心头一颤——如果这是我的另一半,哎呀,那画面,简直比烧烤摊还要“热辣”…...
![](https://img-blog.csdnimg.cn/direct/e06acc3c028a448a84acdfff46a7ddd6.png)
10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel
1、前言 在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不…...
![](https://www.ngui.cc/images/no-images.jpg)
如何正确面对GPT-5技术突破
随着人工智能技术的快速发展,预训练语言模型在自然语言处理领域取得了显著的成果。其中,GPT系列模型作为代表之一,受到了广泛关注。2023年,GPT-5模型的发布引起了业界的热烈讨论。本文将从以下几个方面分析GPT-5的发布及其对人工智…...
![](https://img-blog.csdnimg.cn/direct/78fc904aa28c420fb3a245f2bde8eb73.png)
HarmonyOS ArkUi 官网踩坑:单独隐藏导航条无效
环境: 手机:Mate 60 Next版本: NEXT.0.0.26 导航条介绍 导航条官网设计指南 setSpecificSystemBarEnabled 设置实际效果: navigationIndicator:隐藏导航条无效status:会把导航条和状态栏都隐藏 官方…...
![](https://www.ngui.cc/images/no-images.jpg)
解决跨域问题(vite、axios/koa)
两种方法选其一即可 一、后端koa设置中间件 app.use(async (ctx, next)> {ctx.set(Access-Control-Allow-Origin, *);ctx.set(Access-Control-Allow-Headers, Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild);ctx.set(Access-C…...
![](https://img-blog.csdnimg.cn/5157616f2265408592f3a2f49081aeeb.jpg)
前端面试题7(单点登录)
如何实现单点登录 单点登录(Single Sign-On,简称SSO)是一种允许用户在多个应用系统中只需登录一次,就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议,如OAuth、Ope…...
![](https://www.ngui.cc/images/no-images.jpg)
Apache tika 实现各种文档内容解析
Apache tika 实现各种文档内容解析 1、依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&…...
![](https://www.ngui.cc/images/no-images.jpg)
字节跳动 AML 前端 一面
时长55mins 1. 自我介绍 1. 怎么接触的前端?学了多久? 1. 问项目 1. 为什么要做组件库? 1. 问到我的组件库和AntD之类的有什么区别,我说区别可能就是我的功能更少?hhhh 1. 设计一个组件的思路&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
Excel 中的元素定位:相对定位、绝对定位和混合定位
在Excel中,单元格引用有三种主要类型:相对定位、绝对定位和混合定位。 这些类型主要用于公式和函数中,决定在复制或拖动公式时引用如何变化。 1. 相对定位 相对定位指的是不带“$”符号的单元格引用,例如 A1。 这种引用方式在…...
![](https://img-blog.csdnimg.cn/29cb26bc941540b292e67479487245b3.gif#pic_center)
【LeetCode:3099. 哈沙德数 + 模拟】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
![](https://www.ngui.cc/images/no-images.jpg)
使用 Qt 实现自定义拖动窗口
文章目录 如何在 Qt 中实现无标题栏窗口的拖动准备工作创建自定义窗口类使用 QDialog 实现拖动功能详细解释代码行解释 小结 如何在 Qt 中实现无标题栏窗口的拖动 在许多桌面应用程序中,我们经常需要自定义窗口外观,包括去掉标题栏,使窗口看…...
![](https://img-blog.csdnimg.cn/direct/42bde2e201a74639b6f70755b19188b2.png)
GPT-4o:重塑人机交互的未来
一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能(AI)领域,自然语言处理(NLP)技术一直被视为连接人类与机器的桥梁。近年来,随着深度学习技术的快速发展,NLP领域迎来了前所未有的变革…...
![](https://img-blog.csdnimg.cn/direct/2a17917286ec4a57a4b30043595f7c79.png)
PyMySQL连接池
背景 在用python写后端服务时候,需要与mysql数据库进行一些数据查询或者插入更新等操作。启动服务后接口运行一切正常, 隔了第二天去看服务日志就会报错,问题如下: pymysql.err.OperationalError: (2006, "MySQL server ha…...
![](https://img-blog.csdnimg.cn/img_convert/6f84fbff6363c09b83438f98959e0fdf.png)
平方回文数-第13届蓝桥杯选拔赛Python真题精选
[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第73讲。 平方回文数&#…...
![](https://img-blog.csdnimg.cn/direct/1e92fc31abd842aa99f980888cc5a97a.png)
java8以上版本
java9及其以上版本 一、JDK17 LTS 常用新特性1、switch语句的增强2、字符串拼接3、判断类型instanceof自动类型转换4、密封类 关键字 sealed permits5、record类6、优化空指针异常7、ZGC垃圾收集器 一、JDK17 LTS 常用新特性 1、switch语句的增强 在 Java 17中,sw…...
![](https://img-blog.csdnimg.cn/img_convert/46ad4025bf87b7166c623f56da2080cc.png)
家政上门服务小程序,客商紧密连系的作用是什么
家政服务拓展速度很快,大小城市都有不少品牌门店,其涵盖项目多样化,使得部分年轻人和老年人长期消费需要,商家与客户都需要完善的路径进行长期合作。 运用【雨科】平台搭建家政上门服务预约小程序,客户随时预约服务、…...
![](https://www.ngui.cc/images/no-images.jpg)
JS中 rgba颜色动态修改成半透明颜色
function setHalfOpacity(rgbaString) { // 验证rgbaString是否符合rgba(r,g,b,a)的格式 // 这里只做了简单的验证,可能需要更严格的验证逻辑 if (!/^rgba\(\d,\d,\d,(0\.\d{1,2}|1(?:\.0{1,2})?)\)$/.test(rgbaString)) { throw new Error(Invalid rgba stri…...