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

大学生科创项目在线管理系统设计与实现

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业讲师以及同行交流合作

主要内容:Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能与大数据、单片机开发、物联网设计与开发设计、简历模板、学习资料、面试题库、技术互助、就业指导等

业务范围:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等

收藏点赞不迷路  关注作者有好处

文末获取源码 

计算机Java项目|基于SpringBoot的大学生科创项目管理系统

项目编号:BS-XX-376

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

技术:springboot+mysql+vue

二,项目简介

传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装大学生科创项目在线管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,大学生科创项目在线管理系统的有效运用可以帮助管理人员准确快速地处理信息。

大学生科创项目在线管理系统在对开发工具的选择上也很慎重,为了便于开发实现,选择的开发工具为Eclipse,选择的数据库工具为Mysql。以此搭建开发环境实现大学生科创项目在线管理系统的功能。其中管理员管理用户,新闻公告。

大学生科创项目在线管理系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,大学生科创项目在线管理系统都可以轻松应对。

作为程序后台的支持,本数据库也需要设计数据存储的结构。而数据存储结构的设计就包括了数据表结构的设计和创建。数据表结构包括了字段,数据类型,还有字段的取值范围等信息。而E-R模型中的实体就是一张表,实体的特征就可以作为该表中的字段,根据本程序信息存储要求,设计每个字段需要的类型,还有该字段的取值范围等。每当设计完成一张数据表,就需要及时保存在数据库里面,并对该设计的数据表准确命名,要求设置的数据表的名称尽量不要是中文,而且要方便记忆。因为在程序编码阶段,通过SQL语句可以把程序里面的数据写入在各个数据表里面,而这个环节需要使用到数据表的名称。如果数据表名称是中文的话,可能会乱码并影响程序运行。下面就以表格形式展示设计的结果。

表4.1字典表表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

dic_code

String

字段

3

dic_name

String

字段名

4

code_index

Integer

编码

5

index_name

String

编码名字

6

super_id

Integer

父字段id

7

beizhu

String

备注

8

create_time

Date

创建时间

表4.2论坛表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

forum_name

String

帖子标题

3

yonghu_id

Integer

学生

4

jiaoshi_id

Integer

教师

5

users_id

Integer

管理员

6

forum_content

String

发布内容

7

super_ids

Integer

父id

8

forum_state_types

Integer

帖子状态

9

insert_time

Date

发帖时间

10

update_time

Date

修改时间

11

create_time

Date

创建时间

表4.3教师表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

jiaoshi_name

String

教师姓名

3

jiaoshi_id_number

String

身份证号

4

jiaoshi_phone

String

手机号

5

jiaoshi_photo

String

照片

6

jiaoshi_delete

Integer

假删

7

create_time

Date

创建时间

表4.4科研项目表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

keyanxiangmu_uuid_number

String

项目编号

3

keyanxiangmu_name

String

项目名称

4

keyanxiangmu_types

Integer

项目类型

5

keyanxiangmu_file

String

附件

6

insert_time

Date

开始时间

7

yonghu_id

Integer

学生

8

jiaoshi_id

Integer

审核教师

9

keyanxiangmu_yesno_types

Integer

审核结果

10

shenheyijian_text

String

审核意见

11

keyanxiangmu_content

String

项目详情

12

keyanxiangmu_delete

Integer

假删

13

create_time

Date

创建时间

表4.5公告信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

news_name

String

公告信息标题

3

news_types

Integer

公告信息类型

4

news_photo

String

公告信息图片

5

insert_time

Date

公告信息时间

6

news_content

String

公告信息详情

7

news_delete

Integer

假删

8

create_time

Date

创建时间

表4.6学生表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_name

String

学生姓名

3

yonghu_id_number

String

身份证号

4

yonghu_phone

String

手机号

5

yonghu_photo

String

照片

6

yonghu_delete

Integer

假删

7

create_time

Date

创建时间

表4.7用户表表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

username

String

用户名

3

password

String

密码

4

role

String

角色

5

addtime

Date

新增时间

三,系统展示

