前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Go】面向对象(四):面向对象实战(图书借阅系统demo)

【Go】面向对象(四):面向对象实战(图书借阅系统demo)

作者头像
Regan Yue
发布2021-09-16 11:06:36
4980
发布2021-09-16 11:06:36
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog
代码语言:javascript
复制
package main

import "fmt"

type Book struct{
	BookId string
	Name string
	Price float64
	Author string
	Borrowable bool
}
type Reader struct {
	//读者ID
	ReaderID string
	//押金余额
	Balance float64
}

func (r *Reader)BorrowBook(b *Book)  {
	if b.Borrowable{
		b.Borrowable = false
		fmt.Printf("读者%s借阅了%s\n",r.ReaderID,b.Name)
	}else {
		fmt.Printf("%s借阅失败,该书已借出", b.Name)
	}
}
func (r *Reader)ReturnBook(b *Book)  {
	fmt.Printf("读者%s归还了%s\n",r.ReaderID,b.Name)
}
func (r *Reader)PayPenalty(amount float64)  {
	r.Balance-=amount
	fmt.Printf("%s交纳了罚金%.2f元,余额是%.2f元\n",r.ReaderID,amount,r.Balance)

}
//学生数据模型
type Student struct {
	//继承
	Reader
	//学生特有属性
	Name string
	Major string

}

func (s *Student) Study ()  {
	fmt.Printf("%s正在学习\n",s.Name)
}

type Teacher struct {
	//继承Reader
	Reader
	//老师特有属性
	Name string
	Course string

}

func (t *Teacher) Teach ()  {
	fmt.Printf("%s正在教授%s\n",t.Name,t.Course)
}
//覆写交罚金方法:老师不交罚金
func (t *Teacher)PayPenalty(amount float64)  {
	fmt.Printf("%s交纳了罚金%.2f元,余额是%.2f元\n",t.ReaderID,amount,t.Balance)

}
func main() {
	//创建书
	b1 := Book{}
	b1.Name="银瓶梅"
	b1.Author="欧阳搏达"
	b1.Price=999.9
	b1.Borrowable=true

	b2 := Book{"10001","奥力给",998.0,"yangge",true}
	b3 := Book{"10002", "黄金时代", 100.0, "王小波",true}
	b4Ptr := new(Book)
	b4Ptr.Name="蓝楼梦"
	b4Ptr.Author="欧阳搏达"
	b4Ptr.Price=9.9
	b4Ptr.Borrowable=true

	fmt.Println(b1,b2,b3,b4Ptr)
	//创建学生和老师
	s1 := Student{
		Reader: Reader{"001", 100},
		//s1:=Student{r1,"狗蛋","Python"}
		Name:   "狗蛋",
		Major:  "Python",
	}
	fmt.Printf("%v\n",s1)
	fmt.Printf("%+v\n",s1)
	fmt.Printf("%#v\n",s1)

	t1 := Teacher{
		Reader: Reader{"002", 0},
		Name:   "老王",
		Course: "撩妹秘籍",
	}
	fmt.Printf("%v\n",t1)
	fmt.Printf("%+v\n",t1)
	fmt.Printf("%#v\n",t1)

	//教学、学习、借书、还书、交罚款、状态
	t1.Teach()
	s1.Study()
	t1.BorrowBook(&b1)
	t1.BorrowBook(b4Ptr)
	s1.BorrowBook(&b3)
	s1.BorrowBook(&b2)

	t1.ReturnBook(&b1)
	s1.ReturnBook(&b2)
	t1.ReturnBook(b4Ptr)

	s1.PayPenalty(5)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档