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

【期末大作业】使用Python熟练掌握面向对象

引言

在编程学习过程中,构建项目是一个非常有效的方式,不仅能巩固和应用所学的知识,还能通过实践来解决实际问题。本文将通过几个经典的项目示例来展示如何用面向对象的方式设计和实现一个完整的系统,包括学生成绩管理系统、图书馆管理系统、电子商务网站模拟以及猜数字游戏。通过这些项目,你将能够掌握如何运用面向对象设计原则来处理数据存储、异常处理、系统功能模块化等常见问题,从而为更复杂的应用程序开发打下坚实的基础。

学生成绩管理系统

下面是学生管理系统的简单功能,其余几个类似,这里不做一一展示

这个学生成绩管理系统实现了以下功能:
添加学生信息
录入学生成绩
查询单个学生的成绩信息
查看某科目的班级平均分
数据持久化(保存到CSV文件)
系统的特点:
使用面向对象设计,将学生和管理系统分别封装
实现了异常处理,确保输入数据的正确性
使用CSV文件进行数据存储
提供了友好的命令行界面

首先创建主要的类和文件结构:

class Student:def __init__(self, student_id, name):self.student_id = student_idself.name = nameself.scores = {}  # 科目: 分数def add_score(self, subject, score):self.scores[subject] = scoredef get_average(self):if not self.scores:return 0return sum(self.scores.values()) / len(self.scores)
import csv
import osclass StudentManager:def __init__(self):self.students = {}  # student_id: Student对象self.file_path = "ts.csv"self.load_data()def add_student(self, student):self.students[student.student_id] = studentdef get_student(self, student_id):return self.students.get(student_id)def add_score(self, student_id, subject, score):if student_id in self.students:self.students[student_id].add_score(subject, score)def get_class_average(self, subject):scores = [s.scores.get(subject, 0) for s in self.students.values() if subject in s.scores]if not scores:return 0return sum(scores) / len(scores)def save_to_csv(self):with open(self.file_path, 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerow(['学号', '姓名', '科目', '分数'])for student in self.students.values():for subject, score in student.scores.items():writer.writerow([student.student_id, student.name, subject, score])def load_data(self):if not os.path.exists(self.file_path):returnwith open(self.file_path, 'r', encoding='utf-8') as f:reader = csv.reader(f)next(reader)  # 跳过表头for row in reader:student_id, name, subject, score = rowif student_id not in self.students:self.students[student_id] = Student(student_id, name)self.students[student_id].add_score(subject, float(score))
# -*- coding: utf-8 -*-
rom student import Student
rom student_manager import StudentManager
def main():manager = StudentManager()while True:print("\n=== 学生成绩管理系统 ===")print("1. 添加学生")print("2. 录入成绩")print("3. 查询学生成绩")print("4. 查看班级平均分")print("5. 保存并退出")choice = input("请选择操作 (1-5): ").strip()if choice == '1':student_id = input("请输入学号: ").strip()name = input("请输入姓名: ").strip()student = Student(student_id, name)manager.add_student(student)print("学生添加成功!")elif choice == '2':student_id = input("请输入学号: ").strip()subject = input("请输入科目: ").strip()try:score = float(input("请输入分数: ").strip())manager.add_score(student_id, subject, score)print("成绩录入成功!")except ValueError:print("分数输入错误!请输入有效的数字。")elif choice == '3':student_id = input("请输入要查询的学号: ").strip()student = manager.get_student(student_id)if student:print(f"\n学号:{student.student_id}")print(f"姓名:{student.name}")print("成绩:")for subject, score in student.scores.items():print(f"{subject}: {score}")print(f"平均分:{student.get_average():.2f}")else:print("未找到该学生!")elif choice == '4':subject = input("请输入要查询的科目: ").strip()avg = manager.get_class_average(subject)print(f"{subject}的班级平均分是:{avg:.2f}")elif choice == '5':manager.save_to_csv()print("数据已保存,程序退出!")breakelse:print("无效的选择,请重试!")
if __name__ == "__main__":main()

