Vue3 + TypeScript + Uniapp 开发小程序【医疗小程序完整案例·一篇文章精通系列】

当今的移动应用市场已经成为了一个日趋竞争激烈的领域,而开发一个既能在多个平台上运行,又能够高效、可维护的应用则成为了一个急需解决的问题。
在这里插入图片描述

在这个领域中,Vue3 + TypeScript + Uniapp 的组合已经成为了一种受欢迎的选择,特别是在开发小程序方面。Vue3 作为一个现代的、灵活的前端框架,它通过组件化的方式帮助开发者构建复杂的用户界面。

同时,TypeScript 作为一种强类型语言,可以提高代码的可维护性和可读性,并在开发过程中提供更好的开发体验。而 Uniapp 作为一个基于 Vue3 的跨平台应用开发框架,则提供了开发小程序所需的各种工具和功能,使得开发者可以更加高效地开发和发布小程序。

本文将全面介绍使用 Vue3 + TypeScript + Uniapp 开发小程序的方法和技巧,帮助读者掌握这一领域的核心技术,从而在开发过程中更加得心应手。

Vue3 + TypeScript + Uniapp 开发小程序【完整案例 一篇文章精通系列】

    • 一、项目搭建
      • 1、安装基本依赖
      • 2、在vs-code当中打开项目
      • 3、打开终端,安装依赖:`npm install`
      • 4、运行发布
      • 5、在微信开发者工具当中打开项目
    • 二、搭建项目主界面、路由配置
      • 1、完善页面
        • 1)首页
        • 2)创建其他页面
      • 2、配置底部导航
      • 3、完善页面
        • 1)完善首页,设置背景图片在背景最顶端(自定义导航栏样式)
        • 2)设置导航和胶囊对其
        • 3)指定背景图片
        • 4)设置轮播图
      • 4、对请求接口进行封装
      • 5、完善首页请求信息
        • 1)完善首页,疫苗预约
        • 2)首页第二项数据:挂号和体检
        • 3)热门挂号
        • 4)健康自测
    • 四、新冠疫苗
      • 1、创建新页面并实现页面跳转
      • 2、源代码下载:[https://download.csdn.net/download/qq_44757034/87787707](https://download.csdn.net/download/qq_44757034/87787707)

一、项目搭建

在使用 Vue3 + TypeScript + Uniapp 进行小程序开发之前,需要先安装一些必要的开发环境和工具。

首先,你需要安装 Vue3 脚手架工具 vue-cli 或者 Vite,这两个工具可以帮助你快速创建和搭建 Vue3 项目,并且提供了一些常用的开发工具和插件,例如调试工具和代码热更新等。

其次,你需要安装 TypeScript,它是一种强类型的编程语言,可以提高代码的可读性和可维护性,同时也可以减少开发过程中的错误。

最后,你需要一个强大的编辑器来编写代码和管理项目,推荐使用 Visual Studio Code,它是一个功能强大的开源编辑器,提供了丰富的插件和扩展功能,可以帮助你更加高效地编写和调试代码。

在安装好这些必要的开发环境和工具后,你就可以开始使用 Vue3 + TypeScript + Uniapp 进行小程序开发了。

1、安装基本依赖

全局安装vue-cli

npm install -g @vue/cli@4

在这里插入图片描述
创建以typescript开发的工程

npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project

在这里插入图片描述
拉去成功
在这里插入图片描述
修改一下对应的文件夹名称
在这里插入图片描述

2、在vs-code当中打开项目

在这里插入图片描述

3、打开终端,安装依赖:npm install

在这里插入图片描述
安装成功
在这里插入图片描述

4、运行发布

npm run dev:mp-weixin

在这里插入图片描述
生成dist文件,其中dev为对应打包好的微信小程序的代码
在这里插入图片描述

5、在微信开发者工具当中打开项目

导入刚刚生成的dist文件
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
运行成功
在这里插入图片描述

二、搭建项目主界面、路由配置

1、完善页面

1)首页

在这里插入图片描述

<template>
  <view>
    首页
  </view>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const title = ref('Hello')
</script>

<style scoped>

</style>

2)创建其他页面

挂号页面
在这里插入图片描述

<template>
    <view>
      挂号
    </view>
  </template>
  
  <script setup lang="ts">
  import { ref } from 'vue'
  const title = ref('Hello')
  </script>
  
  <style scoped>
  
  </style>
  

短视频页面
在这里插入图片描述

