zoukankan      html  css  js  c++  java
  • 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学生已经存在! ",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学生添加成功! ", 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学生修改成功! ",name)
    return
    }
    }
    fmt.Printf("%s学生不存在,请添加! ",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学生存在,即将删除... ",name)
    allStu = append(allStu[:index],allStu[index+1:]...)
    fmt.Printf("%s学生删除成功! ",name)
    return
    }
    }
    fmt.Printf("%s学生不存在,无法删除! ",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 ",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学生已经存在!
    ",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学生添加成功!
    ", 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学生修改成功!
    ",name)
                return
            }
        }
        fmt.Printf("%s学生不存在,请添加!
    ",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学生存在,即将删除...
    ",name)
                allStu = append(allStu[:index],allStu[index+1:]...)
                fmt.Printf("%s学生删除成功!
    ",name)
                return
            }
        }
        fmt.Printf("%s学生不存在,无法删除!
    ",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
    ",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的学生已经存在 ",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的学生不存在 ",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的学生不存在 ",stu.name)
    }
    // ShowStudent 展示学生的方法
    func (s *StudetMgr) ShowStudent() {
    for _,v := range s.AllStudents{
    fmt.Printf("name: %s age:%d id:%d class:%s ", 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的学生已经存在
    ",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的学生不存在
    ",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的学生不存在
    ",stu.name)
    }
    // ShowStudent 展示学生的方法
    func (s *StudetMgr) ShowStudent()  {
        for _,v := range s.AllStudents{
            fmt.Printf("name: %s age:%d id:%d class:%s
    ", v.name, v.age, v.id, v.class)
        }
    }
    复制代码

     若有多个go文件,执行的时候需要全部指定:go run main.go xx.go xx.go

  • 相关阅读:
    JAVA中int、String的类型转换
    MyEclipse 快捷键
    HTTP 协议详解(转)
    HTTP协议详解
    MYSQL类型与JAVA类型对应表
    XML中<beans>中属性概述
    poj 2342 && hdu 1520
    51nod 1873 初中的算术
    AtCoder Grand Contest 014 B
    “玲珑杯”线上赛 Round #17 河南专场 B.震惊,99%+的中国人都会算错的问题
  • 原文地址:https://www.cnblogs.com/show58/p/12624865.html
Copyright © 2011-2022 走看看