WPF学习(2)--类与类的继承2-在窗口的实现

一、代码分析

1.Animal.cs

1.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AnimalNamespace
{public class Animal{public string Name { get; set; }public int Age { get; set; }public Animal (string name,int age){Name = name;Age = age;}public virtual string 吃饭(){return "我要吃饭";}public virtual string Makesound(){return "animal sound";}public override string ToString(){return $"{Name} (Age:{Age})";}}
}

1.2 代码分析

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

解释:这些 using 指令用于引入命名空间,允许你使用这些命名空间中定义的类和方法。System 包含基本的系统功能,Collections.Generic 提供泛型集合类,Linq 用于查询操作,Text 提供处理文本的类,Threading.Tasks 提供并行编程类。

namespace AnimalNamespace
{

解释:定义一个命名空间 AnimalNamespace,用于组织代码并避免命名冲突。在这个命名空间内定义的所有类和方法都属于这个命名空间。

    public class Animal{

解释:定义一个公共类 Animalpublic 关键字表示这个类可以被其他命名空间中的代码访问。

        public string Name { get; set; }

解释:定义一个公共属性 Namestring 是数据类型,表示这个属性存储字符串。{ get; set; } 是属性访问器,表示这个属性可以被读取和写入。

        public int Age { get; set; }

解释:定义一个公共属性 Ageint 是数据类型,表示这个属性存储整数。{ get; set; } 同样表示这个属性可以被读取和写入。

        public Animal(string name, int age){Name = name;Age = age;}

解释:定义一个构造函数 Animal。构造函数是一个特殊的方法,在创建类的实例时调用。public 关键字表示这个构造函数可以被其他代码调用。参数 string nameint age 用于初始化 NameAge 属性。

        public virtual string 吃饭(){return "我要吃饭";}

解释:定义一个公共的虚方法 吃饭,返回类型为 stringvirtual 关键字表示这个方法可以在派生类中被重写。方法体返回一个字符串 "我要吃饭"

        public virtual string Makesound(){return "animal sound";}

解释:定义另一个公共的虚方法 Makesound,返回类型为 string。方法体返回一个字符串 "animal sound"

        public override string ToString(){return $"{Name} (Age:{Age})";}

解释:重写基类 ObjectToString 方法。override 关键字表示这是一个重写的方法。方法体返回一个格式化的字符串,包含 NameAge 属性的值。$"{Name} (Age:{Age})" 是 C# 6.0 引入的字符串插值语法,允许在字符串中嵌入表达式。

2.DOG.cs

2.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AnimalNamespace
{public class Dog:Animal{public Dog(string name, int age) : base(name, age) { }public override string Makesound(){return "汪汪!";}public override string 吃饭(){return "我要啃骨头";}}
}

2.2 代码解释

    public class Dog : Animal{

解释:定义一个公共类 Dog,它继承自 Animal 类。public 关键字表示这个类可以被其他命名空间中的代码访问。: 表示继承关系,Dog 类继承自 Animal 类,意味着 Dog 类将具有 Animal 类的所有属性和方法。

        public Dog(string name, int age) : base(name, age) { }

解释:定义一个构造函数 Dog,它接受两个参数 nameage,并将它们传递给基类 Animal 的构造函数。base(name, age) 调用基类的构造函数以初始化继承自基类的 NameAge 属性。

        public override string Makesound(){return "汪汪!";}

解释:重写基类 Animal 的虚方法 Makesoundoverride 关键字表示这是一个重写的方法。这个方法返回一个字符串 "汪汪!"

        public override string 吃饭(){return "我要啃骨头";}

解释:重写基类 Animal 的虚方法 吃饭。这个方法返回一个字符串 "我要啃骨头"

3.CAT.cs

3.1 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace AnimalNamespace
{public class Cat:Animal{public Cat(string Name, int age):base(Name, age){ }public override string Makesound(){return "喵喵";}}
}

3.2 代码解释

同DOG.cs

4.MainWindow.xaml.cs

4.1 代码

using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using AnimalNamespace;namespace WpfApp2
{public partial class MainWindow : Window{List<Animal> Zoo;private 我的实验 MyText;public MainWindow(){InitializeComponent();Zoo = new List<Animal>();MyText=new 我的实验();MyText.显示串 = "";DataContext = new { 我的实验 = MyText };}private void Button_Click(object sender, RoutedEventArgs e){Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second);Zoo.Add(x);}private void Button_Click_1(object sender, RoutedEventArgs e){Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second);Zoo.Add(x);}private void Button_Click_2(object sender, RoutedEventArgs e){string 叫声 = "";foreach (Animal animal in Zoo){if (animal != null){叫声+=animal .Name +":"+ animal.Makesound()+ ":"+animal.吃饭();叫声 += Environment.NewLine;}}MyText.显示串 = 叫声;}}public class 我的实验 : INotifyPropertyChanged{private string _显示串;public string 显示串{get { return _显示串; }set{_显示串 = value;OnPropertyChanged("显示串");}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}
}

4.2 代码解释

