大数据技术之_16_Scala学习_11
第十五章 客户信息管理系统
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(