大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

本文详细介绍了使用Scala开发的客户信息管理系统,包括开发流程、需求分析、界面设计和功能实现。此外,深入探讨了Akka的Actor模型,包括Actor的工作机制、自我通讯和Actor间通讯的实例。还涉及到了Akka的网络编程,包括小黄鸡客服案例和Spark Master Worker进程通讯项目,揭示了Akka在网络通信中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十五章 客户信息管理系统

15.1 项目的开发流程

15.2 项目的需求分析

  模拟实现基于文本界面的《客户信息管理软件》。
  该软件 scala 能够实现对客户对象的插入、修改、删除、显示、查询(用 ArrayBuffer 或者 ListBuffer 实现),并能够打印客户明细表。

15.3 项目的界面

主界面

添加客户

修改客户

删除客户

客户列表

15.4 项目的设计-程序框架图

程序框架图:设计系统有多少个文件,以及文件之间的调用关系,可以帮助程序员实现模块的设计(清晰),便于程序员之间对项目交流分析。【业务优化,设计方案】

15.5 项目的功能实现

15.5.1 完成 Customer 类

根据需求文档或者页面,写出 Customer 类
Customer.scala

package com.atguigu.chapter15.customercrm.bean

class Customer {
   
  // 属性
  var id: Int = _
  var name: String = _
  var gender: Char = _
  var age: Short = _
  var tel: String = _
  var email: String = _

  // 辅助构造器
  def this(id: Int, name: String, gender: Char, age: Short, tel: String, email: String) {
   
    this
    this.id = id
    this.name = name
    this.gender = gender
    this.age = age
    this.tel = tel
    this.email = email
  }
}
15.5.2 完成显示主菜单和退出软件功能

CustomerView.scala 功能分析:
  1. 将主菜单的显示放入到 while
  2. 用户可以根据输入,选择自己的操作
  3. 如果输入5退出
CustomerView.scala

package com.atguigu.chapter15.customercrm.view

import scala.io.StdIn

class CustomerView {
   
  // 定义一个循环变量,控制是否退出
  var loop = true
  // 定义一个 key 用于接收用户输入的选项
  var key = ' '

  def mainMenu(): Unit = {
   
    do {
   
      println("-----------------客户信息管理软件-----------------")
      println("                  1 添 加 客 户                  ")
      println("                  2 修 改 客 户                  ")
      println("                  3 删 除 客 户                  ")
      println("                  4 客 户 列 表                  ")
      println("                  5 退       出                  ")
      println("                  请选择(1-5):                   ")
      key = StdIn.readChar()
      key match {
   
        case '1' => println("添 加 客 户")
        case '2' => println("修 改 客 户")
        case '3' => println("删 除 客 户")
        case '4' => println("客 户 列 表")
        case '5' => this.loop = false
      }
    } while (loop)
    println("你退出了系统...")
  }
}

示例代码如下:

package com.atguigu.chapter15.customercrm.app

import com.atguigu.chapter15.customercrm.view.CustomerView

object CustomerCrm {
   
  def main(args: Array[String]): Unit = {
   
    new CustomerView().mainMenu()
  }
}
15.5.3 完成显示客户列表的功能

CustomerView.scala 功能分析:
  1. 接收4,显示客户列表
  2. 调用 CustomerService 的方法 list
  3. 需要一个 CustomerService 对象(属性)
CustomerService.sacla 功能分析:
  1. 编写一个方法 list,返回当前系统有哪些客户
  2. 客户放在哪?–> 内存 --> 可变集合 --> ArrayBuffer
1、在 Customer.sacla 中重写 toString 方法

  override def toString: String = {
   
    this.id + "\t\t" + this.name + "\t\t" + this.gender + "\t\t" + this.age + "\t\t" + this.tel + "\t\t" + this.email
  }

2、在 CustomerService.scala 中编写一个方法 list,返回当前系统有哪些客户

class CustomerService {
   
  // customers 是存放客户用的,为了方便测试,我们先进行初始化
  val customers = ArrayBuffer(new Customer(1, "tom", '男', 20, "110", "tom@sohu.com"))
  
  // 查询客户列表的方法
  def list(): ArrayBuffer[Customer] = {
   
    this.customers
  }
}

