java图书信息管理

news2025/1/12 9:48:53

一、项目概述

本图书信息管理系统旨在提供一个直观的用户界面,用于管理图书馆或书店的图书信息。系统包括图书添加、查询、借阅和归还等功能。

二、系统架构

系统采用JavaSwing作为前端UI框架,后端使用Java Servlet处理业务逻辑,数据存储在MySQL数据库中。

三、技术选型

  • 前端使用JavaSwing,提供直观用户界面。
  • 后端使用Java Servlet处理用户请求和数据库交互。
  • 数据库采用MySQL存储图书信息和借阅记录。

四、安装和配置

  1. 下载项目源代码。
  2. 安装Java Development Kit (JDK)。
  3. 设置数据库连接配置。
  4. 运行系统初始化脚本。

1.添加图书

  1. 进入主界面,选择“图书管理”。
  2. 点击“添加图书”按钮,输入图书信息,如书名、作者、出版社等。
  3. 确认添加图书。

2.查询图书

  1. 在主界面选择“查询图书”。
  2. 输入关键字,如书名或作者。
  3. 查看匹配的图书列表。

3.借阅图书

  1. 进入“借阅管理”模块。
  2. 选择要借阅的图书,输入借阅者信息。
  3. 确认借阅图书。

4.归还图书

  1. 进入“借阅管理”模块。
  2. 选择要归还的图书,输入借阅者信息。
  3. 确认归还图书。

5.查看借阅历史

  1. 在主界面选择“借阅历史”。
  2. 输入借阅者信息或图书信息。
  3. 查看借阅历史记录。

五、数据库设计

感谢提供数据库文件。以下是对这个数据库文件的简要说明:

book

  • BookId:图书ID,自增长。
  • BookName:图书名称。
  • Writter:作者。
  • BookType:图书类型。
  • Price:价格。
  • IsBorrow:是否借出。

borrow

  • BorrowId:借阅记录ID,自增长。
  • BookId:借阅的图书ID。
  • BookName:借阅的图书名称。
  • BookType:借阅的图书类型。
  • userid:借阅者ID。
  • username:借阅者用户名。
  • BorrowTime:借阅时间。
  • ReturnTime:归还时间。
  • IsReturn:是否归还。

root

  • rootID:管理员ID,自增长。
  • rootName:管理员用户名。
  • rootPWD:管理员密码。

user

  • userid:用户ID,自增长。
  • username:用户名。
  • userpsw:用户密码。
  • useremail:用户邮箱。
  • useraddr:用户地址。
  • userphone:用户电话。

这些表之间存在一些关联,比如 book 表和 borrow 表通过 BookId 关联。你可以使用这个数据库脚本初始化你的数据库。

六、程序截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、代码

Login.java

package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import utils.DBUtil;


public class LogIn extends JFrame {
	private JLabel labTitle = new JLabel("图书信息管理系统登录");
	private Font font = new Font("隶书", Font.BOLD, 34);
	private JButton btnSure = new JButton("登录");
	private JButton btnCancel = new JButton("重置");
	private JButton btnZhuce = new JButton("注册");
	private JPanel panBtn = new JPanel();

	private JLabel labLoginName = new JLabel("用户名:");
	private JLabel labPWD = new JLabel("密    码:");
	private JTextField jtfLoginName;
	private JPasswordField jpfPWD;
	private JPanel panMain = new JPanel();

	public LogIn() {
		setTitle("登录界面");
		// setDefaultLookAndFeelDecorated(true);
		this.setSize(500, 350);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		init();
		add(labTitle, BorderLayout.NORTH);
		add(panBtn, BorderLayout.SOUTH);
		add(panMain, BorderLayout.CENTER);
	}