    public partial class MainWindow : Window{

解释:定义一个公共的部分类 MainWindow,继承自 Window 类。这个类是 WPF 应用程序的主窗口。

        List<Animal> Zoo;private 我的实验 MyText;

解释:定义一个 Zoo 列表,用于存储 Animal 类的实例。定义一个私有字段 MyText,类型为 我的实验,用于数据绑定。

        public MainWindow(){InitializeComponent();Zoo = new List<Animal>();MyText = new 我的实验();MyText.显示串 = "";DataContext = new { 我的实验 = MyText };}

解释:定义 MainWindow 的构造函数。

  • InitializeComponent():初始化组件,加载 XAML 中定义的 UI 元素。
  • Zoo = new List<Animal>():初始化 Zoo 列表。
  • MyText = new 我的实验():初始化 MyText 实例。
  • MyText.显示串 = "":将 MyText显示串 属性初始化为空字符串。
  • DataContext = new { 我的实验 = MyText }:设置数据上下文,用于数据绑定。
        private void Button_Click(object sender, RoutedEventArgs e){Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second);Zoo.Add(x);}

解释:定义一个按钮点击事件处理方法 Button_Click

  • Dog x = new Dog("dog" + DateTime.Now.Second.ToString(), DateTime.Now.Second):创建一个新的 Dog 实例,名字包括当前秒数。
  • Zoo.Add(x):将新创建的 Dog 实例添加到 Zoo 列表中。
        private void Button_Click_1(object sender, RoutedEventArgs e){Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second);Zoo.Add(x);}

解释:定义另一个按钮点击事件处理方法 Button_Click_1

  • Cat x = new Cat("cat" + DateTime.Now.Second.ToString(), DateTime.Now.Second):创建一个新的 Cat 实例,名字包括当前秒数。
  • Zoo.Add(x):将新创建的 Cat 实例添加到 Zoo 列表中。
        private void Button_Click_2(object sender, RoutedEventArgs e){string 叫声 = "";foreach (Animal animal in Zoo){if (animal != null){叫声 += animal.Name + ":" + animal.Makesound() + ":" + animal.吃饭();叫声 += Environment.NewLine;}}MyText.显示串 = 叫声;}

解释:定义第三个按钮点击事件处理方法 Button_Click_2

  • string 叫声 = "":初始化一个空字符串 叫声
  • foreach (Animal animal in Zoo):遍历 Zoo 列表中的每个 Animal 实例。
  • if (animal != null):检查 animal 是否不为 null
  • 叫声 += animal.Name + ":" + animal.Makesound() + ":" + animal.吃饭():将 animal 的名字、叫声和吃饭行为添加到 叫声 字符串中。
  • 叫声 += Environment.NewLine:添加换行符。
  • MyText.显示串 = 叫声:更新 MyText显示串 属性。
    public class 我的实验 : INotifyPropertyChanged{

解释:定义一个公共类 我的实验,实现 INotifyPropertyChanged 接口。这个接口用于通知属性值的更改。

        private string _显示串;public string 显示串{get { return _显示串; }set{_显示串 = value;OnPropertyChanged("显示串");}}

解释:定义一个私有字段 _显示串 和一个公共属性 显示串

  • get { return _显示串; }:返回 _显示串 的值。
  • set { _显示串 = value; OnPropertyChanged("显示串"); }:设置 _显示串 的值,并调用 OnPropertyChanged("显示串") 方法通知属性值的更改。
        public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}

解释

  • public event PropertyChangedEventHandler PropertyChanged:定义一个 PropertyChanged 事件,用于通知属性值的更改。
  • protected virtual void OnPropertyChanged(string propertyName):定义一个受保护的虚方法 OnPropertyChanged,用于触发 PropertyChanged 事件。
  • PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)):如果 PropertyChanged 事件不为空,则触发该事件,并传递 propertyName 参数。

5.MainWindow.xaml

5.1 代码

<Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp2"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Button Content="DOG" HorizontalAlignment="Left" Height="67" Margin="71,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click"/><Button Content="CAT" HorizontalAlignment="Left" Height="67" Margin="212,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_1"/><Button Content="MAKESOUND" HorizontalAlignment="Left" Height="67" Margin="355,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_2"/><TextBlock x:Name="OutputTextBlock" HorizontalAlignment="Left" Height="183" Margin="71,140,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="404" FontSize="16"Text="{Binding 我的实验.显示串}"  /></Grid>
</Window>