界面如下
在这里插入图片描述

图书馆管理系统

class Book:def __init__(self, book_id, title,author):self.book_id = book_idself.title = titleself.author = authorself.is_borrowed = Falseself.borrow_history = []  # 借阅历史记录def borrow(self, user_id, borrow_date):if not self.is_borrowed:self.is_borrowed = Trueself.borrow_history.append({'user_id': user_id,'borrow_date': borrow_date,'return_date': None})return Truereturn Falsedef return_book(self, return_date):if self.is_borrowed:self.is_borrowed = Falseself.borrow_history[-1]['return_date'] = return_datereturn Truereturn False
class User:def __init__(self, user_id, name):self.user_id = user_idself.name = nameself.borrowed_books = []  # 当前借阅的图书ID列表     def borrow_book(self, book_id):self.borrowed_books.append(book_id)def return_book(self, book_id):if book_id in self.borrowed_books:self.borrowed_books.remove(book_id)return Truereturn False
import json
import datetime
from book import Book
from user import Userclass Library:def __init__(self):self.books = {}  # book_id: Book对象self.users = {}  # user_id: User对象self.load_data()def add_book(self, book):self.books[book.book_id] =  def add_user(self, user):self.users[user.user_id] = userdef borrow_book(self, user_id, book_id):if user_id not in self.users or book_id not in self.books:return Falsebook = self.books[book_id]user = self.users[user_id]if book.borrow(user_id, datetime.datetime.now()):user.borrow_book(book_id)return Truereturn Falsedef return_book(self, user_id, book_id):if user_id not in self.users or book_id not in self.books:return Falsebook = self.books[book_id]user = self.users[user_id]if book.return_book(datetime.datetime.now()):user.return_book(book_id)return Truereturn Falsedef save_data(self):data = {'books': {bid: {'title': book.title,'author': book.author,'is_borrowed': book.is_borrowed,'borrow_history': book.borrow_history} for bid, book in self.books.items()},'users': {uid: {'name': user.name,'borrowed_books': user.borrowed_books} for uid, user in self.users.items()}}with open('library_data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, default=str)def load_data(self):try:with open('library_data.json', 'r', encoding='utf-8') as f:data = json.load(f)for book_id, book_data in data['books'].items():book = Book(book_id, book_data['title'], book_data['author'])book.is_borrowed = book_data['is_borrowed']book.borrow_history = book_data['borrow_history']self.books[book_id] = bookfor user_id, user_data in data['users'].items():user = User(user_id, user_data['name'])user.borrowed_books = user_data['borrowed_books']self.users[user_id] = userexcept FileNotFoundError:pass

界面如下
在这里插入图片描述

电子商务网站模拟