四,核心代码展示


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("/keyanxiangmu")
public class KeyanxiangmuController {private static final Logger logger = LoggerFactory.getLogger(KeyanxiangmuController.class);@Autowiredprivate KeyanxiangmuService keyanxiangmuService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//级联表service@Autowiredprivate JiaoshiService jiaoshiService;@Autowiredprivate 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"));else if("教师".equals(role))params.put("jiaoshiId",request.getSession().getAttribute("userId"));params.put("keyanxiangmuDeleteStart",1);params.put("keyanxiangmuDeleteEnd",1);if(params.get("orderBy")==null || params.get("orderBy")==""){params.put("orderBy","id");}PageUtils page = keyanxiangmuService.queryPage(params);//字典表数据转换List<KeyanxiangmuView> list =(List<KeyanxiangmuView>)page.getList();for(KeyanxiangmuView 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);KeyanxiangmuEntity keyanxiangmu = keyanxiangmuService.selectById(id);if(keyanxiangmu !=null){//entity转viewKeyanxiangmuView view = new KeyanxiangmuView();BeanUtils.copyProperties( keyanxiangmu , view );//把实体数据重构到view中//级联表JiaoshiEntity jiaoshi = jiaoshiService.selectById(keyanxiangmu.getJiaoshiId());if(jiaoshi != null){BeanUtils.copyProperties( jiaoshi , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段view.setJiaoshiId(jiaoshi.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(keyanxiangmu.getYonghuId());if(yonghu != null){BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到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 KeyanxiangmuEntity keyanxiangmu, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,keyanxiangmu:{}",this.getClass().getName(),keyanxiangmu.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))return R.error(511,"权限为空");else if("学生".equals(role))keyanxiangmu.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));else if("教师".equals(role))keyanxiangmu.setJiaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<KeyanxiangmuEntity> queryWrapper = new EntityWrapper<KeyanxiangmuEntity>().eq("keyanxiangmu_uuid_number", keyanxiangmu.getKeyanxiangmuUuidNumber()).eq("keyanxiangmu_name", keyanxiangmu.getKeyanxiangmuName()).eq("keyanxiangmu_types", keyanxiangmu.getKeyanxiangmuTypes()).eq("yonghu_id", keyanxiangmu.getYonghuId()).eq("jiaoshi_id", keyanxiangmu.getJiaoshiId()).eq("keyanxiangmu_yesno_types", keyanxiangmu.getKeyanxiangmuYesnoTypes()).eq("shenheyijian_text", keyanxiangmu.getShenheyijianText()).eq("keyanxiangmu_delete", keyanxiangmu.getKeyanxiangmuDelete());logger.info("sql语句:"+queryWrapper.getSqlSegment());KeyanxiangmuEntity keyanxiangmuEntity = keyanxiangmuService.selectOne(queryWrapper);if(keyanxiangmuEntity==null){keyanxiangmu.setInsertTime(new Date());keyanxiangmu.setKeyanxiangmuYesnoTypes(1);keyanxiangmu.setKeyanxiangmuDelete(1);keyanxiangmu.setCreateTime(new Date());keyanxiangmuService.insert(keyanxiangmu);return R.ok();}else {return R.error(511,"表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody KeyanxiangmuEntity keyanxiangmu, HttpServletRequest request){logger.debug("update方法:,,Controller:{},,keyanxiangmu:{}",this.getClass().getName(),keyanxiangmu.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(StringUtil.isEmpty(role))return R.error(511,"权限为空");else if("学生".equals(role))keyanxiangmu.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));else if("教师".equals(role))keyanxiangmu.setJiaoshiId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));//根据字段查询是否有相同数据Wrapper<KeyanxiangmuEntity> queryWrapper = new EntityWrapper<KeyanxiangmuEntity>().notIn("id",keyanxiangmu.getId()).andNew().eq("keyanxiangmu_uuid_number", keyanxiangmu.getKeyanxiangmuUuidNumber()).eq("keyanxiangmu_name", keyanxiangmu.getKeyanxiangmuName()).eq("keyanxiangmu_types", keyanxiangmu.getKeyanxiangmuTypes()).eq("insert_time", keyanxiangmu.getInsertTime()).eq("yonghu_id", keyanxiangmu.getYonghuId()).eq("jiaoshi_id", keyanxiangmu.getJiaoshiId()).eq("keyanxiangmu_yesno_types", keyanxiangmu.getKeyanxiangmuYesnoTypes()).eq("shenheyijian_text", keyanxiangmu.getShenheyijianText()).eq("keyanxiangmu_delete", keyanxiangmu.getKeyanxiangmuDelete());logger.info("sql语句:"+queryWrapper.getSqlSegment());KeyanxiangmuEntity keyanxiangmuEntity = keyanxiangmuService.selectOne(queryWrapper);if("".equals(keyanxiangmu.getKeyanxiangmuFile()) || "null".equals(keyanxiangmu.getKeyanxiangmuFile())){keyanxiangmu.setKeyanxiangmuFile(null);}if(keyanxiangmuEntity==null){//  String role = String.valueOf(request.getSession().getAttribute("role"));//  if("".equals(role)){//      keyanxiangmu.set//  }KeyanxiangmuEntity keyanxiangmuEntity1 = keyanxiangmuService.selectById(keyanxiangmu.getId());if(keyanxiangmuEntity1.getKeyanxiangmuYesnoTypes() ==3){keyanxiangmu.setKeyanxiangmuYesnoTypes(1);}else if(keyanxiangmuEntity1.getKeyanxiangmuYesnoTypes() ==6){keyanxiangmu.setKeyanxiangmuYesnoTypes(4);}keyanxiangmuService.updateById(keyanxiangmu);//根据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());ArrayList<KeyanxiangmuEntity> list = new ArrayList<>();for(Integer id:ids){KeyanxiangmuEntity keyanxiangmuEntity = new KeyanxiangmuEntity();keyanxiangmuEntity.setId(id);keyanxiangmuEntity.setKeyanxiangmuDelete(2);list.add(keyanxiangmuEntity);}if(list != null && list.size() >0){keyanxiangmuService.updateBatchById(list);}return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);try {List<KeyanxiangmuEntity> keyanxiangmuList = 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){//循环KeyanxiangmuEntity keyanxiangmuEntity = new KeyanxiangmuEntity();
//                            keyanxiangmuEntity.setKeyanxiangmuUuidNumber(data.get(0));                    //项目编号 要改的
//                            keyanxiangmuEntity.setKeyanxiangmuName(data.get(0));                    //项目名称 要改的
//                            keyanxiangmuEntity.setKeyanxiangmuTypes(Integer.valueOf(data.get(0)));   //项目类型 要改的
//                            keyanxiangmuEntity.setKeyanxiangmuFile(data.get(0));                    //附件 要改的
//                            keyanxiangmuEntity.setInsertTime(date);//时间
//                            keyanxiangmuEntity.setYonghuId(Integer.valueOf(data.get(0)));   //学生 要改的
//                            keyanxiangmuEntity.setJiaoshiId(Integer.valueOf(data.get(0)));   //审核教师 要改的
//                            keyanxiangmuEntity.setKeyanxiangmuYesnoTypes(Integer.valueOf(data.get(0)));   //审核结果 要改的
//                            keyanxiangmuEntity.setShenheyijianText(data.get(0));                    //审核意见 要改的
//                            keyanxiangmuEntity.setKeyanxiangmuContent("");//照片
//                            keyanxiangmuEntity.setKeyanxiangmuDelete(1);//逻辑删除字段
//                            keyanxiangmuEntity.setCreateTime(date);//时间keyanxiangmuList.add(keyanxiangmuEntity);//把要查询是否重复的字段放入map中//项目编号if(seachFields.containsKey("keyanxiangmuUuidNumber")){List<String> keyanxiangmuUuidNumber = seachFields.get("keyanxiangmuUuidNumber");keyanxiangmuUuidNumber.add(data.get(0));//要改的}else{List<String> keyanxiangmuUuidNumber = new ArrayList<>();keyanxiangmuUuidNumber.add(data.get(0));//要改的seachFields.put("keyanxiangmuUuidNumber",keyanxiangmuUuidNumber);}}//查询是否重复//项目编号List<KeyanxiangmuEntity> keyanxiangmuEntities_keyanxiangmuUuidNumber = keyanxiangmuService.selectList(new EntityWrapper<KeyanxiangmuEntity>().in("keyanxiangmu_uuid_number", seachFields.get("keyanxiangmuUuidNumber")).eq("keyanxiangmu_delete", 1));if(keyanxiangmuEntities_keyanxiangmuUuidNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(KeyanxiangmuEntity s:keyanxiangmuEntities_keyanxiangmuUuidNumber){repeatFields.add(s.getKeyanxiangmuUuidNumber());}return R.error(511,"数据库的该表中的 [项目编号] 字段已经存在 存在数据为:"+repeatFields.toString());}keyanxiangmuService.insertBatch(keyanxiangmuList);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 = keyanxiangmuService.queryPage(params);//字典表数据转换List<KeyanxiangmuView> list =(List<KeyanxiangmuView>)page.getList();for(KeyanxiangmuView 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);KeyanxiangmuEntity keyanxiangmu = keyanxiangmuService.selectById(id);if(keyanxiangmu !=null){//entity转viewKeyanxiangmuView view = new KeyanxiangmuView();BeanUtils.copyProperties( keyanxiangmu , view );//把实体数据重构到view中//级联表JiaoshiEntity jiaoshi = jiaoshiService.selectById(keyanxiangmu.getJiaoshiId());if(jiaoshi != null){BeanUtils.copyProperties( jiaoshi , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setJiaoshiId(jiaoshi.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(keyanxiangmu.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 KeyanxiangmuEntity keyanxiangmu, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,keyanxiangmu:{}",this.getClass().getName(),keyanxiangmu.toString());Wrapper<KeyanxiangmuEntity> queryWrapper = new EntityWrapper<KeyanxiangmuEntity>().eq("keyanxiangmu_uuid_number", keyanxiangmu.getKeyanxiangmuUuidNumber()).eq("keyanxiangmu_name", keyanxiangmu.getKeyanxiangmuName()).eq("keyanxiangmu_types", keyanxiangmu.getKeyanxiangmuTypes()).eq("yonghu_id", keyanxiangmu.getYonghuId()).eq("jiaoshi_id", keyanxiangmu.getJiaoshiId()).eq("keyanxiangmu_yesno_types", keyanxiangmu.getKeyanxiangmuYesnoTypes()).eq("shenheyijian_text", keyanxiangmu.getShenheyijianText()).eq("keyanxiangmu_delete", keyanxiangmu.getKeyanxiangmuDelete());logger.info("sql语句:"+queryWrapper.getSqlSegment());KeyanxiangmuEntity keyanxiangmuEntity = keyanxiangmuService.selectOne(queryWrapper);if(keyanxiangmuEntity==null){keyanxiangmu.setInsertTime(new Date());keyanxiangmu.setKeyanxiangmuYesnoTypes(1);keyanxiangmu.setKeyanxiangmuDelete(1);keyanxiangmu.setCreateTime(new Date());//  String role = String.valueOf(request.getSession().getAttribute("role"));//  if("".equals(role)){//      keyanxiangmu.set//  }keyanxiangmuService.insert(keyanxiangmu);return R.ok();}else {return R.error(511,"表中有相同数据");}}}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

 

 

http://www.xdnf.cn/news/630955.html

相关文章:

