图书馆书籍管理系统

项目名称与项目简介

图书馆书籍管理系统

 本项目是一个计算机管理系统,也就是将传统手工的管理方式转变为智能化、标准化、规范化的管理管理模式,对图书馆中所有的图书、文献资料、音像资料、报刊、期刊等各种类型的资料实现采编、收集图书信息、检索、归档、流通以及一系列相关工作的计算机化、信息化管理。

创建数据库

LibraryDB库——utf8字符集——utf8_general_ci排序规则

先创建库,再去使用下列的DDL语句。

数据库DDL

-- 创建Authors表
CREATE TABLE `authors` (
  `AuthorID` int(11) NOT NULL AUTO_INCREMENT COMMENT '作者ID',
  `Name` varchar(100) NOT NULL COMMENT '姓名',
  `Country` varchar(50) DEFAULT NULL COMMENT '国家',
  PRIMARY KEY (`AuthorID`)
);

-- 创建Publishers
CREATE TABLE `publishers` (
  `PublisherID` int(11) NOT NULL AUTO_INCREMENT COMMENT '出版社ID',
  `Name` varchar(100) NOT NULL COMMENT '出版社名称',
  `Country` varchar(50) DEFAULT NULL COMMENT '出版社国家',
  PRIMARY KEY (`PublisherID`)
);

-- 创建Categories表
CREATE TABLE `categories` (
  `CategoryID` int(11) NOT NULL AUTO_INCREMENT COMMENT '类别ID',
  `Name` varchar(50) NOT NULL COMMENT '类别名称',
  PRIMARY KEY (`CategoryID`)
);