class Product:def __init__(self, product_id, name, price, stock):self.product_id = product_idself.name = nameself.price = priceself.stock = stockdef decrease_stock(self, quantity):if self.stock >= quantity:self.stock -= quantityreturn Truereturn False
class ShoppingCart:def __init__(self):self.items = {}  # product_id: quantitydef add_item(self, product_id, quantity):if product_id in self.items:self.items[product_id] += quantityelse:self.items[product_id] = quantitydef remove_item(self, product_id):if product_id in self.items:del self.items[product_id]def update_quantity(self, product_id, quantity):if quantity <= 0:self.remove_item(product_id)else:self.items[product_id] = quantitydef get_total(self, products):total = 0for product_id, quantity in self.items.items():if product_id in products:total += products[product_id].price * quantityreturn total
import datetimeclass Order:def __init__(self, order_id, user_id, items, total_amount):self.order_id = order_idself.user_id = user_idself.items = items  # {product_id: quantity}self.total_amount = total_amountself.order_date = datetime.datetime.now()self.status = "pending"  # pending, paid, delivereddef pay(self):self.status = "paid"def ship(self):self.status = "shipped"def deliver(self):self.status = "delivered"
import json
from product import Product
from cart import ShoppingCart
from order import Orderclass Store:def __init__(self):self.products = {}  # product_id: Product对象self.orders = {}    # order_id: Order对象self.load_data()def add_product(self, product):self.products[product.product_id] = productdef create_order(self, user_id, cart):order_id = str(len(self.orders) + 1)total = cart.get_total(self.products)# 检查库存for product_id, quantity in cart.items.items():if not self.products[product_id].decrease_stock(quantity):return Noneorder = Order(order_id, user_id, cart.items.copy(), total)self.orders[order_id] = orderreturn orderdef save_data(self):data = {'products': {pid: {'name': p.name,'price': p.price,'stock': p.stock} for pid, p in self.products.items()},'orders': {oid: {'user_id': o.o.items,'total_amount': o.total_amount,'order_date': str(o.order_date),'status': o.status} for oid, o in self.orders.items()}}with open('store_data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False)def load_data(self):try:with open('store_data.json', 'r', encoding='utf-8') as f:data = json.load(f)for pid, p_data in data['products'].items():self.products[pid] = Product(pid, p_data['name'], p_data['price'], p_data['stock'])for oid, o_data in data['orders'].items():self.orders[oid] = Order(oid, o_data['user_id'], o_data['items'],o_data['total_amount'])self.orders[oid].status = o_data['status']except FileNotFoundError:pass
from store import Store
from product import Product
from cart import ShoppingCartdef main():store = Store()cart = ShoppingCart()    while True:print("\n电子商务系统")print("1. 添加商品")print("2. 查看商品列表")print("3. 添加到购物车")print("4. 查看购物车")print("5. 修改购物车")print("6. 创建订单")print("7. 查看订单")print("8. 保存并退出")choice = input("请选择操作 (1-8): ")if choice == '1':product_id = input("请输入商品ID: ")name = input("请输入商品名称: ")try:price = float(input("请输入价格: "))stock = int(input("请输入库存数量: "))product = Product(product_id, name, price, stock)store.add_product(product)print("商品添加成功!")except ValueError:print("输入错误!")elif choice == '2':print("\n商品列表:")for pid, product in store.products.items():print(f"ID: {pid}")print(f"名称: {product.name}")print(f"价格: ¥{product.price:.2f}")print(f"库存: {product.stock}")print()elif choice == '3':product_id = input("请输入商品ID: ")if product_id in store.products:try:quantity = int(input("请输入数量: "))if quantity > 0:cart.add_item(product_id, quantity)print("添加成功!")else:print("数量必须大于0!")except ValueError:print("输入错误!")else:print("商品不存在!")elif choice == '4':print("\n购物车:")total = 0for pid, quantity in cart.items.items():if pid in store.products:product = store.products[pid]subtotal = product.price * quantitytotal += subtotalprint(f"商品: {product.name}")print(f"数量: {quantity}")print(f"小计: ¥{subtotal:.2f}")print()print(f"总计: ¥{total:.2f}")elif choice == '5':product_id = input("请输入要修改的商品ID: ")if product_id in cart.items:try:quantity = int(input("请输入新的数量(0表示删除): "))cart.update_quantity(product_id, quantity)print("修改成功!")except ValueError:print("输入错误!")else:print("购物车中没有该商品!")elif choice == '6':if not cart.items:print("购物车为空!")continueuser_id = input("请输入用户ID: ")order = store.create_order(user_id, cart)if order:print(f"订单创建成功!订单号:{order.order_id}")cart = ShoppingCart()  # 清空购物车else:print("订单创建失败!库存不足")elif choice == '7':print("\n订单列表:")for oid, order in store.orders.items():print(f"订单号: {oid}")print(f"用户ID: {order.user_id}")print(f"总金额: ¥{order.total_amount:.2f}")print(f"状态: {order.status}")print("商品:")for pid, quantity in order.items.items():if pid in store.products:print(f"- {store.products[pid].name} x {quantity}")print()elif choice == '8':store.save_data()print("数据已保存,程序退出!")breakelse:print("无效的选择,请重试!")
if __name__ == "__main__":main()