	private void init() {
		labTitle.setFont(font);
		labTitle.setHorizontalAlignment(JLabel.CENTER);
		labTitle.setForeground(Color.RED);
		// labTitle.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		labTitle.setBackground(Color.BLUE);
		// 单选框
		JRadioButton JB1 = new JRadioButton("管理员登录");
		JRadioButton JB2 = new JRadioButton("用户登录");
		// 加入组,避免出现可以两个都选择的情况
		ButtonGroup bg = new ButtonGroup();
		JB2.setSelected(true);// 默认选中'用户登录'

		jtfLoginName = new JTextField("", 10);
		jpfPWD = new JPasswordField(16);

		labLoginName.setSize(100, 40);
		labLoginName.setLocation(50, 50);
		labLoginName.setHorizontalAlignment(JLabel.RIGHT);
		labPWD.setSize(100, 40);
		labPWD.setLocation(50, 50 + 40 + 10);
		labPWD.setHorizontalAlignment(JLabel.RIGHT);

		jtfLoginName.setSize(200, 40);
		jtfLoginName.setLocation(50 + 100 + 20, 50);
		jpfPWD.setSize(200, 40);
		jpfPWD.setLocation(50 + 100 + 20, 50 + 40 + 10);
		jpfPWD.setEchoChar('*');

		JB1.setSize(90, 20);
		JB1.setLocation(125, 175);
		JB2.setSize(80, 20);
		JB2.setLocation(275, 175);

		btnSure.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (JB2.isSelected()) {
					Statement stmt = DBUtil.getStatement();
					String name = jtfLoginName.getText().trim();
					String pwd = new String(jpfPWD.getPassword()).trim();
					String sql = "select * from user where username='" + name
							+ "' AND userpsw='" + pwd + "';";
					try {
						ResultSet rs = stmt.executeQuery(sql);
						if (rs.next()) {
							JOptionPane.showConfirmDialog(LogIn.this,
									"登陆成功,欢迎进入!", "登陆成功",
									JOptionPane.CLOSED_OPTION);
							dispose();
							new LibraryUserFrame().setVisible(true);
							LibraryUserFrame.USER_NAME = name;
						} else {
							JOptionPane.showMessageDialog(null, "账号或密码错误!");
						}
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
					/*
					 * UserDao UD = new UserDao(); UserBean uBean =
					 * UD.findUser(name, pwd); if (uBean != null) {
					 * JOptionPane.showConfirmDialog(LogIn.this, "登陆成功,欢迎进入!",
					 * "登陆成功", JOptionPane.CLOSED_OPTION); dispose();
					 * LibraryUserFrame LU = new LibraryUserFrame();
					 * LU.setVisible(true); LibraryUserFrame.USER_NAME = name;
					 * }else { JOptionPane.showMessageDialog(null, "账号或密码错误!");
					 * }
					 */

				} else {
					Statement stmt = DBUtil.getStatement();
					String name = jtfLoginName.getText().trim();
					String pwd = new String(jpfPWD.getPassword()).trim();
					String sql = "select * from root where rootName='" + name
							+ "' AND rootPWD='" + pwd + "';";
					try {
						ResultSet rs = stmt.executeQuery(sql);
						if (rs.next()) {
							JOptionPane.showConfirmDialog(LogIn.this,
									"登陆成功,欢迎进入!", "登陆成功",
									JOptionPane.CLOSED_OPTION);
							dispose();
							LibraryRootFrame LR = new LibraryRootFrame();
							LR.setVisible(true);
							LibraryRootFrame.USER_NAME = name;
						} else {
							JOptionPane.showMessageDialog(null, "账号或密码错误!");
						}
					} catch (SQLException e1) {
						e1.printStackTrace();
					}
				}
			}
		});

		btnCancel.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				jtfLoginName.setText("");
				jpfPWD.setText("");
			}
		});

		btnZhuce.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				dispose();
				new ZhuceFrame().setVisible(true);
			}
		});

		panBtn.add(btnSure);
		panBtn.add(btnCancel);
		panBtn.add(btnZhuce);
		// 把单选按钮加入组
		bg.add(JB1);
		bg.add(JB2);

		panMain.setLayout(null);
		panMain.add(labLoginName);
		panMain.add(labPWD);
		panMain.add(jtfLoginName);
		panMain.add(jpfPWD);
		panMain.add(JB1);
		panMain.add(JB2);
		ImageIcon img = new ImageIcon("image/ZhuCe.png");
		// 要设置的背景图片
		JLabel imgLabel = new JLabel(img);
		// 将背景图放在标签里。
		panMain.add(imgLabel, new Integer(Integer.MIN_VALUE));
		// 将背景标签添加到jfram的LayeredPane面板里。
		imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
		// 设置背景标签的位置
		Container contain = this.getContentPane();
		((JPanel) contain).setOpaque(false);
	}

	public static void main(String[] args) {
		new LogIn().setVisible(true);
	}
}

