Java 零钱通项目 | 您所在的位置:网站首页 › 零钱通明细打印 › Java 零钱通项目 |
写在前面 满打满算,学习韩老师Java视频已经有一个月了,现在也算碰到了第三个案例,因为我是先做,再看视频解析,前面几个案例写得还是挺磕磕绊绊的。经过这么长时间,这个案例做得还挺顺利的,所在这里记录一下,写个博客。说到这了,也给我心爱的韩老师打个广告吧。韩老师的视频是真的很细,同时我也在准备软考,大致看了一下韩老师后面的内容,感觉如果认真学完,基础比较牢靠,软考还是比较容易的。同时我也了解到我之前学得是多么地粗糙,基础太差了,以至于软考把握不是很大,如果有机会我还是很想好好补补基础知识。 一、简介 此项目为零钱通,使用Java实现零钱通的一些基本功能。基本功能模块有四个,零钱通明细,收益入账、消费支出、退出。拟打算设计三个类,一个类实现测试,一个类实现功能模块,一个类利用对象数组储存数据。 二、储存数据类的实现(class Turnover) 一个用户,零钱通里面的数据流只有流水,采用一个对象代表一条流水。成员变量有流水类型(收益/消费),流水,余额。流水类型当中收益用1表示,0表示无数据,-1代表消费 int type; //流水类型 double income; //流水 double balance; //余额接下来就是构造函数,构造函数可以用idea的alt+ins快速插入构造函数。 public Turnover(int type, double income, double balance) { //构造函数 this.type = type; this.income = income; this.balance = balance; }然后再写一条语句,便于把数据组合起来打印在界面上。 public String toString() { if(type == 1){ return "收益" + "\t+" + income + "\t余额:" + balance; }else if(type == -1){ return "支出" + "\t+" + income + "\t余额:" + balance; } return "您此数据输入有误"; }到这里,储存数据的类就设计好了,还是挺简单的。 三、功能类的实现(包括界面的打印) 1、初始化 利用数据储存的类实例化一个对象数组,数组大小为10,代表最多可以记录十条流水,并在构造函数里面对数组进行初始化,将流水类型设置为0。 private double balance; Turnover turnover[] = new Turnover[10]; //最多储存10个数据 public Account(double balance) { //初始化 for (int i = 0; i < turnover.length; i++) { turnover[i] = new Turnover(0,0.0,0.0); } this.balance = balance; }2、主函数 先利用一个标题打印函数,快速打印一个有点像样子的标题,函数如下。 public void printtitle(String string){ //打印标题 for (int i = 0; i < 10; i++) { System.out.print("-"); } System.out.print(string); for (int i = 0; i < 10; i++) { System.out.print("-"); } System.out.println(""); }再打印一个界面出来 printtitle("零钱通菜单"); System.out.println("\t\t" + "1 零钱通明细"); //界面打印 System.out.println("\t\t2 收益入账"); System.out.println("\t\t3 消费支出"); System.out.println("\t\t4 退出");然后再定义一个模块变量module,获取用户输入的模块 int module; //输入模块,模块1明细,模块2收益,模块3支出,模块4退出 System.out.print("请选择(1-4):"); module = scanner.nextInt();由用户输入的模块选择进入哪一个分支,利用递归调用间接实现退出功能。 if(module == 4){ return; }else if(module == 1){ //打印流水 print(turnover); this.initialize(); }else if(module == 2 || module ==3){ //记录流水 insert(module); this.initialize(); }else{ System.out.println("您输入的有误"); this.initialize(); }3、零钱通明细(打印流水) 这部分主要是将数组里面的数据打印出来,调用数据储存类里面的toString方法就行了。 public void print(Turnover turnover[]){ //打印流水 printtitle("零钱通明细"); for (int i = 0; i < turnover.length; i++) { if(turnover[i].type == 1 || turnover[i].type == -1){ System.out.println(turnover[i].toString()); }else{ break; } } }4、消费、收益(插入流水) 这部分是最复制的一部分,大概流程是找到插入的位置,并获取用户当前余额,利用流水计算出余额,如果数组满了,还要将数组整体往前移一个位置,空出最后一个位置供插入。弄完这个差不多收工了睡觉了,哈哈哈哈,就不多说了,直接放代码。 public void insert(int module){ //插入流水 double income = 0; double balance = 0; int i = 0; if(turnover[0].type == 0){ //获取计入流水前余额,并用i记录插入位置 balance = this.balance; }else{ for (i = 0; i < turnover.length; i++) { if(turnover[i].type == 0){ break; } } balance = turnover[i - 1].balance; } if(module == 2){ //income流水获取 printtitle("收益入账"); System.out.print("请输入收益:"); income = scanner.nextDouble(); balance += income; }else if(module == 3){ printtitle("消费支出"); System.out.print("请输入支出:"); income = scanner.nextDouble(); balance -= income; income = -income; } if(i == turnover.length){ //如果流水数据已满,则删除第一个数据 for (int j = 0; j < i - 1 ; j++) { turnover[j] = turnover[j + 1]; } i = turnover.length - 1; } if(module == 2) turnover[i].type = 1; //录入数组 if(module == 3) turnover[i].type = -1; turnover[i].income = income; turnover[i].balance = balance; }三、测试类 最后一部分就是测试一下这个类了,代码及界面如下。 public class ChangPass { public static void main(String[] args) { Account account = new Account(5); account.initialize(); } }----------零钱通菜单---------- 1 零钱通明细 2 收益入账 3 消费支出 4 退出 请选择(1-4): 输入2结果为: ----------收益入账---------- 请输入收益: 再次输入45返回菜单,返回菜单后输入1查看明细结果为: ----------零钱通明细---------- 收益 +45.0 余额:50.0 大概功能是没问题了,哈哈哈,收工。 |
CopyRight 2018-2019 实验室设备网 版权所有 |