scala实现客户信息管理系统

分析

(1)在列表中输入没有的选项,会跳出重新输入选修。
(2)输入1时添加客户,会跳出输入客户姓名、性别、年龄、电话和邮箱。
(3)输入2时是修改客户,跳出每个客户信息字段,进行修改,如若不想修改的字段可以直接回车。
(4)输入3时是删除客户,跳出输入要删除客户编号的界面,输入需要删除的编号,会再次让你确定是否要删除。
(5)输入4时是显示客户列表,显示所有的客户信息,并且可以自动统计总共的人数。
(6)输入5时查询客户,有根据id和根据姓名查询,并且在无此人的情况下显示查无此人。
(7)输入6时是筛选客户,可以根据性别和年龄查询,根据性别查询是输入0和1,输入0时筛选出女性,输入1时筛选出男性。根据年龄查询时,第一次跳出输入最小年龄,第二次跳出输入最大年龄。然后会筛选出这个区间的人。
(8)输入7时是排序客户,选择根据按姓名拼音还是按年龄大小,若按姓名拼音,选择按a-z排还是按z-a排。选择按年龄大小排,则可以选择升序排还是选择降序排。
(9)输入8时退出系统。

源码链接
https://download.csdn.net/download/weixin_44692890/88602514

项目功能实现效果

在这里插入图片描述

(1)添加客户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)修改客户

在这里插入图片描述
在这里插入图片描述

(3)删除客户

在这里插入图片描述
在这里插入图片描述

(4)客户列表

在这里插入图片描述

(5)查询客户

在这里插入图片描述
在这里插入图片描述

(6)筛选客户

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(7)排序客户

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(8)退出系统

在这里插入图片描述

在这里插入图片描述

代码

package info.info
object AppStart {
  def main(args: Array[String]): Unit = {
    (new CustomerView).meau()
  }
}
package info.info

class Customer {

  //定义客户列表的标签,即所有的变量
  var id: Int = _
  var name: String = _
  var sex: Char = _
  var age: Short = _
  var tel: String = _
  var mail: String = _

  def this(id: Int, name: String, sex: Char, age: Short, tel: String, mail: String) {

    //调用变量,给其传入值
    this
    this.id = id
    this.name = name
    this.sex = sex
    this.age = age
    this.tel = tel
    this.mail = mail
  }

  override def toString: String = {
    //重写方法,排成列表的形式
    this.id + "\t\t" + this.name + "\t\t" + this.sex + "\t\t" + this.age + "\t\t" + this.tel + "\t\t" + this.mail
  }

}


package info.info

import scala.collection.mutable.ListBuffer
import scala.io.StdIn

class CustomerService {

  //定义一个可变列表
  var customers = new ListBuffer[Customer]()
  var id = 0
  //用append方法进行添加内容,便于后面的数据测试,但是和控制台操作的数据是没有联系的
  customers.append(new Customer(1,"xiaohong",'男',23,"180","www@123.com"))
  customers.append(new Customer(2,"dongdong",'女',21,"180","www@123.com"))
  customers.append(new Customer(5,"yuyu",'女',21,"180","www@123.com"))
  customers.append(new Customer(3,"honghong",'男',3,"180","www@123.com"))
  customers.append(new Customer(4,"liuliu",'男',32,"180","www@123.com"))

  // 显示客户列表
  def showList(customers: ListBuffer[Customer]): Unit = {

    //对customers的数据循环传入item,并获取输出
    // 查看总共有几个人,即调用获取列表长度的方法
    for (item <- customers) {
      println(item)
    }
    println("当前有"+customers.length+"位客户")
  }

  // 添加客户
  def addClient(): Unit = {
    id += 1   //定义添加客户时,id都是每次加1的
    print("请输入客户姓名:")
    val name = StdIn.readLine()//获取控制台输入的内容
    print("请输入客户性别:")
    val sex = StdIn.readChar()
    print("请输入客户年龄:")
    val age = StdIn.readShort()
    print("请输入客户电话:")
    val tel = StdIn.readLine()
    print("请输入客户邮箱:")
    val mail = StdIn.readLine()
    customers.append(new Customer(id, name, sex, age, tel, mail))
    //添加到列表的字段下
  }

