同样的问题,不过要求用多态继承编写。
如果写的有问题,欢迎指正!
package com.gem.day19Homework;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//键盘扫描仪
JiluList jiluList = JiluList.getJiluList();//单例
System.out.println("*******欢迎进入家庭收支记账软件*********");
while (true) {
menu(scanner, jiluList);
}
}
//界面功能
public static void menu(Scanner scanner, JiluList jiluList) {
System.out.println("1.收支明细");
System.out.println("2.登记收入");
System.out.println("3.登记支出");
System.out.println("4.退出");
System.out.println("请输入您的选择:");
int choice = Integer.parseInt(scanner.nextLine().trim());
switch (choice) {
case 1:
jiluList.showJiluList();
break;
case 2:
InMoney(scanner, jiluList);
break;
case 3:
OutMoney(scanner, jiluList);
break;
case 4:
System.exit(0);
break;
default:
System.out.println("您输入的不正确");
break;
}
}
private static void InMoney(Scanner scanner, JiluList jiluList) {
// TODO Auto-generated method stub
System.out.println("本次收入金额:");
double money = Double.parseDouble(scanner.nextLine().trim());
System.out.println("本次收入说明:");
String shuoming = scanner.nextLine().trim();
Savemoney savemoney = new Savemoney("收入", shuoming, money);
jiluList.createJilu(savemoney);
jiluList.Savemoney(savemoney, money);
}
private static void OutMoney(Scanner scanner, JiluList jiluList) {
// TODO Auto-generated method stub
System.out.println("本次支出金额:");
double money = Double.parseDouble(scanner.nextLine().trim());
System.out.println("本次支出说明:");
String shuoming = scanner.nextLine().trim();
PayMoney paymoney = new PayMoney("支出", shuoming, money);
jiluList.createJilu(paymoney);
jiluList.PayMoney(paymoney, money);
}
}
package com.gem.day19Homework;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@NoArgsConstructor
@Setter
@Getter
public abstract class JiLu {
private String ShouZhi;
private double balance = 10000;
private double Money;
private String shuoMing;
//实例化对象只需要收支和说明
public JiLu(String shouZhi, String shuoMing, double money) {
super();
this.ShouZhi = shouZhi;
this.shuoMing = shuoMing;
this.Money = money;
}
//收入 (只需要定义我的孩子必须有存款方法,抽象了,孩子必须要重写我的抽象方法,约束)
public abstract void Inmoney(double Ymoney, double money);
//支出
public abstract void Outmoney(double Ymoney, double money);
@Override
public String toString() {
// TODO Auto-generated method stub
return ShouZhi + "\t" + balance + "\t" + Money + "\t" + shuoMing;
}
}
package com.gem.day19Homework;
public class JiluList {
private JiLu[] JiluList = new JiLu[1000];//存放记录,多态
private int count;//记录的条数
private static double Ymoney = 10000;
private static final JiluList jiluList = new JiluList();
//静态属性的构造方法
public static JiluList getJiluList() {
return jiluList;
}
//构造方法
private JiluList() {
}
public void Savemoney(JiLu jiLu, double money) {
jiLu.Inmoney(Ymoney, money);//收入,真实对象的收入方法
Ymoney += money;
}
public void PayMoney(JiLu jiLu, double money) {
jiLu.Outmoney(Ymoney, money);//支出,真实对象的支出方法
Ymoney -= money;
}
public void createJilu(JiLu jiLu) {//形参,可能是收入,可能是支出
JiluList[count++] = jiLu;
}
//显示所有的记录信息
public void showJiluList() {
for (int i = 0; i < count; i++) {
System.out.println(JiluList[i]);//多态,全部调用孩子的toString()
}
}
}
package com.gem.day19Homework;
public class PayMoney extends JiLu {
public PayMoney(String shouZhi, String shuoMing, double money) {
super(shouZhi, shuoMing, money);
// TODO Auto-generated constructor stub
}
@Override
public void Inmoney(double Ymoney, double money) {
// TODO Auto-generated method stub
}
@Override
public void Outmoney(double Ymoney, double money) {
// TODO Auto-generated method stub
if (money > getBalance()) {
System.out.println("余额不足,支出失败");
return;
}
if (money < 0) {
System.out.println("输入错误");
return;
}
setBalance(Ymoney - money);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return getShouZhi() + "\t" + getBalance() + "\t" + getMoney() + "\t" + getShuoMing();
}
}
package com.gem.day19Homework;
public class Savemoney extends JiLu {
public Savemoney(String shouZhi, String shuoMing, double money) {
super(shouZhi, shuoMing, money);
// TODO Auto-generated constructor stub
}
@Override
public void Inmoney(double Ymoney, double money) {
setBalance(Ymoney + money);
// TODO Auto-generated method stub
}
@Override
public void Outmoney(double Ymoney, double money) {
// TODO Auto-generated method stub
}
@Override
public String toString() {
// TODO Auto-generated method stub
return getShouZhi() + "\t" + getBalance() + "\t" + getMoney() + "\t" + getShuoMing();
}
}