LibraryUserFrame.java

package view;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;


public class LibraryUserFrame extends JFrame {
	public static String USER_NAME;

	public LibraryUserFrame() {
		this.setLayout(null);
		ImageIcon img = new ImageIcon(
				"image/3.jpg");
		// 要设置的背景图片
		JLabel imgLabel = new JLabel(img);
		// 将背景图放在标签里。
		this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
		// 将背景标签添加到jfram的LayeredPane面板里。
		imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
		// 设置背景标签的位置
		Container contain = this.getContentPane();
		((JPanel) contain).setOpaque(false);

		setSize(1000, 750);
		setTitle("图书馆管理系统_用户");
		setResizable(false); // 不可改变窗口大小
		// 获取屏幕大小和当前frame的大小
		Dimension thisScreen = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension thisFrame = this.getSize();
		// 使启动窗口位于屏幕的正中心
		setLocation((thisScreen.width - thisFrame.width) / 2,
				(thisScreen.height - thisFrame.height) / 2);
		// 设置单击窗口的【关闭】按钮时将发生相应的动作
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		JMenuBar menuBar = new JMenuBar(); // 创建菜单栏
		// 创建菜单
		JMenu j1 = new JMenu("书籍管理");
		JMenuItem j1_1 = new JMenuItem("搜索图书");
		j1_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new BookSearch().setVisible(true);
			}
		});
		JMenuItem j1_2 = new JMenuItem("查看所有图书");
		j1_2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new AllBook().setVisible(true);
			}
		});
		JMenuItem j1_3 = new JMenuItem("借阅图书");
		j1_3.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new UserBorrow().setVisible(true);
			}
		});

		JMenuItem j1_4 = new JMenuItem("归还图书");
		j1_4.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new UserReturn().setVisible(true);
			}
		});

		j1.add(j1_1);
		j1.add(j1_2);
		j1.add(j1_3);
		j1.add(j1_4);

		JMenu j2 = new JMenu("个人中心");
		JMenuItem j2_1 = new JMenuItem("修改密码");
		j2_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new UserXiugaimima().setVisible(true);
			}
		});
		j2.add(j2_1);

		JMenu j3 = new JMenu("系统");
		JMenuItem j3_1 = new JMenuItem("注销登录");
		j3_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				dispose();
				new LogIn().setVisible(true);
			}
		});
		j3.add(j3_1);

		menuBar.add(j1);
		menuBar.add(j2);
		menuBar.add(j3);

		this.setJMenuBar(menuBar);

	}
}

LibraryRootFrame.java

package view;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

import Date.BarTest;
import Date.PieChart;
import Date.PieTest;

public class LibraryRootFrame extends JFrame {
	public static String USER_NAME;