  // 查找客户
  def findIndexById(id: String): Int = {
    var index = 0
    //遍历列表
    for (item <- customers) {
        //判断所输入的id是否和列表遍历出的id相同,如若相同,则返回其值
      if (item.id.toString.equals(id)) return index
        //或者输入姓名时,判断是否与遍历的姓名相同,如果相同返回其值
      else if(item.name.toString.equals(id)) return index
      index+=1 //index不断进行循环索引
    }
    -1//索引出错后进行终止此操作
  }

  // 删除客户
  def deleteCli(index: Int): Unit = {
    customers.remove(index)//调用移除方法
  }

  // 修改客户信息
  def updateCli(index: Int) {

    //定义按编号的修改
    val cus = customers(index)
    //引用的是name字段,用来候插入姓名
    print(s"姓名(${cus.name}):")
    //定义名字的修改,判断如果原来的列表名字不是空的,那么就把控制台的名字覆盖原来的
    val name = StdIn.readLine()
    if (name != "") cus.name = name

    //下面的其他字段的修改和名字的一样
    print(s"性别(${cus.sex}):")
    val sex = StdIn.readLine()
    if (sex != "") cus.sex = sex.toCharArray()(0)

    print(s"年龄(${cus.age}):")
    val age = StdIn.readLine()
    if (age != "") cus.age = age.toShort

    print(s"电话(${cus.tel}):")
    val tel = StdIn.readLine()
    if (tel != "") cus.tel = tel

    print(s"邮箱(${cus.mail}):")
    val mail = StdIn.readLine()
    if (mail != "") cus.mail = mail

    //调用update方法,更新成功
    customers.update(index, cus)
    println("修改成功!")
  }

  // 查询客户
  def serchCli(way: Int) {
    // 根据id查询
    if (way == 1) {
      print("请输入id:")
      val id = StdIn.readInt()
      for (item <- customers) {
        //从列表中遍历,若找出id和输入的相同则输出ta所有字段信息
        if (item.id == id) {
          println("编号\t\t" + "姓名\t\t" + "性别\t\t" + "年龄\t\t" + "电话\t\t" + "邮箱")
          println(item)
        }
      }
    } else if (way == 2) {
      // 根据姓名查询
      print("请输入名字:")
      val name = StdIn.readLine()
      //从列表中遍历,若找出姓名和输入的姓名相同则输出ta所有字段信息
      for (item <- customers) {
        if (item.name.contains(name)) {
          println("编号\t\t" + "姓名\t\t" + "性别\t\t" + "年龄\t\t" + "电话\t\t" + "邮箱")
          println(item)
        }
      }
    }
      //输入的无关信息则输出有误
    else {
      println("输入有误!")
    }

  }



  //筛选客户


  //通过性别
  def filterBySex(): Unit ={
    println("请输入需要查询的性别(0/1)")
    val sex = StdIn.readLine()
    var customersBySex=customers
    //定义了0为女性,输入0时时获取女性的信息,女性字段信息没有,则返回没有筛选条件满足
    if(sex.equals("0")){
      customersBySex=customers.filter(x=> x.sex!='男')
      if(customersBySex.length==0){
        println("没有筛选满足条件的客户")
        return
      }
      //调用showList方法展现列表
      showList(customersBySex)
    }else if (sex.equals("1")){
      //同理可得,这里选取的是男性的信息
      customersBySex=customers.filter(x=> x.sex!='女')
      if(customersBySex.length==0){
        println("没有筛选满足条件的客户")
        return
      }
      //展现列表
      showList(customersBySex)
    }else{
      //非正常值输出
      println("输入有误")
    }
  }

