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

图书管理系统 数据结构先导课暨C语言大作业复习 | JorbanS

问题描述

读取给定的图书文件book.txt中的信息(book.txt中部分图书信息如下图所示),完成一个图书信息管理系统,该系统的各个功能模块要求利用菜单选项进行选择。

系统功能要求

图书浏览

读取book.txt中的文件信息并依次输出所有图书信息(书号、书名、价格),包括文件前两行的标题说明信息。

图书统计

统计book.txt中的图书总数n并输出。

图书插入

根据指定的位置i(1≤i≤n+1)和给定的一本图书信息,将该图书插入到位置i,并将变化后的图书信息回写到book.txt。

图书删除

根据指定的位置i(1≤i≤n),删除该位置上的图书信息,并将变化后的图书信息回写到book.txt。

图书查找

① 按位置进行查找:根据输入的位置i(1≤i≤n),查找位置i上的图书信息并输出;
② 按书名进行查找:根据输入的书名,查找该图书的信息并输出(如果有多本,则全部输出)。

价格更新

将价格小于45元的图书价格提高20%,价格大于等于45元的图书价格提高10%,将修改后的图书信息重新写入新文件book-newprice.txt中。

价格排序

按图书价格升序排序,将排序后的图书信息重新写入新文件book-newsort.txt中。

逆序存储

将book.txt中的全部图书逆序存储(即最后一本置于原第一本位置)写入新文件book-newinverse.txt中。
【数据结构要求】
图书数据类型的定义需要采用数据结构教材(参考文献[1])24页中的顺序表类型定义方式,如下所示。

算法实现要求

正确性

在合理的数据输入下,能够在有限的运行时间内得到正确的结果。

可读性

程序结构清晰,易于理解,程序要求具有规范的缩进格式,关键语句添加适当的注释,变量或函数名等标识符按照见名知义的原则命名。

健壮性

当输入的数据非法时,能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。例如,查找不到时给出“图书不存在,查找失败”的提示,插入或删除位置非法时给出“指定位置非法”的提示等。

高效性

分析每个算法的时间复杂度和空间复杂度,并确保时间高效和空间高效。

任务选做要求

基于链式存储结构实现上述所有功能,即将图书数据类型的定义改为数据结构教材(参考文献[1])29页中的链表类型定义方式,如下所示。

具体实现时需要将上述定义中的ElemType改为如下定义的Book类型取可,即每一本图书作为链表的一个结点。

typedef struct		//图书信息定义
{ char no[20];		//图书ISBNchar name[50];	//图书名字float price; 	//图书价格
} Book;

参考文献
[1] 严蔚敏, 李冬梅, 吴伟民.数据结构(C语言版)(第2版)双色版.人民邮电出版社, 2021.
[2] 李冬梅, 田紫微.数据结构习题解析与实验指导(第2版).人民邮电出版社, 2022.
[3] C语言教程. https://www.runoob.com/cprogramming/c-tutorial.html.


以下是笔者在同目录下文件 book.txt 生成的随机数据,便于调试

9781334512350 程序设计艺术 89.90
9781344656791 数据库原理 95.80
9781355712402 网络安全入门 99.70
9781366856813 C++高级编程 105.60
9781377912454 深度学习研究 110.50
9781388056865 大数据分析 104.40
9781399112466 游戏开发秘籍 89.30
9781400256917 移动应用设计 97.20
9781411312478 云服务架构 108.10
9781422456929 人工智能未来 115.00
9781433512480 系统集成方法 98.90
9781444656931 前端开发进阶 88.80
9781455712492 3D图形编程 119.70
9781466856943 VR技术实践 129.60
9781477912504 物联网技术 104.50
9781488056955 编译原理简介 95.40
9781499112516 数字设计基础 86.30
9781500256967 软件工程方法 107.20
9781511312528 IT项目管理 96.10
9781522456979 企业网络解决方案 112.00
9781533512530 运算放大器设计 93.90
9781544657011 深度学习框架 92.80
9781555712562 微处理器原理 101.70
9781566857063 数据挖掘技术 109.60
9781577912594 网络编程入门 106.50
9781588057105 机器人技术 105.40
9781599112656 嵌入式系统设计 104.30
9781600257157 量子计算概论 102.20
9781611312678 分布式系统原理 103.10
9781622457109 电路设计基础 101.00
9781633512670 软件测试方法 100.90
9781644657151 无线通信技术 99.80
9781655712712 系统分析与设计 98.70
9781666857253 开源软件应用 97.60
9781677912754 高性能计算 96.50
9781688057305 网站开发实践 95.40
9781699112856 编程语言概览 94.30
9781700257357 安全编程技巧 93.20
9781711312858 计算机图形学 92.10
9781722457409 操作系统原理 91.00
9781733512950 软件架构设计 89.90
9781744657491 互联网金融 88.80
9781755712952 区块链技术 87.70
9781766857493 人工智能伦理 86.60
9781777913054 量子机器学习 85.50
9781788057505 虚拟现实技术 84.40
9781799113156 云计算安全 83.30
9781800257557 网络协议分析 82.20
9781811313058 数据中心设计 81.10
9781822457609 大数据存储 80.00