界面如下
在这里插入图片描述

猜数字游戏

import random
import json
from datetime import datetimeclass NumberGame:def __init__(self):self.target = 0self.max_tries = 10self.high_scores = []self.load_scores()def start_new_game(self):self.target = random.randint(1, 100)return self.targetdef check_guess(self, guess):if guess < self.target:return "太低了"elif guess > self.target:return "太高了"else:return "猜对了"def add_score(self, player_name, tries):score = {'player': player_name,'tries': tries,'date': datetime.now().strftime("%Y-%m-%d %H:%M:%S")}self.high_scores.append(score)self.high_scores.sort(key=lambda x: x['tries'])self.high_scores = self.high_scores[:10]  # 只保留前10名self.save_scores()def save_scores(self):with open('high_scores.json', 'w', encoding='utf-8') as f:json.dump(self.high_scores, f, ensure_ascii=False)def load_scores(self):try:with open('high_scores.json', 'r', encoding='utf-8') as f:self.high_scores = json.load(f)except FileNotFoundError:self.high_scores = []
from game import NumberGamedef main():game = NumberGame()while True:print("\n猜数字游戏")print("1. 开始新游戏")print("2. 查看排行榜")print("3. 退出")choice = input("请选择操作 (1-3): ")if choice == '1':game.start_new_game()tries = 0print(f"\n游戏开始!你有{game.max_tries}次机会猜一个1-100之间的数。")while tries < game.max_tries:ry:guess = int(input(f"还剩{game.max_tries - tries}次机会,请猜一个数: "))tries += 1if guess < 1 or guess > 100:print("请猜1-100之间的数!")continueresult = game.check_guess(guess)print(result)if result == "猜对了":print(f"恭喜你用了{tries}次猜对了!")name = input("请输入你的名字记录成绩: ")game.add_score(name, tries)breakexcept ValueError:print("请输入有效的数字!")if tries >= game.max_tries:print(f"游戏结束!正确答案是{game.target}")elif choice == '2':print("\n排行榜:")for i, score in enumerate(game.high_scores, 1):print(f"{i}. {score['player']}: {score['tries']}次 ({score['date']})")elif choice == '3':print("谢谢游戏,再见!")breakelse:print("无效的选择,请重试!")
if __name__ == "__main__":main()

界面如下
在这里插入图片描述

结语

本文展示的几个项目涵盖了日常生活中常见的管理和游戏系统,旨在帮助读者更好地理解如何运用Python进行面向对象的编程实践。每个项目都涉及到不同的功能模块与实际问题,通过这些示例,你可以学到如何设计易于维护的代码结构,如何处理用户输入、数据存储以及程序的整体逻辑。无论你是初学者还是有一定基础的开发者,这些项目都能为你提供一定的编程经验和思维方式,帮助你在未来的编程道路上更加自信地面对挑战。希望你能从这些项目中获得启发,并将所学应用到更多实际的编程任务中!

提供Python期末大作业指导,欢迎资讯

请添加图片描述

相关文章:

【期末大作业】使用Python熟练掌握面向对象

引言 在编程学习过程中&#xff0c;构建项目是一个非常有效的方式&#xff0c;不仅能巩固和应用所学的知识&#xff0c;还能通过实践来解决实际问题。本文将通过几个经典的项目示例来展示如何用面向对象的方式设计和实现一个完整的系统&#xff0c;包括学生成绩管理系统、图书…...

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…...

【MAC】深入浅出 Homebrew 下 Nginx 的安装与配置指南