	public LibraryRootFrame() {
		this.setLayout(null);
		ImageIcon img = new ImageIcon("image/3.jpg");
		//要设置的背景图片
		JLabel imgLabel = new JLabel(img);
		//将背景图放在标签里。
		this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
		//将背景标签添加到jfram的LayeredPane面板里。
		imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
		// 设置背景标签的位置
		Container contain = this.getContentPane();
		((JPanel) contain).setOpaque(false); 

		setSize(1000, 730);
		setTitle("图书馆管理系统——管理员");
		setResizable(false); // 不可改变窗口大小
		// 获取屏幕大小和当前frame的大小
		Dimension thisScreen = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension thisFrame = this.getSize();
		// 使启动窗口位于屏幕的正中心
		setLocation((thisScreen.width - thisFrame.width) / 2,
				(thisScreen.height - thisFrame.height) / 2);
		// 设置单击窗口的【关闭】按钮时将发生相应的动作
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		JMenuBar menuBar = new JMenuBar(); // 创建菜单栏
		// 创建菜单
		JMenu j1 = new JMenu("书籍管理");
		JMenuItem J1_1 = new JMenuItem("添加书籍");
		J1_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new BookAddFrame().setVisible(true);
			}
		});

		JMenuItem J1_2 = new JMenuItem("更新和删除书籍");
		J1_2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new Book_Update_Delete().setVisible(true);
			}
		});
		
		JMenuItem J1_3 = new JMenuItem("查找书籍");
		J1_3.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new BookSearch().setVisible(true);
			}
		});
		
		JMenuItem J1_4 = new JMenuItem("查看所有书籍");
		J1_4.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new AllBook().setVisible(true);
			}
		});
		j1.add(J1_1);
		j1.add(J1_2);
		j1.add(J1_3);
		j1.add(J1_4);

		JMenu j2 = new JMenu("用户管理");
		JMenuItem J2_1 = new JMenuItem("添加用户");
		J2_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new UserAddFrame().setVisible(true);
			}
		});

		JMenuItem J2_2 = new JMenuItem("更新和删除用户");
		J2_2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new User_Update_Delete().setVisible(true);
			}
		});

		JMenuItem J2_3 = new JMenuItem("查询用户");
		J2_3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new UserSearch().setVisible(true);
			}
		});
		j2.add(J2_1);
		j2.add(J2_2);
		j2.add(J2_3);

		JMenu j3 = new JMenu("借书记录");
		JMenu J3 = new JMenu("借书数据分析");
		JMenuItem J3_1 = new JMenuItem("饼形图查看");
		J3_1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new PieTest().setVisible(true);
			}
		});
		JMenuItem J3_2 = new JMenuItem("条形图查看");
		J3_2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new BarTest().setVisible(true);
			}
		});
		JMenuItem j3_1 = new JMenuItem("查看借书记录");
		j3_1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				new AllBorrow().setVisible(true);
			}
		});
		J3.add(J3_1);
		J3.add(J3_2);
		j3.add(J3);
		j3.add(j3_1);
		
		JMenu j4 = new JMenu("系统设置");
		JMenuItem j4_1 = new JMenuItem("修改密码");
		j4_1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new RootXiugaiMima().setVisible(true);
			}
		});

		JMenuItem j4_2 = new JMenuItem("注销登录");
		j4_2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				dispose();
				new LogIn().setVisible(true);
			}
		});
		j4.add(j4_1);
		j4.add(j4_2);

		menuBar.add(j1);
		menuBar.add(j2);
		menuBar.add(j3);
		menuBar.add(j4);

		this.setJMenuBar(menuBar);
	}
	public static void main(String[] args) {
		new LibraryRootFrame().setVisible(true);
	}
}

八、交流与联系

q:969060742 文档、代码、sql

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

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

相关文章

你写过的最蠢的代码是?——全栈开发篇

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【题解 动态规划】 Colored Rectangles

题目描述: 分析: 乍一看我还以为是贪心! 猫 想想感觉没问题 但是局部最优并不能保证全局最优 比如这组数据 19 19 19 19 20 20 20 20如果按照贪心的做法,答案是20*20*2 但是其实答案是19*20*4 因此这道题用贪心是不对的 于是我…

Autowired和Resource的关系

相同点对于下面的代码来说,如果是Spring容器的话,两个注解的功能基本是等价的,他们都可以将bean注入到对应的field中 不同点但是请注意,这里说的是基本相同,说明还是有一些不同点的: byName和byType匹配顺…

二十八、高级IO与多路转接之select

文章目录 一、五种IO模型(一)阻塞IO:(二)非阻塞IO:(三)信号驱动IO:(四)IO多路转接:(五)异步IO: 二、高级IO重要概念(一)同步通信 vs 异…

<C++>类和对象-下

目录 一、构造函数的初始化 1. 构造函数体赋值 2. 初始化列表 2.1 概念 2.2 隐式类型转换式构造 2.3 explicit关键字 二、static静态成员 1. 概念 2. 特性 三、友元 1. 友元函数 2.友元类 四、内部类 1. 概念 五、匿名对象 1. const引用匿名对象 2. 匿名对象的隐式类型转换 总…

华为云云耀云服务器L实例评测 | 实例场景体验之搭建接口服务:通过华为云云耀云服务器构建 API 服务

华为云云耀云服务器L实例评测 | 实例场景体验之搭建接口服务:通过华为云云耀云服务器构建 API 服务 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云…

数据结构笔记(王道408)

文章目录 前言绪论数据结构基本概念基本概念数据结构三要素与ADT 算法基本概念算法定义算法五个基本特性好算法的进阶特性 算法复杂度时间复杂度空间复杂度 线性表 前言 数据结构的笔记相比于其他3门,笔记的重要性要低很多,毕竟对于选择408的同学来说&a…