  //通过年龄
  def filterByAge(): Unit ={
    println("请输入需要查询的年龄区间")
    //年龄按区间查询
    println("请输入第一个数")
    val i1 = StdIn.readInt()
    println("请输入第二个数")
    val i2 = StdIn.readInt()
    var customersByAge=customers
    //做出判断,第二次输入年龄必须比第一次输入的大
    if(i1<i2){
      customersByAge=customers.filter(x=>{
        //过滤出此区间要求的年龄
        x.age>=i1 && x.age<=i2
      })
      //判断没有年龄可取时,那么就输出没有此筛选要求的客户
      if(customersByAge.length==0){
        println("没有筛选满足条件的客户")
        return
      }
      //调用方法展现列表
      showList(customersByAge)
    }else{
      //否则过滤出的时相反的信息
      customersByAge=customers.filter(x=>{
        x.age<=i1 && x.age>=i2
      })
      //判断没有年龄可取时,那么就输出没有此筛选要求的客户
      if(customersByAge.length==0){
        println("没有筛选满足条件的客户")
        return
      }
      showList(customersByAge)
    }
  }



  //排序客户

  //根据姓名拼音排序
  def sortByName(): Unit ={
    println("请输入拼音排序方式,1为a-z,2为z-a")
    val id = StdIn.readLine()
    var customers1 = customers
    //定义1为a-z排序,2为z-a排序
    if(id.equals("1")){
      //利用sortWith制定规则排序,内部发送了一个ajax请求,
      // success:function(_){},表示返回数据成功后执行的函数,_表示服务器返回的字符数据
      //表示返回一个新字符串,它是此字符串的一个子字符串
      customers1=customers.sortWith(_.name.substring(0,1)<_.name.substring(0,1))
      showList(customers1)
    }else if(id.equals("2")){
      //同理可得
      customers1=customers.sortWith(_.name.substring(0,1)>_.name.substring(0,1))
      showList(customers1)
    }else{
      println("输入错误")
    }
  }
  //根据年龄大小展示客户信息
  def sortByAge(): Unit ={
    println("请输入年龄排序方式,1为升序,2为降序")
    val id = StdIn.readLine()
    var customers1 = customers
    //定义输入为1时是升序排序
    if(id.equals("1")){
      //与上思想同理
      customers1=customers.sortWith(_.age<_.age)
      showList(customers1)
      //定义输入2时是降序
    }else if(id.equals("2")){
      customers1=customers.sortWith(_.age>_.age)
      showList(customers1)
    }else{
      println("输入错误")
    }
  }
}

package info.info

import scala.io.StdIn

class CustomerView {
  var customerService = new CustomerService()
  def meau(): Unit = {
    var flag = true
    do {
      println("-----------------客户信息管理软件-----------------")
      println("                  1 添 加 客 户                  ")
      println("                  2 修 改 客 户                  ")
      println("                  3 删 除 客 户                  ")
      println("                  4 客 户 列 表                  ")
      println("                  5 查 询 客 户                   ")
      println("                  6 筛 选 客 户                   ")
      println("                  7 排 序 客 户                  ")
      println("                  8 退      出                  ")
      println("请选择(1-8):                  ")

      var num = StdIn.readLine()
      //定义输入的每一个数字调用的功能
      num match {
        case "1" => addClient()
        case "2" => updateCli()
        case "3" => deleteCli()
        case "4" => showList()
        case "5" => searchCli()
        case "6" => filterCli()
        case "7" => sortCli()
        case "8" => exitApp()
          //若都不是上面的情况,弹出重新选择的语句
        case _ =>println("请重新输入选择:")

      }
    } while (flag)

    // 退出程序
    def exitApp(): Unit = {
      print("确认是否退出Y/N:")
      val r = StdIn.readLine()
      if (r.equals("Y") || r.equals("y")) {
        flag = false
        println("成功退出系统")
      }else if(r.equals("N")|| r.equals("n")){
        flag = true
        //若非以上两种输入的情况,重新返回确认是否退出的语句
      }else{
        exitApp()
      }
    }
  }

  // 显示客户列表
  def showList(): Unit = {
    println("编号\t\t" + "姓名\t\t" + "性别\t\t" + "年龄\t\t" + "电话\t\t" + "邮箱")
    customerService.showList(customerService.customers)
  }

