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

猜你喜欢

转载自www.cnblogs.com/show58/p/12624865.html