项目结构:
- model : 用来表示数据
- service : 用来做主要的逻辑处理
- view :视图用来进行展示,调用service
customer.go model层
// 定义结构体元素
package model
import (
"fmt"
)
type Custmer struct{
Id int
Name string
Gender string
Age int
Phone string
Email string
}
// 定义一个工厂模式函数返回 custmer结构体实例变量
func Newcustmer(id int,name string,gender string,age int,phone string,email string)*Custmer{
return &Custmer{
Id : id,
Name : name,
Gender : gender,
Age : age,
Phone : phone,
Email : email,
}
}
func (this Custmer)GetInfo()string{
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\n",
this.Id,this.Name,this.Gender,this.Age,this.Phone,this.Email)
return info
}
constomerservice.go service层
// 完成对 model/customer.go的操作,包括增删改查
package service
import (
"goOctober/demo-10-15/custmer/model"
)
type Constomerservice struct{
// 声明一个切片元素用来存放客户
custmers []model.Custmer
custmerNum int
}
// 编写一个函数用来调用customermodel传入实参并追加到切片中
func Newconstomerservice()*Constomerservice{
constomerservice := &Constomerservice{}
constomer := model.Newcustmer(1,"飞来峰","男",100,"110","1@1.qq.com")
constomerservice.custmerNum = 1
constomerservice.custmers = append(constomerservice.custmers,*constomer)
return constomerservice
}
// 返回客户切片
func (con *Constomerservice)Showmaker()[]model.Custmer{
return con.custmers
}
constomerview.go view层
package main
import (
"fmt"
"goOctober/demo-10-15/custmer/service"
)
type custmerview struct{
key int
loop bool
// service/Constomerservice指针类型结构体
constomerservice *service.Constomerservice
}
func (cut *custmerview)list(){
// cut.constomerservice.service.Showmaker()返回客户列表
ccs := cut.constomerservice.Showmaker()
fmt.Println("-------客户列表------")
fmt.Printf("ID\t姓名\t性别\t年龄\tphone\tEmail\t\n")
// 遍历输出打印客户列表
// css[k].GetInfo() = css.Constomerservice.[]model.Custmer.GetInfo()
for k,_ := range ccs{
fmt.Println(ccs[k].GetInfo())
}
}
func (cust custmerview) mainmenu(){
for{
fmt.Println("-------客户信息管理系统------")
fmt.Println(" 1 添加客户 ")
fmt.Println(" 2 修改客户 ")
fmt.Println(" 3 删除客户 ")
fmt.Println(" 4 客户列表 ")
fmt.Println(" 5 退 出 ")
fmt.Println("请选择需要的服务1-5")
fmt.Scanln(&cust.key)
switch cust.key{
case 1:
fmt.Println(" 添加客户 ")
case 2:
fmt.Println(" 修改客户 ")
case 3:
fmt.Println(" 删除客户 ")
case 4:
fmt.Println(" 客户列表 ")
cust.list()
case 5:
fmt.Println(" 退 出 ")
cust.loop = false
default :
fmt.Println("输入有误!")
}
if cust.loop != true{
break
}
}
}
func main(){
var c custmerview
c.constomerservice = service.Newconstomerservice()
c.mainmenu()
}
客户添加功能:
// 定义结构体元素
package model
import (
"fmt"
)
type Custmer struct{
Id int
Name string
Gender string
Age int
Phone string
Email string
}
// 定义一个工厂模式函数返回 custmer结构体实例变量
func Newcustmer(id int,name string,gender string,age int,phone string,email string)*Custmer{
return &Custmer{
Id : id,
Name : name,
Gender : gender,
Age : age,
Phone : phone,
Email : email,
}
}
// 第二个构造方法不带ID
func Newcustmer2(name string,gender string,age int,phone string,email string)*Custmer{
return &Custmer{
Name : name,
Gender : gender,
Age : age,
Phone : phone,
Email : email,
}
}
func (this Custmer)GetInfo()string{
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\n",
this.Id,this.Name,this.Gender,this.Age,this.Phone,this.Email)
return info
}
// 完成对 model/customer.go的操作,包括增删改查
package service
import (
"goOctober/demo-10-15/custmer/model"
)
type Constomerservice struct{
// 声明一个切片元素用来存放客户
custmers []model.Custmer
custmerNum int
}
// 编写一个函数用来调用customermodel传入实参并追加到切片中
func Newconstomerservice()*Constomerservice{
constomerservice := &Constomerservice{}
constomer := model.Newcustmer(1,"飞来峰","男",100,"110","1@1.qq.com")
constomerservice.custmerNum = 1
constomerservice.custmers = append(constomerservice.custmers,*constomer)
return constomerservice
}
// 返回客户切片
func (con *Constomerservice)Showmaker()[]model.Custmer{
return con.custmers
}
// 这里不太懂为啥要返回一个true
func (con *Constomerservice)AddUser(custmer model.Custmer)bool{
con.custmerNum++
custmer.Id = con.custmerNum
con.custmers = append(con.custmers,custmer)
return true
}
package main
import (
"fmt"
"goOctober/demo-10-15/custmer/service"
"goOctober/demo-10-15/custmer/model"
)
type custmerview struct{
key int
loop bool
// service/Constomerservice指针类型结构体
constomerservice *service.Constomerservice
}
func (cut *custmerview)list(){
// cut.constomerservice.service.Showmaker()返回客户列表
ccs := cut.constomerservice.Showmaker()
fmt.Println("-------客户列表------")
fmt.Printf("ID\t姓名\t性别\t年龄\tphone\tEmail\t\n")
// 遍历输出打印客户列表
// css[k].GetInfo() = css.Constomerservice.[]model.Custmer.GetInfo()
for k,_ := range ccs{
fmt.Println(ccs[k].GetInfo())
}
}
// 添加用户
// id让系统分配,不能由用户输入
func (cu *custmerview)adduser(){
fmt.Println("请输入名字:")
name := ""
fmt.Scanln(&name)
fmt.Println("请输入性别:")
gender := ""
fmt.Scanln(&gender)
fmt.Println("请输入年龄:")
age := 0
fmt.Scanln(&age)
fmt.Println("请输入手机号:")
phone := ""
fmt.Scanln(&phone)
fmt.Println("请输入email:")
email := ""
fmt.Scanln(&email)
custmertwo := model.Newcustmer2(name,gender,age,phone,email)
cu.constomerservice.AddUser(*custmertwo)
}
func (cust custmerview) mainmenu(){
for{
fmt.Println("-------客户信息管理系统------")
fmt.Println(" 1 添加客户 ")
fmt.Println(" 2 修改客户 ")
fmt.Println(" 3 删除客户 ")
fmt.Println(" 4 客户列表 ")
fmt.Println(" 5 退 出 ")
fmt.Println("请选择需要的服务1-5")
fmt.Scanln(&cust.key)
switch cust.key{
case 1:
fmt.Println(" 添加客户 ")
cust.adduser()
case 2:
fmt.Println(" 修改客户 ")
case 3:
fmt.Println(" 删除客户 ")
case 4:
fmt.Println(" 客户列表 ")
cust.list()
case 5:
fmt.Println(" 退 出 ")
cust.loop = true
default :
fmt.Println("输入有误!")
}
if cust.loop != false{
break
}
}
}
func main(){
var c custmerview
c.constomerservice = service.Newconstomerservice()
c.mainmenu()
}
删除功能实现:
思路分析:
- 通过id匹配删除的用户
// model层
package model
import (
"fmt"
)
type Customer struct{
Id int
Name string
Age int
Grender string
}
// 定义一个工厂函数,传入对应参数返回一个Customer类型的指针
func NewCustomer(id int,name string,age int,grender string)*Customer{
return &Customer{
Id : id,
Name : name,
Age : age,
Grender : grender,
}
}
func NewCustomer2(name string,age int,grender string)*Customer{
return &Customer{
Name : name,
Age : age,
Grender : grender,
}
}
// 返回结构体字符串格式
func (cu *Customer)Cu()string{
js := fmt.Sprintf("%v\t%v\t%v\t%v",cu.Id,cu.Name,cu.Age,cu.Grender)
return js
}
// service层
package service
import (
"goOctober/demo-10-16/model"
"fmt"
)
// 定义一个struct定义一个Customer类型的切片用来存放客户信息
type Customerservice struct{
num int
customers []model.Customer
}
// 初始化Customerservice结构体及切片
func Init()*Customerservice{
custvice := &Customerservice{}
oms := model.NewCustomer(1,"hello",2,"hh")
custvice.num = 1
custvice.customers = append(custvice.customers,*oms)
return custvice
}
// 返回这个切片
func (Cumer *Customerservice)Recustomer()[]model.Customer{
return Cumer.customers
}
// 为切片追加参数
func (cce *Customerservice)Adduser(cust model.Customer){
cce.num ++
cust.Id = cce.num
cce.customers = append(cce.customers,cust)
}
// 根据用户传入的值查找下标
// func (findbyid *Customerservice)Sele(id int)int{
// index := -1
// for i:=0;i<len(findbyid.customers);i++{
// if i == index{
// break
// }
// }
// return id
// }
// 根据下标干掉对应切片元素
// 这里进行后端校验
func (de *Customerservice)Delete(index int){
// index := de.Sele(id)
index2 := 10
p := fmt.Sprint("%T",index)
g := fmt.Sprint("%T",index2)
if index > len(de.customers) || index < 0 || p != g{
fmt.Println("输入有误请重新选择服务...")
return
}else{
de.customers = append(de.customers[:index],de.customers[index+1:]...)
}
}
//view层
package main
import (
"fmt"
"goOctober/demo-10-16/service"
"goOctober/demo-10-16/model"
)
type Views struct{
addservice *service.Customerservice
tag int
food bool
}
// 添加客户信息方法
func (ad *Views)add(){
fmt.Println("请输入用户名")
name := ""
fmt.Scanln(&name)
fmt.Println("请输入年龄")
age := 0
fmt.Scanln(&age)
fmt.Println("请输入性别")
grender := ""
fmt.Scanln(&grender)
vscode := model.NewCustomer2(name,age,grender)
ad.addservice.Adduser(*vscode)
}
// 查看客户信息方法
func (ad *Views)view(){
fmt.Printf("ID\t姓名\t年龄\t性别\t\n")
vw := ad.addservice.Recustomer()
for k,_ := range vw{
fmt.Println(vw[k].Cu())
}
}
// 删除功能
// 在这里进行前端校验
func (de *Views)delete(){
fmt.Println("请输入你要删除的用户id")
ider := 0
fmt.Scanln(&ider)
de.addservice.Delete(ider)
}
func (vs Views)list(){
for{
fmt.Println("--------MRPII信息管理系统--------")
fmt.Println(" 1 添加客户信息")
fmt.Println(" 2 删除客户信息")
fmt.Println(" 3 修改客户信息")
fmt.Println(" 4 查看客户列表")
fmt.Println(" 5 退出系统服务")
fmt.Println("请选择需要的服务1-5")
fmt.Scanln(&vs.tag)
switch vs.tag{
case 1:
fmt.Println("--------添加客户信息--------")
vs.add()
case 2:
fmt.Println("--------删除客户信息--------")
vs.delete()
case 3:
fmt.Println("--------修改客户信息--------")
case 4:
fmt.Println("--------查看客户列表--------")
vs.view()
case 5:
fmt.Println("--------退出系统服务--------")
vs.food = true
default :
fmt.Println("输入有误")
}
if vs.food != false{
break
}
}
}
func main(){
var v Views
v.addservice = service.Init()
v.list()
}
最终实现:
// model层
package model
import (
"fmt"
)
type Customer struct{
Id int
Name string
Age int
Grender string
}
// 定义一个工厂函数,传入对应参数返回一个Customer类型的指针
func NewCustomer(id int,name string,age int,grender string)*Customer{
return &Customer{
Id : id,
Name : name,
Age : age,
Grender : grender,
}
}
func NewCustomer2(name string,age int,grender string)*Customer{
return &Customer{
Name : name,
Age : age,
Grender : grender,
}
}
// 返回结构体字符串格式
func (cu *Customer)Cu()string{
js := fmt.Sprintf("%v\t%v\t%v\t%v",cu.Id,cu.Name,cu.Age,cu.Grender)
return js
}
// service层
package service
import (
"goOctober/demo-10-16/model"
// "fmt"
)
// 定义一个struct定义一个Customer类型的切片用来存放客户信息
type Customerservice struct{
num int
customers []model.Customer
}
// 初始化Customerservice结构体及切片
func Init()*Customerservice{
custvice := &Customerservice{}
oms := model.NewCustomer(1,"hello",2,"hh")
custvice.num = 1
custvice.customers = append(custvice.customers,*oms)
return custvice
}
// 返回这个切片
func (Cumer *Customerservice)Recustomer()[]model.Customer{
return Cumer.customers
}
// 为切片追加参数
func (cce *Customerservice)Adduser(cust model.Customer){
cce.num ++
cust.Id = cce.num
cce.customers = append(cce.customers,cust)
}
// 根据下标干掉对应切片元素
// 前端进行校验
func (de *Customerservice)Delete(index int){
de.customers = append(de.customers[:index-1],de.customers[index:]...)
}
//view层
package main
import (
"fmt"
"goOctober/demo-10-16/service"
"goOctober/demo-10-16/model"
)
type Views struct{
addservice *service.Customerservice
tag int
food bool
}
// 加一个遍历客户列表id的方法,用来进行校验
func (pd *Views)pdd(){
gd := pd.addservice.Recustomer()
for
}
// 添加客户信息方法
func (ad *Views)add(){
fmt.Println("请输入用户名")
name := ""
fmt.Scanln(&name)
fmt.Println("请输入年龄")
age := 0
fmt.Scanln(&age)
fmt.Println("请输入性别")
grender := ""
fmt.Scanln(&grender)
vscode := model.NewCustomer2(name,age,grender)
ad.addservice.Adduser(*vscode)
}
// 查看客户信息方法
func (ad *Views)view(){
fmt.Printf("ID\t姓名\t年龄\t性别\t\n")
vw := ad.addservice.Recustomer()
for k,_ := range vw{
fmt.Println(vw[k].Cu())
}
}
// 删除功能
// 在这里进行前端校验
func (de *Views)delete(){
fmt.Println("请输入你要删除的用户id")
ider := 0
ider2 := 0
fmt.Scanln(&ider)
i := fmt.Sprintf("%T",ider)
d := fmt.Sprintf("%T",ider2)
if ider > len(de.addservice.Recustomer()) || ider <= 0 || d != i{
fmt.Println("输入有误请重新选择服务...")
}else{
de.addservice.Delete(ider)
fmt.Println("--------删除成功!--------")
}
}
// 完善退出功能
func (qu *Views)quit(){
fmt.Println("确定要退出吗? Y/N")
quit := ""
fmt.Scanln(&quit)
for{
if quit == "y" || quit == "Y" || quit == "n" || quit == "N"{
break
}else{
fmt.Println("输入有误")
qu.quit()
// 这里需要加一个return否则会一直递归调用
return
}
}
if quit == "y" || quit == "Y"{
fmt.Println("退出成功!")
qu.food = true
}else{
return
}
}
// 修改用户信息
// 调用model返回一个Customer类型的结构体并赋值给service/Recustomer
func (up *Views)update(){
fmt.Println("请输入你要修改的用户信息ID")
up1 := 0
up2 := 0
fmt.Scanln(&up1)
i := fmt.Sprintf("%T",up1)
d := fmt.Sprintf("%T",up2)
if up1 > len(up.addservice.Recustomer()) || up1 <= 0 || i != d{
fmt.Println("输入有误请重新选择服务...")
}else{
fmt.Println("请输入用户名")
name := ""
fmt.Scanln(&name)
fmt.Println("请输入年龄")
age := 0
fmt.Scanln(&age)
fmt.Println("请输入性别")
grender := ""
fmt.Scanln(&grender)
id := up1-1
up.addservice.Recustomer()[id] = *model.NewCustomer(up1,name,age,grender)
}
}
func (vs Views)list(){
for{
fmt.Println("--------MRPII信息管理系统--------")
fmt.Println(" 1 添加客户信息")
fmt.Println(" 2 删除客户信息")
fmt.Println(" 3 修改客户信息")
fmt.Println(" 4 查看客户列表")
fmt.Println(" 5 退出系统服务")
fmt.Println("请选择需要的服务1-5")
fmt.Scanln(&vs.tag)
switch vs.tag{
case 1:
fmt.Println("--------添加客户信息--------")
vs.add()
case 2:
fmt.Println("--------删除客户信息--------")
vs.delete()
case 3:
fmt.Println("--------修改客户信息--------")
vs.update()
case 4:
fmt.Println("--------查看客户列表--------")
vs.view()
case 5:
fmt.Println("--------退出系统服务--------")
// vs.food = true
vs.quit()
default :
fmt.Println("输入有误")
}
if vs.food != false{
break
}
}
}
func main(){
var v Views
v.addservice = service.Init()
v.list()
}