<template>
    <view>
      短视频
    </view>
  </template>
  
  <script setup lang="ts">
  import { ref } from 'vue'
  const title = ref('Hello')
  </script>
  
  <style scoped>
  
  </style>
  

个人中心页面
在这里插入图片描述

<template>
    <view>
      个人中心
    </view>
  </template>
  
  <script setup lang="ts">
  import { ref } from 'vue'
  const title = ref('Hello')
  </script>
  
  <style scoped>
  
  </style>
  

2、配置底部导航

在这里插入图片描述
参考官方文档进行配置
https://uniapp.dcloud.net.cn/collocation/pages.html#tabbar
在这里插入图片描述
在这里插入图片描述

{
	"pages": [ 
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "首页"
			}
		},
		{
			"path": "pages/registered/registered",
			"style": {
				"navigationBarTitleText": "挂号"
			}
		},
		{
			"path": "pages/video/video",
			"style": {
				"navigationBarTitleText": "短视频"
			}
		},
		{
			"path": "pages/mine/mine",
			"style": {
				"navigationBarTitleText": "个人中心"
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	"tabBar": {
		"color": "#7A7E83",
		"selectedColor": "#d81e06",
		"borderStyle": "white",
		"backgroundColor": "#ffffff",
		"list": [
			{
				"pagePath": "pages/index/index",
				"iconPath": "static/image/home.png",
				"selectedIconPath": "static/image/home-h.png",
				"text": "首页"
			}, {
				"pagePath": "pages/registered/registered",
				"iconPath": "static/image/addition.png",
				"selectedIconPath": "static/image/addition-h.png",
				"text": "挂号"
			}, {
				"pagePath": "pages/video/video",
				"iconPath": "static/image/pause.png",
				"selectedIconPath": "static/image/pause-h.png",
				"text": "短视频"
			}, {
				"pagePath": "pages/mine/mine",
				"iconPath": "static/image/gr.png",
				"selectedIconPath": "static/image/gr-h.png",
				"text": "个人中心"
			}
		]
	}
}

实现了点击页面切换
在这里插入图片描述

3、完善页面

1)完善首页,设置背景图片在背景最顶端(自定义导航栏样式)

首先先需要去掉原生导航栏的样式
在这里插入图片描述

"navigationStyle":"custom"

在index.vue当中引入一张图片看看效果
在这里插入图片描述

<template>
  <view>
    <image src="/static/image/indexbg.png" style="width: 100%;"></image>
  </view>
</template>

<script setup lang="ts">
import { ref,onMounted } from 'vue'

</script>

<style scoped>

</style>

运行效果
在这里插入图片描述

2)设置导航和胶囊对其

在App.vue当中
在这里插入图片描述

onLaunch(() => {
  //获取胶囊按钮的坐标
  const res = uni.getMenuButtonBoundingClientRect();
  let get_Menu = uni.getStorageSync('MenuButton')
  if(!get_Menu){
    //将对应的坐标保存到本地缓存当中
    uni.setStorageSync('MenuButton',res); //保存数据
  }
});

保存成功
在这里插入图片描述
在index.vue当中,设置自定义导航栏
设置动态样式,使用刚刚获取到的胶囊的位置信息来动态的设置对应的标题信息与胶囊进行对其
在这里插入图片描述

<template>
  <!-- 自定义的导航 -->
  <view class="nav-gation">
   <view class="nav-top"></view>
   <view class="nav-height">某某省第一人民医院</view>
  </view>
</template>
<script setup lang="ts">
import { ref,onMounted } from 'vue'
//取出胶囊按钮数据
let menu_top = ref<string>('') //胶囊按钮距离顶部的高度
let menu_height = ref<string>('') //胶囊按钮高度
onMounted(()=>{
  //获取胶囊按钮的坐标
  let MenuButton:any = uni.getStorageSync('MenuButton');
  menu_top.value = MenuButton.top  + 'px'
  menu_height.value = MenuButton.height + 'px'
})
</script>
<style scoped>
.nav-gation{
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 99;
}
.nav-top{
  height: v-bind('menu_top');
}
.nav-height{
  height: v-bind('menu_height');
  line-height: v-bind('menu_height');
}
</style>

在这里插入图片描述

3)指定背景图片

在这里插入图片描述

<view class="imgTopBg">
    <image  src="/static/image/indexbg.png"></image>
  </view>

.imgTopBg image{
  width: 100%;
}

4)设置轮播图

我们找到uniapp的官方文档
https://uniapp.dcloud.net.cn/component/swiper.html
在这里插入图片描述
在这里插入图片描述

