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

Java图书管理系统(简易保姆级)

前面学习了这么多知识,为了巩固之前的知识,我们就要写一个图书管理系统来帮助大家复习,让大家的知识融会贯通~~~

话不多说,直接开始今天的内容~


首先呢,我们要有一个大体的思路:

实现效果思路有两种情况:

1.实现普通用户

输入用户名->

Re.不晚

选择身份:  1->管理员   2->普通用户

2

欢迎Re.不晚来到图书管理系统
******普通用户菜单******
1 借阅图书
2 查找图书
3 显示图书
4 归还图书
0 退出系统
********************

2.实现管理员

输入用户名->

Re.不晚

选择身份:  1->管理员   2->普通用户

1

欢迎Re.不晚来到图书管理系统
******管理员菜单******
1 增加图书
2 查找图书
3 删除图书
4 显示图书
0 退出系统
********************

到这一步 ,我们就有了一个大体思路了,首先使用这个系统有两类人,第一类人是普通用户,第二类人是系统管理员

我们先来定义一个User的包,然后有一个User的类作为父类,然后再创建普通用户NormalUser和图书系统管理员AdminUser,不管是普通用户还是系统管理员都将作为子类继承父类

那我们先来说一下User类怎么写,首先不管你是普通用户还是系统管理员,我们都要输入一下名字 ,所以这个类里面就有了名字~

package User;public class User {public String name;public User(String name) {this.name = name;}
}

然后另外两个子类要继承这个父类,我们的代码如下:

package User;
import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);//用super访问父类的名字属性}
}
package User;
import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);//用super访问父类属性}
}

之后,我们就要选择身份了,选择完身份,我们就需要进入菜单了,不管是哪个子类都有菜单,如果选择了1 就进入AdminUser的菜单,如果选择了2 就进入NormalUser的菜单,我们把菜单抽象到User类里面,那么此时User就变成了抽象类,那么三个类的代码如下:

package User;public abstract class User {public String name;public User(String name) {this.name = name;}public abstract int menu();
}
package User;
import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);}@Overridepublic int menu() {//重写User类里面的抽象方法,也就是菜单System.out.println("欢迎"+this.name+"来到图书管理系统");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("********************");Scanner sc = new Scanner(System.in);//由于要在菜单里面选择0~3的数字,所以我们要返回用户输入的值int choice = sc.nextInt();//用户在菜单中选择return choice;//返回用户的选择}
}
package User;
import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);}@Overridepublic int menu() {System.out.println("欢迎"+this.name+"来到图书管理系统");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("********************");Scanner sc = new Scanner(System.in);//由于管理员要选择0~4之间的数字,所以我们要输入一个数字int choice = sc.nextInt();//管理员输入一个0~4之间的数字return choice;//返回管理员选择的数字}
}

那这个时候,前面铺垫的差不多了,我们就要写一个登录系统来串一下整体的逻辑,代码如下(有注释):

