GO函数与面向对象小练习
需求:
- 写一个学生管理系统
- 学生有姓名 年龄 id 班级
- 增加学生/修改学生/删除学生/展示学生
- 用结构体+方法的形式(面向对象的思维方式)
函数方式实现:
//函数方式实现
package main
import (
"fmt"
"os"
)
//定义一个学生结构体
type student struct {
name ,class string
age ,id int
}
//定义一个存放student指针的切片,存放学生信息
var allStu = make([]*student,0,100)
//定义一个添加学生的构造函数
func newStu(name ,class string,id ,age int) *student {
return &student{
name:name,
age:age,
id:id,
class:class,
}
}
//定义一个展示函数
func listMenu() {
fmt.Println("===欢迎进入学生管理系统===")
fmt.Println(" 1.增加学生 ")
fmt.Println(" 2.修改学生 ")
fmt.Println(" 3.删除学生 ")
fmt.Println(" 4.展示学生 ")
fmt.Println(" 5.退出系统 ")
fmt.Println("===欢迎进入学生管理系统===")
}
//增加学生
func addStu() {
//fmt.Println("add")
var (
name ,class string
id ,age int
)
//获取用户输入
fmt.Println("增加学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//判断学生是否存在
if len(allStu) !=0{
for _,v :=range allStu{
if v.name == name{
fmt.Printf("%s学生已经存在!\n",name)
return
}
}
}
fmt.Print("请输入学生ID:")
fmt.Scanln(&id)
fmt.Print("请输入学生年龄:")
fmt.Scanln(&age)
fmt.Print("请输入学生班级:")
fmt.Scanln(&class)
fmt.Println(name, id, age, class)
//保存学生信息
student := newStu(name, class, age, id)
allStu = append(allStu, student)
fmt.Printf("%s学生添加成功!\n", student.name)
}
//修改学生
func updateStu() {
//fmt.Println("update")
var (
name ,class string
id ,age int
)
//判断allStu是否有内容
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
//获取用户输入
fmt.Println("修改学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//如果学生存在
for index,v := range allStu{
if v.name == name{
fmt.Print("请输入学生ID:")
fmt.Scanln(&id)
fmt.Print("请输入学生年龄:")
fmt.Scanln(&age)
fmt.Print("请输入学生班级:")
fmt.Scanln(&class)
allStu[index] = newStu(name,class,id,age)
fmt.Printf("%s学生修改成功!\n",name)
return
}
}
fmt.Printf("%s学生不存在,请添加!\n",name)
}
//删除学生
func delStu() {
//fmt.Println("del")
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
var (
name string
)
//获取用户输入
fmt.Println("删除学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//判断学生是否存在
for index,v := range allStu{
if v.name == name{
fmt.Printf("%s学生存在,即将删除...\n",name)
allStu = append(allStu[:index],allStu[index+1:]...)
fmt.Printf("%s学生删除成功!\n",name)
return
}
}
fmt.Printf("%s学生不存在,无法删除!\n",name)
}
//展示学生
func listStu() {
//fmt.Println("list")
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
fmt.Println("=========学生信息展示============")
for _,v := range allStu{
fmt.Printf("姓名:%s,学号:%d,年龄:%d,班级:%s\n",v.name,v.id,v.age,v.class)
}
fmt.Println("===============================")
}
func main() {
for{
listMenu()
var id int
fmt.Print("请输入序号:")
fmt.Scanln(&id)
switch id {
case 1:
addStu()
case 2:
updateStu()
case 3:
delStu()
case 4:
listStu()
case 5:
fmt.Println("再见!")
os.Exit(0)
}
}
}
//函数方式实现
package main
import (
"fmt"
"os"
)
//定义一个学生结构体
type student struct {
name ,class string
age ,id int
}
//定义一个存放student指针的切片,存放学生信息
var allStu = make([]*student,0,100)
//定义一个添加学生的构造函数
func newStu(name ,class string,id ,age int) *student {
return &student{
name:name,
age:age,
id:id,
class:class,
}
}
//定义一个展示函数
func listMenu() {
fmt.Println("===欢迎进入学生管理系统===")
fmt.Println(" 1.增加学生 ")
fmt.Println(" 2.修改学生 ")
fmt.Println(" 3.删除学生 ")
fmt.Println(" 4.展示学生 ")
fmt.Println(" 5.退出系统 ")
fmt.Println("===欢迎进入学生管理系统===")
}
//增加学生
func addStu() {
//fmt.Println("add")
var (
name ,class string
id ,age int
)
//获取用户输入
fmt.Println("增加学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//判断学生是否存在
if len(allStu) !=0{
for _,v :=range allStu{
if v.name == name{
fmt.Printf("%s学生已经存在!\n",name)
return
}
}
}
fmt.Print("请输入学生ID:")
fmt.Scanln(&id)
fmt.Print("请输入学生年龄:")
fmt.Scanln(&age)
fmt.Print("请输入学生班级:")
fmt.Scanln(&class)
fmt.Println(name, id, age, class)
//保存学生信息
student := newStu(name, class, age, id)
allStu = append(allStu, student)
fmt.Printf("%s学生添加成功!\n", student.name)
}
//修改学生
func updateStu() {
//fmt.Println("update")
var (
name ,class string
id ,age int
)
//判断allStu是否有内容
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
//获取用户输入
fmt.Println("修改学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//如果学生存在
for index,v := range allStu{
if v.name == name{
fmt.Print("请输入学生ID:")
fmt.Scanln(&id)
fmt.Print("请输入学生年龄:")
fmt.Scanln(&age)
fmt.Print("请输入学生班级:")
fmt.Scanln(&class)
allStu[index] = newStu(name,class,id,age)
fmt.Printf("%s学生修改成功!\n",name)
return
}
}
fmt.Printf("%s学生不存在,请添加!\n",name)
}
//删除学生
func delStu() {
//fmt.Println("del")
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
var (
name string
)
//获取用户输入
fmt.Println("删除学生信息,请输入以下信息!")
fmt.Print("请输入学生姓名:")
fmt.Scanln(&name)
//判断学生是否存在
for index,v := range allStu{
if v.name == name{
fmt.Printf("%s学生存在,即将删除...\n",name)
allStu = append(allStu[:index],allStu[index+1:]...)
fmt.Printf("%s学生删除成功!\n",name)
return
}
}
fmt.Printf("%s学生不存在,无法删除!\n",name)
}
//展示学生
func listStu() {
//fmt.Println("list")
if len(allStu) == 0{
fmt.Println("没有查询到学生信息,请添加学生!")
return
}
fmt.Println("=========学生信息展示============")
for _,v := range allStu{
fmt.Printf("姓名:%s,学号:%d,年龄:%d,班级:%s\n",v.name,v.id,v.age,v.class)
}
fmt.Println("===============================")
}
func main() {
for{
listMenu()
var id int
fmt.Print("请输入序号:")
fmt.Scanln(&id)
switch id {
case 1:
addStu()
case 2:
updateStu()
case 3:
delStu()
case 4:
listStu()
case 5:
fmt.Println("再见!")
os.Exit(0)
}
}
}
结构体+方法的形式实现:
main.go
package main
import (
"fmt"
"os"
)
//定义一个展示函数
func showMenu() {
fmt.Println("===欢迎进入学生管理系统===")
fmt.Println(" 1.增加学生 ")
fmt.Println(" 2.修改学生 ")
fmt.Println(" 3.删除学生 ")
fmt.Println(" 4.展示学生 ")
fmt.Println(" 5.退出系统 ")
fmt.Println("===欢迎进入学生管理系统===")
}
//接受用户输入
func userInput() *Student {
var (
name string
id int
age int
class string
)
fmt.Println("按照提示输入信息:")
fmt.Println("请输入姓名:")
fmt.Scanln(&name)
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
fmt.Println("请输入学号:")
fmt.Scanln(&id)
fmt.Println("请输入年级:")
fmt.Scanln(&class)
newStu := NewStudent(name,id,age,class)
return newStu
}
func main() {
stuMgr := NewStudentMgr()
for{
showMenu()
var i int
fmt.Print("请输入序号:")
fmt.Scanln(&i)
switch i {
case 1:
//添加学生
newStu := userInput()
stuMgr.AddStudent(newStu)
case 2:
//修改学生
newStu := userInput()
stuMgr.EditStudent(newStu)
case 3:
// 删除学生
newStu := userInput()
stuMgr.DeleteStudent(newStu)
case 4:
// 展示学生
stuMgr.ShowStudent()
case 5:
// 退出
os.Exit(0)
default:
fmt.Println("输入无效")
}
}
}
stu_struct.go
//结构体+方法方式实现
package main
import "fmt"
//写一个学生管理系统(要交的作业)
//1. 学生有姓名 年龄 id 班级
//2. 增加学生/修改学生/删除学生/展示学生
//3. 用结构体+方法的形式(面向对象的思维方式)
// Student 学生结构体
type Student struct {
name string
age int
id int
class string
}
// NewStudent 是一个创造新学生对象构造函数
func NewStudent(name string, age int, id int, class string) *Student {
return &Student{
name: name,
age: age,
id: id,
class: class,
}
}
// StudetMgr 定义一个学生信息管理的结构体
type StudetMgr struct {
AllStudents []*Student
}
// NewStudentMgr 创建新的学生信息管理结构体对象
func NewStudentMgr() *StudetMgr {
return &StudetMgr{
AllStudents:make([]*Student,0,100),
}
}
// AddStudent 添加学生的方法
func (s *StudetMgr) AddStudent(stu *Student) {
for _,v := range s.AllStudents{
if v.name == stu.name{
fmt.Printf("姓名为%s的学生已经存在\n",stu.name)
return
}
}
s.AllStudents= append(s.AllStudents,stu)
}
// EditStudent 修改学生的方法
func (s *StudetMgr) EditStudent(stu *Student) {
for index,v := range s.AllStudents{
if v.name == stu.name{
s.AllStudents[index] = stu
return
}
}
fmt.Printf("姓名为%s的学生不存在\n",stu.name)
}
// DeleteStudent 删除学生的方法
func (s *StudetMgr) DeleteStudent(stu *Student) {
for index,v := range s.AllStudents{
if v.name == stu.name{
s.AllStudents = append(s.AllStudents[:index],s.AllStudents[index+1:]...)
return
}
}
fmt.Printf("姓名为%s的学生不存在\n",stu.name)
}
// ShowStudent 展示学生的方法
func (s *StudetMgr) ShowStudent() {
for _,v := range s.AllStudents{
fmt.Printf("name: %s age:%d id:%d class:%s\n", v.name, v.age, v.id, v.class)
}
}
main.go
package main
import (
"fmt"
"os"
)
//定义一个展示函数
func showMenu() {
fmt.Println("===欢迎进入学生管理系统===")
fmt.Println(" 1.增加学生 ")
fmt.Println(" 2.修改学生 ")
fmt.Println(" 3.删除学生 ")
fmt.Println(" 4.展示学生 ")
fmt.Println(" 5.退出系统 ")
fmt.Println("===欢迎进入学生管理系统===")
}
//接受用户输入
func userInput() *Student {
var (
name string
id int
age int
class string
)
fmt.Println("按照提示输入信息:")
fmt.Println("请输入姓名:")
fmt.Scanln(&name)
fmt.Println("请输入年龄:")
fmt.Scanln(&age)
fmt.Println("请输入学号:")
fmt.Scanln(&id)
fmt.Println("请输入年级:")
fmt.Scanln(&class)
newStu := NewStudent(name,id,age,class)
return newStu
}
func main() {
stuMgr := NewStudentMgr()
for{
showMenu()
var i int
fmt.Print("请输入序号:")
fmt.Scanln(&i)
switch i {
case 1:
//添加学生
newStu := userInput()
stuMgr.AddStudent(newStu)
case 2:
//修改学生
newStu := userInput()
stuMgr.EditStudent(newStu)
case 3:
// 删除学生
newStu := userInput()
stuMgr.DeleteStudent(newStu)
case 4:
// 展示学生
stuMgr.ShowStudent()
case 5:
// 退出
os.Exit(0)
default:
fmt.Println("输入无效")
}
}
}
stu_struct.go
//结构体+方法方式实现
package main
import "fmt"
//写一个学生管理系统(要交的作业)
//1. 学生有姓名 年龄 id 班级
//2. 增加学生/修改学生/删除学生/展示学生
//3. 用结构体+方法的形式(面向对象的思维方式)
// Student 学生结构体
type Student struct {
name string
age int
id int
class string
}
// NewStudent 是一个创造新学生对象构造函数
func NewStudent(name string, age int, id int, class string) *Student {
return &Student{
name: name,
age: age,
id: id,
class: class,
}
}
// StudetMgr 定义一个学生信息管理的结构体
type StudetMgr struct {
AllStudents []*Student
}
// NewStudentMgr 创建新的学生信息管理结构体对象
func NewStudentMgr() *StudetMgr {
return &StudetMgr{
AllStudents:make([]*Student,0,100),
}
}
// AddStudent 添加学生的方法
func (s *StudetMgr) AddStudent(stu *Student) {
for _,v := range s.AllStudents{
if v.name == stu.name{
fmt.Printf("姓名为%s的学生已经存在\n",stu.name)
return
}
}
s.AllStudents= append(s.AllStudents,stu)
}
// EditStudent 修改学生的方法
func (s *StudetMgr) EditStudent(stu *Student) {
for index,v := range s.AllStudents{
if v.name == stu.name{
s.AllStudents[index] = stu
return
}
}
fmt.Printf("姓名为%s的学生不存在\n",stu.name)
}
// DeleteStudent 删除学生的方法
func (s *StudetMgr) DeleteStudent(stu *Student) {
for index,v := range s.AllStudents{
if v.name == stu.name{
s.AllStudents = append(s.AllStudents[:index],s.AllStudents[index+1:]...)
return
}
}
fmt.Printf("姓名为%s的学生不存在\n",stu.name)
}
// ShowStudent 展示学生的方法
func (s *StudetMgr) ShowStudent() {
for _,v := range s.AllStudents{
fmt.Printf("name: %s age:%d id:%d class:%s\n", v.name, v.age, v.id, v.class)
}
}
若有多个go文件,执行的时候需要全部指定:go run main.go xx.go xx.go


浙公网安备 33010602011771号