-- 创建Books表
CREATE TABLE `books` (
  `BookID` int(11) NOT NULL AUTO_INCREMENT COMMENT '书籍ID',
  `Title` varchar(200) NOT NULL COMMENT '书籍名称',
  `AuthorID` int(11) DEFAULT NULL COMMENT '作者ID',
  `PublisherID` int(11) DEFAULT NULL COMMENT '出版社ID',
  `CategoryID` int(11) DEFAULT NULL COMMENT '类别ID',
  `YearPublished` varchar(4) DEFAULT NULL COMMENT '出版年份',
  `Stock` int(255) DEFAULT NULL COMMENT '库存',
  PRIMARY KEY (`BookID`),
  KEY `AuthorID` (`AuthorID`),
  KEY `PublisherID` (`PublisherID`),
  KEY `CategoryID` (`CategoryID`),
  CONSTRAINT `books_ibfk_1` FOREIGN KEY (`AuthorID`) REFERENCES `authors` (`AuthorID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `books_ibfk_2` FOREIGN KEY (`PublisherID`) REFERENCES `publishers` (`PublisherID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `books_ibfk_3` FOREIGN KEY (`CategoryID`) REFERENCES `categories` (`CategoryID`) ON DELETE NO ACTION ON UPDATE NO ACTION
);

-- 创建Members表
CREATE TABLE `members` (
  `MemberID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `Name` varchar(100) NOT NULL COMMENT '用户姓名',
  `Email` varchar(100) NOT NULL COMMENT '邮箱',
  `Phone` varchar(15) DEFAULT NULL COMMENT '电话',
  PRIMARY KEY (`MemberID`),
  UNIQUE KEY `Email` (`Email`)
);

-- 创建Loans表
CREATE TABLE `loans` (
  `LoanID` int(11) NOT NULL AUTO_INCREMENT COMMENT '借书ID',
  `BookID` int(11) DEFAULT NULL COMMENT '书籍ID',
  `MemberID` int(11) DEFAULT NULL COMMENT '用户ID',
  `LoanDate` date DEFAULT NULL COMMENT '借书日期',
  `ReturnDate` date DEFAULT NULL COMMENT '归还日期',
  PRIMARY KEY (`LoanID`),
  KEY `BookID` (`BookID`),
  KEY `MemberID` (`MemberID`),
  CONSTRAINT `loans_ibfk_1` FOREIGN KEY (`BookID`) REFERENCES `books` (`BookID`),
  CONSTRAINT `loans_ibfk_2` FOREIGN KEY (`MemberID`) REFERENCES `members` (`MemberID`)
);

绘制ER图

插入数据DML

-- 插入 Authors 表的数据
INSERT INTO Authors (Name, Country) VALUES
('鲁迅', 'China'),
('金庸', 'China'),
('莫言', 'China'),
('余华', 'China'),
('曹雪芹', 'China'),
('J.K. Rowling', 'United Kingdom');

-- 插入 Publishers 表的数据
INSERT INTO Publishers (Name, Country) VALUES
('人民文学出版社', 'China'),
('中华书局', 'China'),
('作家出版社', 'China'),
('上海译文出版社', 'China'),
('中国青年出版社', 'China'),
('Bloomsbury', 'UK');

-- 插入 Categories 表的数据
INSERT INTO Categories (Name) VALUES
('小说'),
('历史'),
('散文'),
('科幻'),
('文学');

-- 插入 Books 表的数据
INSERT INTO Books (Title, AuthorID, PublisherID, CategoryID, YearPublished,Stock) VALUES
('呐喊', 1, 1, 5, 1923, 30),
('射雕英雄传', 2, 2, 1, 1957, 28),
('红高粱家族', 3, 3, 1, 1986, 25),
('活着', 4, 4, 1, 1993, 44),
('红楼梦', 5, 5, 1, 1791, 36),
('Harry Potter and the Philosopher''s Stone', 6, 6, 4, '1997', 50);

-- 插入 Members 表的数据
INSERT INTO Members (Name, Email, Phone) VALUES
('张伟', 'zhang.wei@example.com', '1234561234'),
('李娜', 'li.na@example.com', '1234565678'),
('王芳', 'wang.fang@example.com', '1234568765'),
('刘强', 'liu.qiang@example.com', '1234564321'),
('陈静', 'chen.jing@example.com', '1234566789');

-- 插入 Loans 表的数据
INSERT INTO Loans (BookID, MemberID, LoanDate, ReturnDate) VALUES
(1, 1, '2024-06-01', '2024-06-15'),
(2, 2, '2024-06-02', '2024-06-16'),
(3, 3, '2024-06-03', '2024-06-17'),
(4, 4, '2024-06-04', '2024-06-18'),
(5, 3, '2024-06-05', '2024-06-19');
(2, 3, '2024-06-11', '2024-06-25'),
(3, 4, '2024-06-12', '2024-06-26'),
(4, 5, '2024-06-13', '2024-06-27'),
(5, 1, '2024-06-14', '2024-06-28'),
(1, 3, '2024-06-15', '2024-06-29'),
(2, 4, '2024-06-16', '2024-06-30'),
(3, 5, '2024-06-17', '2024-07-01'),
(4, 1, '2024-06-18', '2024-07-02'),
(5, 2, '2024-06-19', '2024-07-03');

基础查询

1、查询所有书籍信息,仅显示书籍的名称和出版年份

SELECT Title AS '书籍名称', YearPublished AS '出版年份' FROM books;

2、模糊查询

根据书籍名称进行模糊查询,模糊查询需要可以走索引,需要给出explain语句。使用explain测试给出的查询语句,需要显示走了索引查询。

创建索引

CREATE INDEX idx_books_title ON Books(Title);

使用EXPLAIN进行模糊查询

EXPLAIN SELECT * FROM Books WHERE Title LIKE '红%';

3、统计书籍信息,查询所有书籍的出版年份,并按照年份从早到晚排列

SELECT Title AS '书名', YearPublished AS '出版年份'
FROM Books 
ORDER BY YearPublished ASC;

3、复杂查询

1、查询书籍的所有信息(书名、作者名、出版商名、分类、出版年份)

SELECT 
    Books.Title AS 书名,
    Authors.Name AS 作者,
    Publishers.Name AS 出版社名称,
    Categories.Name AS 分类,
    Books.YearPublished AS 出版年份
FROM Books
JOIN Authors ON Books.AuthorID = Authors.AuthorID
JOIN Publishers ON Books.PublisherID = Publishers.PublisherID
JOIN Categories ON Books.CategoryID = Categories.CategoryID;

2、查询书籍中被借出去最多的书籍对应的类别名称

SELECT Categories.Name AS 类别名称
FROM Books
JOIN Categories ON Books.CategoryID = Categories.CategoryID
WHERE Books.BookID = (
    SELECT Books.BookID
    FROM Books
    JOIN Loans ON Books.BookID = Loans.BookID
    GROUP BY Books.BookID
    ORDER BY COUNT(Loans.LoanID) DESC
    LIMIT 1
);

3、查询借书数量最多的用户,并查询用户借书的书籍名称

SELECT 
    Members.Name AS 用户姓名,
    Books.Title AS 书名
FROM Members
JOIN Loans ON Members.MemberID = Loans.MemberID
JOIN Books ON Loans.BookID = Books.BookID
WHERE Members.MemberID = (
    SELECT Loans.MemberID
    FROM Loans
    GROUP BY Loans.MemberID
    ORDER BY COUNT(Loans.LoanID) DESC
    LIMIT 1
);

对应3号是王芳,结果正确,没有问题。

触发器

1、书籍表添加语句添加触发器,要求在添加书籍信息时同时初始化作者表数据。触发器应该在插入新书籍信息时,检查作者表中是否已存在相同的作者,如果不存在,则插入新的作者信息。
-- 触发器名称:after_book_insert
-- 功能描述:插入新书籍信息时,检查作者表中是否已存在相同的作者,如果不存在,则插入新的作者信息。
-- 触发时机:AFTER INSERT
-- 触发对象:books表
-- 触发行为:FOR EACH ROW(对每一行插入操作触发)
DELIMITER $$    -- 更改默认的语句分隔符为$$,这样可以在触发器内部使用分号

CREATE TRIGGER after_book_insert -- 创建一个名为after_book_insert的触发器
AFTER INSERT ON books						-- 触发器在Books表发生INSERT操作之后触发
FOR EACH ROW			-- 触发器对每一行插入操作都执行一次
BEGIN		-- 触发器开始
    DECLARE authorID INT;
    -- 检查是否存在相同作者名字的记录
    SELECT AuthorID INTO authorID
    FROM authors
    WHERE Name = NEW.Title;
    -- 如果作者不存在,则插入新的作者信息
    IF authorID IS NULL THEN
        INSERT INTO authors (Name, Country)
        VALUES (NEW.Title, 'Unknown');
        -- 获取新插入的作者的ID
        SET authorID = LAST_INSERT_ID();
    END IF;
    -- 更新 Books 表中的 AuthorID 字段
    UPDATE books
    SET AuthorID = authorID
    WHERE BookID = NEW.BookID;
END;	 -- 触发器结束
$$    -- 触发器定义结束,使用新的分隔符

DELIMITER ;		-- 将语句分隔符改回为分号

测试语句

-- 向 books 表插入新书籍信息
INSERT INTO books (Title, PublisherID, CategoryID, YearPublished)
VALUES ('活着', 1, 1, '1993');

测试结果

2、书籍表修改语句添加触发器,要求在修改库存时不允许上下浮动超过10%
DELIMITER $$  -- 更改默认的语句分隔符为$$,这样可以在触发器内部使用分号

CREATE TRIGGER Before_Stock_Update   -- 创建一个名为Before_Stock_Update的触发器
BEFORE UPDATE ON books			 -- 触发器在books表发生UPDATE操作之前触发
FOR EACH ROW									-- 触发器对每一行更改操作都执行一次
BEGIN				 -- 触发器开始
    DECLARE old_stock INT;		-- 声明变量
    DECLARE new_stock INT;
    DECLARE max_allowed INT;
    DECLARE min_allowed INT;

    -- 获取旧的库存和新的库存
    SET old_stock = OLD.Stock;
    SET new_stock = NEW.Stock;

    -- 计算允许的最大和最小库存变化
    SET max_allowed = old_stock + (old_stock * 0.10);
    SET min_allowed = old_stock - (old_stock * 0.10);

    -- 如果新的库存超出允许的变化范围,则抛出错误
    IF new_stock > max_allowed OR new_stock < min_allowed THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = '库存变化不能超过10%';
    END IF;
END;		 -- 触发器结束
$$		-- 触发器定义结束,使用新的分隔符

DELIMITER ;		 -- 将语句分隔符改回为分号

测试语句

-- 合法的库存更新(变化不超过10%)
UPDATE books SET Stock = 33 WHERE BookID = 1;

-- 非法的库存更新(变化超过10%)
UPDATE books SET Stock = 50 WHERE BookID = 1;

3、用户表删除语句添加触发器,要求在删除用户信息时先删除借书表中的用户信息。

DELIMITER $$		-- 更改默认的语句分隔符为$$,这样可以在触发器内部使用分号

CREATE TRIGGER Before_Member_Delete	 -- 创建一个名为Before_Member_Delete的触发器
BEFORE DELETE ON members		 -- 触发器在members表发生DELETE操作之前触发
FOR EACH ROW		-- 触发器对每一行更改操作都执行一次
BEGIN				 -- 触发器开始
    -- 删除与该用户相关的所有借书记录
    DELETE FROM loans WHERE MemberID = OLD.MemberID;
END;	 -- 触发器结束
$$		-- 触发器定义结束,使用新的分隔符

DELIMITER ;		 -- 将语句分隔符改回为分号

测试语句

-- 删除用户 ID 为 1 的用户
DELETE FROM members WHERE MemberID = 1;

检查loans表,确保删除的用户ID为1借书记录已被删除。

存储过程创建

DELIMITER $$		-- 更改默认的语句分隔符为$$,

CREATE PROCEDURE AddBook(				-- 创建名为 AddBook 的存储过程	
    IN p_Title VARCHAR(200),			-- 书籍名称
    IN p_AuthorName VARCHAR(100),		-- 作者姓名
    IN p_PublisherName VARCHAR(100),	-- 出版社名称
    IN p_CategoryName VARCHAR(50),	    -- 类别名称
    IN p_YearPublished VARCHAR(4),	    --  出版年份
    IN p_Stock INT                      --  库存
)
BEGIN
		-- 声明变量
    DECLARE v_AuthorID INT;
    DECLARE v_PublisherID INT;
    DECLARE v_CategoryID INT;

    -- 检查并插入作者信息:
    SELECT AuthorID INTO v_AuthorID FROM authors WHERE Name = p_AuthorName;
    IF v_AuthorID IS NULL THEN
        INSERT INTO authors (Name) VALUES (p_AuthorName);
        SET v_AuthorID = LAST_INSERT_ID();
    END IF;

    -- 检查并插入出版社信息:
    SELECT PublisherID INTO v_PublisherID FROM publishers WHERE Name = p_PublisherName;
    IF v_PublisherID IS NULL THEN
        INSERT INTO publishers (Name) VALUES (p_PublisherName);
        SET v_PublisherID = LAST_INSERT_ID();
    END IF;

    -- 检查并插入类别信息:
    SELECT CategoryID INTO v_CategoryID FROM categories WHERE Name = p_CategoryName;
    IF v_CategoryID IS NULL THEN
        INSERT INTO categories (Name) VALUES (p_CategoryName);
        SET v_CategoryID = LAST_INSERT_ID();
    END IF;

    -- 插入书籍信息
    INSERT INTO books (Title, AuthorID, PublisherID, CategoryID, YearPublished, Stock)
    VALUES (p_Title, v_AuthorID, v_PublisherID, v_CategoryID, p_YearPublished, p_Stock);
END $$ -- 分隔符终止

DELIMITER ; -- 分隔符结束

详细解析

DELIMITER $$        -- 更改默认的语句分隔符为$$,

CREATE PROCEDURE AddBook

创建名为 AddBook 的存储过程,接收以下输入参数:

p_Title: 书籍名称

p_AuthorName: 作者姓名

p_PublisherName: 出版社名称

p_CategoryName: 类别名称

p_YearPublished: 出版年份

p_Stock: 库存

BEGIN -- 开始存储过程的主体部分

    DECLARE v_AuthorID INT;
    DECLARE v_PublisherID INT;
    DECLARE v_CategoryID INT;

声明 v_AuthorIDv_PublisherIDv_CategoryID 变量,用于存储对应表中的ID。

SELECT AuthorID INTO v_AuthorID FROM authors WHERE Name = p_AuthorName;
    IF v_AuthorID IS NULL THEN
        INSERT INTO authors (Name) VALUES (p_AuthorName);
        SET v_AuthorID = LAST_INSERT_ID();
    END IF;

检查并插入作者信息:

使用 SELECT 查询 authors 表中是否存在输入的作者姓名。

如果不存在(v_AuthorID 为 NULL),则插入新的作者记录,并获取新插入的作者ID。

SELECT PublisherID INTO v_PublisherID FROM publishers WHERE Name = p_PublisherName;
    IF v_PublisherID IS NULL THEN
        INSERT INTO publishers (Name) VALUES (p_PublisherName);
        SET v_PublisherID = LAST_INSERT_ID();
    END IF;

检查并插入出版社信息:

使用 SELECT 查询 publishers 表中是否存在输入的出版社名称。

如果不存在(v_PublisherID 为 NULL),则插入新的出版社记录,并获取新插入的出版社ID。

SELECT CategoryID INTO v_CategoryID FROM categories WHERE Name = p_CategoryName;
    IF v_CategoryID IS NULL THEN
        INSERT INTO categories (Name) VALUES (p_CategoryName);
        SET v_CategoryID = LAST_INSERT_ID();
    END IF;

检查并插入类别信息:

使用 SELECT 查询 categories 表中是否存在输入的类别名称。

如果不存在(v_CategoryID 为 NULL),则插入新的类别记录,并获取新插入的类别ID。

INSERT INTO books (Title, AuthorID, PublisherID, CategoryID, YearPublished, Stock)
    VALUES (p_Title, v_AuthorID, v_PublisherID, v_CategoryID, p_YearPublished, p_Stock);

插入书籍信息:

将书籍信息插入 books 表中,使用上面获取的 AuthorIDPublisherIDCategoryID,以及输入的书籍名称、出版年份和库存。

测试语句

CALL AddBook(
    '西游记',
    '吴承恩',
    '人民文学出版社',
    '小说',
    '1592',
    40
);
-- 检查插入的作者
SELECT * FROM authors WHERE Name IN ('吴承恩');

-- 检查插入的出版社
SELECT * FROM publishers WHERE Name IN ('人民文学出版社');

-- 检查插入的书籍
SELECT * FROM books WHERE Title IN ('西游记');


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker系列之安全

Docker的安全前言一、Docker 容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗二、Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题三、 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏…

Python22 Pandas库

Pandas 是一个Python数据分析库&#xff0c;它提供了高性能、易于使用的数据结构和数据分析工具。这个库适用于处理和分析输入数据&#xff0c;常见于统计分析、金融分析、社会科学研究等领域。 1.Pandas的核心功能 Pandas 库的核心功能包括&#xff1a; 1.数据结构&#xff…

游戏AI的创造思路-技术基础-深度学习(6)

让人工智障具备信念吧&#xff0c;依莫拉萨~~~串频道暴露年龄。。。不过深度信念和信念真的没啥关系&#xff0c;不知道为啥这样起名 目录 3.6. 深度信念网络(DBN) 3.6.1. 定义 3.6.2. 发展历史 3.6.3. 算法公式 3.6.4. 运行原理 3.6.4.1. 基本原理 3.6.4.2. Python实现…

人大金仓×深信服:打造高性能、高可靠教育信创数据库一体机解决方案

信息技术应用创新是数字经济发展的关键支撑和重要基石&#xff0c;近年来&#xff0c;国家高度重视信息技术应用创新产业发展。教育行业作为我国人才培养的发动机&#xff0c;发展教育信创是保持信创创新力、是提升信创人才质量的重要举措、是保障信创产业可持续发展的关键环节…

某平台小程序逆向思路整理

一、下载软件 devtools 二、强制打开控制台 根据返回的数据我们得知数据被加密了 找到这个加密的js 发现加密的位置 打断点进入这个加密的方法 之后自定义js。python调用解密即可。

web渗透-SSRF漏洞及discuz论坛网站测试

一、简介 ssrf(server-side request forgery:服务器端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;ssrf是要目标网站的内部系统。(因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系统&…

js+php 上传文件到服务器

https://andi.cn/page/621473.html

Navicat Premium Lite绿色免费版

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Navicat Premium Lite概述 Navicat 最近推出了一款名为 Navicat Premium Lite 的免费数据库管理开发工具&#xff0c;专为入门级用户设计。这款工具虽然在功能上与 Navicat…

转让北京资产评估公司变更需要什么条件和要求

北京资产评估公司是有限责任公司。因为有限责任公司具有人合属性&#xff0c;股东的个人信用及相互关系直接影响到公司的风格甚至信誉&#xff0c;所以各国公司法对有限责任公司股东向公司外第三人的转让股权&#xff0c;多有限制性规定。大致可分为法定限制和约定限制两类。公…

Centos7虚拟机

Centos 7 安装 1 镜像下载1.1 官网下载1.2 阿里云镜像下载 2 环境的安装2.1 打开我们的虚拟机&#xff0c;点击文件进行新建2.2 选择典型之后&#xff0c;下一步2.3 选择稍会安装操作系统2.4 勾选Linux&#xff0c;并且选择CentOS 7的版本2.5 设定我们虚拟机的名称和安装位置2.…

python实现可视化大屏(django+pyechars)

1.实现效果图 2.对数据库进行迁移 python manage.py makemigrations python manage.py migrate 3.登录页面 {% load static%} <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"…

文件管理器加载缓慢-禁用文件类型自动发现功能

文件管理器加载缓慢-禁用文件类型自动发现功能 右键“Shell”项&#xff0c;选择新建“字符串值” “FolderType”&#xff0c;数值为 NotSpecified。

文字实录|Checkout.com大中华区总经理项尧:品牌全球化发展中的支付运营策略

大家好&#xff0c;很高兴在此次【品牌全球化营销增长峰会】与大家一起分享和交流。 我叫项尧&#xff0c;是 Checkout.com 大中华区的总经理&#xff0c;在支付领域有将近15年的经验。 我们 Checkout.com 是一家总部位于英国的支付公司&#xff0c;专注于线上收单&#xff0…

旧衣回收小程序开发:回收市场的新机遇

当下&#xff0c;旧衣服回收已经成为了一种流行趋势&#xff0c;居民都将闲置的衣物进行回收&#xff0c;旧衣回收市场规模在不断增加。随着市场规模的扩大&#xff0c;为了让居民更加便利地进行回收&#xff0c;线上回收小程序也应运而生&#xff0c;为大众打造了一个线上回收…

程序员学长 | 快速学会一个算法,RNN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法&#xff0c;RNN 今天给大家分享一个超强的算法模型&#xff0c;RNN 循环神经网络&#xff08;Recurrent Neural Network, RNN&…

新改进!LSTM与注意力机制结合,性能一整个拿捏住

众所周知&#xff0c;LSTM并不能很好地处理长序列和重要信息的突出&#xff0c;这导致在某些情况下性能不佳。而注意力机制模拟人类视觉注意力机制的特点可以很好地解决这个问题。 说具体点就是&#xff0c;注意力机制通过权重分布来决定应该关注输入序列中的哪些部分&#xf…

完整代码Python爬取豆瓣电影详情数据

完整代码Python爬取豆瓣电影详情数据 引言 在数据科学和网络爬虫的世界里&#xff0c;豆瓣电影是一个丰富的数据源。在本文中&#xff0c;我们将探讨如何使用Python语言&#xff0c;结合requests和pyquery库来爬取豆瓣电影的详情页面数据。我们将通过一个具体的电影详情页面作…

3d渲染软件有哪些(2),渲染100邀请码1a12

3D渲染软件有很多&#xff0c;上次我们介绍了几个&#xff0c;这次我们接着介绍。 1、Arnold Arnold渲染器是一款基于物理算法的电影级渲染引擎&#xff0c;它具有渲染质量高、材质系统丰富、渲染速度快等特点&#xff0c;是3D设计师的极佳选择。2、Octane Render Octane Ren…

云3D渲染:深度剖析技术原理、优势及其在各行业的广泛应用

云3D渲染技术&#xff0c;在数字化转型的大潮中&#xff0c;以其显著的优势和广阔的应用潜力&#xff0c;正在深刻地重塑多个行业的未来。它不仅为电影特效、建筑设计、游戏开发和虚拟现实等领域注入了前所未有的视觉震撼&#xff0c;还促进了创意思维与前沿技术的紧密结合&…

【编译原理】总览

1 字母表 字母表&#xff1a; 用∑表示&#xff0c;它是一个有穷符号集合 符号&#xff1a;字母、数字、标点符号... 例如&#xff1a;二进制字母表为{0&#xff0c;1}&#xff0c;ASCII字符集 2 字母表的运算 字母表上的乘积&#xff1a; ∑1∑2{ab | a属于∑1&#xff0c;b…