完整 c o d e code code

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <windows.h>
#include <stdlib.h>
#define cls system("cls")
#define endl puts("")
#define title(x) printf("========%s========\n", x)
#define DIR "./book.txt"
#define DIR_NewPrice "./book-newprice.txt"
#define DIR_Inverse "./book-newinverse.txt"
#define DIR_Sort "./book-newsort.txt"typedef struct {char no[20], name[50];float price;
} Book;typedef struct LNode {Book data;struct LNode* next;
} *LinkList;LinkList InitList();
int Read(LinkList L, int Type); // Type = 0 头插法, Type = 1 尾插法
void Write(LinkList L, int Type); // 写入文件
// Type = 0 代表源文件
// Type = 1 代表逆序存储的文件
// Type = 2 代表存储更新的价格
// Type = 3 代表存储按价格顺序的文件
void StoreInverse(LinkList L); // 逆序存储
void Output(LinkList L, int count); // 所有图书输出到屏幕
int Add(LinkList L, int count); // 新增图书
int Erase(LinkList L, int count); // 移除图书
int SearchByID(LinkList L, int count); // 按索引搜索
int SearchByName(LinkList L, int count); // 按书名搜索
void Search(LinkList L, int count); // 搜索
void Update(LinkList L); // 更新书的价格
void Edit(LinkList L, int count); // 图书管理
void Sort(LinkList L, int count); // 按价格排序
void CannotOpenFile(); // 报错:无法打开文件
void CannotCloseFile(); // 报错:无法关闭文件
void CannotAllocateMemory(); // 报错:无法分配内存int main(void) {while (true) {LinkList L = InitList();int count = Read(L, 1);if (count == -1) return 0;int op;do {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t0 > 退出系统");puts("\t\t1 > 图书列表");puts("\t\t2 > 图书管理");puts("\t\t3 > 查找图书");puts("\t\t4 > 逆序存储");puts("\t\t5 > 价格升序");endl;title("==========================================");scanf("%d", &op);} while (op < 0 || op > 6);switch (op) {case 0: // 退出系统cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t\t已退出系统");endl;title("==========================================");return 0;break;case 1: // 图书列表Output(L, count);puts("输入任意并回车返回主界面");int op;scanf("%d", &op);break;case 2: // 图书管理Edit(L, count);break;case 3: // 查找图书Search(L, count);break;case 4: // 逆序存储StoreInverse(L);break;case 5: // 按价格升序Sort(L, count);break;}}return 0;
}void CannotOpenFile() {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t无法打开文件!");endl;title("==========================================");Sleep(1000);}void CannotCloseFile() {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t无法关闭文件!");endl;title("==========================================");Sleep(1000);}void CannotAllocateMemory() {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t无法分配内存!");endl;title("==========================================");Sleep(1000);}LinkList InitList() {LinkList L = (LinkList)malloc(sizeof(LNode));if (L == NULL) {CannotAllocateMemory();exit(-1);}L->next = NULL;return L;}int Read(LinkList L, int Type) {FILE* fpRead;if ((fpRead = fopen(DIR, "r")) == NULL) {CannotOpenFile();fclose(fpRead);exit(-1);}LinkList last;if (Type == 1) last = L; // 尾插法记录末节点int count = 0;while (!feof(fpRead)) {count ++;LinkList elem = (LinkList)malloc(sizeof(LNode));fscanf(fpRead, "%s%s%f\n", elem->data.no, elem->data.name, &elem->data.price);if (!Type) { // 头插法elem->next = L->next;L->next = elem;} else { // 尾插法last->next = elem;elem->next = NULL;last = elem;}}if (fclose(fpRead)) {CannotCloseFile();exit(-1);}return count;}void Write(LinkList L, int Type) {FILE* fpWrite;if (Type == 0) fpWrite = fopen(DIR, "w");else if (Type == 1) fpWrite = fopen(DIR_Inverse, "w");else if (Type == 2) fpWrite = fopen(DIR_NewPrice, "w");else fpWrite = fopen(DIR_Sort, "w");if (fpWrite == NULL) {CannotOpenFile();exit(-1);}for (LinkList elem = L->next; elem != NULL; elem = elem->next) {float Now = elem->data.price;if (Type == 2) {if (Now < 45) Now *= 1.2;else Now *= 1.1;}fprintf(fpWrite, "%s %s %.2f\n", elem->data.no, elem->data.name, Now);}if (fclose(fpWrite)) {CannotCloseFile();exit(-1);}}void StoreInverse(LinkList L) {LinkList L2 = (LinkList)malloc(sizeof(LNode));L2->next = NULL;Read(L2, 0);Write(L2, 1);cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t已完成逆序存储");endl;title("==========================================");Sleep(1000);}void Output(LinkList L, int count) {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;printf("一共索引到 %d 条图书记录\n", count);endl;puts("索引  \tISBN\t\t书名\t\t定价");int cnt = 1;for (LinkList elem = L->next; elem != NULL; elem = elem->next, cnt ++) {printf("%2d  %s  %-18s  %5.2lf\n", cnt, elem->data.no, elem->data.name, elem->data.price);}endl;printf("一共索引到 %d 条图书记录\n", count);endl;title("==========================================");}int Add(LinkList L, int count) {int pos;do {Output(L, count);printf("请输入数字 1 ~ %d,作为插入的位置:", count + 1);scanf("%d", &pos);} while (pos < 1 || pos > count + 1);LinkList tmp = (LinkList)malloc(sizeof(LNode));printf("ISBN:");scanf("%s", tmp->data.no);printf("书名:");scanf("%s", tmp->data.name);printf("定价:");scanf("%f", &tmp->data.price);int cnt = 1;for (LinkList elem = L; elem != NULL; elem = elem->next, cnt ++) {if (cnt == pos) {tmp->next = elem->next;elem->next = tmp;break;}}Write(L, 0);return count + 1;
}int Erase(LinkList L, int count) {int pos;do {cls;Output(L, count);endl;printf("请输入数字 1 ~ %d,作为删除的位置:", count);scanf("%d", &pos);} while (pos < 1 || pos > count);int cnt = 1;for (LinkList elem = L->next; elem != NULL; elem = elem->next, cnt ++) {if (cnt == pos) {char c[20];do {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("索引  \tISBN\t\t书名\t\t定价");printf("%2d  %s  %-18s  %5.2lf\n", cnt, elem->data.no, elem->data.name, elem->data.price);title("==========================================");endl;printf("是否确定删除索引第 %d 本书?(Y/N):", pos);scanf("%s", c);} while (c[0] != 'Y' && c[0] != 'N');if (c[0] == 'N') return count;elem->next = elem->next->next;break;}}Write(L, 0);return count - 1;
}int SearchByID(LinkList L, int count) {int pos;do {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;printf("请输入数字 1 ~ %d,作为查找的位置:", count);scanf("%d", &pos);} while (pos < 1 || pos > count);return pos;
}int SearchByName(LinkList L, int count) {char Name[60];int cnt;while (true) {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;printf("请输入书名以查找:");scanf("%s", Name);cnt = 1;for (LinkList elem = L->next; elem != NULL; elem = elem->next, cnt ++) {if (!strcmp(elem->data.name, Name)) return cnt;}if (Name[0] == 'q') return -1;if (cnt == count + 1) {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t未查找到相关书名");endl;title("==========================================");Sleep(1000);break;}}return -1;
}void Search(LinkList L, int count) {int op;do {cls;title(" 查找图书 ");endl;puts("\t0 > 返回");puts("\t1 > 按索引查找");puts("\t2 > 按书名查找");endl;title("==========");scanf("%d", &op);} while (op < 0 || op > 2);int pos;switch (op) {case 0:return;break;case 1:pos = SearchByID(L, count);break;case 2:pos = SearchByName(L, count);break;}if (pos == -1) return;int cnt = 1;for (LinkList elem = L->next; elem != NULL; elem = elem->next, cnt ++) {if (cnt == pos) {cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("找到了以下书满足搜索条件:");endl;puts("索引  \tISBN\t\t书名\t\t定价");printf("%2d  %s  %-18s  %5.2lf\n", cnt, elem->data.no, elem->data.name, elem->data.price);endl;title("==========================================");endl;puts("输入任意并回车返回主界面");int op;scanf("%d", &op);return;}}
}void Update(LinkList L) {Write(L, 2);cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t已完成价格更新");endl;title("==========================================");Sleep(1000);}void Edit(LinkList L, int count) {int op;do {cls;title(" 图书管理 ");endl;puts("\t0 > 返回");puts("\t1 > 新增图书");puts("\t2 > 删除图书");puts("\t3 > 更新价格");endl;title("==========");scanf("%d", &op);} while (op < 0 || op > 3);switch (op) {case 0:return;break;case 1:count = Add(L, count);break;case 2:count = Erase(L, count);break;case 3:Update(L);break;}
}void Swap(LinkList A, LinkList B) { // 交换数据Book C;C = B->data;B->data = A->data;A->data = C;}void Sort(LinkList L, int count) {LinkList L3 = (LinkList)malloc(sizeof(LNode));L3->next = NULL;LinkList last = L3;for (LinkList elem = L->next; elem != NULL; elem = elem->next) {LinkList New = (LinkList)malloc(sizeof(LNode));New->data = elem->data;last->next = New;New->next = NULL;last = New;}for (LinkList i = L3->next; i->next != NULL; i = i->next) // 冒泡排序for (LinkList j = i->next; j != NULL; j = j->next)if (i->data.price > j->data.price) Swap(i, j);Write(L3, 3);cls;title(" 安徽工业大学图书馆计算机图书采购管理系统 ");endl;puts("\t\t已完成按价格升序");endl;title("==========================================");Sleep(1000);}

相关文章:

图书管理系统 数据结构先导课暨C语言大作业复习 | JorbanS

问题描述 读取给定的图书文件book.txt中的信息&#xff08;book.txt中部分图书信息如下图所示&#xff09;&#xff0c;完成一个图书信息管理系统&#xff0c;该系统的各个功能模块要求利用菜单选项进行选择。 系统功能要求 图书浏览 读取book.txt中的文件信息并依次输出所…...

python 爬虫的开发环境配置

1、新建一个python项目 2、在控制台中分别安装下面三个包 pip install requests pip install beautifulsoup4 pip install selenium/ 如果安装时报以下错误&#xff1a; raise ReadTimeoutError(self._pool, None, "Read timed out.") pip._vendor.urllib3.exceptio…...

技术架构图是什么?和业务架构图的区别是什么?

技术架构图是什么&#xff1f; ​技术架构图是一种图形化工具&#xff0c;用于呈现软件、系统或应用程序的技术层面设计和结构。它展示了系统的各种技术组件、模块、服务以及它们之间的关系和交互方式。技术架构图关注系统内部的技术实现细节&#xff0c;以及各个技术组件之…...

数据增强

一、数据增强 当你训练一个机器学习模型时&#xff0c;你实际做工作的是调参&#xff0c;以便将特定的输入&#xff08;一副图像&#xff09;映像到输出&#xff08;标签&#xff09;。我们优化的目标是使模型的损失最小化&#xff0c; 以正确的方式调节优化参数即可实现这一目…...

【Unity】2D 对话模块的实现

对话模块主要参考 【Unity教程】剧情对话系统 实现。 在这次模块的构建将基于 unity ui 组件 和 C#代码实现一个从excel 文件中按照相应规则读取数据并展示的逻辑。这套代码不仅能实现正常的对话&#xff0c;也实现了对话中可以通过选择不同选项达到不同效果的分支对话功能。 …...

laravel安装初步使用学习 composer安装

一、什么是laravel框架 Laravel框架可以开发各种不同类型的项目&#xff0c;内容管理系统&#xff08;Content Management System&#xff0c;CMS&#xff09;是一种比较典型的项目&#xff0c;常见的网站类型&#xff08;如门户、新闻、博客、文章等&#xff09;都可以利用CM…...

【VS插件】VS code上的Remote - SSH

【VS插件】VS code上的Remote - SSH 目录 【VS插件】VS code上的Remote - SSH获得Linux服务器或者Linux系统的IP地址下载插件远程登录注意如果Linux虚拟机系统无法连接成功可能是没有开启ssh服务优势 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.9.12 前言&#xff1…...

TensorFlow 02(张量)

一、张量 张量Tensor 张量是一个多维数组。与NumPy ndarray对象类似&#xff0c;tf.Tensor对象也具有数据类型和形状。如下图所示: 此外&#xff0c;tf.Tensors可以保留在GPU中。TensorFlow提供了丰富的操作库 (tf.add&#xff0c;tf.matmul,tf.linalg.inv等)&#xff0c;它们…...

513. 找树左下角的值

代码链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 万金油层次遍历&#xff0c;保存每一层的第一个元素返回就行了 我的代码&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* …...

量化:基于支持向量机的择时策略

文章目录 参考机器学习简介策略简介SVM简介整体流程收集数据准备数据建立模型训练模型测试模型调节参数 参考 Python机器学习算法与量化交易 利用机器学习模型&#xff0c;构建量化择时策略 机器学习简介 机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。…...

成功解决Selenium 中116版本的chromedriver找不到问题

Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver 文章目录 Selenium 中的Google&#xff08;谷歌浏览器&#xff09;最新版本chromedriver1.当前作者的谷歌浏览器版本2.当前驱动官网的最新版本3.当不想降低浏览器版本继续使用谷歌浏览器的办法 1.当…...

PYQT常用组件--方法汇总

QTimeEdit timeEdit是Qt框架中的一个时间编辑器控件&#xff0c;它提供了以下常用方法&#xff1a; setTime(QTime time): 设置时间编辑器的时间为指定的QTime对象。time(): 返回时间编辑器的当前时间&#xff0c;返回一个QTime对象。setDateTime(QDateTime dateTime): 设置时…...

Linux系统编程(一):文件 I/O

参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 系统编程 1. UNIX 基础知识 1.1 UNIX 体系结构&#xff08;下图所示&#xff09; 从严格意义上说&#xff0c;可将操作系统定义为一种软件&#xff0c;它控制计算机硬件资源&#xff0c;提供程序运行环境&#xff0c;通常…...

OSM+three.js打造3D城市

对于我在 Howest 的研究项目,我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中,随后我将对其进行动画处理。 一、开发环境 为了使用 Node 和 npm 包,我选择使用 Vite…...

02JVM_垃圾回收GC

二、垃圾回收GC 在堆里面存放着java的所有对象实例&#xff0c;当对象为“死去”&#xff0c;也就是不再使用的对象&#xff0c;就会进行垃圾回收GC 1.如何判断对象可以回收 1.1引用计数器 介绍 在对象中添加一个引用计数器&#xff0c;当一个对象被其他变量引用时这个对象…...

ARM Linux DIY(八)USB 调试

前言 V3s 带有一个 USB 接口&#xff0c;将其设置为 HOST 或 OTG 模式&#xff0c;这样可以用来接入键盘、鼠标等 USB 外设。 USB 简介 USB 有两种设备&#xff1a;HOST 和 USB 功能设备。 在 USB2.0 中又引入了一个新的概念 OTG&#xff0c;即设备角色可以动态切换。 切换方…...

编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹)

系列文章目录 编程小白的自学笔记十三&#xff08;python办公自动化读写文件&#xff09; 编程小白的自学笔记十二&#xff08;python爬虫入门四Selenium的使用实例二&#xff09; 编程小白的自学笔记十一&#xff08;python爬虫入门三Selenium的使用实例详解&#xff09; …...

MySQL使用Xtrabackup备份到AWS存储桶

1.安装Xtrabackup cd /tmp wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.33-28/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm yum -y localinstall percona-xtrabackup-80-8.0.33-28.1.el7.x86…...

(高阶)Redis 7 第11讲 BIGKEY 优化篇

面试题 问题答案如何在海量数据中查询某一固定前缀的Keyscan生产环境如何限制 keys */FLUSHDB/FLUSHALL 等危险命令,防止误删误用# 修改配置文件 rename-command keys "" rename-command flushdb "" rename-command flushall ""如何使用MEMORY U…...

一阶差分和二阶差分概念及其举例

一阶差分和二阶差分概念及其举例 目录 一阶差分和二阶差分概念及其举例1、一阶差分1.1 概念1.2 举例 2、二阶差分2.1 概念2.2 举例 1、一阶差分 1.1 概念 一阶差分是指对一个数列中的每个元素&#xff0c;计算其与其前一个元素之差的操作。 1.2 举例 举例来说&#xff0c;对…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...