硬件&#xff1a;Apple M4 Pro 16寸 系统&#xff1a; macos Sonoma 15.1.1 Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;广泛应用于全球各地的网站和企业应用中。本文将详细介绍如何在 macOS 环境下使用 Homebrew 安装、启动、管理以及优化配置 Nginx&#x…...

【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】

【华为OD-E卷-寻找关键钥匙 100分&#xff08;python、java、c、js、c&#xff09;】 题目 小强正在参加《密室逃生》游戏&#xff0c;当前关卡要求找到符合给定 密码K&#xff08;升序的不重复小写字母组成&#xff09; 的箱子&#xff0c;并给出箱子编号&#xff0c;箱子编…...

SQL MID()

SQL中的MID()函数是一个用于从指定位置开始截取字符串中指定长度的子串的函数。这个函数在数据库查询和数据处理中经常被使用&#xff0c;特别是在需要从较长的文本字段中提取特定信息时。 MID()函数的基本语法是&#xff1a;SELECT MID(column_name, start, length) FROM tab…...

Sui 基金会任命 Christian Thompson 为新任负责人

Sui 基金会是专注于推动 Sui 蓬勃发展的生态增长与采用的机构。近日&#xff0c;基金会宣布任命 Christian Thompson 为新任负责人。在 Sui 主网发布的开创性一年里&#xff0c;Sui 凭借其无与伦比的速度、可扩展性和效率&#xff0c;迅速崛起为领先的 Layer 1 区块链之一&…...

ViEW生命周期

Vue的生命周期是指Vue实例从创建到销毁的整个过程&#xff0c;包括多个阶段和对应的钩子函数。以下是Vue生命周期的详细说明&#xff1a; 1. **创建阶段**&#xff1a; - beforeCreate&#xff1a;在实例初始化之前调用&#xff0c;此时数据观测和事件配置尚未完成&#xff0c;…...

[蓝桥杯 2019 国 B] 排列数

目录 前言 题解 思路 疑问 解答 前言 对于本篇文章是站在别人的基础之上来写的&#xff0c;对于这道题作为2019年国赛B组的最难的一题&#xff0c;他的难度肯定是不小的&#xff0c;这道题我再一开始接触的时候连思路都没有&#xff0c;也是看了两三遍别人发的题解&#x…...

python 中执行from elasticsearch import Elasticsearch,AsyncElasticsearch 报错

在 Python 中执行 from elasticsearch import Elasticsearch, AsyncElasticsearch 时,如果提示 AsyncElasticsearch 不存在,可能是因为以下几个原因: 1. 安装的 elasticsearch 库版本不匹配 AsyncElasticsearch 是在 elasticsearch 库的较新版本中引入的。如果你安装的版本…...

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…...

浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码

Cookie Notices and Cookie Consent | Cookiepedia 1. 法律法规要求 许多国家和地区的隐私法律要求网站在存储或处理用户数据&#xff08;包括 Cookies&#xff09;之前必须获得用户的明确同意&#xff1a; GDPR&#xff08;欧盟通用数据保护条例&#xff09; 要求&#xff…...

数据结构:栈和队列的实现

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO &#xff08; Last In First Out &#xff09;的原则。 压栈&#xff1a;栈…...

2024.12.21辩论赛感受

背景 今天辩论赛的双方论点是&#xff1a; 正方&#xff1a;寒假留在研发中心的收获大 反方&#xff1a;寒假去做其他事情的收获 辩论赛&#xff0c;为了锻炼自己&#xff0c;选择了不想选择以及相对不好辩论的反方。出现的状况有一下几点&#xff1a; 1.发现自己脑子完全跟不…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

圣诞快乐(h5 css js(圣诞树))

一&#xff0c;整体设计思路 圣诞树h5&#xff08;简易&#xff09; 1.页面布局与样式&#xff1a; 页面使用了全屏的黑色背景&#xff0c;中央显示圣诞树&#xff0c;树形由三层绿色的三角形组成&#xff0c;每一层的大小逐渐变小。树干是一个棕色的矩形&#xff0c;位于三角…...