5.2 代码解释

<Window x:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp2"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800">

解释

  • <Window> 标签定义了一个 WPF 窗口。
  • x:Class="WpfApp2.MainWindow":指定这个窗口的关联类是 WpfApp2.MainWindow
  • xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation":定义 XAML 的默认命名空间,用于 WPF 控件。
  • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml":定义 XAML 的 X 命名空间,用于 XAML 语言功能。
  • xmlns:d="http://schemas.microsoft.com/expression/blend/2008":定义设计时支持的命名空间。
  • xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006":定义标记兼容性的命名空间。
  • xmlns:local="clr-namespace:WpfApp2":定义本地命名空间 WpfApp2,用于引用同一个命名空间内的类型。
  • mc:Ignorable="d":指示设计时命名空间中的内容在运行时可以忽略。
  • Title="MainWindow":设置窗口的标题为 "MainWindow"。
  • Height="450"Width="800":设置窗口的高度为 450 像素,宽度为 800 像素。
    <Grid><Button Content="DOG" HorizontalAlignment="Left" Height="67" Margin="71,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click"/><Button Content="CAT" HorizontalAlignment="Left" Height="67" Margin="212,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_1"/><Button Content="MAKESOUND" HorizontalAlignment="Left" Height="67" Margin="355,49,0,0" VerticalAlignment="Top" Width="120" Click="Button_Click_2"/><TextBlock x:Name="OutputTextBlock" HorizontalAlignment="Left" Height="183" Margin="71,140,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="404" FontSize="16"Text="{Binding 我的实验.显示串}"  /></Grid>
</Window>

解释

  • <Grid>:定义一个网格布局容器,用于组织其子元素。

  • <Button>:定义一个按钮控件。

    • Content="DOG":按钮上的文本为 "DOG"。
    • HorizontalAlignment="Left":按钮水平左对齐。
    • Height="67":按钮高度为 67 像素。
    • Margin="71,49,0,0":按钮的外边距,分别是左、上、右、下(左边距 71 像素,上边距 49 像素)。
    • VerticalAlignment="Top":按钮垂直顶部对齐。
    • Width="120":按钮宽度为 120 像素。
    • Click="Button_Click":单击按钮时调用 Button_Click 方法。
  • 第二个 <Button> 控件类似,只是内容为 "CAT",外边距不同(左边距 212 像素),单击事件处理方法为 Button_Click_1

  • 第三个 <Button> 控件内容为 "MAKESOUND",外边距不同(左边距 355 像素),单击事件处理方法为 Button_Click_2

  • <TextBlock>:定义一个文本块控件,用于显示文本。

    • x:Name="OutputTextBlock":设置控件的名称为 OutputTextBlock
    • HorizontalAlignment="Left":文本块水平左对齐。
    • Height="183":文本块高度为 183 像素。
    • Margin="71,140,0,0":文本块的外边距,分别是左、上、右、下(左边距 71 像素,上边距 140 像素)。
    • TextWrapping="Wrap":文本自动换行。
    • VerticalAlignment="Top":文本块垂直顶部对齐。
    • Width="404":文本块宽度为 404 像素。
    • FontSize="16":文本块的字体大小为 16 像素。
    • Text="{Binding 我的实验.显示串}":通过数据绑定将 我的实验 类的 显示串 属性绑定到文本块的文本属性。

二、实验结果

在这个过程中我依次点击了2次DOG、1次CAT、1次DOG、1次CAT,最后点击MAKESOUND使它们发出相同的行为,结果如下。

总结

这个项目通过 WPF (Windows Presentation Foundation) 实现了一个简单的动物管理应用程序,具有以下功能:

  1. 界面布局

    • 主窗口包含三个按钮和一个文本块,用于用户交互和显示结果。
  2. 按钮功能

    • “DOG” 按钮:点击后创建一个新的 Dog 对象,并将其添加到动物列表 Zoo 中。
    • “CAT” 按钮:点击后创建一个新的 Cat 对象,并将其添加到动物列表 Zoo 中。
    • “MAKESOUND” 按钮:点击后遍历 Zoo 列表,获取所有动物的名字、叫声和吃饭行为,并将这些信息显示在文本块中。
  3. 数据绑定

    • 使用 INotifyPropertyChanged 接口和数据绑定机制,实现数据的动态更新。具体来说,我的实验 类包含一个 显示串 属性,当其值发生变化时,通过数据绑定更新显示在界面上的文本块。