import User.AdminUser;
import User.NormalUser;
import User.User;
import java.util.Scanner;public class Main {public static User login(){   //由于这里要返回AdminUser或者NormalUser,所以这里的login()方法是User类Scanner sc = new Scanner(System.in);System.out.println("Enter your username: ");String name = sc.nextLine();//这里就是输入你的名字System.out.println("Enter your identity: 1->AdminUser 2->NormalUser");int choice = sc.nextInt();//这里就是输入你的选择,选1就是AdminUser,选2就是NormalUserif(choice == 1){return new AdminUser(name);//如果选择1,那么就返回AdminUser的类}else if(choice == 2){return new NormalUser(name);//如果选择2,那么就返回NormalUser的类}}public static void main(String[] args) {User user = login();//由于这里要返回AdminUser或者NormalUser,所以这里的login()方法是User类,所以当新建一个对象也是User类}
}

那用户方面我们大体写出来了,接下来我们该考虑图书了,首先,我们需要建立一个书架,上面放着书,一本书有作者,价格,书名,类型,有没有被借走这几种状态,那么我们就可以先建立一个包~

然后在Book类里面,有这么几种属性,书名,作者,价格,类型,借走状态(代码如下):

package BookShelf;public class Book {private String name;private String author;private int price;private String type;private boolean isborrowed;public Book(String name, String author, String type, int price) {this.name = name;this.author = author;this.type = type;this.price = price;this.isborrowed = false;}//构造方法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 isborrowed() {return isborrowed;}public void setborrowed(boolean isborrowed) {this.isborrowed = isborrowed;}//这里重写了toString的方法,在进行new对象时,输出这个对象时就是这里的输出格式@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isborrowed=" + isborrowed +'}';}
}

然后在另一个BookList类里,则代表关于存放几本书,具体的书籍初始化等问题,而且要把Book创建成一个数组,每个数组里面,包含Book类的属性,代码如下:

package BookShelf;public class BookList {private Book[] books;//创建Book类型的数组private static final int default_size = 10;//数组的大小private int validSzie;//有效书籍个数public BookList() {this.books = new Book[default_size];//创建一个大小为10的Book类数组//假设刚开始这个系统存放了三本书this.books[0] = new Book("Book 1", "Author 1", "ISBN 1", 2000);this.books[1] = new Book("Book 2", "Author 2", "ISBN 2", 3000);this.books[2] = new Book("Book 3", "Author 3", "ISBN 3", 4000);//有效书籍个数为3this.validSzie = 3;}//若调用此方法,则打印所有书籍(具体在Book类里 toString 方法实现打印)public Book[] getBooks() {return books;}//调用此方法则获得有效书籍的个数public int getValidszie() {return validSzie;}//若调用此方法则可以赋值效书籍的个数public void setValidSzie(int validszie) {this.validSzie = validszie;}//若调用此方法,则打印一本书籍的信息public Book getBooks(int pos) {return books[pos];}//若调用此方法,则可以增加一本书,对书进行初始化public void setBooks(int pos, Book book) {books[pos] = book;}
}

那么书架我们也写好了,在串联用户和书架时,我们突然想到有这么一个步骤,用户选择了菜单中一项内容,然后我门要对书架进行增删查改,这个时候,我们就通过菜单的功能串联起来了,前面我们讲到菜单的返回是一个整数,那么我们要针对选择的整数,进行一个功能上的选择,那么我们应该怎么做呢?

答案就是,把这些功能,放到 一个数组里面!

那么我们的包就可以这样创建:

在这些功能中,都有各自的方法,每个方法都不一样,但是他们都有功能,那么这个时候,我们就想到了接口,把功能写到这个接口里,后面不管写哪个具体的功能都要进行重写,代码如下:

package operation;
import BookShelf.BookList;public interface IOperation {void work(BookList bookList);
}

考虑到当我们初始化普通用户或者是管理员的功能不同,我们在User类里面,创建这个功能数组~

那么User类的代码如下:

package User;
import BookShelf.BookList;
import operation.IOperation;public abstract class User {public String name;public IOperation[] ioPerations;//创建的功能数组public User(String name) {this.name = name;}public abstract int menu();public void doOperations(int choice, BookList books) {IOperation iOperation = this.ioPerations[choice];//这里指的是创建功能数组时,由于菜单那里返回的是用户选择的一个整数,那么我们就对应到数组中具体的那个功能iOperation.work(books);//调用不同功能中的方法~}
}

 那我们其它两个子类的代码如下:

package User;import operation.*;import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);//初始化功能数组,把功能放到数组里面,因为功能都有一个共同的接口,所以数组的类型为IOperationthis.ioPerations = new IOperation[]{new ExitBook(),//数组下标为0,功能为退出系统(其他几行以此类推)new BorrowBook(),new FindBook(),new ShowBook(),new ReturnBook()};}@Overridepublic int menu() {System.out.println("欢迎"+this.name+"来到图书管理系统");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("********************");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();return choice;}
}
package User;import operation.*;import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);//初始化功能数组this.ioPerations = new IOperation[]{new AddBook(),new FindBook(),new DeleteBook(),new ShowBook(),};}@Overridepublic int menu() {System.out.println("欢迎"+this.name+"来到图书管理系统");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("********************");Scanner sc = new Scanner(System.in);int choice = sc.nextInt();return choice;}
}

