java实训 | 低配版模拟火车订票系统

2024-06-23 22:44

本文主要是介绍java实训 | 低配版模拟火车订票系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码: 

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;public class TrainBookingSystem {private JFrame frame;private JPanel loginPanel, mainPanel;private JTextField usernameField;private JPasswordField passwordField; // 改为JPasswordFieldprivate JTextField departureField, destinationField;private JButton searchButton;private List<Train> trainList;private List<Order> paidOrders;private List<Order> waitingListOrders;private List<Order> myTickets;private JPanel paidPanel, waitingListPanel, myTicketsPanel;public TrainBookingSystem() {frame = new JFrame("12306 Train Booking System");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(800, 600);createLoginInterface();initTrainData();paidOrders = new ArrayList<>();waitingListOrders = new ArrayList<>();myTickets = new ArrayList<>();}private void createLoginInterface() {loginPanel = new JPanel(new BorderLayout());loginPanel.add(createWelcomeLabel(), BorderLayout.NORTH);JPanel authPanel = new JPanel(new GridBagLayout());GridBagConstraints constraints = new GridBagConstraints();constraints.insets = new Insets(10, 5, 10, 5);constraints.fill = GridBagConstraints.HORIZONTAL;constraints.gridx = 0;constraints.gridy = 0;authPanel.add(new JLabel("账号:"), constraints);constraints.gridx = 1;authPanel.add(usernameField = new JTextField(30), constraints);constraints.gridx = 0;constraints.gridy = 1;authPanel.add(new JLabel("密码:"), constraints);constraints.gridx = 1;authPanel.add(passwordField = new JPasswordField(30), constraints);JButton loginButton = new JButton("登录");loginButton.addActionListener(e -> login());constraints.gridx = 0;constraints.gridy = 2;constraints.gridwidth = 2; // 按钮横跨两列authPanel.add(loginButton, constraints); // 移除多余的参数loginPanel.add(authPanel, BorderLayout.CENTER);frame.setContentPane(loginPanel);frame.setLocationRelativeTo(null);frame.setVisible(true);}private JLabel createWelcomeLabel() {JLabel welcomeLabel = new JLabel("欢迎使用12306订票系统");Font font = new Font("SansSerif", Font.BOLD, 24);welcomeLabel.setFont(font);welcomeLabel.setHorizontalAlignment(SwingConstants.CENTER);return welcomeLabel;}private void login() {String username = usernameField.getText();char[] passwordChars = passwordField.getPassword();String password = new String(passwordChars);if (!username.isEmpty() && !password.isEmpty()) {// 登录逻辑frame.setContentPane(createMainInterface());frame.revalidate();frame.repaint();} else {JOptionPane.showMessageDialog(frame, "请输入账号和密码!");}}private JPanel createMainInterface() {mainPanel = new JPanel(new BorderLayout());// 左侧面板JPanel leftPanel = new JPanel(new BorderLayout());leftPanel.setPreferredSize(new Dimension((int)(frame.getWidth() * 0.75), frame.getHeight()));leftPanel.setBorder(BorderFactory.createTitledBorder("车票查询"));JPanel inputPanel = new JPanel(new GridBagLayout());GridBagConstraints gbc = new GridBagConstraints();gbc.anchor = GridBagConstraints.WEST;gbc.insets = new Insets(10, 5, 10, 5);gbc.gridx = 0;gbc.gridy = 0;inputPanel.add(new JLabel("始发站:"), gbc);gbc.gridx = 1;gbc.gridwidth = 2;inputPanel.add(departureField = new JTextField(30), gbc);gbc.gridx = 0;gbc.gridy = 1;inputPanel.add(new JLabel("终点站:"), gbc);gbc.gridx = 1;inputPanel.add(destinationField = new JTextField(30), gbc);searchButton = new JButton("车次查询");searchButton.addActionListener(e -> showTrainList());gbc.gridx = 0;gbc.gridy = 2;gbc.gridwidth = 3;inputPanel.add(searchButton, gbc);leftPanel.add(inputPanel, BorderLayout.CENTER);// 右侧面板JPanel rightPanel = new JPanel(new GridLayout(3, 1)); // 3行1列的网格布局rightPanel.setPreferredSize(new Dimension(frame.getWidth() / 4, frame.getHeight()));rightPanel.setBorder(BorderFactory.createTitledBorder("个人订单查询"));// 初始化面板并添加到右侧面板paidPanel = new JPanel(new FlowLayout());waitingListPanel = new JPanel(new FlowLayout());myTicketsPanel = new JPanel(new FlowLayout());// 订单管理按钮初始化并添加到右侧面板JButton paidOrdersButton = new JButton("已支付");paidOrdersButton.addActionListener(e -> showOrders(paidOrders));rightPanel.add(paidOrdersButton, BorderLayout.NORTH);// 注意:需要将候补订单按钮添加到面板上JButton waitingListOrdersButton = new JButton("候补订单");waitingListOrdersButton.addActionListener(e -> showOrders(waitingListOrders));// 将候补订单按钮添加到rightPanel中rightPanel.add(waitingListOrdersButton, BorderLayout.CENTER);JButton myTicketsButton = new JButton("本人车票");myTicketsButton.addActionListener(e -> showOrders(myTickets));rightPanel.add(myTicketsButton, BorderLayout.SOUTH);rightPanel.add(new JLabel(" "), BorderLayout.CENTER);mainPanel.add(leftPanel, BorderLayout.CENTER);mainPanel.add(rightPanel, BorderLayout.EAST);// 初始订单显示更新updateOrderDisplays();return mainPanel;}private void showOrders(List<Order> orders) {if (orders.isEmpty()) {JOptionPane.showMessageDialog(frame, "当前没有订单!");} else {String message = "订单信息:\n";for (Order order : orders) {message += order.toString() + "\n";}JOptionPane.showMessageDialog(frame, message, "订单列表", JOptionPane.INFORMATION_MESSAGE);}}private void showTrainList() {JDialog dialog = new JDialog(frame, "车次列表", true);dialog.setLayout(new BorderLayout());dialog.setSize(400, 300);JPanel trainInfoPanel = new JPanel(new GridLayout(trainList.size(), 1));for (Train train : trainList) {JPanel trainPanel = new JPanel(new BorderLayout());JButton bookButton = new JButton("订票");JButton waitlistButton = new JButton("候补");waitlistButton.setVisible(false);bookButton.addActionListener(evt -> {if (train.book()) {addOrder(train, true); // 订票成功JOptionPane.showMessageDialog(frame, "订票成功!");dialog.dispose();} else {waitlistButton.setVisible(true);}});waitlistButton.addActionListener(evt -> {addOrder(train, false); // 候补票JOptionPane.showMessageDialog(frame, "候补成功!");dialog.dispose();});trainPanel.add(new JLabel(train.getTrainNumber() + " - " + train.getDepartureTime() + " - 剩余票数:" + train.getRemainingSeats()), BorderLayout.CENTER);JPanel buttonPanel = new JPanel(new FlowLayout());buttonPanel.add(bookButton);buttonPanel.add(waitlistButton);trainPanel.add(buttonPanel, BorderLayout.EAST);trainInfoPanel.add(trainPanel);}JScrollPane scrollPane = new JScrollPane(trainInfoPanel);dialog.add(scrollPane, BorderLayout.CENTER);dialog.setLocationRelativeTo(frame);dialog.setVisible(true);}private void addOrder(Train train, boolean isPaid) {Order order = new Order(train, isPaid);if (isPaid) {paidOrders.add(order);myTickets.add(order);} else {waitingListOrders.add(order);}updateOrderDisplays();}private void updateOrderDisplays() {// 此处不再需要removeAll,因为面板已经初始化paidPanel.removeAll();waitingListPanel.removeAll();myTicketsPanel.removeAll();// 直接添加订单信息for (Order order : paidOrders) {paidPanel.add(new JLabel(order.toString()));}for (Order order : waitingListOrders) {waitingListPanel.add(new JLabel(order.toString()));}for (Order order : myTickets) {myTicketsPanel.add(new JLabel(order.toString()));}paidPanel.repaint();waitingListPanel.repaint();myTicketsPanel.repaint();}private void initTrainData() {trainList = new ArrayList<>();trainList.add(new Train("G123", "08:00", 150));trainList.add(new Train("G124", "09:30", 100));trainList.add(new Train("G125", "11:00", 200));trainList.add(new Train("G126", "13:00", 0));trainList.add(new Train("G127", "15:00", 75));}class Train {private String trainNumber;private String departureTime;private int remainingSeats;public Train(String trainNumber, String departureTime, int remainingSeats) {this.trainNumber = trainNumber;this.departureTime = departureTime;this.remainingSeats = remainingSeats;}public String getTrainNumber() {return trainNumber;}public String getDepartureTime() {return departureTime;}public int getRemainingSeats() {return remainingSeats;}public boolean book() {if (remainingSeats > 0) {remainingSeats--;return true;}return false;}}class Order {private Train train;private boolean isPaid;public Order(Train train, boolean isPaid) {this.train = train;this.isPaid = isPaid;}@Overridepublic String toString() {return isPaid ? "已支付: " + train.getTrainNumber() + " " + train.getDepartureTime() :"候补: " + train.getTrainNumber() + " " + train.getDepartureTime();}}public static void main(String[] args) {new TrainBookingSystem();}
}

