zoukankan      html  css  js  c++  java
  • go-客户信息关系系统

    客户信息关系系统

    项目需求分析

    1. 模拟实现基于文本界面的《 客户信息管理软件》。
    2. 该软件能够实现对客户对象的插入、修改和删除(用切片实现),并能够打印客户明细表

    项目的界面设计

    见代码的运行结果

    项目功能实现-显示主菜单和完成退出软件功能

    功能的说明
    当用户运行程序时,可以看到主菜单,当输入 5 时,可以退出该软件.
    思路分析
    编写 customerView.go ,另外可以把 customer.go 和 customerService.go 写上.

    项目功能实现-完成显示客户列表的功能

    项目功能实现-添加客户的功能

    项目功能实现-完成删除客户的功能

    代码实现:customerService.go

    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	%v	%v	%v	%v	%v	", this.Id, 
    		this.Name, this.Gender,this.Age, this.Phone, this.Email)
    	return info
    
    }
    

    代码实现:customerView.go

    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("编号	姓名	性别	年龄	电话	邮箱")
    	for i := 0; i < len(customers); i++ {
    		//fmt.Println(customers[i].Id,"	", customers[i].Name...)
    		fmt.Println(customers[i].GetInfo())
    	}
    	fmt.Printf("
    -------------------------客户列表完成-------------------------
    
    ")
    }
    
    //得到用户的输入,信息构建新的客户,并完成添加
    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()
    
    }
    
  • 相关阅读:
    php的cURL库介绍
    php函数ob_start()、ob_end_clean()、ob_get_contents()
    php中curl、fsockopen的应用
    App架构设计经验谈:服务端接口的设计
    图解正向代理与反向代理
    三种数据库连接池的配置
    数据库连接池在Tomcat中的几种配置方法
    Java四种线程池的使用
    JVM调优总结(一)-- 一些概念
    JVM调优总结(十)-调优方法
  • 原文地址:https://www.cnblogs.com/ygjzs/p/11878271.html
Copyright © 2011-2022 走看看