goland课程管理(6)

news2025/1/20 3:47:19

项目目录结构如下图所示:

core包下面:

class.go

package core

import "github.com/gin-gonic/gin"

func Class1(ctx *gin.Context) {

}

course.go

package core

import (
	. "cookie/database"
	. "cookie/model"
	"fmt"
	"github.com/gin-gonic/gin"
	"strconv"
)

func CourseSubmit(ctx *gin.Context) {
	//tuID := ctx.Param("stuID")
	//fmt.Println(tuID)
	courseName := ctx.PostForm("kc")
	xf := ctx.PostForm("xf")
	zq := ctx.PostForm("zq")
	teacher := ctx.PostForm("teacher")
	//cla:=ctx.PostForm("class")
	Xf, _ := strconv.Atoi(xf)
	Zq, _ := strconv.Atoi(zq)
	Te, _ := strconv.Atoi(teacher)
	fmt.Println(courseName, xf, zq, teacher)
	var (
		Cou []Course
		Tea Teachers
	)
	DB.Where("id = ?", Te).Take(&Tea)
	DB.Find(&Cou)
	c := Course{
		BaseModel: BaseModel{Name: courseName},
		Credit:    Xf,
		Period:    Zq,
		TeacherID: Te,
		Teacher:   Tea,
	}
	DB.Create(&c)
	fmt.Println(Cou, "-----", Tea)
	//重定向
	ctx.Redirect(301, "/course")
}

func CourseSelect(ctx *gin.Context) {
	var co []Course
	DB.Preload("Teacher").Find(&co)
	ctx.HTML(200, "CourseSelect.html", gin.H{
		"course": co,
	})
}

func CourseADD(ctx *gin.Context) {
	var (
		Tea []Teachers
	)
	DB.Find(&Tea)
	//db.Find(&Cou)
	ctx.HTML(200, "courseADD.html", gin.H{
		"Tea": Tea,
		//"class": Cou,
	})
}

func PostCourse(ctx *gin.Context) {
	var (
		Stud Students
		Col  []Course
	)
	//获取url参数
	stuID := ctx.Param("stuID")
	//获取到url的的post请求的from表单的course多值postformArray进行参数获取
	CouID := ctx.PostFormArray("courseSelect")
	//根据参数过滤到指定的学生
	fmt.Println(stuID, CouID)
	//根据sno的ID值查询到学生信息
	DB.Where("sno = ?", stuID).Preload("Class.Tutor").Preload("Students").Find(&Stud)
	//根据post请求的值获取到对应的课程信息
	DB.Where("id in ?", CouID).Preload("Teacher").Find(&Col)
	//将学生与课程进行绑定
	DB.Model(&Stud).Preload("Students").Association("Course").Append(&Col)

	//查询有关学生的所有课程绑定信息
	DB.Model(&Stud).Preload("Teacher").Association("Course").Find(&Col)

	//服务器响应客户端,并对模板进行渲染
	ctx.HTML(200, "StuSelect.html", gin.H{
		"course":  Col,
		"student": Stud,
	})
}

func Course1(ctx *gin.Context) {
	var (
		Cou []Course
		Stu Students
	)
	//获取页面的ID
	stuID := ctx.Param("stuID")
	DB.Where("sno = ?", stuID).Take(&Stu)
	fmt.Println("p-------", stuID, "----------p")
	DB.Preload("Teacher").Find(&Cou)
	fmt.Println(Cou)
	ctx.HTML(200, "course.html", gin.H{
		"course":  Cou,
		"stuID":   stuID,
		"student": Stu,
	})
}

index.go

package core

import "github.com/gin-gonic/gin"

func Index(ctx *gin.Context) {
	ctx.HTML(200, "xcxc", gin.H{})
}

login.go

package core

import (
	. "cookie/database"
	. "cookie/model"
	"github.com/gin-gonic/gin"
)

func Login(ctx *gin.Context) {
	ctx.HTML(200, "login.html", nil)
}