<!-- 轮播图 -->
  <view class="uni-margin-wrap">
			<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay" :interval="interval"
				:duration="duration">
				<swiper-item>
					<image src="https://cdn-us.imgs.moe/2023/02/07/63e253ac01153.png"></image>
				</swiper-item>
				<swiper-item>
					<image src="https://cdn-us.imgs.moe/2023/02/07/63e253ac01153.png"></image>
				</swiper-item>
				<swiper-item>
					<image src="https://cdn-us.imgs.moe/2023/02/07/63e253ac01153.png"></image>
				</swiper-item>
			</swiper>
		</view>
.swiper{
  height: 400rpx;
  width: 96%;
  margin: auto;
}

swiper-item image{
		width: 100%;
    height: 100%;
    border-radius: 15rpx;
}
.uni-margin-wrap{
  margin-top: -310rpx;
}

在这里插入图片描述

4、对请求接口进行封装

安装一下se64的依赖,

npm install --save js-base64

创建public文件夹
在public当中创建request.ts文件

在这里插入图片描述

// 公用的请求
const baseUrl = 'https://meituan.thexxdd.cn/api/'
//获取token // npm install --save js-base64
import { Base64 } from "js-base64"
function getToken():string{
    const token = uni.getStorageSync('wxuser').user_token || ''
    const base64_token = Base64.encode(token + ':')
    return 'Basic' + base64_token
}
//请求
function request(
    url:string,
    method:'GET'|'POST',
    data:string|object|ArrayBuffer
)
{
    return new Promise((resolve,reject) =>{
        uni.request({
            url:baseUrl + url,
            method,
            data,
            header:{ Authorization:getToken() },
            success:(res:any)=>{
                //状态码:200 标识成功  401没有权限  500服务器错误 202某些字段没有填写  400参数填写错误
                if(res.statusCode == 200){
                    //请求成功
                    resolve(res)
                }else if(res.statusCode == 400){
                    //请求参数错误
                    reject(res)
                }else if(res.statusCode == 401){
                    //没有登录
                    reject(res)
                }else if(res.statusCode == 403){
                    //已经登录,没有权限
                    reject(res)
                }else if(res.statusCode == 500){
                    uni.showToast({title:'服务器发生未知错误',icon:'none',duration:1000})
                    //服务器错误,500服务器内部错误 
                    reject(res)
                }else if(res.statusCode == 502){
                    //网关错误 
                }else if(res.statusCode == 504){
                    //代理错误 
                    reject(res)
                }else if(res.statusCode == 202){
                    uni.showToast({title:'给你提示',icon:'none',duration:1000})
                    reject(res)
                }else{
                    uni.showToast({title:'服务器发生未知错误',icon:'none',duration:1000})
                    reject(res)
                }

            },
            fail:(err:any)=>{
                uni.showToast({title:'服务器发生未知错误',icon:'none',duration:1000})
                reject(err)
            }
        })
    })
}

//接口
const RequestApi = {
    //首页数据
    FrontPage:()=>request('frontpage','GET',{})
}

export {RequestApi}

在这里插入图片描述

5、完善首页请求信息

1)完善首页,疫苗预约

在这里插入图片描述

import { RequestApi } from '@/public/request'
async function pageData(){
  const res:any = await RequestApi.FrontPage()
  console.log(res)
}

回到微信小程序查看,我们成功的拿到了数据
在这里插入图片描述
将数据渲染到首页

创建decl-type.d.ts文件
在这里插入图片描述

// ---- 类型声明文件d.ts文件-----



// 首页第一项数据:疫苗预约
export interface Vaccine{
    image:string;
    title:string;
}

在这里插入图片描述

import type  {Vaccine}  from '@/public/decl-type'
//取出首页数据
//首页第一项数据:疫苗数据
let vaccine = ref<Vaccine[]>([])

在这里插入图片描述

 const res:any = await RequestApi.FrontPage()
  vaccine.value = res.data.data[0].vaccine  

设置页面样式
在这里插入图片描述

.gongge {
  width:90%;
  margin: auto;
}
.gongge view{
  display: flex;
  flex-direction: column;
  align-items: center;
  font-size: 28rpx;
  float: left;
  margin: 25rpx;
  text-align: center;
  margin-top: 30rpx;
}
.gongge image{
  width: 80rpx;
  height:80rpx;
}

在这里插入图片描述

2)首页第二项数据:挂号和体检

在这里插入图片描述


