Java 零钱通项目 您所在的位置:网站首页 零钱通明细打印 Java 零钱通项目

Java 零钱通项目

2023-12-10 17:40| 来源: 网络整理| 查看: 265

 写在前面

满打满算,学习韩老师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 实验室设备网 版权所有