那我们接下来以显示图书为例,也就是在ShowBook类里面,来给大家实现一下具体的功能~

package operation;
import BookShelf.Book;
import BookShelf.BookList;public class ShowBook implements IOperation{//重写接口中的方法public void work(BookList bookList) {System.out.println("正在显示图书......");int currentSize = bookList.getValidszie();//获取有效书籍的个数for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBooks(i);System.out.println(tmp);//打印所有书籍}}}

那么我们在main方法里面怎么调用呢? 代码如下:

import BookShelf.BookList;
import User.AdminUser;
import User.NormalUser;
import User.User;import java.util.Scanner;public class Main {public static User login(){Scanner sc = new Scanner(System.in);System.out.println("Enter your username: ");String name = sc.nextLine();System.out.println("Enter your identity: 1->AdminUser 2->NormalUser");int choice = sc.nextInt();if(choice == 1){return new AdminUser(name);}else if(choice == 2){return new NormalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();User user = login();while(true){int choice = user.menu();if(choice == 0){System.out.println("退出系统......");break;}else{user.doOperations(choice,bookList);}}}
}

之后我们就实现其它具体功能就好啦~

ExitBook类的具体实现代码如下:

package operation;
import BookShelf.BookList;public class ExitBook implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("Exit BookSystem");int currentSize = bookList.getValidszie();for (int i = 0; i < currentSize; i++) {bookList.setBooks(i,null);}bookList.setValidSzie(0);System.exit(0);}
}

FindBook类的具体实现代码如下:

package operation;
import BookShelf.Book;
import BookShelf.BookList;
import java.util.Scanner;public class FindBook implements IOperation {public void work(BookList bookList){System.out.println("正在查找图书......");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的书籍名称");String bookName = scanner.nextLine();int currentSize = bookList.getValidszie();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBooks(i);if (book.getName().equals(bookName)) {System.out.println("找到了这本书,书籍信息如下所示");System.out.println(book);return;}}System.out.println("没有此书");}
}

AddBook类具体实现功能如下:

package operation;import BookShelf.Book;
import BookShelf.BookList;import java.util.Scanner;public class AddBook implements IOperation {public void work(BookList bookList){System.out.println("正在增加图书......");Scanner scanner = new Scanner(System.in);System.out.println("请输入书的名称");String bookName = scanner.nextLine();System.out.println("请输入作者的名称");String author = scanner.nextLine();System.out.println("请输入书的类型");String type = scanner.nextLine();System.out.println("请输入书的价格");int price = scanner.nextInt();Book book = new Book(bookName, author, type, price);int currentSize = bookList.getValidszie();for (int i = 0; i < currentSize; i++) {if(bookList.getBooks(i).getName().equals(bookName)){System.out.println("存在此书,请勿重复添加");return;}}bookList.setBooks(currentSize,book);bookList.setValidSzie(currentSize+1);}private boolean isFull(BookList bookList){return bookList.getBooks().length == bookList.getValidszie();}
}

DeleteBook类具体实现功能如下:

package operation;import BookShelf.Book;
import BookShelf.BookList;import java.util.Scanner;public class DeleteBook implements IOperation {public void work(BookList bookList){System.out.println("正在删除图书......");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要删除图书的名称");String bookName = scanner.nextLine();int currentSize = bookList.getValidszie();int index = -1;int i = 0;for (i = 0; i < currentSize; i++) {Book tmp = bookList.getBooks(i);if(bookList.getBooks(i).getName().equals(bookName)){index = i;break;}}if(index < 0){System.out.println("没有此书");return;}for (int j = index; j < currentSize-1; j++) {Book tmp = bookList.getBooks(j+1);bookList.setBooks(j,tmp);}bookList.setValidSzie(currentSize-1);bookList.setBooks(currentSize-1,null);System.out.println("已删除图书");}
}

BorrowBook类具体实现功能如下:

package operation;
import BookShelf.Book;
import BookShelf.BookList;
import java.util.Scanner;public class BorrowBook implements IOperation {public void work(BookList bookList){System.out.println("开始借阅图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要借阅的图书");String bookName = scanner.nextLine();int currentSize = bookList.getValidszie();for (int i = 0; i < currentSize; i++) {if(bookList.getBooks(i).getName().equals(bookName)){Book book = bookList.getBooks(i);if(book.isborrowed()){System.out.println("此书已被借走");}else{book.setborrowed(true);System.out.println(book);System.out.println("借阅成功");}return;}}System.out.println("未找到此书");}
}

ReturnBook类具体实现功能如下:

package operation;
import BookShelf.Book;
import BookShelf.BookList;
import java.util.Scanner;public class ReturnBook implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("开始归还图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要归还的图书");String bookName = scanner.nextLine();int currentSize = bookList.getValidszie();for (int i = 0; i < currentSize; i++) {if(bookList.getBooks(i).getName().equals(bookName)){Book book = bookList.getBooks(i);if(!book.isborrowed()){System.out.println("此书未被借出");}else{book.setborrowed(false);System.out.println(book);System.out.println("归还成功");}return;}}System.out.println("未找到此书");}}