// 首页第二项数据:挂号和体检
export interface Phydata{
    describe:string;
    image:string;
    title:string;
}

在这里插入图片描述

<view class="re-me-ex">
    <view class="re-me-ex-view card" v-for="(item,index) in phydata" :key="index">
      <image mode="widthFix" :src="item.image"></image>
      <view style="margin-top: 10%;">
        <view class="re-me-ex-title" >{{ item.title }}</view>
        <view class="re-me-ex-lable">{{ item.describe }}</view>
      </view>
      <view style="height: 30rpx;"></view>
    </view>
  </view>

在这里插入图片描述

import type  {Vaccine,Phydata}  from '@/public/decl-type'
//首页第二项数据:挂号和体检
let phydata = ref<Phydata[]>([])
phydata.value = res.data.data[1].reserve  

在这里插入图片描述


.re-me-ex-view{
  margin: auto;
  float: left;
  width: 45%;
  border-width: 1rpx;
  border-radius: 8rpx;
  margin: 1%;
  padding: 1%;
}
.re-me-ex image{
  float: left;
  width: 140rpx;
}
.re-me-ex-view view{
  padding-left: 1%;
  float: left;
  width: 180rpx;
  font-size: 25rpx;
  text-align: right;
}
.re-me-ex-title{
  font-weight: bold;
  margin-top: 10rpx;
}
.card {
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
    transition: 0.3s;
    border-radius: 5px;
}
.card:hover {
    box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
}

在这里插入图片描述

3)热门挂号

在这里插入图片描述

//首页第三项数据:热门挂号
export interface Registered{
    background:string;
    dep_id:string;
    image:string;
    title:string;
}

在这里插入图片描述

<view style="height: 10rpx;"></view>
  <view class="online-reg">
    <view v-for="(item,index) in registered" :key="index" class="card" :style="{backgroundColor:item.background}">
      <text>
        {{ item.title }}
      </text>
      <image mode="aspectFit" :src="item.image"></image>
    </view>
  </view>

在这里插入图片描述

//取出首页数据
//首页第一项数据:疫苗数据
let vaccine = ref<Vaccine[]>([])
//首页第二项数据:挂号和体检
let phydata = ref<Phydata[]>([])
//首页第三项数据:热门挂号
let registered = ref<Registered[]>([])

onMounted(()=>{
  //获取胶囊按钮的坐标
  let MenuButton:any = uni.getStorageSync('MenuButton');
  menu_top.value = MenuButton.top  + 'px'
  menu_height.value = MenuButton.height + 'px'
  pageData()
})
//请求数据
async function pageData(){
  const res:any = await RequestApi.FrontPage()
  vaccine.value = res.data.data[0].vaccine
  phydata.value = res.data.data[1].reserve  
  registered.value = res.data.data[2].popular  
}

在这里插入图片描述

.online-reg{
  margin: auto;
  font-size: 30rpx;
  font-weight: 900;
  width: 98%;
}
.online-reg view {
  padding: 1%;
  float: left;
  width: 29%;
  margin: 1%;
  height: 100rpx;
}
.online-reg view image {
  width: 30px;
  height: 30px;
  float: right;
}

在这里插入图片描述

4)健康自测

在这里插入图片描述

//首页四项数据:健康自测
export interface Selftest{
    describe: string;
    image: string;
    minute: number;
    name: string;
    number_of_people: number;
    question: number;
}

在这里插入图片描述

let selftest = ref<Selftest[]>([])
在这里插入代码片
selftest.value = res.data.data[3].self_test  

在这里插入图片描述

<view class="health">
      <view class="card-foot">
        <view class="re-me-ex-title" >
            <view style="padding-left: 40rpx;">{{ selftest[1].name }}</view>
          </view>
          <view style="clear: both;">
            <view style="width:40%;height: 180rpx;float: left;font-size: 25rpx;">
              <view>
                <span> {{ selftest[1].minute }}/{{ selftest[1].minute }}分钟</span>
              </view>
              <view>
                <span> {{ selftest[1].number_of_people }}人通过测试</span>
              </view>
            </view>
            <view style="width: 40%;height: 180rpx;float: left;">
              <image style="height: 150rpx;width: 150rpx;;" :src="selftest[1].image"></image>
            </view>
          </view>
      </view>
      <view class="card-foot">
          <view class="re-me-ex-title" >
            <view style="padding-left: 40rpx;">{{ selftest[2].name }}</view>
          </view>
          <view style="clear: both;">
            <view style="width:40%;height: 180rpx;float: left;font-size: 25rpx;">
              <view>
                <span> {{ selftest[2].minute }}/{{ selftest[2].minute }}分钟</span>
              </view>
              <view>
                <span> {{ selftest[2].number_of_people }}人通过测试</span>
              </view>
            </view>
            <view style="width: 40%;height: 180rpx;float: left;">
              <image style="height: 150rpx;width: 150rpx;;" :src="selftest[2].image"></image>
            </view>
          </view>
      </view>
    </view>