移植 OLLVM 到 LLVM18,修复控制流平坦化报错

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 把 OLLVM 移植到 LLVM18 后&#xff0c;发现 -fla&#xff08;控制流平坦化&#xff09;并不能正常使用。 关于移植过程可以参考这篇文章 【移植 OLLVM…...

MFC/C++学习系列之简单记录——序列化机制

MFC/C学习系列之简单记录——序列化机制 前言简述六大机制序列化机制使用反序列化总结 前言 MFC有六大机制&#xff0c;分别是程序启动机制、窗口创建机制、动态创建机制、运行时类信息机制、消息映射机制、序列化机制。 简述六大机制 程序启动机制&#xff1a;全局的应用程序…...

【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析

文章目录 1. 计算机网络有哪些分类2. 计算机网络中协议与标准的区别3. 计算机网络拓扑有哪些结构4. 常用的网络设备有哪些&#xff0c;分属于OSI的哪一层5. IEEE802局域网标准有哪些 【网络云计算】2024第51周-每日【2024/12/17】小测-理论-解析 1. 计算机网络有哪些分类 计算…...

Python中的上下文管理器:从资源管理到自定义实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 Python中的上下文管理器(Context Manager)为资源管理提供了强大的支持,尤其在处理文件、网络连接、数据库连接等需要精确控制生命周期的…...

STM32 高级 物联网通信之CAN通讯

目录 CAN通讯介绍 物理层 协议层 CAN的帧(报文)种类 1 数据帧(发送单元->接受单元) 2 远程帧(接受单元->发送单元) 3 错误帧(发送方发送数据错误会发送的状态帧) 4 过载帧(接收方放不下会发送到的状态帧) 5 帧间隔(状态) 数据帧介绍 远程帧介绍 C…...

如何求解小于等于x的正整数因子y的个数总和

G ( X , Y ) X 的因子 Y 个数 G(X,Y) X的因子Y个数 G(X,Y)X的因子Y个数 例如 G ( 8 , 2 ) 3 G(8,2)3 G(8,2)3 G ( 12 , 2 ) 2 G(12,2)2 G(12,2)2 F ( X , Y ) ∑ i 1 X G ( i ) F(X, Y) \sum_{i1}^{X} G(i) F(X,Y)i1∑X​G(i) 直接上结论 F ( X , Y ) X Y 1 ⋯ X…...

Epic游戏使用mod

以土豆兄弟为例&#xff1a; 第一步&#xff1a;获取 SteamCMD 下载官方 Steam 控制台客户端 (steamCMD) 1. 下载好后打开&#xff0c;是一个在 cmd 窗口的运行的命令行 2. 输入以下代码登录 login anonymous 第二步&#xff1a; 确认自己要下载的游戏 ID 和 mod ID 然后…...

前端:纯前端快速实现html导出word和pdf

实现html导出word&#xff0c;需要使用两个库。 html-docx-js和file-saver 导出word的js方法 > npm install html-docx-js >npm install file-saver js引入 import FileSaver from “file-saver”; import htmlDocx from “html-docx-js/dist/html-docx”; /**导出…...

Windows装Docker至D盘/其他盘(最新,最准确,直接装)

前言 Docker的默认安装路径为 C:\你的用户名\AppData\Local\Docker\wsl这样安装常常会导致C盘爆满。目前现有博客的安装方法往往不能把docker的container和image也装在非C盘。本博客旨在用最简单的方式&#xff0c;把Docker Deskstop的images和container装在D盘中。 安装前&a…...

2024 年 IA 技术大爆发深度解析

摘要&#xff1a; 本文旨在深入剖析 2024 年 IA 技术大爆发所引发的多方面反响。通过对产业变革、经济影响、就业市场、社会影响、政策与监管以及未来展望等维度的探讨&#xff0c;揭示 IA 技术在这一关键时期对全球各个层面带来的深刻变革与挑战&#xff0c;并提出相应的思考与…...