func LoginPOST(ctx *gin.Context) {
	var AC Account
	Name := ctx.PostForm("name")
	Pwd := ctx.PostForm("pwd")
	DB.Where("name = ? AND pwd = ?", Name, Pwd).Take(&AC)
	if AC.Id == 0 {
		ctx.String(200, "登入失败")
	} else {
		ctx.JSON(200, gin.H{
			"name": Name,
			"PWD":  Pwd,
		})
	}

}

student.go

package core

import (
	. "cookie/database"
	. "cookie/model"
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"reflect"
	"strconv"
)

func Stu(ctx *gin.Context) {
	//插入数据
	var Student []Students

	//get请求里面获取头部[查询]信息
	Cx := ctx.Query("cx")
	fmt.Println("====", Cx, "====")
	//判断Cx的值,如果为空则显示所有,如果有值则根据值进行过滤后再进行渲染返回响应
	if Cx == "" {
		//关联预加载
		DB.Preload("Class.Tutor").Preload("Account").Find(&Student)
	} else {
		//关联预加载过滤查询
		DB.Where("Name like ?", "%"+Cx+"%").Preload("Class.Tutor").Find(&Student)
	}

	//服务器响应客户端
	ctx.HTML(200, "student.html", gin.H{
		"student": Student,
	})
	//fmt.Println(Student)
}

func StudentAdd(ctx *gin.Context) {
	//获取class表所有数据
	var Cla []Class
	//db.json.Where("Name like ?", "软件%").Find(&Cla)
	DB.Find(&Cla)
	fmt.Println(Cla)
	ctx.HTML(200, "stuAdd.html", gin.H{
		"class": Cla,
	})
}

func Submit(ctx *gin.Context) {
	//从post请求头里面抓起head内容
	Name := ctx.PostForm("xm")
	Sno := ctx.PostForm("xh")
	Tel := ctx.PostForm("tel")
	Pwd := ctx.PostForm("pw")
	Gender := ctx.PostForm("gender")
	SON, _ := strconv.Atoi(Sno)
	ClassID := ctx.PostForm("class")
	ClaID, _ := strconv.Atoi(ClassID)
	Gend, _ := strconv.Atoi(Gender) //字符转换成int数据类型
	fmt.Println(Name, Sno, Tel, Pwd, SON, ClassID, ClaID, "----")
	//Student := Students{BaseModel: BaseModel{Name: Name}, Pwd: Pwd, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}
	Student := Students{BaseModel: BaseModel{Name: Name}, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend, Account: Account{Pwd: Pwd, BaseModel: BaseModel{
		Name: Name,
	}}}
	//插入数据
	DB.Create(&Student)
	//每当插入数据之后就会相应的在class的Num里面进行增+1的操作
	DB.Model(Class{}).Where("  Id  = ?", ClassID).Update("num", gorm.Expr("num+1"))

	//重定向
	ctx.Redirect(301, "/student")
}

func Delete(ctx *gin.Context) {
	var Student Students
	//获取url参数
	DelID := ctx.Param("DelID")
	fmt.Println("---WEQW----", DelID, "---EWEQ===")
	//删除DelID对应数据库里面sno字段参数对应的数据
	DB.Where("sno = ?", DelID).Delete(&Student)

	//重定向
	ctx.Redirect(301, "/student")
}

func Edit(ctx *gin.Context) {
	var (
		Cla     Class
		Student Students
		C       []Class
	)
	//获取到页面URL参数
	EdiID := ctx.Param("EdiID")
	fmt.Println("====", EdiID, "==========")
	DB.Preload("Account").Where("sno = ?", EdiID).Find(&Student)
	//定义获取到的class
	DB.Where("Id = ?", Student.ClassID).Find(&Cla)
	//获取所有class班级信息
	DB.Find(&C)
	fmt.Println(Student.ClassID)
	ctx.HTML(200, "studentEdit.html", gin.H{
		"student": Student,
		"class":   Cla,
		"claAll":  C,
	})
}