之后我们就写完了一个简易版的图书管理系统啦~


由于这篇博客带有讲解,也包含了全部代码,但是怕有些小伙伴混乱,所以所有代码放到下篇博客汇总

大家加油!拜拜~

相关文章:

Java图书管理系统(简易保姆级)

前面学习了这么多知识&#xff0c;为了巩固之前的知识&#xff0c;我们就要写一个图书管理系统来帮助大家复习&#xff0c;让大家的知识融会贯通~~~ 话不多说&#xff0c;直接开始今天的内容~ 首先呢&#xff0c;我们要有一个大体的思路&#xff1a; 实现效果思路有两种情况&a…...

嵌入式硬件设计:从概念到实现的全流程

嵌入式硬件设计是现代电子技术中一个至关重要的领域&#xff0c;涉及从硬件架构设计到硬件调试的各个方面。它为我们日常生活中的各类智能设备、家电、工业控制系统等提供了强大的支持。本文将介绍嵌入式硬件设计的基本流程、关键技术、常用工具以及常见的挑战和解决方案&#…...

第 4 章 Java 并发包中原子操作类原理剖析

原子变量操作类 AtomicLong 是原子性递增或者递减类&#xff0c;其内部使用 Unsafe 来实现&#xff0c;AtomicLong类也是在 rt.jar 包下面的&#xff0c;AtomicLong 类就是通过 BootStarp 类加载器进行加载的。这里的原子操作类都使用 CAS 非阻塞算法 private static final lon…...

从 0 到 1 掌握部署第一个 Web 应用到 Kubernetes 中

文章目录 前言构建一个 hello world web 应用项目结构项目核心文件启动项目 检查项目是否构建成功 容器化我们的应用编写 Dockerfile构建 docker 镜像推送 docker 镜像仓库 使用 labs.play-with-k8s.com 构建 Kubernetes 集群并部署应用构建 Kubernetes 集群环境编写部署文件 总…...

政安晨【零基础玩转各类开源AI项目】探索Cursor-AI Coder的应用实例

目录 Cusor的主要特点 Cusor实操 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; Cursor 是 Visual Studio Code 的一个分支。这使我们能够…...

CentOS 7 安装部署 KVM

1.关闭虚拟机 打开相关选项 打开虚拟机centos7 连接xshell 测试网络&#xff0c;现在就是没问题的&#xff0c;因为我们要使用网络源 安装 GNOME 桌面环境 安装KVM 模块 安装KVM 调试工具 构建虚拟机的命令行工具 qemu 组件,创建磁盘、启动虚拟机等 输入这条命令&#xff0c;…...

ArcGIS 10.2软件安装包下载及安装教程!

今日资源&#xff1a;ArcGIS 适用系统&#xff1a;WINDOWS 软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地…...

一个专为云原生环境设计的高性能分布式文件系统

大家好&#xff0c;今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS&#xff0c;旨在解决海量云存储与各类应用平台&#xff08;如大数据、机器学习、人工智能等&#xff09;之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...