代码注释:

// 导入Swing库,用于创建图形用户界面  
import javax.swing.*;   
// 导入AWT库,包含用于构建图形用户界面和图像、字体、颜色等资源的类  
import java.awt.*;   
// 导入AWT的事件处理库,用于处理如按钮点击等用户事件  
import java.awt.event.ActionEvent;   
// 导入Java的集合库,用于创建列表  
import java.util.ArrayList;   
import java.util.List;   // 定义一个名为TrainBookingSystem的公共类,代表火车订票系统  
public class TrainBookingSystem {   // 声明多个私有成员变量,分别用于存储框架、面板、文本字段、按钮、火车列表和订单列表等  private JFrame frame;   private JPanel loginPanel, mainPanel;   private JTextField usernameField;   private JPasswordField passwordField; // 改用JPasswordField来更安全地处理密码输入  private JTextField departureField, destinationField;   private JButton searchButton;   private List<Train> trainList;   private List<Order> paidOrders;   private List<Order> waitingListOrders;   private List<Order> myTickets;   private JPanel paidPanel, waitingListPanel, myTicketsPanel;   // 构造函数,用于初始化系统  public TrainBookingSystem() {   // 创建框架并设置其标题、关闭操作和大小  frame = new JFrame("12306 Train Booking System");   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame.setSize(800, 600);   // 创建登录界面  createLoginInterface();   // 初始化火车数据  initTrainData();   // 初始化订单列表  paidOrders = new ArrayList<>();   waitingListOrders = new ArrayList<>();   myTickets = new ArrayList<>();   }   // 创建一个登录界面的方法  private void createLoginInterface() {   // 创建一个布局为BorderLayout的面板  loginPanel = new JPanel(new BorderLayout());   // 添加欢迎标签到面板的北部  loginPanel.add(createWelcomeLabel(), BorderLayout.NORTH);   // 创建一个用于账号和密码输入的面板,布局为GridBagLayout  JPanel authPanel = new JPanel(new GridBagLayout());   GridBagConstraints constraints = new GridBagConstraints();   // 设置GridBagConstraints对象,用于指定组件在GridBagLayout中的位置和填充方式  constraints.insets = new Insets(10, 5, 10, 5);   constraints.fill = GridBagConstraints.HORIZONTAL;   // 添加账号标签和文本字段到authPanel  constraints.gridx = 0;   constraints.gridy = 0;   authPanel.add(new JLabel("账号:"), constraints);   constraints.gridx = 1;   authPanel.add(usernameField = new JTextField(30), constraints);   // 添加密码标签和密码字段到authPanel  constraints.gridx = 0;   constraints.gridy = 1;   authPanel.add(new JLabel("密码:"), constraints);   constraints.gridx = 1;   authPanel.add(passwordField = new JPasswordField(30), constraints);   // 创建一个登录按钮并为其添加点击事件监听器  JButton loginButton = new JButton("登录");   loginButton.addActionListener(e -> login());   // 将登录按钮添加到authPanel,横跨两列  constraints.gridx = 0;   constraints.gridy = 2;   constraints.gridwidth = 2;   authPanel.add(loginButton, constraints);   // 将authPanel添加到loginPanel的中心区域  loginPanel.add(authPanel, BorderLayout.CENTER);   // 将loginPanel设置为框架的内容面板,并设置框架的位置和可见性  frame.setContentPane(loginPanel);   frame.setLocationRelativeTo(null);   frame.setVisible(true);   }   // 创建一个欢迎标签的方法  private JLabel createWelcomeLabel() {   // 创建一个标签并设置其文本、字体和对齐方式  JLabel welcomeLabel = new JLabel("欢迎使用12306订票系统");   Font font = new Font("SansSerif", Font.BOLD, 24);   welcomeLabel.setFont(font);
welcomeLabel.setHorizontalAlignment(SwingConstants.CENTER);   // 返回创建的欢迎标签  return welcomeLabel;   }   // 定义一个登录方法  private void login() {   // 从文本字段中获取账号和密码  String username = usernameField.getText();   char[] passwordChars = passwordField.getPassword();   String password = new String(passwordChars);   // 如果账号和密码都不为空,则执行登录逻辑  if (!username.isEmpty() && !password.isEmpty()) {   // 假设的登录逻辑(实际中应包含与数据库的交互)  // 将框架的内容面板更改为主界面,并重新验证和重绘框架  frame.setContentPane(createMainInterface());   frame.revalidate();   frame.repaint();   } else {   // 如果账号或密码为空,则显示错误消息  JOptionPane.showMessageDialog(frame, "请输入账号和密码!");   }   }   // 创建一个主界面的方法  private JPanel createMainInterface() {   // 创建一个布局为BorderLayout的主面板  mainPanel = new JPanel(new BorderLayout());   // 创建左侧的面板用于输入始发站和终点站  JPanel leftPanel = new JPanel(new BorderLayout());   leftPanel.setPreferredSize(new Dimension((int)(frame.getWidth() * 0.75), frame.getHeight()));   leftPanel.setBorder(BorderFactory.createTitledBorder("车票查询"));   // 创建一个用于输入始发站和终点站的面板,布局为GridBagLayout  JPanel inputPanel = new JPanel(new GridBagLayout());   GridBagConstraints gbc = new GridBagConstraints();   // 设置GridBagConstraints对象  gbc.anchor = GridBagConstraints.WEST;   gbc.insets = new Insets(10, 5, 10, 5);   // 添加始发站标签和文本字段到inputPanel  gbc.gridx = 0;   gbc.gridy = 0;   inputPanel.add(new JLabel("始发站:"), gbc);   gbc.gridx = 1;   gbc.gridwidth = 2;   inputPanel.add(departureField = new JTextField(30), gbc);   // 添加终点站标签和文本字段到inputPanel  gbc.gridx = 0;   gbc.gridy = 1;   inputPanel.add(new JLabel("终点站:"), gbc);   gbc.gridx = 1;   inputPanel.add(destinationField = new JTextField(30), gbc);   // 创建一个查询按钮并为其添加点击事件监听器  searchButton = new JButton("车次查询");   searchButton.addActionListener(e -> showTrainList());   // 将查询按钮添加到inputPanel,横跨三列  gbc.gridx = 0;   gbc.gridy = 2;   gbc.gridwidth = 3;   inputPanel.add(searchButton, gbc);   // 将inputPanel添加到leftPanel的中心区域  leftPanel.add(inputPanel, BorderLayout.CENTER);   // 创建右侧的面板用于显示个人订单  JPanel rightPanel = new JPanel(new GridLayout(3, 1)); // 3行1列的网格布局  rightPanel.setPreferredSize(new Dimension(frame.getWidth() / 4, frame.getHeight()));   rightPanel.setBorder(BorderFactory.createTitledBorder("个人订单查询"));   // 初始化并添加用于显示已支付订单、候补订单和本人车票的面板  paidPanel = new JPanel(new FlowLayout());   waitingListPanel = new JPanel(new FlowLayout());   myTicketsPanel = new JPanel(new FlowLayout());   // 创建订单管理按钮并为其添加点击事件监听器  JButton paidOrdersButton = new JButton("已支付");   paidOrdersButton.addActionListener(e -> showOrders(paidOrders));   rightPanel.add(paidOrdersButton, BorderLayout.NORTH); // 注意:这里应该是使用GridLayout,而不是BorderLayout  // 创建候补订单按钮并为其添加点击事件监听器  JButton waitingListOrdersButton = new JButton("候补订单");   waitingListOrdersButton.addActionListener(e -> showOrders(waitingListOrders));   rightPanel.add(waitingListOrdersButton, 1); // 在GridLayout中,
// 这里的索引参数在GridLayout中应该是一个数字,表示添加到第几行(从0开始)。  // 但是,因为GridLayout并没有直接提供索引来指定具体位置,  // 所以我们简单地按照顺序添加。在GridLayout中,组件会自动按行和列的布局进行排列。  rightPanel.add(waitingListOrdersButton); // 正确地添加候补订单按钮到rightPanel  // 创建本人车票按钮并为其添加点击事件监听器  JButton myTicketsButton = new JButton("本人车票");   myTicketsButton.addActionListener(e -> showOrders(myTickets));   rightPanel.add(myTicketsButton); // 将本人车票按钮添加到rightPanel  // 注意:这里添加了一个JLabel(" ")作为占位符是不必要的,因为GridLayout会自动处理布局  // rightPanel.add(new JLabel(" "), BorderLayout.CENTER); // 移除这个不必要的代码  // 将leftPanel和rightPanel添加到mainPanel中  mainPanel.add(leftPanel, BorderLayout.CENTER);   mainPanel.add(rightPanel, BorderLayout.EAST);   // 初始化并更新订单显示  updateOrderDisplays();   // 返回创建的主界面面板  return mainPanel;   }   // 显示订单列表的方法  private void showOrders(List<Order> orders) {   if (orders.isEmpty()) {   // 如果没有订单,则显示一个消息框提示没有订单  JOptionPane.showMessageDialog(frame, "当前没有订单!");   } else {   // 如果有订单,则创建一个消息框显示所有订单信息  String message = "订单信息:\n";   for (Order order : orders) {   message += order.toString() + "\n";   }   JOptionPane.showMessageDialog(frame, message, "订单列表", JOptionPane.INFORMATION_MESSAGE);   }   }   // 显示车次列表的方法  private void showTrainList() {   // 创建一个对话框用于显示车次列表  JDialog dialog = new JDialog(frame, "车次列表", true);   dialog.setLayout(new BorderLayout());   dialog.setSize(400, 300);   // 创建一个面板用于显示火车信息,布局为GridLayout,大小与trainList的大小一致  JPanel trainInfoPanel = new JPanel(new GridLayout(trainList.size(), 1));   // 遍历trainList中的每一辆火车  for (Train train : trainList) {   // 为每一辆火车创建一个面板  JPanel trainPanel = new JPanel(new BorderLayout());   // 创建订票和候补按钮  JButton bookButton = new JButton("订票");   JButton waitlistButton = new JButton("候补");   waitlistButton.setVisible(false); // 默认情况下不显示候补按钮  // 为订票按钮添加点击事件监听器  bookButton.addActionListener(evt -> {   if (train.book()) {   // 如果订票成功,则添加订单并显示成功消息  addOrder(train, true);   JOptionPane.showMessageDialog(frame, "订票成功!");   dialog.dispose(); // 关闭车次列表对话框  } else {   // 如果订票失败(没有剩余座位),则显示候补按钮  waitlistButton.setVisible(true);   }   });   // 为候补按钮添加点击事件监听器  waitlistButton.addActionListener(evt -> {   // 添加候补订单并显示成功消息  addOrder(train, false);   JOptionPane.showMessageDialog(frame, "候补成功!");   dialog.dispose(); // 关闭车次列表对话框  });   // 在trainPanel中添加火车信息和按钮  trainPanel.add(new JLabel(train.getTrainNumber() + " - " + train.getDepartureTime() + " - 剩余票数:" + train.getRemainingSeats()), BorderLayout.CENTER);   JPanel buttonPanel = new JPanel(new FlowLayout());   buttonPanel.add(bookButton);   buttonPanel.add(waitlistButton);   trainPanel.add(buttonPanel, BorderLayout.EAST);   // 将trainPanel添加到trainInfoPanel中  trainInfoPanel.add(trainPanel);   }   // 创建一个滚动面板来包含trainInfoPanel,并添加到对话框中  JScrollPane scrollPane = new JScrollPane(trainInfoPanel);   dialog.add(scrollPane, BorderLayout.CENTER); // 将滚动面板添加到对话框的中心位置  // 设置对话框的位置相对于父窗口居中  dialog.setLocationRelativeTo(frame);   // 设置对话框为可见  dialog.setVisible(true);   }  // 添加订单到对应列表的方法  private void addOrder(Train train, boolean isPaid) {   Order order = new Order(train, isPaid); // 创建一个新的订单对象  // 根据订单是否已支付,将其添加到对应的列表中  if (isPaid) {   paidOrders.add(order); // 添加到已支付订单列表  myTickets.add(order); // 添加到本人车票列表  } else {   waitingListOrders.add(order); // 添加到候补订单列表  }  // 更新订单显示面板的内容  updateOrderDisplays();   }  // 更新订单显示面板的方法  private void updateOrderDisplays() {   // 清除之前的订单信息  paidPanel.removeAll();   waitingListPanel.removeAll();   myTicketsPanel.removeAll();   // 遍历订单列表,将订单信息添加到对应的面板中  for (Order order : paidOrders) {   paidPanel.add(new JLabel(order.toString()));   }  for (Order order : waitingListOrders) {   waitingListPanel.add(new JLabel(order.toString()));   }  for (Order order : myTickets) {   myTicketsPanel.add(new JLabel(order.toString()));   }  // 重新绘制面板以显示新的订单信息  paidPanel.repaint();   waitingListPanel.repaint();   myTicketsPanel.repaint();   }  // 初始化火车数据的方法  private void initTrainData() {   trainList = new ArrayList<>();   // 添加几辆火车到trainList中,包括车次、发车时间和剩余座位数  trainList.add(new Train("G123", "08:00", 150));   trainList.add(new Train("G124", "09:30", 100));   trainList.add(new Train("G125", "11:00", 200));   trainList.add(new Train("G126", "13:00", 0)); // 这辆火车没有剩余座位  trainList.add(new Train("G127", "15:00", 75));   }  // 火车类Train,表示一辆火车  class Train {   // ...(类的成员变量和方法省略,已在前面定义)  // book方法,尝试预订火车票  public boolean book() {   if (remainingSeats > 0) { // 如果剩余座位数大于0  remainingSeats--; // 预订成功后,剩余座位数减1  return true; // 返回true表示预订成功  }  return false; // 返回false表示预订失败(没有剩余座位)  }  }  // 订单类Order,表示一个订单  class Order {   // ...(类的成员变量和方法省略,已在前面定义)  // toString方法,返回订单的字符串表示形式  @Override   public String toString() {   return isPaid ? "已支付: " + train.getTrainNumber() + " " + train.getDepartureTime() :  "候补: " + train.getTrainNumber() + " " + train.getDepartureTime();   }  }  // 主方法,程序入口  public static void main(String[] args) {   new TrainBookingSystem(); // 创建TrainBookingSystem对象,启动订票系统  }  
}

这篇关于java实训 | 低配版模拟火车订票系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088489

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2