func UpEdit(ctx *gin.Context) {
	//从post请求头里面抓起head内容
	Name := ctx.PostForm("xm")
	Sno := ctx.PostForm("xh")
	Tel := ctx.PostForm("tel")
	Pwd := ctx.PostForm("pw")
	Gender := ctx.PostForm("gender")
	SON, _ := strconv.Atoi(Sno)
	ClassID := ctx.PostForm("class")
	ClaID, _ := strconv.Atoi(ClassID)
	Gend, _ := strconv.Atoi(Gender) //字符转换成int数据类型
	fmt.Println(Name, Sno, Tel, Pwd, SON, ClassID, ClaID, Gender, "----")

	//修改账户密码,在go语言里面不支持修改嵌套在结构体内的值,不会更新级联嵌套结构体里面的字段。
	var (
		Student Students
		Ac      Account
	)
	account := DB.Where("sno = ?", SON).Preload("Account").Find(&Student)
	fmt.Println(reflect.TypeOf(account), account)
	if account.Error != nil {
		fmt.Println(account.Error)
	}

	fmt.Println("ppppppppppppppppppppppppp->", Student.AccountID, Student)
	result := DB.Model(Ac).Where("id = ? ", Student.AccountID).Update("Pwd", Pwd)

	//Student := Students{BaseModel: BaseModel{Name: Name}, Pwd: Pwd, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}
	student := Students{BaseModel: BaseModel{Name: Name}, Sno: SON, Tel: Tel, ClassID: ClaID, Gender: Gend}
	fmt.Println(Student)
	result2 := DB.Model(Students{}).Where("sno = ?", SON).Updates(student)
	if result.Error != nil {
		fmt.Printf("Error updating student: %v\n", result2.Error)
	}
	/*重定向:客户端访问/student/submit表单页面进行数据提交;服务器响应客户端【空值】;客户端第二次向服务端发出/student页面请求;服务端再次根据请求将/student页面响应客户端;
	一次请求两个响应,一次空响应,第二次为跳转之后的响应页面数据*/
	ctx.Redirect(301, "/student")
}

func StuSelect(ctx *gin.Context) {
	var (
		Student Students
		Col     []Course
	)

	//获取页面的ID
	stuID := ctx.Param("stuID")
	fmt.Println("p-------", stuID, "----------p")
	DB.Where("sno = ? ", stuID).Preload("Class.Tutor").Preload("Account").Find(&Student)
	fmt.Println(Student)
	//获取到学生对应的课程信息
	DB.Model(&Student).Preload("Teacher").Preload("Account").Association("Course").Find(&Col)

	ctx.HTML(200, "StuSelect.html", gin.H{
		"student": Student,
		"course":  Col,
	})
}

databases包下面

mysql.go

package database

import (
	. "cookie/model"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
	"os"
	"reflect"
)

var DB *gorm.DB

// 数据库初始化
func DbInit() *gorm.DB {
	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
		logger.Config{
			//SlowThreshold: time.Second,   // 慢 SQL 阈值
			LogLevel: logger.Info, // Log level
		},
	)
	fmt.Println(reflect.TypeOf(newLogger))
	dsn := "xxx:xxxx@tcp(xxxx:xxxx)/css4?charset=utf8mb4&parseTime=True&loc=Local"
	DB, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: newLogger,
	})
	//调用gorm根据go语言的结构体去创建mysql一一对应的表
	DB.AutoMigrate(
		&Teachers{},
		&Class{},
		&Course{},
		&Students{},
		&Account{},
		&AdminUser{},
	)

	//先删除表
	DB.Migrator().DropTable(&Teachers{}, &Class{}, &Course{}, &Students{}, &Account{}, &AdminUser{})
	//再重建表
	DB.AutoMigrate(&Teachers{}, &Class{}, &Course{}, &Students{}, &AdminUser{})
	return DB
}

model包下面

rbac.go

package model

type Account struct {
	BaseModel
	Pwd string
}

student.go

package model

import "time"

type Course struct {
	BaseModel
	Credit    int
	Period    int
	TeacherID int
	Teacher   Teachers `gorm:"foreignkey:TeacherID"`
}

type Class struct {
	BaseModel
	Num     int
	TutorID int
	Tutor   Teachers `gorm:"foreignkey:TutorID"`
}