在这里插入图片描述

四、新冠疫苗

1、创建新页面并实现页面跳转

创建newapptime.vue
在这里插入图片描述

<template>
    <view>
      新冠疫苗
    </view>
</template>
  
<script setup lang="ts">
  import { ref } from 'vue'
  const title = ref('Hello')
</script>
  
<style scoped>
  
</style>
  

实现页面跳转
设置路由

在这里插入图片描述

		{
			"path": "pages/newapptime/newapptime",
			"style": {
				"navigationBarTitleText": "新冠疫苗"
			}
		}

在这里插入图片描述

<view class="card-border" v-for="(item,index) in vaccine" :key="index" @click="jumpToPage(index)">
      <image :src="item.image"></image>
      <text>{{ item.title }}</text>
    </view>

在这里插入图片描述

function jumpToPage(index:number){
  if(index == 0){
    uni.navigateTo({
      url:"/pages/newapptime/newapptime"
    })
  }
  if(index == 1){
    
  }
  if(index == 2){
    
  }
  if(index == 3){
    
  }
}

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

2、源代码下载:https://download.csdn.net/download/qq_44757034/87787707

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

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

相关文章

ODB 2.4.0 使用延迟指针 lazy_shared_ptr 时遇到的问题

最近在学习使用C下的ORM库——ODB&#xff0c;来抽象对数据库的CURD&#xff0c;由于C的ORM实在是太冷门了&#xff0c;ODB除了官方英语文档&#xff0c;几乎找不到其他好用的资料&#xff0c;所以在使用过程中也是遇到很多疑惑&#xff0c;也解决很多问题。近期遇到的一个源码…

推荐系统系列之推荐系统概览(下)

在推荐系统概览的第一讲中&#xff0c;我们介绍了推荐系统的常见概念&#xff0c;常用的评价指标以及首页推荐场景的通用召回策略。本文我们将继续介绍推荐系统概览的其余内容&#xff0c;包括详情页推荐场景中的通用召回策略&#xff0c;排序阶段常用的排序模型&#xff0c;推…

Keil Debug 逻辑分析仪使用

Keil Debug 逻辑分析仪使用 基础配置 更改对应的bebug窗口参数 两边的 Dialog DLL 更改为&#xff1a;DARMSTM.DLL两边的 Parameter &#xff08;这里的根据单片机型号更改&#xff09;更改为&#xff1a;-pSTM32F103VE 选择左边的 Use Simulator 选项。 打开Debug和其中的逻…

数据全生命周期管理

数据存储 时代"海纳百川&#xff0c;有容乃大"意味结构化、半结构和非结构化多样化的海量的 &#xff0c;也意味着批数据和流数据多种数据形式的存储和计算。面对不同数据结构、数据形式、时效性与性能要求和存储与计算成本等因素考虑&#xff0c;应该使用适合的存储…

iptables防火墙(二)

iptables防火墙&#xff08;二&#xff09; 一、SNAT策略1、SNAT策略简述2、配置实验 二、DNAT策略1、DNAT策略简述2、配置实验 三、Linux抓包工具tcpdump四、防火墙规则保存 一、SNAT策略 1、SNAT策略简述 SNAT策略就是将从内网传给外网的数据包的源IP由私网IP转换成公网IP&…

四川省信创联盟2023年第一次理事会顺利召开,MIAOYUN荣获“信创企业优秀奖”!

5月18日&#xff0c;四川省技术创新促进会信创工委会&#xff08;四川省信创产业联盟&#xff09;在成都市高新区新川科技园成功召开《2023年第一次理事单位&#xff08;扩大&#xff09;会议》&#xff0c;四川省技术创新促进会专家组杜纯文副组长、四川省技术创新促进会任渝英…

EasyRecovery16适用于Windows和Mac的专业硬盘恢复软件