3、在 CustomerView.scala 中 调用 CustomerService 的方法 list

  val customerService = new CustomerService()

  /*
---------------------------客户列表---------------------------
编号  姓名       性别    年龄   电话            邮箱
 1    张三       男      30     010-56253825   abc@email.com
 2    李四       女      23     010-56253825    lisi@ibm.com
 3    王芳       女      26     010-56253825   wang@163.com
-------------------------客户列表完成-------------------------
   */
  def list(): Unit = {
   
    println()
    println("---------------------------客户列表---------------------------")
    println("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t邮箱")
    // 遍历
    // 调用 CustomerService 的方法 list
    val customers = customerService.list()
    for (customer <- customers) {
   
      // 方式一:输出
      // println(customer.id + "\t\t" + ...)
      // 方式二:重写 Customer 的 toString 方法,返回信息,并且格式化
      println(customer)
    }
    println("-------------------------客户列表完成-------------------------")
  }
15.5.4 完成添加客户的功能

CustomerView.scala 功能分析:
  1. 接收客户的信息,并封装成对应的 Customer 对象
  2. 调用 CustomerService 的方法 add
CustomerService.sacla 功能分析:
  1. 编写一个方法 add,接收一个 Customer 对象
  2. 加入到 ArrayBuffer 中
  3. 规定:以添加客户是第几个作为它的 id
1、在 Customer.sacla 中添加一个新的 辅助构造器(没有id属性)

  // 辅助构造器(没有id属性)
  def this(name: String, gender: Char, age: Short, tel: String, email: String) {
   
    this
    this.name = name
    this.gender = gender
    this.age = age
    this.tel = tel
    this.email = email
  }

2、在 CustomerService.scala 中编写一个方法 add,接收一个 Customer 对象,并设置 id 后再加入到 ArrayBuffer 中

  // 用于设置用户 id
  var customerNum = 1

  // 添加客户的方法
  def add(customer: Customer): Boolean = {
   
    // 设置 id
    customerNum += 1
    customer.id = customerNum
    // 加入到 ArrayBuffer 中
    customers.append(customer)
    true
  }

3、在 CustomerView.scala 中 调用 CustomerService 的方法 add

  /*
---------------------添加客户---------------------
姓名:张三
性别:男
年龄:30
电话:010-56253825
邮箱:zhang@abc.com
---------------------添加完成---------------------
   */
  def add(): Unit = {
   
    println()
    println("---------------------添加客户---------------------")
    println("姓名:")
    val name = StdIn.readLine()
    println("性别:")
    val gender = StdIn.readChar()
    println("年龄:")
    val age = StdIn.readShort()
    println("电话:")
    val tel = StdIn.readLine()
    println("邮箱:")
    val email = StdIn.readLine()
    // 封装对象
    val customer = new Customer(name, gender, age, tel, email)
    // 调用 CustomerService 的方法 add
    customerService.add(customer)
    println("---------------------添加完成---------------------")
  }
15.5.5 完成删除客户的功能

CustomerView.scala 功能分析:
  1. 接收客户 id,准备删除
  2. 调用 CustomerService 的 del(id)
CustomerService.sacla 功能分析:
  1. 编写一个方法 del,接收一个 id,先去调用另一个方法 findIndexById,判断
  2. 编写一个方法 findIndexById(因为我们的 ArrayBuffer 索引和 id 并不是对应的)
  3. 如果发现有,则删除,如果没有就返回 false
1、在 CustomerService.scala 中编写一个方法 del,接收一个 id,先去调用另一个方法 findIndexById,判断

  // 先根据 id 查找 用户的 index
  def findIndexById(id: Int): Int = {
   
    // 先假定一个索引,默认 -1,如果找到就改成对应的,如果没有找到就返回 -1
    var index = -1
    // 遍历 ArrayBuffer
    breakable {
   
      for (i <- 0 until customers.length) {
   
        if (customers(i).id == id) {
   
          index = i
          break()
        }
      }
    }
    index
  }

  // 再根据 id 删除用户
  def del(id: Int): Boolean = {
   
    val index = findIndexById(id)
    if (index != -1) {
   
      customers.remove(index)
      true
    } else {
   
      false
    }
  }

2、在 CustomerView.scala 中接收客户 id,调用 CustomerService 的 del(id)

  /*
---------------------删除客户---------------------
请选择待删除客户编号(-1退出):1
确认是否删除(Y/N):y
---------------------删除完成---------------------
   */
  def del(): Unit = {
   
    println()
    println("---------------------删除客户---------------------")
    println("请选择待删除客户编号(-1退出):")
    val id = StdIn.readInt()
    if (id == -1) {
   
      println("---------------------删除没有完成---------------------")
      return
    }
    println("确认是否删除(Y/N):")
    val choice = StdIn.readChar().toLower
    if (choice == 'y') {
   
      if (customerService.del(id)) {
   
        println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值