宠物领养|基于springboot的宠物领养系统设计与实现(附项目源码+论文)

基于springboot的宠物领养系统设计与实现

目录

一、摘要

二、相关技术

三、系统设计

3.1 整体功能设计图

 3.2 功能具体细节设计  

四、数据库设计 

五、核心代码  

六、论文参考 

         七、源码获取


一、摘要

如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的产生往往是为了解决现有问题而产生的。针对于宠物领养信息管理方面的不规范,容错率低,管理人员处理数据费工费时,采用新开发的宠物领养系统可以从根源上规范整个数据处理流程的正规性和合法性。

宠物领养系统能够实现用户管理,宠物领养管理,宠物认领管理,教学视频管理,感谢信管理,公告管理,宠物领养审核管理,宠物认领审核管理等功能。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。

宠物领养系统可以提高宠物领养信息管理问题的解决效率,优化宠物领养信息处理流程,并且能够保证存储数据的安全,它是一个非常可靠,非常安全的应用程序。

关键词:宠物领养系统;Mysql数据库;Java语言

二、相关技术

java、tomcat、mysql、spring、sprigBoot、mybatis、query、vue

三、系统设计

3.1 整体功能设计图

管理员功能结构,管理员权限操作的功能包括对注册用户信息的管理,对宠物领养,宠物认领,教学视频,感谢信以及公告进行管理,审核宠物领养以及认领的信息。

 3.2 功能具体细节设计  

(1)宠物领养

下图即为编码实现的宠物领养界面,用户在该界面中查看宠物领养的介绍信息,只能对未被领养的宠物进行申请领养,已经被领养的宠物只能查看其介绍信息。

(2)宠物认领 

下图即为编码实现的宠物认领界面,用户在该界面中查看宠物认领信息,已经找到主人的宠物不支持认领。还没有找到主人的宠物才能进行申请认领。

(3)教学视频 

下图即为编码实现的教学视频界面,用户在该界面中主要就是播放教学视频,在教学视频下方发布留言,该教学视频也支持用户在当前页面进行收藏,方便下次查看。

(3)感谢信管理 

下图即为编码实现的感谢信管理界面,用户在该界面中可以发布感谢信,对感谢信的内容进行更改,查询,删除。

四、数据库设计 

(1)宠物认领这个实体所拥有的属性值

 

(2)用户这个实体所拥有的属性值 

(3)宠物领养这个实体所拥有的属性值 

(4)管理员这个实体所拥有的属性值 

以下为上面介绍的实体中存在的联系 

五、核心代码  

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 宠物认领审核
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/chongwurenlingshenhe")
public class ChongwurenlingshenheController {
    private static final Logger logger = LoggerFactory.getLogger(ChongwurenlingshenheController.class);

    @Autowired
    private ChongwurenlingshenheService chongwurenlingshenheService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private ChongwurenlingService chongwurenlingService;
    @Autowired
    private YonghuService yonghuService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = chongwurenlingshenheService.queryPage(params);