type Students struct {
	BaseModel
	Sno int `gorm:"unique"`
	//Pwd    string `gorm:"type:varchar(100);not null"`
	Tel    string `gorm:"type:char(11);"`
	Gender int
	Brith  *time.Time
	Remark string `gorm:"type:varchar(255);"`
	//多对一
	ClassID int
	Class   Class `gorm:"foreignkey:ClassID;constraint:OnDelete:CASCADE;"`
	//多对多
	Course []Course `gorm:"many2many:student2course;constraint:OnDelete:CASCADE;"`
	//一对一
	AccountID int     `gorm:"unique"`
	Account   Account `gorm:"constraint:OnDelete:CASCADE;"`
}

type AdminUser struct {
	Id        int `gorm:"primarykey"`
	AccountID int `gorm:"unique"`
	Account   Account
}

type BaseModel struct {
	Id         int        `gorm:"primarykey"`
	CreateTime *time.Time `gorm:"autoCreateTime"`
	UpdateTime *time.Time `gorm:"autoCreateTime"`
	Name       string     `gorm:"type:varchar(30);unique;not null"`
}

type Teachers struct {
	BaseModel
	Ton int `gorm:"unique"`
	//Pwd    string `gorm:"type:varchar(100);not null"`
	Tel    string `gorm:"type:char(11);"`
	Birth  *time.Time
	Remark string `gorm:"type:varchar(255);"`
	//一对一
	AccountID int `gorm:"unique"`
	Account   Account
}

rander包下面

index.go

package rander

import (
	"github.com/gin-contrib/multitemplate"
	"html/template"
	"log"
)

// 创建累加函数
func addOne(i int) int {
	return i + 1
}

