go 语言实现简单的学生管理系统

发布于:2023-07-04 ⋅ 阅读:(160) ⋅ 点赞:(0)

学生系统功能: 显示所有学生,增加学生,删除学生,修改学生信息,按照score 对学生进行排序


package main

import (
	"fmt"
	"sort"
)

type Student_ struct {
	id int
	name string
	age int
	score float32
}

//定义学生数组 prepare for sort

func( s Class_) Len() int{
	return len(s.students)
}
//按照成绩从大到小排序
func (s Class_) Less(i,j int) bool{
	return s.students[i].score>s.students[j].score
}
//引用类型进行交换就行
func (s Class_) Swap(i,j int){
	s.students[i],s.students[j]=s.students[j],s.students[i]
}

type Class_ struct {
	class_name string
	//一个班级可以容纳多个学生 定义成切片方便操作
	students [] Student_
}
func (c *Class_) Delet_student(id int){// 主要要用到切片的删除
	stu:=make([]Student_,0,200) // 重新定义一个切片
	for i,j:=range c.students{
		if j.id==id{
			continue
		}
		fmt.Println(j)
		stu=append(stu,c.students[i])

	}
	c.students=stu

}
func (c *Class_)show_all(){
	for _,j:=range(c.students){
		fmt.Println(j.id,j.name,j.age,j.score)
		//fmt.Println(j)
	}
}
func(c *Class_) alter_student_information(id int,name string,age int,score float32){
	for _,j :=range c.students{
		if j.id==id{
			j.name=name
			j.age=age
			j.score=score
		}
	}
}
func (c *Class_)add_stu(id int,name string,age int,score float32){
	//因为c为指针接收者(影响原来类型的值),所以用&来初始一个stu
	stu:=Student_{id,name,age,score}
	c.students=append(c.students,stu)

}
//按照学生成绩排序 c应该是引用类型 返回一个新的值让其接受
func (c *Class_) score_sort() {

	sort.Sort(c)
	// 打印所有排完序的数据
	for _, j:= range(c.students){
		fmt.Println(j)
	}


}
func main ()  {
	p:=Class_{"1001",
		make([]Student_,0,200), //对切片进行一个实例化
	}
	p.add_stu(10,"bosh",12,96)
	p.add_stu(11,"bosh1",13,98)
	p.add_stu(13,"bosh2",15,68)
	p.show_all()
	//fmt.Println("修改id 为13号的学生信息")
	//p.alter_student_information(13,"bosh3",16,89)
	//p.show_all()
	p.score_sort()
	fmt.Println("删除11号学生")
	p.Delet_student(11)
	p.show_all()

}


注意在go 语言中方法和函数是不一样的。一个方法就是一个包含了接收者的函数,接收者可以是命名类型或者结构体类型的一个值或一个指针。这里我采用的是方法,并且接收者是一个指针。
函数语法:

func 函数名 (参数) 返回值{
	函数体
}

方法语法:

func (接收者) 方法名() 返回值{
	方法体
}

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


网站公告

今日签到

点亮在社区的每一天
去签到