具体实现细节

  1. Animal 类及其派生类

    • Animal 类是一个基类,包含 NameAge 属性,以及虚方法 Makesound()吃饭()
    • Dog 类和 Cat 类继承自 Animal 类,分别重写了 Makesound()吃饭() 方法,提供各自特有的实现。
  2. MainWindow 类

    • 定义了主窗口的构造函数,初始化组件、动物列表 Zoo我的实验 类的实例。
    • 定义了三个按钮点击事件处理方法,分别用于添加 DogCat 对象,以及显示动物的名字、叫声和吃饭行为。
  3. 我的实验类

    • 实现 INotifyPropertyChanged 接口,包含一个 显示串 属性,当其值改变时,触发 PropertyChanged 事件通知界面更新。
  4. XAML 布局

    • 使用 XAML 定义主窗口布局,包括三个按钮和一个文本块。
    • 使用数据绑定机制,将 我的实验 类的 显示串 属性绑定到文本块的 Text 属性,实现动态数据展示。

项目功能总结

  • 添加动物:用户可以通过点击按钮向动物列表中添加 DogCat 对象,每个对象的名字包含当前秒数。
  • 显示动物信息:点击“MAKESOUND”按钮后,遍历动物列表,显示每个动物的名字、叫声和吃饭行为。
  • 数据绑定与动态更新:通过数据绑定机制和 INotifyPropertyChanged 接口,确保界面上的文本块能动态显示最新的动物信息。

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

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

相关文章

RabbitMQ的简单使用 —— Python篇

&#xff08;一&#xff09;RabbitMQ的简介 RabbitMq 是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式&#xff0c;应用程序通过写消息&#xff0c;将消息传递于队列&#xff0c;由另一应用程序读取 完…

JavaWeb项目配置教程

将你的项目&#xff08;只有代码的文件&#xff0c;不是整个文件&#xff09;拖入idea 找到数据库配置代码&#xff08;一般在Util包里面&#xff0c;或者是properties配置文件&#xff09;并将密码修改为你的数据库密码。 点击Edit Configurations 点击Configure&#xff0…

SOLIDWORKS安装运行环境建议 慧德敏学

SOLIDWORKS是一款要求很高的软件。无可否认。您的电脑功能越强大&#xff0c;运行得越好&#xff0c;但是我们也要考虑购买成本&#xff0c;因此&#xff0c;选择正确的配置很重要。在选择用于SOLIDWORKS的电脑配置时&#xff0c;需要综合考虑多个方面以确保软件能够流畅、以更…

leetcode动态规划 斐波那契数列

题意&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中…

【android】用 ExpandableListView 来实现 TreeView树形菜单视图

使用 ExpandableListView 来实现 TreeView 创建一个 ExpandableListAdapter 来为其提供数据。以下演示了如何使用 ExpandableListView 来展示树形结构的数据&#xff1a; 首先&#xff0c;在布局文件中添加 ExpandableListView&#xff1a; <ExpandableListViewandroid:i…

短剧app广告变现系统开发 源码搭建

短剧app广告变现系统的开发以及源码搭建是一个涉及多个技术领域的复杂过程。以下是一个大致的开发和搭建流程&#xff1a; 确定业务需求和目标&#xff1a; 明确短剧app的功能需求&#xff0c;例如短剧展示与播放、分享裂变与付费、投放与分销、内容与数据管理等功能1。确定广告…

Hi3861 OpenHarmony嵌入式应用入门--PWM 三色灯

这篇文章是讲解的pwm控制三色灯的部分&#xff0c;这部分也是后续全彩智能灯的基础。 硬件原理如下 IO管脚定义在hi-12f_v1.1.2-规格书-20211202.pdf文档中 GPIO API API名称 说明 unsigned int IoTGpioInit(unsigned int id); GPIO模块初始化 hi_u32 hi_io_set_func(hi_i…

无引擎游戏开发(2):最简游戏框架 | EasyX制作井字棋小游戏I

一、EasyX中的坐标系 不同于数理中的坐标系&#xff0c;EasyX中的y轴是竖直向下的 二、渲染缓冲区 之前的程序添加了这三个函数改善了绘图时闪烁的情况: 小球在"画布“上移动的过程就是我们在调用绘图函数&#xff0c;这个”画布“就是渲染缓冲区&#xff0c;先绘制的内…

AI在创造音乐

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其在音乐领域的应用也日益广泛&#xff0c;从音乐生成到声音合成&#xff0c;AI正逐渐成为音乐创作者的有力助手。然而&#xff0c;这一技术的兴起也引发了关于AI是否会毁掉音乐的讨论。以下从几个方面对这一…