无论你对数据恢复了解多少&#xff0c; 我们将为您处理所有复杂的流程并简化恢复!适用于Windows和Mac的 专业硬盘恢复软件 硬盘数据无法保证绝对安全。有时会发生数据丢失&#xff0c;需要使用硬盘恢复工具。支持恢复不同存储介质数据&#xff1a;硬盘、光盘、U盘/移动硬盘、数…

AC规则-1

本文主要参考规范 GPD_Secure Element Access Control_vxxx.pdf OMA 架构 基本定义 GP(GlobalPlatform)定义了一套允许各应用提供方独立且安全地管理其在SE上的应用的安全框架&#xff0c;而AC(Access Control)&#xff0c;顾名思义&#xff0c;是对外部应用进行SE上应用访问…

网络知识点之-动态路由

动态路由是指路由器能够自动地建立自己的路由表&#xff0c;并且能够根据实际情况的变化适时地进行调整。 中文名&#xff1a;动态路由外文名&#xff1a;dynamic routing 简述 动态路由是与静态路由相对的一个概念&#xff0c;指路由器能够根据路由器之间的交换的特定路由信息…

【Python redis】零基础也能轻松掌握的学习路线与参考资料

Python redis是一种非常流行的缓存数据库&#xff0c;对于Python Web应用程序开发非常有用&#xff0c;能快速地处理大量的数据请求。Python redis的学习路线需要对Python语言有深刻的理解&#xff0c;并了解使用redis的API。在掌握了Python redis的基本知识后&#xff0c;就可…

Java设计模式-策略模式

简介 在软件开发中&#xff0c;设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一种常见的设计模式&#xff0c;它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类&#xff0c;使得它们…

【halcon资料】取出区域的轮廓上所有转折点

一、说明 在区域运算的时候&#xff0c;有时候需要用图形的顶点来描述&#xff0c;比如&#xff0c;两个图中对象需要对齐&#xff0c;或者仿射变换&#xff0c;于是特征点是需要提取的。本文给出一个提取顶点的示例。 二、算子 1.1 get_region_polygon算子 &#xff08;1&a…

高级树结构

二叉排序树 左子树中所有结点的值&#xff0c;均小于其根结点的值。 右子树中所有结点的值&#xff0c;均大于其根结点的值。 二叉搜索树的子树也是二叉搜索树。 注意&#xff1a; 1.二叉查找树不能插入重复元素 2.中序遍历是一个递增的数列 3.高度越小查询效率越高 二叉排序…

设备采购信息管理系统

系列文章 任务14 设备采购信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试界面展示添加采购信息按编号查找采购信息按设备编号查找…

macOS Ventura 13.5beta (22G5027e)发布

系统介绍 黑果魏叔 5 月 20 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新&#xff08;内部版本号&#xff1a;22G5027e&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)

文章目录 背景安排方案步骤 验证 背景 一个短链服务&#xff0c;业务将长链接给我&#xff0c;我转换成短地址&#xff0c;用户访问短地址时&#xff0c;我再做redirect&#xff1b;没有前端&#xff0c;纯后端项目短链会有过期时间&#xff0c;过期后将返回错误信息某一天一个…

本地电脑做服务器搭建私人音乐网站ThinkMusic + cpolar内网穿透

文章目录 1. 前言2. 本地网页搭建2.1 环境使用2.2 支持组建选择 3. 网页安装3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转发自CSDN lisacpolar的文章&#xff1a;ThinkMusic源码搭建音乐网站&#xff0c;并实现公网访问 1. 前言 在我们的日…

Redis 概述

1. NoSQL 数据库简介 技术发展: 技术的分类 1、解决功能性的问题&#xff1a; Java、 Jsp、 RDBMS、 Tomcat、 HTML、 Linux、 JDBC、 SVN2、解决扩展性的问题&#xff1a; Struts、 Spring、 SpringMVC、 Hibernate、 Mybatis3、解决性能的问题&#xff1a; NoSQL、 Java 线…

MacBook杀毒软件CleanMyMac X2023

Mac 上也广泛存在恶意软件&#xff0c;并且能够突破系统自身的防护&#xff0c;通过渠道传播到电脑上&#xff0c;威胁大家的数据安全和窃取个人信息&#xff01;所以&#xff0c;MacBook杀毒软件还是很有必要安装的。 始于颜值&#xff0c;忠于实力。CleanMyMac X是我用过UI风…

Java 与排序算法(3):插入排序

一、插入排序 插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的基本思想是将待排序序列分为已排序区间和未排序区间&#xff0c;然后每次从未排序区间取出一个元素&#xff0c;将其插入到已排序区间的合适位置中&#xff0c;使得插入…