基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码

文章目录 基于深度学习算法的花卉分类识别系统一、项目摘要二、项目运行效果三、项目文件介绍四、项目环境配置1、项目环境库2、环境配置视频教程 五、项目系统架构六、项目构建流程1、数据集2、算法网络Mobilenet3、网络模型训练4、训练好的模型预测5、UI界面设计-pyqt56、项目…...

3174、清除数字

3174、[简单] 清除数字 1、题目描述 给你一个字符串 s 。你的任务是重复以下操作删除 所有 数字字符&#xff1a; 删除 第一个数字字符 以及它左边 最近 的 非数字 字符。 请你返回删除所有数字字符以后剩下的字符串。 2、解题思路 遍历字符串&#xff1a; 我们需要逐个遍…...

C++ 优先算法 —— 无重复字符的最长子串(滑动窗口)

目录 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口&#xff08;同向双指针&#xff09; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 滑动窗口 题目&#xff1a; 无重复字符的最长子串 1. 题目解析 题目截图&#xff1a; 此题所说的…...

ADS学习笔记 6. 射频发射机设计

基于ADS2023 update2 更多ADS学习笔记&#xff1a;ADS学习笔记 1. 功率放大器设计ADS学习笔记 2. 低噪声放大器设计ADS学习笔记 3. 功分器设计ADS学习笔记 4. 微带分支定向耦合器设计ADS学习笔记 5. 微带天线设计 -1、射频发射机性能指标 在射频电路和系统中&#xff0c;发送…...

上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量

在当今快速发展的物联网市场中&#xff0c;无线连接技术的不断进步对智能设备的性能和能效提出了更高要求。为了满足这一需求&#xff0c;乐鑫科技推出了ESP32-C61——一款高性价比的Wi-Fi 6芯片&#xff0c;旨在为用户设备提供更出色的物联网性能&#xff0c;并满足智能设备连…...

QT QRadioButton控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍&#xff0c;发展也很迅猛&#xff0c;学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出&#xff0c;但51单片机价格低廉、易学易用、性能成熟&#xff0c;在家电和工业控制中有一定的应用&#xff0c;而且学好了51单片机&…...

零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu

1.为啥使用Linux做嵌入式开发 能广泛支持硬件 内核比较高效稳定 原码开放、软件丰富 能够完善网络通信与文件管理机制 优秀的开发工具 2.什么是Ubuntu 是一个以桌面应用为主的Linux的操作系统&#xff0c; 内核是Linux操作系统&#xff0c; 具有Ubuntu特色的可视…...

C#中面试的常见问题007

1.在EF中实现一个实体对应多个表 1. 表拆分&#xff08;Table Splitting&#xff09; 表拆分是指将一个实体映射到两个或多个表中的行。这通常发生在实体的属性分布在不同的表中&#xff0c;但这些表通过外键关联到同一个主表。在EF Core中&#xff0c;可以通过Fluent API来配…...

人工智能——大语言模型

5. 大语言模型 5.1. 语言模型历史 20世纪90年代以前的语言模型都是基于语法分析这种方法&#xff0c;效果一直不佳。到了20世纪90年代&#xff0c;采用统计学方法分析语言&#xff0c;取得了重大进展。但是在庞大而复杂的语言信息上&#xff0c;基于传统统计的因为计算量巨大…...

nodejs第三方库sharp对图片的操作生成新图片、压缩、添加文字水印及图片水印等

Sharp是一个基于libvips的高性能Node.js图像处理库&#xff0c;它提供了广泛的功能&#xff0c;包括调整大小、裁剪、旋转、格式转换等。Sharp可以处理多种图像格式&#xff0c;并且能够高效地转换图像格式。 相关说明及用法看&#xff1a;https://sharp.nodejs.cn/ 安装&#…...

力扣第 67 题 “二进制求和”

题目描述 给你两个二进制字符串 a 和 b&#xff0c;以二进制字符串的形式返回它们的和。 示例 1: 输入: a "11", b "1" 输出: "100"示例 2: 输入: a "1010", b "1011" 输出: "10101"提示: 每个字符串仅由…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...