Python学习笔记之运算符的使用

Python学习笔记之运算符的使用 整型:二进制0b100十进制4、八进制0o100十进制64、十进制100、十六进制0x100十进制256浮点型:123.456,1.23456e2字符串型:‘Hello’,“Hello”布尔型:True、False复数型&…

C++算法 —— 动态规划(8)01背包问题

文章目录 1、动规思路简介2、模版题:01背包第一问第二问优化 3、分割等和子集4、目标和5、最后一块石头的重量Ⅱ 背包问题需要读者先明白动态规划是什么,理解动规的思路,并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0…

【数据结构】排序(2)—冒泡排序 快速排序

目录 一. 冒泡排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 快速排序 基本思想 代码实现 hoare法 挖坑法 前后指针法 时间和空间复杂度 稳定性 一. 冒泡排序 基本思想 冒泡排序是一种交换排序。两两比较数组元素,如果是逆序(即排列顺序与排序后…

递归与分治算法(1)--经典递归、分治问题

目录 一、递归问题 1、斐波那契数列 2、汉诺塔问题 3、全排列问题 4、整数划分问题 二、递归式求解 1、代入法 2、递归树法 3、主定理法 三、 分治问题 1、二分搜索 2、大整数乘法 一、递归问题 1、斐波那契数列 斐波那契数列不用过多介绍,斐波那契提出…

行高的继承和消除内外边距

行高的继承性 <style>div {font: 12px/1.5 Microsoft yahei;} ​p {font-size: 14px;}</style> <body><div><p>苏丹红事件</p></div> <body> 12px这里没有行高没有写单位&#xff0c;子类继承父类的1.5倍&#xff0c;就是14*…

AndroidStudio精品插件集

官网 项目地址&#xff1a;Github博客地址&#xff1a;Studio 精品插件推荐 使用需知 所有插件在 Android Studio 2022.3.1.18&#xff08;长颈鹿&#xff09;上测试均没有问题&#xff0c;推荐使用此版本Android Studio 2022.3.1.18&#xff08;长颈鹿&#xff09;正式版下…

Django之十二:模板的继承+用户列表

模板的继承 新建layout.html&#xff1a; {% load static %} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href"{% static plugins…

经典网络架构-ResNet

# 引言 深度残差网络的提出是深度学习领域的里程碑事件&#xff0c;它使得网络可以做大做深&#xff0c;现在主流的网络中都有残差结构 # 问题 - ##深度网络的退化 深度网络有一个普遍的问题&#xff1a;随着网络层数的增加&#xff0c;准确率是先增后减的&#xff0c;准确率增…

十四天学会C++之第二天(函数和库)

1. 函数的定义和调用 在C中&#xff0c;函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块&#xff0c;这有助于提高代码的可读性和维护性。 为什么使用函数&#xff1f; 函数在编程中的作用不可小觑。它们有以下几个重要用途&#xf…

【数据结构---排序】很详细的哦

本篇文章介绍数据结构中的几种排序哦~ 文章目录 前言一、排序是什么&#xff1f;二、排序的分类 1.直接插入排序2.希尔排序3.选择排序4.冒泡排序5.快速排序6.归并排序总结 前言 排序在我们的生活当中无处不在&#xff0c;当然&#xff0c;它在计算机程序当中也是一种很重要的操…

【C语言】青蛙跳台阶 —— 详解

一、问题描述 跳台阶_牛客题霸_牛客网 (nowcoder.com) LCR 127. 跳跃训练 - 力扣&#xff08;LeetCode&#xff09; 二、解题思路 1、当 n 1 时&#xff0c;一共只有一级台阶&#xff0c;那么显然青蛙这时就只有一种跳法 2、当 n 2 时&#xff0c;一共有两级台阶&#xff…

你写过的最蠢的代码是?——前端篇

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

LLVM 插桩 LLVM IR PHI指令

今天在进行 LLVM 插桩时&#xff0c;遇到一个神奇的报错 PHI nodes not grouped at top of basic block!%12 phi i32 [ %.pre, %if.then15 ], [ %argc, %maybe_close_fd_mask.exit ], !dbg !381 label %if.end19 PHI nodes not grouped at top of basic block!%18 phi i32 […