需求:
- 写一个学生管理系统
- 学生有姓名 年龄 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