  // 添加客户
  def addClient(): Unit = {
    customerService.addClient()
    //调用上面addClient方法,使其选择1时才能用此功能
  }

  // 删除客户
  def deleteCli() {
    //获取列表长度,并判断是否为0,若为0,即列表无任何内容
    if(customerService.customers.length==0) println("没有可修改客户")
    else{
      print("请输入要删除的客户编号(-1退出):")
      val id = StdIn.readLine()
      //如果输入的其他字符,则会重新返回列表,不会出现报错退出
      if (id == -1) {
        return
      }
      //调用上一个查询的方法,并判断这个是存在的,才会弹出确认是否删除的字段
      val index = customerService.findIndexById(id)
      if (index != -1) {
        print("确认是否删除Y/N:")
        //在控制台输入Y或y,并判断是不是和Y或者y是一样的
        // 是则进行删除,并输出删除成功字段,否则就是删除失败
        val r = StdIn.readLine()
        if (r.equals("Y") || r.equals("y")) {
          customerService.deleteCli(index)
          println("删除成功!")
          return
          //与上类似
        }else if(r.equals("N") || r.equals("n")){
          println("删除失败!")
          return;
        }else{
          //定义变量为真值,当输入的值是可行的,做出一个再次确认窗口
          //可行的代表就是:以下内容判断输入的Y或y还是N或n
          //最后定义Y或y表示删除,N或n表示不删除
          var flag=true
          while (flag){
            println("确认是否删除退出(y/n)")
            val r2 = StdIn.readLine()
            if(r2.equals("y") || r2.equals("Y")) {
              customerService.deleteCli(index)
              println("删除成功!")
              flag = false;
            }else if(r2.equals("n") || r2.equals("N")) {
              flag = false
              println("删除失败!")
            }
          }
        }
      }else{
        println("该客户不存在")
      }

    }
  }

  // 修改客户信息
  def updateCli(): Unit = {

    //判断其列表是否为空,如果空,那么另外输出没有可修改客户
    if(customerService.customers.length==0) println("没有可修改客户")
    else{
      print("请输入要修改的客户的编号或姓名:")
      val id = StdIn.readLine()
      //获取其编号id
      val index = customerService.findIndexById(id)
      //若不存在此id或者名字的则输出查无此人
      if (index == -1) {
        println("查无此人!")
        return
      }
      customerService.updateCli(index)
    }
  }

  // 查询客户
  def searchCli(): Unit = {
    print("请选择查询方式(1:根据id , 2:根据名字)")
    val way = StdIn.readInt()
    customerService.serchCli(way)//调用上面的方法,使输入的5可以调用这个功能
  }


  //筛选客户
  def filterCli(): Unit ={
    println("请选择筛选方式(1:根据性别,2:根据年龄)")
    val id  = StdIn.readLine()
    //判断是1时获取性别信息,否则获取年龄信息,若是无相关内容则重新输入或者输入y/n退出
    if(id.equals("1")){
      customerService.filterBySex()
    }else if(id.equals("2")){
      customerService.filterByAge()
    }else{
      println("输入有误,请重新输入,或退出(y/n)")
      val id2  = StdIn.readLine()
      if(id2.equals("y")||id2.equals("Y")) return
      else filterCli()
    }
  }

  //排序客户
  def sortCli(): Unit ={
    println("请输入您要排序的方式,1:根据姓名拼音,2:根据年龄大小")
    val id  = StdIn.readLine()
    //定义1为按名字拼音查询,2是按年龄大小
    if(id.equals("1")){
      customerService.sortByName()
    }else if(id.equals("2")){
      customerService.sortByAge()
    }else{
      //输入非正常值时,报出以下内容
      println("输入有误,请重新输入,或退出(y/n)")
      val id2  = StdIn.readLine()
      if(id2.equals("y")||id2.equals("Y")) return
      else sortCli()
    }
  }
}

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侬本多情。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值