func CreateMyRender() multitemplate.Renderer {
	// 创建功能映射
	funcMap := template.FuncMap{
		"addOne": addOne,
	}
	templates, err := template.New("StuSelect.html").Funcs(funcMap).ParseFiles("template/publi.html", "template/StuSelect.html")
	if err != nil {
		log.Fatalf("Failed to create template 'xcxc': %v", err)
	}

	r := multitemplate.NewRenderer()
	r.AddFromFiles("xcxc", "template/publi.html", "template/index.html") //xcxc 为组合后的模板名称,与函数内的名字保持一致即可
	r.AddFromFiles("student.html", "template/publi.html", "template/student.html")
	r.AddFromFiles("stuAdd.html", "template/publi.html", "template/studentAdd.html")
	r.AddFromFiles("course.html", "template/publi.html", "template/course.html")
	r.AddFromFiles("clss.html", "template/publi.html", "template/class.html")
	r.AddFromFiles("studentADD.html", "template/publi.html", "template/jixuADD.html")
	r.AddFromFiles("studentEdit.html", "template/publi.html", "template/studentEdit.html")
	//r.AddFromFiles("StuSelect.html", "template/publi.html", "template/StuSelect.html")
	r.Add("StuSelect.html", templates)
	r.AddFromFiles("courseADD.html", "template/publi.html", "template/courseADD.html")
	r.AddFromFiles("CourseSelect.html", "template/publi.html", "template/CourseSelect.html")
	r.AddFromFiles("login.html", "template/LoginStu.html")
	return r
	/*
		在Gin框架中注册自定义函数addOne,并在名为StuSelect.html的模板中使用它。错误panic: template: StuSelect.html:46: function "addOne" not defined表明在解析模板的过程中
		模板引擎尝试查找并执行addOne函数,但是没有找到这个函数的定义。
		要解决这个问题,你需要确保以下几点:
		自定义函数addOne确实已经在你的代码中定义了。
		这个函数通过适当的FuncMap注册到了Gin框架的模板中。
		这个注册的函数在模板中使用的时候要匹配函数映射中的键(即函数名)。
		你的代码中的错误是因为你在Gin的默认模板渲染器HTMLRender中并没有正确地注册自定义的函数映射。你使用了multitemplate.NewRenderer()来创建新的多模板渲染器,但在创建这个渲染器的过程中,并没有将自定义函数addOne加入到FuncMap中。
		你在main函数中尝试注册addOne到"StuSelect.html"模板,并设置它为Gin的HTML渲染器。这个操作并不能应用到multitemplate.Renderer上。由于multitemplate.Renderer处理多模板的方式不同,你的自定义函数需要通过不同的方式注册。
		为了将自定义函数addOne注册到你所有使用multitemplate.Renderer的模板中,你需要在每个AddFromFiles调用中创建一个新的template.Template,将FuncMap添加到这个模板,并且使用它们来创建各自的页面模板。
		修改createMyRender函数,像这样注册你的自定义函数:
		go
		func createMyRender() multitemplate.Renderer {
			funcMap := template.FuncMap{
				"addOne": addOne,
			}

			r := multitemplate.NewRenderer()
			// 这里以"xcxc"为例,其他模板类似地处理
			templates, err := template.New("publi.html").Funcs(funcMap).ParseFiles("template/publi.html", "template/index.html")
			if err != nil {
				log.Fatalf("Failed to create template 'xcxc': %v", err)
			}
			r.Add("xcxc", templates)

			// ...其他模板注册代码
			return r
		}
		请确保使用Funcs和ParseFiles的顺序是正确的,并且处理了所有可能发生的错误。
		这样做能够确保所有使用multitemplate.Renderer的模板都注册了addOne函数。
		最后,记得删除main函数中重新注册StuSelect.html模板和设置HTML渲染器的代码,因为这个操作应该在createMyRender函数内完成。所有模板都应该通过multitemplate.Renderer来创建和注册。

		在您提供的代码中,“xcxc”是一个在multitemplate.NewRenderer()中注册的模板的名称。在Gin框架中,multitemplate是一个用来支持多模板渲染的扩展包。使用这个扩展包的NewRenderer()方法可以创建一个新的渲染器,它能允许您为不同的路由定义不同的模板布局。
		在创建这些模板时,您可以为这些组合好的模板指定任意的名字,名称是自定义的,对系统没有具体的意义,但是应该反映出模板的内容或用途,让人一看就能理解这个模板的作用。在这里,xcxc可能是开发者随意给出的一个示例名称,或者特定于应用程序上下文的内部命名。
		举例来说,以下代码创建了一个名为xcxc的组合模板,该模板由"template/publi.html"和"template/index.html"这两个文件组合而成:
		go
		r.AddFromFiles("xcxc", "template/publi.html", "template/index.html")
		在这段代码中,"xcxc"是您可以在Gin的路由处理函数中使用的模板名。例如:
		go
		func index(ctx *gin.Context) {
		    ctx.HTML(http.StatusOK, "xcxc", gin.H{
		        // 模板数据...
		    })
		}
		在这个index函数中,调用ctx.HTML方法时使用了"xcxc"作为模板名称,这告诉Gin渲染器要使用我们定义的包含名为"xcxc"的组合模板来生成响应的HTML。
		总结来说,"xcxc"在您提供的代码示例中只是一个随意的模板名称,它在Gin的路由处理中用来引用特定的模板组合。您完全可以根据自己的需要将它改为更具描述性的名称。
	*/
}

route路由包下面

class.go

package route

import (
	. "cookie/core"
	"github.com/gin-gonic/gin"
)

func ClassRoute(r *gin.Engine) {
	r.GET("/class", Class1)
}

course.go

package route

import (
	. "cookie/core"
	"github.com/gin-gonic/gin"
)

func CourseRoute(r *gin.RouterGroup) {
	r.GET("/", CourseSelect)
	r.GET("/add", CourseADD)
	r.POST("/submit", CourseSubmit)
}

index.go

package route

import (
	. "cookie/core"
	"github.com/gin-gonic/gin"
)

func IndexRoute(r *gin.Engine) {
	//动态路由
	r.GET("/", Index)
}

InitRoute.go

package route

import (
	"github.com/gin-gonic/gin"
)

func InitRoute(r *gin.Engine) {
	stuent := r.Group("/student")
	course := r.Group("/course")
	//动态路由
	IndexRoute(r)
	StudenRoute(stuent)
	ClassRoute(r)
	LoginRoute(r)
	CourseRoute(course)

}

