Go - 小项目2 - 客户信息管理系统
项目2:客户信息管理系统
一)需求
1)模拟实现基于文本界面的《客户信息管理系统》
2)实现对客户信息的插入,删除,修改,显示
二)框架图
1)customerView.go(界面)
2)customerService.go(处理业务逻辑)
3)customer.go(表示数据)model层
三)编码
customerView.go
package main
import (
"customerManage/model"
"customerManage/service"
"fmt"
)
type customerView struct {
key string //接收用户的输入选择
loop bool //表示是否循环显示主菜单
customerService *service.CustomerService
}
//添加客户信息
func (cv *customerView)add() {
fmt.Println("----------添加客户----------")
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 := ""
fmt.Scanln(&email)
//构建一个新的customer实例
customer := model.NewCustomer2(name,gender,age,phone,email)
if cv.customerService.Add(customer) {
fmt.Println("----------添加成功----------")
}
}
//修改客户信息
func (cv *customerView)update() {
fmt.Println("----------修改客户----------")
fmt.Println("请选择待修改用户的编号(-1退出):")
id := -1
fmt.Scanln(&id)
if id == -1 {
return
}
fmt.Println("确认是否修改?y/n")
choose := ""
fmt.Scanln(&choose)
if choose == "y" {
if cv.customerService.UpData(id) {
fmt.Println("----------修改成功----------")
}else {
fmt.Println("----------修改失败----------")
}
}else {
fmt.Println("取消修改")
}
}
//删除客户信息
func (cv *customerView)delete() {
fmt.Println("----------删除客户----------")
fmt.Println("请选择待删除用户的编号(-1退出):")
id := -1
fmt.Scanln(&id)
if id == -1 {
return
}
fmt.Println("确认是否删除?y/n")
choose := ""
fmt.Scanln(&choose)
if choose == "y" {
if cv.customerService.Delete(id) {
fmt.Println("----------删除成功----------")
}else {
fmt.Println("----------删除失败----------")
}
}else {
fmt.Println("取消删除")
}
}
//显示客户信息
func (cv *customerView)list() {
customers := cv.customerService.List()
fmt.Println("----------客户列表----------")
fmt.Println("编号\t姓名\t性别\t年龄\t电话\t邮箱")
for i := 0;i<len(customers);i++ {
fmt.Println(customers[i].GetInfo())
}
fmt.Println("---------客户列表完成---------")
}
//退出软件
func (cv *customerView)exit() {
fmt.Println("您是否选择退出?y/n")
choose := ""
fmt.Scanln(&choose)
if choose=="y" {
cv.loop = true
}else {
cv.loop = false
}
}
//显示主菜单
func (cv *customerView) mainMenu() {
for {
fmt.Println("\n----------客户信息管理软件----------")
fmt.Println(" 1 添加客户")
fmt.Println(" 2 修改客户")
fmt.Println(" 3 删除客户")
fmt.Println(" 4 客户列表")
fmt.Println(" 5 退 出")
fmt.Print("请选择(1-5):")
fmt.Scanln(&cv.key)
switch cv.key {
case "1":
cv.add()
case "2":
cv.update()
case "3":
cv.delete()
case "4":
cv.list()
case "5":
cv.exit()
default:
fmt.Println("你的输入有误,请重新输入。。。")
}
if cv.loop {
break
}
}
fmt.Println("你退出了客户关系管理系统...")
}
func main() {
cv := customerView{
key: "",
loop: false,
}
cv.customerService = service.NewCustomerService()
cv.mainMenu()
}
customer.go
package model
import "fmt"
//声明一个Customer结构体,表示客户信息
type Customer struct {
Id int
Name string
Gender string
Age int
Phone string
Email string
}
//使用工厂模式,返回一个Customer的实例
func NewCustomer(id int, name string, gender string, age int, phone string, email string) Customer {
return Customer{
Id: id,
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
}
func NewCustomer2( name string, gender string, age int, phone string, email string) Customer {
return Customer{
Name: name,
Gender: gender,
Age: age,
Phone: phone,
Email: email,
}
}
//返回用户信息
func (cus Customer)GetInfo() string {
info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\t",cus.Id,cus.Name,cus.Gender,cus.Age, cus.Phone,cus.Email)
return info
}
customerService.go
package service
import (
"customerManage/model"
"fmt"
)
//定义CustomerService,完成对Customer的操作,包括增删改查
type CustomerService struct {
customers []model.Customer //customer切片
customerNum int //表示当前切片含有多少个客户,还可作为新客户的id
}
//编写一个方法,返回*CustomerService
func NewCustomerService() *CustomerService {
cs := &CustomerService{}
cs.customerNum =1
customer := model.NewCustomer(1,"张三","男",18,"123456","123@qq.com")
cs.customers =append(cs.customers,customer)
return cs
}
//返回客户切片
func (cs *CustomerService)List() []model.Customer {
return cs.customers
}
//添加客户到customers切片中
func (cs *CustomerService)Add(customer model.Customer) bool{
cs.customerNum++
customer.Id =cs.customerNum
cs.customers =append(cs.customers,customer)
return true
}
//根据Id查找客户在切片中的位置,如果没有该客户就返回-1
func (cs *CustomerService)FindById(id int) int {
index := -1
for i := 0;i<len(cs.customers);i++ {
if cs.customers[i].Id == id {
index = i
}
}
return index
}
//根据id修改切片中的用户
func (cs *CustomerService)UpData(id int) bool {
index := cs.FindById(id)
if index == -1{
return false
}
name := ""
gender :=""
age := 0
phone := ""
email := ""
fmt.Printf("姓名(%v):",cs.customers[index].Name)
fmt.Scanln(&name)
fmt.Printf("性别(%v):",cs.customers[index].Gender)
fmt.Scanln(&gender)
fmt.Printf("年龄(%v):",cs.customers[index].Age)
fmt.Scanln(&age)
fmt.Printf("电话(%v):",cs.customers[index].Phone)
fmt.Scanln(&phone)
fmt.Printf("邮箱(%v):",cs.customers[index].Email)
fmt.Scanln(&email)
cs.customers[index].Name = name
cs.customers[index].Gender = gender
cs.customers[index].Age = age
cs.customers[index].Phone = phone
cs.customers[index].Email = email
return true
}
//根据id删除切片中的用户
func (cs *CustomerService)Delete(id int) bool{
index := cs.FindById(id)
if index == -1 {
return false
}
cs.customers =append(cs.customers[:index],cs.customers[index+1:]...)
return true
}