        //字典表数据转换
        List<ChongwurenlingshenheView> list =(List<ChongwurenlingshenheView>)page.getList();
        for(ChongwurenlingshenheView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        ChongwurenlingshenheEntity chongwurenlingshenhe = chongwurenlingshenheService.selectById(id);
        if(chongwurenlingshenhe !=null){
            //entity转view
            ChongwurenlingshenheView view = new ChongwurenlingshenheView();
            BeanUtils.copyProperties( chongwurenlingshenhe , view );//把实体数据重构到view中

                //级联表
                ChongwurenlingEntity chongwurenling = chongwurenlingService.selectById(chongwurenlingshenhe.getChongwurenlingId());
                if(chongwurenling != null){
                    BeanUtils.copyProperties( chongwurenling , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setChongwurenlingId(chongwurenling.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(chongwurenlingshenhe.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody ChongwurenlingshenheEntity chongwurenlingshenhe, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,chongwurenlingshenhe:{}",this.getClass().getName(),chongwurenlingshenhe.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(StringUtil.isEmpty(role))
            return R.error(511,"权限为空");
        else if("用户".equals(role))
            chongwurenlingshenhe.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<ChongwurenlingshenheEntity> queryWrapper = new EntityWrapper<ChongwurenlingshenheEntity>()
            .eq("chongwurenling_id", chongwurenlingshenhe.getChongwurenlingId())
            .eq("yonghu_id", chongwurenlingshenhe.getYonghuId())
            .eq("chongwurenlingshenhe_text", chongwurenlingshenhe.getChongwurenlingshenheText())
            .eq("chongwurenlingshenhe_yesno_types", chongwurenlingshenhe.getChongwurenlingshenheYesnoTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        ChongwurenlingshenheEntity chongwurenlingshenheEntity = chongwurenlingshenheService.selectOne(queryWrapper);
        if(chongwurenlingshenheEntity==null){
            chongwurenlingshenhe.setChongwurenlingshenheYesnoTypes(1);
            chongwurenlingshenhe.setCreateTime(new Date());
            chongwurenlingshenheService.insert(chongwurenlingshenhe);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody ChongwurenlingshenheEntity chongwurenlingshenhe, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,chongwurenlingshenhe:{}",this.getClass().getName(),chongwurenlingshenhe.toString());

        //根据字段查询是否有相同数据
        Wrapper<ChongwurenlingshenheEntity> queryWrapper = new EntityWrapper<ChongwurenlingshenheEntity>()
            .notIn("id",chongwurenlingshenhe.getId())
            .andNew()
            .eq("chongwurenling_id", chongwurenlingshenhe.getChongwurenlingId())
            .eq("yonghu_id", chongwurenlingshenhe.getYonghuId())
            .eq("chongwurenlingshenhe_text", chongwurenlingshenhe.getChongwurenlingshenheText())
            .eq("chongwurenlingshenhe_yesno_types", chongwurenlingshenhe.getChongwurenlingshenheYesnoTypes())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        ChongwurenlingshenheEntity chongwurenlingshenheEntity = chongwurenlingshenheService.selectOne(queryWrapper);
        if(chongwurenlingshenheEntity==null){
            if(chongwurenlingshenhe.getChongwurenlingshenheYesnoTypes() == 2){
                ChongwurenlingEntity chongwurenlingEntity = new ChongwurenlingEntity();
                chongwurenlingEntity.setId(chongwurenlingshenhe.getChongwurenlingId());
                chongwurenlingEntity.setJieshuTypes(1);
                chongwurenlingService.updateById(chongwurenlingEntity);
            }
            chongwurenlingshenheService.updateById(chongwurenlingshenhe);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        chongwurenlingshenheService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }

    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<ChongwurenlingshenheEntity> chongwurenlingshenheList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            ChongwurenlingshenheEntity chongwurenlingshenheEntity = new ChongwurenlingshenheEntity();
//                            chongwurenlingshenheEntity.setChongwurenlingId(Integer.valueOf(data.get(0)));   //宠物认领 要改的
//                            chongwurenlingshenheEntity.setYonghuId(Integer.valueOf(data.get(0)));   //认领用户 要改的
//                            chongwurenlingshenheEntity.setChongwurenlingshenheText(data.get(0));                    //认领理由 要改的
//                            chongwurenlingshenheEntity.setChongwurenlingshenheYesnoTypes(Integer.valueOf(data.get(0)));   //申请状态 要改的
//                            chongwurenlingshenheEntity.setCreateTime(date);//时间
                            chongwurenlingshenheList.add(chongwurenlingshenheEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        chongwurenlingshenheService.insertBatch(chongwurenlingshenheList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }




    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = chongwurenlingshenheService.queryPage(params);

        //字典表数据转换
        List<ChongwurenlingshenheView> list =(List<ChongwurenlingshenheView>)page.getList();
        for(ChongwurenlingshenheView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        ChongwurenlingshenheEntity chongwurenlingshenhe = chongwurenlingshenheService.selectById(id);
            if(chongwurenlingshenhe !=null){


                //entity转view
                ChongwurenlingshenheView view = new ChongwurenlingshenheView();
                BeanUtils.copyProperties( chongwurenlingshenhe , view );//把实体数据重构到view中

                //级联表
                    ChongwurenlingEntity chongwurenling = chongwurenlingService.selectById(chongwurenlingshenhe.getChongwurenlingId());
                if(chongwurenling != null){
                    BeanUtils.copyProperties( chongwurenling , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setChongwurenlingId(chongwurenling.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(chongwurenlingshenhe.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody ChongwurenlingshenheEntity chongwurenlingshenhe, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,chongwurenlingshenhe:{}",this.getClass().getName(),chongwurenlingshenhe.toString());
        Wrapper<ChongwurenlingshenheEntity> queryWrapper = new EntityWrapper<ChongwurenlingshenheEntity>()
            .eq("chongwurenling_id", chongwurenlingshenhe.getChongwurenlingId())
            .eq("yonghu_id", chongwurenlingshenhe.getYonghuId())
            .eq("chongwurenlingshenhe_text", chongwurenlingshenhe.getChongwurenlingshenheText())
            .eq("chongwurenlingshenhe_yesno_types", chongwurenlingshenhe.getChongwurenlingshenheYesnoTypes())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        ChongwurenlingshenheEntity chongwurenlingshenheEntity = chongwurenlingshenheService.selectOne(queryWrapper);
        if(chongwurenlingshenheEntity==null){
            chongwurenlingshenhe.setChongwurenlingshenheYesnoTypes(1);
            chongwurenlingshenhe.setCreateTime(new Date());
        //  String role = String.valueOf(request.getSession().getAttribute("role"));
        //  if("".equals(role)){
        //      chongwurenlingshenhe.set
        //  }
        chongwurenlingshenheService.insert(chongwurenlingshenhe);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


}

六、论文参考 

七、源码获取:

 点赞、收藏、关注、评论啦。有任何问题欢迎咨询

👇🏻获取联系方式在文章末尾👇🏻

 

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

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

相关文章

记录一下如何腾讯云服务器用客户端连MySQL

我一般喜欢用IDEA连数据库&#xff0c;别问我为啥&#xff08;就喜欢用一个软件解决所有问题&#xff09; 当然写SQL语句个人还是觉得sqlyog体验最佳&#xff01;

llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

文章目录 简介支持的模型列表2. 添加自定义数据集3. lora 微调4. 大模型 lora 权重&#xff0c;部署问题 参考资料 简介 llama-factory SFT系列教程 (一)&#xff0c;大模型 API 部署与使用本文为 llama-factory SFT系列教程的第二篇&#xff1b; 支持的模型列表 模型名模型…

服务器配置环境步骤

1、创建虚拟环境 conda create --name 名字 pythonpython版本号2、进入虚拟环境 conda activate 名字3、确认自己要安装的torch版本和torchvision版本&#xff0c;进入https://pytorch.org/get-started/previous-versions/ 复制相应的命令&#xff0c;运行即可 注&#xff1a…

Visual Studio Code SSH 连接远程服务器

Visual Studio Code通过 SSH 连接远程服务器并实现免密登录&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **安装插件**&#xff1a;首先&#xff0c;在 VS Code 中安装 "Remote - SSH" 插件。打开 VS Code&#xff0c;点击左侧的扩展图标&#xff0c;搜索…

C++如何排查并发编程死锁问题?

C如何排查并发编程死锁问题&#xff1f; 最近在Apache arrow里面写一个支持并行的算子&#xff1a;nested loop join&#xff0c;然后既然涉及到并行&#xff0c;这里就会遇到大家常说的死锁问题&#xff0c;假设你碰到了死锁问题&#xff0c;如何调试与定位呢&#xff1f; 那这…

最小均方(LMS)自适应滤波算法

1 LMS函数实现 % ----------------------------LMS(Least Mean Squre)算法------------------------------ % % parm: % xn 输入的信号序列 (列向量) % dn 所期望的响应序列 (列向量) % M 滤波器的阶数 (标量) % mu 收敛因子(步长) …

统信UOS(Linux)安装nvm node管理工具

整篇看完再操作&#xff0c;有坑&#xff01;&#xff01; 官网 nvm官网 按照官网方式安装&#xff0c;一直报 错 经过不断研究&#xff0c;正确步骤如下 1、下载安装包 可能因为网络安全不能访问github&#xff0c;我是链接热点下载的 wget https://github.com/nvm-sh/…

Java Maven项目推送到 Maven 中央仓库

准备阶段 namespace 域名认证 当需要在 sonatype 认证 com.xxx命名空间时&#xff0c;需要将 .xxx.com 配置域名解析。 记录类型&#xff1a;TXT 文本内容&#xff1a;验证的 key。 GPG 公私钥生成 GPG 下载地址&#xff1a;https://www.gnupg.org/download/index.html M…

RestTemplate—微服务远程调用—案例解析

简介&#xff1a;总结来说&#xff0c;微服务之间的调用方式有多种&#xff0c;选择哪种方式取决于具体的业务需求、技术栈和架构设计。RESTful API和HTTP客户端是常见的选择&#xff0c;而Feign和Ribbon等辅助库可以简化调用过程。RPC和消息队列适用于特定的场景&#xff0c;如…

单片机方案 发声毛绒小黄鸭

随着科技的不断进步&#xff0c;智能早教已经成为了新时代儿童教育的趋势。智能早教玩具&#xff0c;一款集互动陪伴、启蒙教育、情感培养于一身的高科技产品。它不仅能陪伴孩子成长&#xff0c;还能在游戏中启迪智慧&#xff0c;是家长和孩子的理想选择。 酷得电子方案开发特…

OV通配符证书:安全、便捷的网络认证新选择

OV通配符证书&#xff0c;即组织验证型通配符证书&#xff0c;其最大特点在于其通配符功能。这意味着&#xff0c;一个OV通配符证书可以覆盖同一主域名下的多个子域名&#xff0c;大大简化了证书管理和维护的复杂性。无论是大型企业还是个人网站&#xff0c;都可以通过OV通配符…

[面向对象] 单例模式与工厂模式

单例模式 是一种创建模式&#xff0c;保证一个类只有一个实例&#xff0c;且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则&#xff1a; 单一职责&#xff1a;一个类只有一个职责&#xff08;Game类负责什么时候创建英雄机&#xff0c;而不需要知道创建英雄机要…

多因子模型的数据处理

优质博文&#xff1a;IT-BLOG-CN 数据处理的基本目的是从多量的、可能是杂乱无章的、难以理解的数据中抽取并推导出有价值、有意义的数据。特别是金融数据&#xff0c;存在数据缺失&#xff0c;不完整以及极端异常值等问题&#xff0c;对于我们的分析和建模影响很多。 对于我…

Git分布式版本控制系统——Git常用命令(二)

五、Git常用命令————分支操作 同一个仓库可以有多个分支&#xff0c;各个分支相互独立&#xff0c;互不干扰 分支的相关命令&#xff0c;具体如下&#xff1a; git branch 查看分支 git branch [name] 创建分支&#x…

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】 2024/4/9 14:25 【不建议使用ppp模式&#xff0c;功耗大&#xff0c;貌似更过分的&#xff01;网速还低&#xff01;】 【唯一的优点&#xff1a;ppp模式下是通过脚本配置…

降额的秘密——不要挑战datasheet!

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海。 什么是降额设计&#xff1f;我们为什么要降额&#xff1f; 额指的是额定工作状态&#xff0c;降额就是…

CSS特效---HTML+CSS实现3D旋转卡片

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

Ubuntu无网络标识的解决方法

1.出现的情况的特点 2.解决办法 2.1 进入root并输入密码 sudo su 2.2 更新NetworkManager的配置 得先有gedit或者vim&#xff0c;两个随意一个&#xff0c;这里用的gedit&#xff0c;没有就先弄gedit&#xff0c;有的话直接下一步 apt-get install gedit 或者vim apt-get ins…

Excel中输入数字会改变怎么办?

一、数字显示不全&#xff0c;以“#”号代替 随着列宽的缩小&#xff0c;数字逐渐被“#”号代替&#xff08;首先数字的格式是“数值型&#xff0c;且只有整数”&#xff09; 原因分析&#xff1a;单元格中的数字无法完全显示&#xff0c;Excel会自动用“#”号填充剩余的空间 解…

【数据结构】07查找

查找 1. 基本概念2. 顺序表查找2.1 顺序查找2.2 顺序查找优化-哨兵 3. 有序表查找3.1 折半查找&#xff08;二分查找&#xff09; 4. 分块查找&#xff08;索引顺序查找&#xff09;5. Hash表&#xff08;散列表&#xff09;5.1 散列函数的设计5.2 代码实现5.2.1 初始化Hash表5…