login.go

package route

import (
	. "cookie/core"
	"github.com/gin-gonic/gin"
)

func LoginRoute(r *gin.Engine) {
	r.GET("/login", Login)
	r.POST("/login", LoginPOST)
}

student.go

package route

import (
	. "cookie/core"
	"github.com/gin-gonic/gin"
)

func StudenRoute(r *gin.RouterGroup) {
	r.GET("/edit/:EdiID", Edit)
	r.POST("/", UpEdit)
	r.POST("/submit", Submit)
	r.GET("/:stuID/StuSelect", StuSelect)
	r.POST("/:stuID/StuSelect", PostCourse)
	r.GET("/", Stu)
	r.GET("/:stuID/course", Course1)
}

最后mian.go

package main

import (
	. "cookie/database"
	. "cookie/rander"
	. "cookie/route"
	"github.com/gin-gonic/gin"
)

func main() {

	//数据库初始化
	DbInit()

	//构gin引擎
	r := gin.Default()

	//加载静态文件
	r.Static("/static", "./static")

	//多模块加载,渲染
	r.HTMLRender = CreateMyRender()
	InitRoute(r)

	//运行go引擎
	r.Run(":8888")

}

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

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

相关文章

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么? 硬件互助,资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发…

TCP半链接和全链接队列实验(下)

TCP半链接和全链接队列实验(上)-CSDN博客 实战 - TCP 半连接队列溢出 如何查看 TCP 半连接队列长度? 很遗憾,TCP 半连接队列长度的长度,没有像全连接队列那样可以用 ss 命令查看。 但是我们可以抓住 TCP 半连接的特点,就是服务端…

Linux之进程间通信(system V 共享内存)

目录 一、共享内存 1、基本原理 2、共享内存的创建 3、共享内存的释放 4、共享内存的关联 5、共享内存的去关联 6、查看IPC资源 二、完整通信代码 三、共享内存的特点 四、信号量 1、相关概念 2、信号量概念 进程间通信的本质就是让不同的进程看到同一个资源。而前…

vit细粒度图像分类(四)BT-Net学习笔记

1.摘要 为了改进在细粒度图像分类过程中类别差异难以提取的问题,本文提出了一种基于 Transformer 双线性网络的细粒度网络分类优化方法(BT-Net)。 首先,将输入图像通过不同卷积处理成不同长度的二维向量,然后,构建重复次数不同的…

JVM内存问题排查

本文又名《对JVM一窍不通的我快速开始排查应用内存问题》。主要系统性地整理了排查思路,为大家遇到问题时提供全面的排查流程,不至于漏掉某些可能性误入歧途浪费时间。 基本原则 由于本文的定位是Cookbook,基本原则是让整个流程能够系统化规范化的同时将…

少儿编程:让孩子在数字世界中自由翱翔

在这个信息爆炸的时代,计算机和互联网已经成为我们生活中不可或缺的一部分。从智能手机到智能家居,从网络游戏到在线教育,数字技术已经渗透到我们生活的方方面面。因此,掌握编程技能,就像学习阅读和写作一样&#xff0…

RNN预测下一句文本简单示例

根据句子前半句的内容推理出后半部分的内容,这样的任务可以使用循环的方式来实现。 RNN(Recurrent Neural Network,循环神经网络)是一种用于处理序列数据的强大神经网络模型。与传统的前馈神经网络不同,RNN能够通过其…

深度推荐模型之DeepFM

一、FM 背景:主要解决大规模稀疏数据下的特征组合遇到的问题:1. 二阶特征参数数据呈指数增长 怎么做的:对每个特征引入大小为k的隐向量,两两特征的权重值通过计算对应特征的隐向量内积 而特征之间计算点积的复杂度原本为 实际应…

橘子学ES实战操作01之集群模式如何实现快照备份

我们知道ES中通过副本在一定意义上实现了数据的备份和高可用。但是我们说万一副本数据丢失了,不小心被rm -f了,你就说逆天不逆天吧,此时要实现数据真正意义上的备份就要使用到快照机制,来把数据持久化备份起来,万一数据…