现代 CSS 布局与响应式设计实战指南

作为一名前端开发者&#xff0c;我经常被问到&#xff1a;"为什么你的页面布局这么流畅&#xff1f;响应式适配这么完美&#xff1f;"今天&#xff0c;我就来分享一下在实际项目中常用的 CSS 布局技巧和响应式设计方案。 现代布局三剑客&#xff1a;Flex、Grid 和 C…...

react 项目打包二级目 使用BrowserRouter 解决页面刷新404 找不到路由

使用BrowserRouter package 配置 &#xff08;这部分代码可以不做配置也能实现&#xff09; {"homepage": "/admin",}vite.config 配置 export default defineConfig({base: /admin])BrowserRouter 添加配置项 <BrowserRouter basename/admin>&l…...

Yolo11改进策略:Block改进|使用FastVit的RepMixerBlock改进Yolo11,重参数重构助力Yolo11涨点(全网首发)

文章目录 摘要FastViT:一种使用结构重新参数化的快速混合视觉变换器1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检…...

2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

02-10.python入门基础一Python模块与包(二)

五、Python 包的概念 &#xff08;一&#xff09;包的定义与结构 在 Python 中&#xff0c;“包”&#xff08;Package&#xff09;是一种按照目录来组织模块的方式&#xff0c;它允许开发者将相关的模块集合在一起&#xff0c;形成一个更具逻辑性和结构性的代码单元。 从物…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议&#xff0c;常用于保护无线网络。它提供了一种基于端口的网络访问控制机制&#xff0c;主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点&#xff1a; 认证框架 802.1X 使用 EAP&#xff08;可扩展认证协议…...

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览&#xff1a; 前端该如何下载呢&#xff1f;首先在axios请求里&#xff0c;加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…...

R 常用的内置软件包及功能介绍

R 中有许多内置包&#xff0c;提供了丰富的功能来帮助用户进行数据分析、统计建模、图形可视化等任务。以下是一些常用的内置包及其功能简介&#xff1a; 1. stats 包 stats 是 R 的一个核心包&#xff0c;几乎每个 R 用户都会使用它。它包含了许多统计分析的函数&#xff0c…...

基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)

超声波测距模块HC-SR04 1、产品特色 ①典型工作用电压&#xff1a;5V ②超小静态工作电流&#xff1a;小于 5mA ③感应角度(R3 电阻越大,增益越高,探测角度越大)&#xff1a; R3 电阻为 392,不大于 15 度 R3 电阻为 472, 不大于 30 度 ④探测距离(R3 电阻可调节增益,即调节探测…...

12月第十九讲:Redis应用Redis相关解决方案

1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是&#xff1a;数据库和缓存一致性、热key…...

solon 集成 activemq-client (sdk)

原始状态的 activemq-client sdk 集成非常方便&#xff0c;也更适合定制。就是有些同学&#xff0c;可能对原始接口会比较陌生&#xff0c;会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…...

STM32-笔记7-继电器定时开闭

1、复制02项目&#xff0c;重命名08-继电器定时开闭 打开项目工程 在\Drivers\BSP\该路径下&#xff0c;新建alarm文件夹&#xff0c;该文件夹下里面包含alarm.c和alarm.h文件 加载进该项目中 为什么这里使用的是 这个单词&#xff0c;而不是继电器&#xff08;relay&#…...

B4X编程语言:B4X的映射(数据地图Map)详解

B4X的映射(Map)是由多个键值对组成的数据集合&#xff0c;也称为数据地图。它和列表一样也是一个非可视化的数据容器&#xff0c;在B4X中作为变量使用&#xff0c;用于在单个变量下存储多个键值对。 映射中的键是唯一的。 这意味着&#xff0c;如果您添加了一个键/值对…...

