項目需求分析
1) 模擬實現基於文本界面的《 客戶信息管理軟件》。
2) 該軟件可以實現對客戶對象的插入、修改和刪除(用切片實現),並可以打印客戶明細表app
見代碼的運行結果函數
功能的說明
當用戶運行程序時,能夠看到主菜單,當輸入 5 時,能夠退出該軟件.
思路分析
編寫 customerView.go ,另外能夠把 customer.go 和 customerService.go 寫上.oop
代碼實現:customerService.gothis
package service import ( "go_code/code/customerManage/model" ) //該CustomerService, 完成對Customer的操做,包括 //增刪改查 type CustomerService struct { customers []model.Customer //聲明一個字段,表示當前切片含有多少個客戶 //該字段後面,還能夠做爲新客戶的id+1 customerNum int } //編寫一個方法,能夠返回 *CustomerService func NewCustomerService() *CustomerService { //爲了可以看到有客戶在切片中,咱們初始化一個客戶 customerService := &CustomerService{} customerService.customerNum = 1 customer := model.NewCustomer(1, "張三", "男", 20, "112", "zs@sohu.com") customerService.customers = append(customerService.customers, customer) return customerService } //返回客戶切片 func (this *CustomerService) List() []model.Customer { return this.customers } //添加客戶到customers切片 //!!! func (this *CustomerService) Add(customer model.Customer) bool { //咱們肯定一個分配id的規則,就是添加的順序 this.customerNum++ customer.Id = this.customerNum this.customers = append(this.customers, customer) return true } //根據id刪除客戶(從切片中刪除) func (this *CustomerService) Delete(id int) bool { index := this.FindById(id) //若是index == -1, 說明沒有這個客戶 if index == -1 { return false } //如何從切片中刪除一個元素 this.customers = append(this.customers[:index], this.customers[index+1:]...) return true } //根據id查找客戶在切片中對應下標,若是沒有該客戶,返回-1 func (this *CustomerService) FindById(id int) int { index := -1 //遍歷this.customers 切片 for i := 0; i < len(this.customers); i++ { if this.customers[i].Id == id { //找到 index = i } } return index }
代碼實現: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, } } //第二種建立Customer實例方法,不帶id 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 (this Customer) GetInfo() string { info := fmt.Sprintf("%v\t%v\t%v\t%v\t%v\t%v\t", this.Id, this.Name, this.Gender,this.Age, this.Phone, this.Email) return info }
代碼實現:customerView.gocode
package main import ( "fmt" "go_code/code/customerManage/service" "go_code/code/customerManage/model" ) type customerView struct { //定義必要字段 key string //接收用戶輸入... loop bool //表示是否循環的顯示主菜單 //增長一個字段customerService customerService *service.CustomerService } //顯示全部的客戶信息 func (this *customerView) list() { //首先,獲取到當前全部的客戶信息(在切片中) customers := this.customerService.List() //顯示 fmt.Println("---------------------------客戶列表---------------------------") fmt.Println("編號\t姓名\t性別\t年齡\t電話\t郵箱") for i := 0; i < len(customers); i++ { //fmt.Println(customers[i].Id,"\t", customers[i].Name...) fmt.Println(customers[i].GetInfo()) } fmt.Printf("\n-------------------------客戶列表完成-------------------------\n\n") } //獲得用戶的輸入,信息構建新的客戶,並完成添加 func (this *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實例 //注意: id號,沒有讓用戶輸入,id是惟一的,須要系統分配 customer := model.NewCustomer2(name, gender, age, phone, email) //調用 if this.customerService.Add(customer) { fmt.Println("---------------------添加完成---------------------") } else { fmt.Println("---------------------添加失敗---------------------") } } //獲得用戶的輸入id,刪除該id對應的客戶 func (this *customerView) delete() { fmt.Println("---------------------刪除客戶---------------------") fmt.Println("請選擇待刪除客戶編號(-1退出):") id := -1 fmt.Scanln(&id) if id == -1 { return //放棄刪除操做 } fmt.Println("確認是否刪除(Y/N):") //這裏同窗們能夠加入一個循環判斷,直到用戶輸入 y 或者 n,才退出.. choice := "" fmt.Scanln(&choice) if choice == "y" || choice == "Y" { //調用customerService 的 Delete方法 if this.customerService.Delete(id) { fmt.Println("---------------------刪除完成---------------------") } else { fmt.Println("---------------------刪除失敗,輸入的id號不存在----") } } } //退出軟件 func (this *customerView) exit() { fmt.Println("確認是否退出(Y/N):") for { fmt.Scanln(&this.key) if this.key == "Y" || this.key == "y" || this.key == "N" || this.key == "n" { break } fmt.Println("你的輸入有誤,確認是否退出(Y/N):") } if this.key == "Y" || this.key == "y" { this.loop = false } } //顯示主菜單 func (this *customerView) mainMenu() { for { fmt.Println("-----------------客戶信息管理軟件-----------------") fmt.Println(" 1 添 加 客 戶") fmt.Println(" 2 修 改 客 戶") fmt.Println(" 3 刪 除 客 戶") fmt.Println(" 4 客 戶 列 表") fmt.Println(" 5 退 出") fmt.Print("請選擇(1-5):") fmt.Scanln(&this.key) switch this.key { case "1" : this.add() case "2" : fmt.Println("修 改 客 戶") case "3" : this.delete() case "4" : this.list() case "5" : this.exit() default : fmt.Println("你的輸入有誤,請從新輸入...") } if !this.loop { break } } fmt.Println("你退出了客戶關係管理系統...") } func main() { //在main函數中,建立一個customerView,並運行顯示主菜單.. customerView := customerView{ key : "", loop : true, } //這裏完成對customerView結構體的customerService字段的初始化 customerView.customerService = service.NewCustomerService() //顯示主菜單.. customerView.mainMenu() }