Go语言---学生管理

Go语言---学生管理,第1张

一个简单的学生管理

先客观来说说Golang的使用体验**(目前感受)**

C/CPP/C#/PYTHON 程序员上手Golang可能遇到的不习惯之处:
  • 无函数重载特性,可以使用不同函数名解决
  • 使用包的概念,类似namespcae,可访问程度使用首字母大小写来辨别
  • 无枚举特性,使用const+iota解决
  • 自己实现面向对象特性有点麻烦,代码写出来会比较零散。


  • C#/Cpp程序员使用Go语言的for循环可能会感觉迷惑,后面详细讲解。


  • 异常处理写法,习惯了也还行
Golang使用舒服之处
  • 比C/C++更安心便捷的指针
  • 简洁
  • 奉行 [如无必要,勿增实体] 的准则
For循环要说的地方

以下这几行代码以我经验去理解,会觉得value是每次循环都会被迭代的,类似C#中实现了next()方法,认为每次拿到的value都指向不同的位置
但是实际运行发现index和value值确实在变化,但是&value是固定的

var IntList []int = []int{1,2,3,4,5}
for index,value := range(IntList){
	fmt.Printf("index=%d,value=%d,address of value=%d\n",index,value,&value)
} 

其实这里的value是一个临时变量(var value int),每次循环会取出列表里的值赋值给value,所以value值确实是变动的,但是value的地址是固定的

正文 李文周博客习题解答
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// *** 作状态
type State int

const (
	SUC State = iota
	FAL_ATTRI
	FAL_EMPTY
	FAL_FULL
	FAL_NONE
	FAL_MISMATCH
)

//学生信息
type Student struct {
	id    int
	name  string
	age   int
	score int
}

//学生信息管理
type StuManagerment struct {
	stuArray []Student
	length   int
	capacity int
}

//brief:信息管理构造函数
//args :管理学生的个数上限
//ret  :管理器的指针
func newStuManagerment(cap int) (*StuManagerment, State) {
	stuArray := make([]Student, 0, cap)
	if stuArray == nil {
		return nil, FAL_ATTRI
	}
	sm := new(StuManagerment)
	sm.capacity = cap
	sm.length = 0
	sm.stuArray = stuArray
	return sm, SUC
}

//信息管理相关函数

//brief:显示学生列表中所有的学生信息
//args :学生管理器指针
//ret  :
func (s *StuManagerment) ShowList() State {
	if s.length == 0 {
		fmt.Println("Is Empty")
		return FAL_EMPTY
	}
	for _, stu := range s.stuArray {
		fmt.Println(stu)
	}
	return SUC
}

//brief:添加学生
//args :所添加学生的结构体指针
//ret  :是否添加成功
func (s *StuManagerment) AddusingStudent(stu *Student) State {
	if s.length == s.capacity {
		fmt.Println("Full!")
		return FAL_FULL
	}
	s.stuArray = append(s.stuArray, *stu)
	s.length++
	return SUC
}

//brief:添加学生信息
//args: 所添加学生的所有信息
//ret : 是否添加成功
func (s *StuManagerment) AddusingFeild(_id int, _name string, _age int, _score int) State {
	if s.length == s.capacity {
		fmt.Println("Full!")
		return FAL_FULL
	}
	stu := new(Student)
	stu.id = _id
	stu.name = _name
	stu.age = _age
	stu.score = _score
	s.stuArray = append(s.stuArray, *stu)
	s.length++
	return SUC
}

//brief:删除学生
//args :学生id
//ret  :State
func (s *StuManagerment) Del(id int) State {

	for index, stu := range s.stuArray {
		if stu.id == id {

			s.stuArray = append(s.stuArray[:(index)], s.stuArray[(index+1):]...)
			s.length--
			return SUC
		}
	}
	return FAL_NONE
}

//brief:修改学生信息
func (s *StuManagerment) Mod() State {
	fmt.Println("Input Student Info(id name age score): ")
	//获取用户输入
	input := bufio.NewScanner(os.Stdin)
	input.Scan()
	info := input.Text()
	//通过空格拆分为列表
	infoList := strings.Split(info, " ")
	//id
	id, err := strconv.Atoi(infoList[0])
	if err != nil {
		return FAL_ATTRI
	}
	//name
	name := infoList[1]
	//age
	age, err := strconv.Atoi(infoList[2])
	if err != nil {
		return FAL_ATTRI
	}
	//score
	score, err := strconv.Atoi(infoList[3])
	if err != nil {
		return FAL_ATTRI
	}
	fmt.Printf("You Input is id:\n%d name:%s age:%d score:%d\n", id, name, age, score)

	//扫描要修改的目标id是否存在
	for index, stu := range s.stuArray {
		if stu.id == id {
			s.stuArray[index].name = name
			s.stuArray[index].age = age
			s.stuArray[index].score = score
			fmt.Println("Modify Succeed")
			return SUC
		}
	}
	fmt.Println("ID is not in list")
	return FAL_NONE
}

func main() {
	fmt.Println("=================Student Information Management================")
	stumanager, state := newStuManagerment(10)
	if state != SUC {
		fmt.Println("Make Error")
		return
	}
	fmt.Println("Add A Student with method one")
	stumanager.AddusingFeild(1, "ly", 19, 100)
	fmt.Println(stumanager)
	fmt.Println("Add A Student with method two")
	stu1 := Student{2, "yhq", 20, 100}
	stumanager.AddusingStudent(&stu1)
	fmt.Println("Show List")
	stumanager.ShowList()
	fmt.Println("Delete ID=1")
	stumanager.Del(1)
	fmt.Println("Show Deleted List")
	stumanager.ShowList()
	fmt.Println("Modify A Student")
	stumanager.Mod()
	fmt.Println("Show the Modified List")
	stumanager.ShowList()
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/567762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存