scala语言实现客户信息管理系统
写在前面
到今天为止scala语言学的差不多了,按照惯例,写一个差不多的增删改查系统来练练手。
需求分析
模拟实现基于文本界面的《客户信息管理软件》。
该软件能够实现对客户对象的插入、修改和删除,并能够打印客户明细表。
项目采用分级菜单方式。
可以看到,是一个十分常规的增删改查系统。我们首先看看题目中给出的界面:
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出 请选择(1-5):_
可以看到,整个系统的功能还是十分简单易懂的。我们就一个一个来吧
详细设计
在设计阶段,我们应该明确如何编写这样的系统。一般我们采用分层思想,首先设计一个Customer
类,即Model层,表示数据的存储与传输,如下:
/**
* @Description: 客户model类
* @author: LiuGe
* @date: 2021/1/24
*/
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
}
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
}
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
}
}
这里我们写了两个辅助构造器,用来方便我们实例化该对象。重写了toString方法方便我们打印输出。
之后,要有一个业务层来处理业务逻辑:
import com.liuge.chapter15.customercrm.bean.Customer
import scala.collection.mutable.ArrayBuffer
import scala.util.control.Breaks.{break, breakable}
/**
* @Description:
* @author: LiuGe
* @date: 2021/1/24
*/
class CustomerService {
var customerNum = 1
// customers是存放客户的,这里先初始化
val customers: ArrayBuffer[Customer] =
ArrayBuffer(new Customer(1, "tom", '男', 10, "100", "tom@qq.com"))
def list(): ArrayBuffer[Customer] = {
this.customers
}
def add(customer: Customer): Boolean = {
// 设置id
customerNum += 1
customer.id = customerNum
// 加入到customers
customers += customer
true
}
def delete(id: Int) :Boolean = {
val index = findIndexById(id)
if(index != -1){
// 去删除
customers.remove(index)
true
}else{
false
}
}
// 根据id找到index
def findIndexById(id: Int): Int = {
// 默认-1 找到就改成对应的,找不到就返回-1
var index = -1
// 遍历ArrayBuffer
breakable{
for (i <- customers.indices) {
if(customers(i).id == id){
index = i
break()
}
}
}
index
}
def findCustomerById(id:Int):Any = {
val index = findIndexById(id)
if(index != -1){
return customers(index)
}
false
}
def update(id:Int,customer: Customer):Boolean ={
val index = findIndexById(id)
if(index != -1){
val customerFromArray = customers(index)
if(customer.name != null && customer.name != ""){
customerFromArray.name = customer.name
}
if (customer.gender == '男' || customer.gender == '女') {
customerFromArray.gender = customer.gender
}
if (customer.age >= 0) {
customerFromArray.age = customer.age
}
if (customer.tel != null && customer.tel != "") {
customerFromArray.tel = customer.tel
}
if (customer.email != null && customer.email != "") {
customerFromArray.email = customer.email
}
return true
}
false
}
}
这里我们使用了ArrayBuffer来存储数据,他有点类似于Java中的ArrayList,基本是一样的效果。
之后,我们需要一个界面类来显示界面:
import com.liuge.chapter15.customercrm.bean.Customer
import com.liuge.chapter15.customercrm.service.CustomerService
import scala.io.StdIn
import scala.util.control.Breaks.{break, breakable}
/**
* @Description:
* @author: LiuGe
* @date: 2021/1/24
*/
class CustomerView {
// 定义一个循环变量,控制是否退出while
var loop = true
// 定义一个key,用于接收用户输入的选项
var key = ' '
var customerService = new CustomerService()
/*
-----------------客户信息管理软件-----------------
1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):
*/
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' => this.add()
case '2' => this.update()
case '3' => this.delete()
case '4' => this.list()
case '5' => this.quit()
case _ => println("请重新选择!")
}
} while (loop)
}
def quit(): Unit = {
println("确认是否退出(Y/N):")
var choice = ' '
breakable {
while (true) {
choice = StdIn.readChar().toLower
if (choice != 'y' || choice != 'n') {
println("确认是否退出(Y/N):")
}
if (choice == 'n') {
break()
}
if (choice == 'y') {
this.loop = false
break()
}
}
}
}
/*
---------------------------客户列表---------------------------
编号 姓名 性别 年龄 电话 邮箱
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邮箱")
// for循环遍历
// 获取customers
val customers = customerService.list()
for (customer <- customers) {
// 重写customer的toString方法
println(customer)
}
println("-------------------------客户列表完成-------------------------")
}
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(customer)
println("---------------------添加完成---------------------")
}
/*
---------------------删除客户---------------------
请选择待删除客户编号(-1退出):1
确认是否删除(Y/N):y
---------------------删除完成---------------------
*/
def delete(): Unit = {
println("")
println("---------------------删除客户---------------------")
println("请选择待删除客户编号(-1退出):")
val id = StdIn.readInt()
if (id == -1) {
println("---------------------删除失败---------------------")
return
}
println("确认是否删除(Y/N):")
var choice = ' '
breakable {
do {
choice = StdIn.readChar().toLower
if (choice == 'y' || choice == 'n') {
break()
}
println("确认是否删除(Y/N):")
} while (true)
}
if (choice == 'y') {
if (customerService.delete(id)) {
println("---------------------删除完成---------------------")
return
}
}
println("---------------------删除失败---------------------")
}
def update(): Unit ={
println("")
println("---------------------修改客户---------------------")
println("请选择待修改客户编号(-1退出):")
val id = StdIn.readInt()
if(id == -1){
println("---------------------修改失败---------------------")
return
}
val customerFromArray = customerService.findCustomerById(id)
if(customerFromArray.isInstanceOf[Boolean]){
println("---------------------该用户不存在---------------------")
update()
}else{
val customerFromService = customerFromArray.asInstanceOf[Customer]
var name = ""
var gender = ' '
var age : Short = -1
var tel = ""
var email = ""
println(s"姓名(${customerFromService.name}):")
name = StdIn.readLine()
println(s"性别:(${customerFromService.gender}):")
gender = StdIn.readChar()
println(s"年龄:(${customerFromService.age}):")
age = StdIn.readShort()
println(s"电话:(${customerFromService.tel}):")
tel = StdIn.readLine()
println(s"邮箱:(${customerFromService.email}):")
email = StdIn.readLine()
// 构建对象
val customer = new Customer(name, gender, age, tel, email)
val isUpdated = customerService.update(id, customer)
if(isUpdated){
println("---------------------修改完成---------------------")
return
}
}
println("---------------------修改失败---------------------")
}
}
该类主要就是负责界面的显示以及一些业务逻辑处理。
最后的最后,我们为整个程序提供一个入口:
import com.liuge.chapter15.customercrm.view.CustomerView
/**
* @Description:
* @author: LiuGe
* @date: 2021/1/24
*/
object CustomerCrm {
def main(args: Array[String]): Unit = {
new CustomerView().mainMenu()
}
}
总结
总的来说,整个项目实现还是很简单的,主要是用来熟悉一下Scala的语法。主要编写的思路还是很简单,主要就是一些基本逻辑的处理了。