本篇文章主要是自己练习的一个用Scala编写的小程序

一、记录在练习过程中的一些小感受和踩得坑:

1.构造函数用this关键字

2.定义类与定义类方法的参数不需要定义一个新变量一样

Scala中可以用new关键字创建一个新的对象

3.Case的用法

4.Option的用法(可以当一个集合来用,当做返回值时可以返回None)

5.标准输入流 StdIn.readInt()【读取整数的】

6.字符串匹配及列表的元素过滤  filter方法的使用

7.对于函数返回值要好好捉摸一下,在函数内部对传入的参数进行修改,修改的并不是传入的对象本身,而是一个拷贝值,这一点与JAVA不同,要清楚差别(这可能就是函数化编程的特点),如果要改变那个对象,则需要使用this.对象=函数名(对象)的方式实现对对象的修改。【在使用到类和对象的时候一定要注意这一点,不然很有可能你执行了函数,并没有修改你要修改的对象】

二、代码:

1.Account类

class N_Account(val id:String,val name:String,var depo:Double) {//创建类的时候就定义了属性def depositmoney(sum:Double):Double={//存钱depo+=sumdepo}def drawmoney(sum:Double): Double ={//取钱depo-=sumdepo}override def toString():String={//重写toString方法val showaccount:String="账户所有者为:"+name+"; 账户ID为:"+id+"; 余额为:"+deposhowaccount}
}

2.Customer类

