本节带领大家实现一个基于文本界面的客户关系管理软件,该软件可以实现对客户的插入、修改和删除,并且可以打印客户信息明细表。

软件由一下三个模块组成:

项目结构如下所示:

在 costumer.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

}

在 costumerService.go 中,代码如下:

package service

import (

"../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, "010-56253825", "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

}

在 costumerView.go 中,代码如下:

package main

import (

"fmt"

"../model"

"../service"

)

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.Print("姓名:")

name := ""

fmt.Scanln(&name)

fmt.Print("性别:")

gender := ""

fmt.Scanln(&gender)

fmt.Print("年龄:")

age := 0

fmt.Scanln(&age)

fmt.Print("电话:")

phone := ""

fmt.Scanln(&phone)

fmt.Print("邮箱:")

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.Print("请选择待删除客户编号(-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.Print("确认是否退出(Y/N):")

for {

fmt.Scanln(&this.key)

if this.key == "Y" || this.key == "y" || this.key == "N" || this.key == "n" {

break

}

fmt.Print("你的输入有误,确认是否退出(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()

}

执行结果如下所示:

D:\code\demo\view>go run customerView.go

-----------------客户信息管理软件-----------------

1 添 加 客 户

2 修 改 客 户

3 删 除 客 户

4 客 户 列 表

5 退       出

请选择(1-5):1

---------------------添加客户---------------------

姓名:李四

性别:男

年龄:22

电话:15611112222

邮箱:lisi@qq.com

---------------------添加完成---------------------

-----------------客户信息管理软件-----------------

1 添 加 客 户

2 修 改 客 户

3 删 除 客 户

4 客 户 列 表

5 退       出

请选择(1-5):4

---------------------------客户列表---------------------------

编号    姓名    性别    年龄    电话    邮箱

1        张三    男      20      010-56253825    zs@sohu.com

2        李四    男      22      15611112222     lisi@qq.com

-------------------------客户列表完成-------------------------

-----------------客户信息管理软件-----------------

1 添 加 客 户

2 修 改 客 户

3 删 除 客 户

4 客 户 列 表

5 退       出

请选择(1-5):

python 客户信息管理系统_示例:客户信息管理系统相关推荐

  1. python综合管理系统_学生综合信息管理系统

    1 绪论 1.1 项目概述 学生基本信息管理系统分为六个板块 分别是修改密码.班级管理 学生管理.教师管理.课程管理和选课管理 ①密码修改是对登录身份(系统管理员.教师.学生)密码的修改 ②班级管理系 ...

  2. python 进程生命周期_计算客户生命周期价值的python解决方案

    python 进程生命周期 By Lisa Cohen, Zhining Deng, Shijing Fang, and Ron Sielinski 由丽莎·科恩,志宁邓,石井方和罗恩Sielinsk ...

  3. php修改学生信息代码_关于开放教学管理系统在校学生学籍信息修改功能的通知...

    为了加强管理,完善教学系统信息,确保个人信息真实无误,即日起开放教学管理系统学籍信息修改功能,在校学生可自行登陆教学系统查询本人的学籍信息,如有问题可在"我的学籍"菜单下进行个人相 ...

  4. 用户管理系统_学期项目智能管理系统用户操作指南

    "学在IVT"喊您回家,邀您加入!微信公众号"学在IVT"实时更新发布重要信息,将为您提供更新鲜.更及时.更准确的资讯服务!IVT学子是一家,信息传递靠大家!& ...

  5. 计算机毕业设计java+ssm大学生资助金发放管理系统_助学金贫困补助金管理系统

    项目介绍 一直以来我国的教育水平在不断的稳步提升,但是同时也出现了一些问题,在我国还是有一定的贫困家庭,但是往往就是这些学生能够做出突出的成绩,这些学生一旦考上大学往往昂贵的教育费用和生活费用成为家里 ...

  6. java数据结构停车场管理系统_数据结构设计-停车场管理系统

    目  录 摘要及关键词 1 1 问题描述 1 1.1题目描述 1 1.2任务要求 1 2 设计思想及其目的 2 2.1设计思想 2 2.2设计目的 2 3 系统具备的功能 2 3.1 简体中文控制台界 ...

  7. python产品支持度_对客户推荐产品模型+python代码

    首先观看数据: l  数据的基本特征用  describe  描述每个基本特征 l  画图画出每个特征的基本统计图 应用importmatplotlib.pylab aspl  画图显示 l  关于特 ...

  8. python 日志函数参数_将日志信息作为参数传递给函数

    我使用的Python库使用logging模块.但是,我创建了自己的log函数,脚本在内部使用.在 下面是我要使用的日志记录功能:def log(name, content, swtch : bool ...

  9. c语言患者住院管理系统,住院系统-中小医院医疗套装软件管理系统_九明珠信息科技...

    简介:住院系统包括:出入院管理.住院收费.护士工作站 功能列表介绍出入院管理 1)办理病人入院登记:支持多种身份(公费.自费.本院VIP.新农合.惠民.各类医保)的病人: 2)提供病案首页建立与打印: ...

最新文章

  1. C socket编程
  2. php echarts 两条曲线图,使用laravel和ECharts实现折线图效果的例子
  3. VB API 之 第十一课 绘制矩形
  4. (十一)开发环境【不会这些,你就会被认定是菜鸟小白,没做过项目】
  5. IOS开发基础之汽车品牌项目-14
  6. cf烟雾头怎么调win7系统
  7. 手把手0基础项目实战(三)——教你开发一套电商平台的安全框架
  8. easyUI_rowdata
  9. MySQL之字符串拼接
  10. 计算机打印机无法扫描,打印机无法扫描 打印机无法扫描怎么办 4种原因及解决方法...
  11. 浏览器0x80004005 无法上网
  12. eval(转换html,js eval函数使用,js对象和字符串互转实例
  13. Google Earth Engine(GEE)——MODIS 影像LST地表温度随时间变化的趋势案例分析
  14. 查看数据库信息(一)
  15. Python 将网易云歌单迁移到QQ音乐
  16. Nodejs+npm详细安装
  17. java计算机毕业设计新疆旅游专列订票系统源码+mysql数据库+lw文档+系统+调试部署
  18. 2022-2028年全球与中国奶酪格栅机行业市场需求预测分析
  19. HTTP协议中URI和URL有什么区别
  20. 阿里云服务器重装操作系统流程免费不限次数更换

热门文章

  1. mac系统从零开始配置若依框架后端运行环境
  2. 计算机毕业设计JAVA毕业生就业去向登记管理系统mybatis+源码+调试部署+系统+数据库+lw
  3. 贝叶斯分类、极大似然估计和最大后验概率估计的一些概念
  4. 图灵的停机问题背后令人着迷的数学(哲学)原理
  5. 整理了近期所有的python资料,收藏了慢慢来
  6. 新中新SDK 身份证代码编写
  7. 确定股票交易日的算法
  8. C语言约分、求最大公约数?三角形用分数格式输出其较小锐角的正弦值
  9. 【Tomcat简介】
  10. 保利清能西海岸收房步骤和费用明细