【配置】Notion自动化备份到github方案

步骤 打开notion网页&#xff0c;获取到需要的值 token_v2 找到请求getSpaces的 Cookie 值 token_v2 space_id 找到请求getSpaces的响应结果space,如下图&#xff1a; file_token 找个页面点击导出&#xff0c;之后拿到这个配置项 注意&#xff1a;配置项会过期&#xff0c…

基于一种改进熵方法的旋转机械故障诊断模型(MATLAB)

熵的概念起源于热力学&#xff0c;1884年&#xff0c;玻尔兹曼定义熵&#xff0c;用以描述分子热运动的无序性和混乱度。1948年&#xff0c;Shannon在其发表的《AMathematicalTheoryofCommunication》中提出香农熵&#xff0c;首次将“熵”引入信息度量范畴&#xff0c;为信息论…

RK3568技术笔记十三 Ubuntu的编译

Ubuntu文件系统编译 在编译前需要按照前面的方法初始化编译环境&#xff0c;否则会导致编译失败&#xff08;若配置过则无需重复配置&#xff09;。 按下述方法编译的Ubuntu系统&#xff0c;用户名是&#xff1a;dianyu 密码&#xff1a;1 编译Ubuntu&#xff0c;执…

机械臂 CoppeliaSim Simulink联合仿真

实现机械臂在CoppeliaSim&#xff08;以前称为V-REP&#xff09;和Simulink上的联合仿真涉及多个步骤&#xff0c;包括环境设置、模型导入、通信配置、控制算法设计和测试调试。 前期准备 安装软件配置工作环境创建和配置CoppeliaSim场景 导入机械臂模型配置机械臂参数在Simuli…

javafx打包成exe可执行程序

写文章有点累 我做了个视频录制操作流程 把idea的项目迁移到eclipse, 在eclipse中新建项目, 修改pom文件,拷贝对应java文件, 新建一个java类 里面加载自己的javafx启动application修改项目的jdk版本, 拷贝xml 资源文件, 运行程序如果能运行则迁移成功 接下来导出jar包, 拷贝jd…

webp图片格式怎么转换成jpg?值得收藏的四种转换方法介绍!

webp图片格式怎么转换成jpg&#xff1f;在当今数字图像处理领域&#xff0c;新兴的WebP格式以其独特的特性和兼容性&#xff0c;迅速成为备受追捧的图像格式之一&#xff0c;这一格式以其高效的压缩能力和优秀的网络传输速度著称&#xff0c;为网络图像的传输和存储提供了全新的…

【python】基于python聊天工具

目录 一、概述 二、socket通信 2.1 服务器 2.1.1 建立socket类 2.1.2 绑定端口 2.1.3 监听 2.1.4 等待连接 2.2 客户端 2.2.1 连接 2.2.2 发送 2.2.3 接收 三、基于python的聊天程序的流程设计 3.1 服务器端的流程 3.2 客户端的流程 四、基于python的聊天程序的…

Web爬虫-edu_SRC-目标列表爬取

免责声明:本文仅做技术交流与学习... 爬取后,结合暗黑搜索引擎等等进行进一步搜索. edu_src.py import requests, time from bs4 import BeautifulSoup for i in range(1, 20):url fhttps://src.sjtu.edu.cn/rank/firm/0/?page{i}print(f"正在获取第{i}页数据")s …

一种稀疏贝叶斯学习的旋转机械故障诊断方法(MATLAB)

轴承的故障诊断技术是通过检测轴承故障特征信息来判断轴承的具体故障为位置或损伤程度。在轴承发生损坏时&#xff0c;故障特征信息会随着工作时间的增长变得明显。轴承的损坏过程可以分为四个阶段。第一个阶段为损伤初始阶段&#xff0c;轴承故障特征信号一般无法测量。第二个…

SQLite vs MySQL vs PostgreSQL对比总结

开发业务系统时&#xff0c;是绕不开RDBMS&#xff08;关系型数据库&#xff09;的。虽然现在诞生了各种NoSQL的数据库&#xff0c;RDBMS在业务系统中的严谨和优势依然无法取代。 近几年大大小小的项目中&#xff0c;常用的三种RDBMS&#xff08;SQLite&#xff0c;MySQL&#…

基于SSM+Jsp的书店仓库管理系统

摘要&#xff1a;仓库作为储存货物的核心功能之一&#xff0c;在整个仓储中具有非常重要的作用&#xff0c;是社会物质生产的必要条件。良好的仓库布局环境能够对货物进入下一个环节前的质量起保证作用&#xff0c;能够为货物进入市场作好准备&#xff0c;在设计中我们根据书店…