import scala.io.StdInclass N_Customer(val id: String,val pwd: String,val name: String,var accs:List[N_Account]) {def get_id():String={//得到客户IDid}def get_name():String={//得到客户姓名name}def get_accs():List[N_Account]={//得到客户的所有账户accs}def draw_money(accs:List[N_Account]):List[N_Account]={//取钱:需要指定取钱账户的IDprintln("请输入要取款账户ID:")val acc_id=StdIn.readLine()println("请输入要取款的金额:")val sum = StdIn.readDouble()for (acc:N_Account<-accs){if(acc.id.equals(acc_id)){acc.depo=acc.drawmoney(sum)println("当前账户信息如下:")println(acc.toString())return  accs}}println("未找到ID为"+acc_id+"的账户!")accs}def deposit_money(accs:List[N_Account]):List[N_Account]={//存钱println("请输入要存款账户ID:")val acc_id=StdIn.readLine()println("请输入要存取的金额:")val sum = StdIn.readDouble()for (acc:N_Account<-accs){if(acc.id.equals(acc_id)){acc.depo=acc.depositmoney(sum)println("当前账户信息如下:")println(acc.toString())return accs}}println("未找到ID为"+acc_id+"的账户!")accs}def show():Unit={//输出账户的全部详细信息for (acc:N_Account<-accs){println(acc.toString())}}def show_acc():Unit={//根据账户ID输出该账户的详细信息println("请输入要查找的账户ID:")val accid=StdIn.readLine()for (acc:N_Account<-accs){if(acc.id.equals(accid)){println(acc.toString())return}}println("未找到ID为"+accid+"的账户!")}def run():Unit={while(true){println("=======菜单=======")println("1、存钱")println("2、取钱")println("3、查看全部账户信息")println("4、查看指定账户信息")println("0、退出")println("请输入选项:")val inputnum=StdIn.readInt()inputnum match{case 1 =>this.accs=deposit_money(accs)case 2 =>this.accs=draw_money(accs)case 3 => show()case 4 => show_acc()case 0 => System.exit(0)case _ => println("输入错误!")}}}}

3.Administrator类

import scala.io.StdIn/*
1.创建账户
2.根据客户姓名或账户ID查找账户账户内容(得到结果不一样)
3.根据某个账户ID删除
4.显示全部账户内容
5.退出
*/
class N_Administor(var custs: List[N_Customer]) { //对于需要变化的元素,我们都设为var,到时候可以直接引用改变它的值def createAccount(custs: List[N_Customer]):List[N_Customer]={//根据顾客ID和账号创建新账户println("请输入要创建客户ID")val id=StdIn.readLine()var flag=0for(cust<-custs){if(cust.id.equals(id)){flag=1val name=cust.nameprintln("请输入新账户id:")val accid=StdIn.readLine()println("请输入开户存款金额:")val depos=StdIn.readDouble()val newAccount=new N_Account(accid,name,depos)cust.accs=cust.accs:+newAccount//println(cust.accs.size)}}if(flag==0){println("查无此人!")}custs}def find_Cust(custs: List[N_Customer]):Unit={//根据客户ID找客户的账户信息println("请输入要查找客户ID")val id=StdIn.readLine()var flag=0for(cust:N_Customer<-custs){if(cust.get_id().equals(id)){flag=1val accs=cust.get_accs()for(acc:N_Account<-accs){println(acc.toString())}return}}if(flag==0){println("查无此人!")}}def del_Cust(custs: List[N_Customer]):List[N_Customer]={println("请输入要删除客户ID")val id=StdIn.readLine()//filter函数返回一个使所有元素都满足括号内条件的集合val selfcusts = custs.filter(!_.get_id().equals(id))selfcusts}def show_All():Unit={//把所有客户的所有信息全都打印出来for(cust:N_Customer<-custs){val accs=cust.get_accs()for(acc:N_Account<-accs){println(acc.toString())}}}def add_customer(custs: List[N_Customer]):List[N_Customer]={println("请输入要创建的客户ID:")//id: String,pwd: String,name: String,accs:List[N_Account]val id=StdIn.readLine()println("请输入密码:")val pwd=StdIn.readLine()println("请输入姓名:")val name=StdIn.readLine()println("请输入新账户id:")val accid=StdIn.readLine()println("请输入开户存款金额:")val depo=StdIn.readDouble()val newAccount=new N_Account(accid,name,depo)//这个在添加客户lucy的测试的时候id和name反了,现在改正以后正确val acclist=List(newAccount)val newCustomer=new N_Customer(id,pwd,name,acclist)custs:+newCustomer}def run():Unit={while(true){println("=======菜单=======")println("1、根据已有客户创建账户")println("2、查找客户账户信息")println("3、删除某客户")println("4、显示全部客户全部账户信息")println("5、新增客户")println("0、退出")println("请输入选项:")val inputnum = StdIn.readInt()inputnum match{case 1 => this.custs=createAccount(custs)case 2 => find_Cust(custs)case 3 => this.custs=del_Cust(custs)case 4 => show_All()case 5 => this.custs=add_customer(custs)case 0 => System.exit(0)case _ => println("输入错误!")}}}
}

4.Bank类(含main方法)

object N_Mybank {//测试用例val a1=new N_Account("a1","Nelson",100)val a2=new N_Account("a2","Nelson",200)val a3=new N_Account("a3","Nelson",300)val b1=new N_Account("b1","Bythly",100)val c1=new N_Account("c1","zmy",375.5)var alist=List(a1,a2,a3)var blist=List(b1)var clist=List(c1)val cust1=new N_Customer("2019001","123","Nelson",alist)val cust2=new N_Customer("2019002","123","Bythly",blist)val cust3=new N_Customer("2019003","123","zmy",clist)val custs=List(cust1,cust2,cust3)var admin=new N_Administor(custs)/*def addlist(admin:N_Administor):N_Administor={//错误思想,留作警示this.admin.custs.apply(1)accs=admin.custs.apply(1).accs:+a1this.admin}*/def main(args: Array[String]): Unit = {println("欢迎来到Nelson_Bank")//this.blist=blist:+a1 //当值发生改变的时候,地址会发生改变,而以前的值保留在原地址//admin.run()//测试administrator类cust1.run()//单独测试customer类}
}

三、测试:

1.测试administrator的操作:

2.测试客户功能:

初始账户信息

Scala语法小练习(银行小程序)相关推荐

  1. 实战:“小打卡”小程序从创意到上线完整开发过程解析

    感谢作者徐佳义的授权发布. 作者:徐佳义,全栈开发工程师,擅长技术选型.系统构架.产品设计.前后端开发.在公司主要负责软件开发项目管理.解决疑难Bug.招聘和打杂. 责编:陈秋歌,关注微信开发等领域, ...

  2. [小黄书小程序]主页面标签栏水平滑动和下拉弹出框

    上一章我们实现了小黄书小程序的搜索栏的界面呈现.这一章我们将会参考小红书实现搜索栏下面的标签栏. 该标签栏存在的意义是,用户可以根据选择的标签来快速呈现相关的内容.该标签栏界面主要是两个功能模块. 一 ...

  3. A - 小C语言--词法分析程序

    Description 小C语言文法 <程序>→<main关键字>(){<声明序列><语句序列>} <声明序列>→<声明序列>& ...

  4. 一个抓取电脑屏幕的小控件台程序

    一个抓取电脑屏幕的小控件台程序 using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  5. Qt Creator开发基于小部件的应用程序

    Qt Creator开发基于小部件的应用程序 开发基于小部件的应用程序 代码编辑器集成 管理影像资源 指定Qt Designer的设置 使用设备皮肤预览表单 添加小部件 开发基于小部件的应用程序 Qt ...

  6. htmlcss实例小项目_小程序websocket心跳库——websocket-heartbeat-miniprogram

    前言 在16年的时候因为项目接触到websocket,而后对心跳重连做了一次总结,写了篇博客,而后18年对之前github上的demo代码进行了再次开发和开源,最终封装成库.如下: 博客:https: ...

  7. 个人项目-仿微信小打卡小程序

    #1 项目说明 由于受限于微信认证不通过(个人号无法认证),超出了小程序涉及的类目(社交-笔记),因此无法审核通过进行发布,只能体验版使用.为了项目展示,就只能放到博客上面来了. 本项目只是个人学习项 ...

  8. 汽车销量查询小助手(小程序)销量趋势图功能及代码知识分享

    1. 引言 在上篇博客汽车销量查询小助手(小程序)开发心路历程 我分享了整个小程序的开发历程,感谢有那么多同学阅读和关注. 后面就会将小程序中的各个功能块以代码片段的方式给大家分享出来,所有的代码都在 ...

  9. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏微信小程序

    这是一款全新升级带特效喝酒神器小游戏微信小程序源码 小编发现很多喝酒神器小程序都不带特效和音效的 感觉差了那么一点意思而且感觉也不炫酷 所以小编今天给大家带来一款带特效,音效炫酷的喝酒神器 该款神器由 ...

最新文章

  1. 有了阿里云服务器如何运行Javaweb项目【安转JDK】【安装mysql】【安装Tomcat】【永久运行】
  2. cmd开无线服务器,使用cmd命令开启wifi
  3. 远程访问×××——Easy ×××
  4. win7 linux 共享文件夹权限设置,samba 配置共享 win7 无权限访问
  5. GdiPlus[38]: IGPGraphicsPath (五) 路径标记
  6. printf函数源码linux,再来一版简易的printf函数实现
  7. Kotlin实现LeetCode算法题之String to Integer (atoi)
  8. 【软件】RustDesk自己搭建远程控制服务软件 支持控制手机
  9. xamarin android界面框架,Xamarin图表开发基础教程(3)OxyPlot框架
  10. WebRAY创业启示录:从小公司到隐形的巨人
  11. 数据仓库与数据挖掘相关基础概念
  12. JEB配合IDA神器逆向
  13. 什么是USB Key?
  14. 服务器后台怎么修改网站图片,网站后台修改图片
  15. 电信校园招聘计算机笔试,中国电信校园招聘笔试试题
  16. 亲爱的,60句感人歌词,有没有一句触动了你
  17. 海康SDK的NET_DVR_GET_FTPCFG_V40
  18. 周边pd是什么意思_韩国综艺里经常说的VJ、PD是什么意思
  19. 吼 困 鸭
  20. 多区域复制——《超级处理器》应用

热门文章

  1. Google分布式系统三大论文(二)Bigtable: A Distributed Storage System for Structured Data
  2. 机器学习-Sklearn-04(降维算法PCA和SVD)
  3. 更改表格行tr的背景颜色
  4. 北京创客空间 BEIJING MAXPACE的小站
  5. 解决 Vmware 上不了网 - 无法使用桥接方式连接网络
  6. 2015年第7本(英文第6本):纳尼亚传奇I–狮子、女巫、魔衣橱
  7. NOJ 1581.最佳加法式
  8. 【数学】点到平面距离推导
  9. Android近场通信
  10. LeetCode 974. Subarray Sums Divisible by K--Python解法--数学题--取模求余