CAD-autolisp(三)——文件、对话框

目录 一、文件操作1.1 写文件1.2 读文件 二、对话框DCL2.1 初识对话框2.2 常用对话框界面2.2.1 复选框、列表框2.2.2 下拉框2.2.3 文字输入框、单选点框 2.3 Lisp对dcl的驱动2.4 对话框按钮实现拾取2.5 对话框加载图片2.5.1 幻灯片图片制作2.5.1 代码部分 一、文件操作 1.1 写…

TCP 三次握手 四次挥手以及滑动窗口

TCP 三次握手 简介: TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的 “ 连接” ,其实是客户端和服务器的内存里保存的一份关于对方的信息,如 IP 地址、端口号等。 TCP 可以…

CDSP认证:引领数据安全领域的权威之巅!

随着数据安全法和个人信息保护的施行,数据安全领域越来越受到重视。市场上涌现出众多数据安全相关的证书,而数据安全相关职位也成为了2023年最热门的职业之一。 💡对于想要入门数据安全领域的小伙伴,我强烈推荐CDSP认证&#xff0…

【笔试常见编程题02】字符串中找出连续最长的数字串、数组中出现次数超过一半的数字、计算糖果、进制转换

1. 字符串中找出连续最长的数字串 读入一个字符串str,输出字符串str中的连续最长的数字串 输入描述 个测试输入包含1个测试用例,一个字符串str,长度不超过255。 输出描述 在一行内输出str中里连续最长的数字串。 示例 1 输入 abcd12345ed125s…

【前端】尚硅谷Node.js零基础视频教程笔记

文章目录 1.基础1.1. 基础命令1.2. 注意事项 2. Buffer(缓冲器)介绍与创建2.1 概念2.2 特点2.3 使用 3. fs模块(file system)3.1 文件写入3.2 文件读取 【前端目录贴】 参考视频: 尚硅谷Node.js零基础视频教程,nodejs新手到高手 1.基础 1.1.…

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法(LSBoost、Bag)含自动优化超参数和特征敏感性分析功能

【MATLAB第92期】基于MATLAB的集成聚合多输入单输出回归预测方法(LSBoost、Bag)含自动优化超参数和特征敏感性分析功能 本文展示多种非常用多输入单输出回归预测模型效果。 注:每次运行数据训练集测试集为随机,故对比不严谨&…

搜维尔科技:【简报】元宇宙数字人赛道,《救食有道》!

在这个快速发展的数位时代里,本组相信透过制作融合虚拟人物 与 AI 智慧的创新宣传影片,定能为食物银行提高曝光率并让更多人 投身参与并落实减少食物浪费的行动,并与本组共同在生活中宣传食 物银行的理念 学校: 桃园市立中场商业高…

BTC的数据结构Merkle Tree和Hash pointer

比特币是一种基于区块链技术的加密数字货币,其底层数据结构被设计为分布式,去中心化的。它的核心数据结构是一个链式的区块,每个区块都包含了多笔交易记录和一个散列值。 比特币的底层数据结构使用了两个关键概念:hash pointer和…

【计算机网络】IP协议及动态路由算法

对应代码包传送门 IP协议及动态路由算法代码包及思科模拟器资料说明 相关文章 【计算机网络】中小型校园网构建与配置 【计算机网络】Socket通信编程与传输协议分析 【计算机网络】网络应用通信基本原理 目的: 1、掌握IP协议,IP分片,DH…

JCEF学习

JCEF重要概念 CEF CEF,全称Chromium Embedded Framework ,它是基于Google Chromium的开源项目,它的目标是能够向第三方程序添加WEB浏览器功能,以及可以使用HTML、CSS和JS渲染界面。 CEF框架是由Marshall Greenblatt 在 2008 年创…

vue项目如何实现运行完项目就跳转到浏览器

在package.json中的启动命令中添加--open参数可以实现在Vue项目编译后自动打开浏览器的功能。 通过这样的设置,在运行npm run dev时,Vue项目编译完成后会自动打开默认浏览器并加载应用程序。