  • 数据库blog6_商业数据库下载知识
  • AI知识库
  • 【项目需求分析文档】:在线音乐播放器(Online-Music)
  • vFile文件的精读
  • NVMe高速传输之摆脱XDMA设计2
  • 【批量文件夹重命名】如何按照Excel表格对应的关系,批量一对一的重命名文件夹,文件夹按照对应映射关系一对一改名
  • 使用ps为图片添加水印
  • 常见实验室器材采购渠道分享
  • 《岁月深处的童真》
  • 基于python的百度迁徙迁入、迁出数据分析(城市版)
  • 滚珠导轨在航空航天领域具体应用是什么?
  • 如何优化 MySQL 存储过程的性能?
  • python网络爬虫的基本使用
  • Day 30 训练
  • 代码随想录算法训练营第四十九天
  • 使用LLaMA-Factory微调ollama中的大模型(二)------使用数据集微调大模型
  • OpenSSH 9.9p2 编译安装全流程指南
  • ollama接入图像识别大模型
  • 25. 自动化测试框架开发之日志装饰器的开发
  • JavaSE常用API之Object类:Java万物之基
  • 【C++】深入理解C++中的函数与运算符重载
  • 哈希表的实现(下)
  • 深度解析:如何精准掌握网站流量动向
  • 自动转换剪贴板中的字符串方便c#的$““符号输出
  • 2.2.1 05年T2
  • leetcode hot100刷题日记——15.岛屿数量
  • unordered_set与unordered_map实现详解剖析
  • 《100天精通Python——基础篇 2025 第20天:Thread类与线程同步机制详解》
  • PyLink 使用指南
  • AVL树简介与部分实现