windows C++ 判断文件大小,清空文件,写日志

windows C 判断文件大小&#xff0c;清空文件&#xff0c;写日志等几个常见的接口&#xff0c;记录一下备忘 #include <iostream> #include <vector> #include<Windows.h> #include<string> #include <iostream> #include <sys/types.h> …...

用Python设置Excel工作表的页眉和页脚

在处理和分析数据时&#xff0c;Excel作为一款功能强大的工具&#xff0c;被广泛应用于各个领域。当涉及到打印或分享工作表时&#xff0c;为文档添加专业的页眉和页脚不仅能提升文件的视觉效果&#xff0c;还能提供必要的信息&#xff0c;例如公司标识、日期、文件名或是页码等…...

electron-vite【实战】自定义标题栏【组件封装】(含异形标题栏,指定区域拖拽,窗口置顶,窗口最小化,窗口最大化,取消最大化,隐藏窗口到托盘等)

效果预览 技术要点 透明背景 src/main/index.ts 的 new BrowserWindow 中添加 transparent: true, // 设置窗口背景透明frame: false, // 隐藏窗口边框仅图标和标题部分可拖拽 仅图标和标题部分添加样式 drag .drag {-webkit-app-region: drag; }图标与标题栏的融合 标题栏的…...

MySQL复制问题和解决

目录 环境介绍 一&#xff0c;主库执行delete&#xff0c;从库没有该数据 模拟故障 修复故障 二&#xff0c;主库执行insert&#xff0c;从库已存在该数据 模拟故障 故障恢复 三&#xff0c;主库执行update&#xff0c;从库没有该数据 模拟故障 故障恢复 四&#xf…...

Spark和Hive的区别

1 、 Hive Hive 是基于 Hadoop 的数据仓库工具&#xff0c;同时又是查询引擎&#xff0c; Spark SQL 只是取代的 Hive 的查询引擎这一部分&#xff0c;企业可以使用HiveSpark SQL 进行开发。 Hive 的主要工作如下&#xff1a; 把HQL 翻译长 map-reduce 的代码&#xff0c;并…...

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代&#xff0c;智能家居产品如同璀璨繁星般点缀着我们的生活&#xff0c;从智能灯光的温馨到温控系统的精准&#xff0c;处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中&#xff0c;一款极具创新的电热毯——Type-C 接口电热…...

React 19新特性探索:提升性能与开发者体验

React作为最受欢迎的JavaScript库之一&#xff0c;不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本&#xff0c;引入了一系列令人兴奋的新特性和改进&#xff0c;旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性&#xff0c;…...

【数据库】SQL语句基础

【数据库】SQL语句基础 文章目录 【数据库】SQL语句基础一、SQL与数据库二、 SQL语句类型2.1 数据定义语言&#xff08;DDL&#xff09;1. 创建数据库&#xff1a;CREATE DATABASE2. 创建表&#xff1a;CREATE TABLE3. 删除表&#xff1a;DROP TABLE4. 修改表结构&#xff1a;A…...

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包&#xff0c;下载后安装&#xff0c;安装中记录JDK安装的地址&#xff0c;之后一直点击下一…...

Hadoop、Hbase使用Snappy压缩

1. 前期准备 系统环境&#xff1a;centos7.9 配置信息&#xff1a;8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…...

初试Docker

1. 查看版本 docker --version2. 拉取镜像并查看当前存在的镜像 docker pull hello-world查看是否成功拉取到docker docker images在Docker Desktop 可视化查看 3. 删除镜像 docker rmi xxx4. 启动容器 以下命令使用 mysql镜像启动一个容器&#xff0c;参数为以命令行模…...

【Rust自学】4.5. 切片(Slice)

4.5.0. 写在正文之前 这是第四章的最后一篇文章了&#xff0c;在这里也顺便对这章做一个总结&#xff1a; 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况&#xff0c;但是当数据所有者超…...