java实操项目-简易的零钱通
韩顺平java零钱通项目实操:
项目需求说明:
使用 java 开发简易的零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能。
要求:
- 用户输入4退出时,给出提示”你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入V或者n。
- 在收益入账和消费时,判断金额是否合理,并给出相应的提示。
- 将面向过程的代码修改成面向对象的方法,编写 SmallChanageSysOOPjava类,
并使用SmallChanageSysApp.java完成测试。
代码:
SmallChanageSysOOP.java
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SmallChangeSysOOP {
// 属性
// 获得用户的输入
String choise = "";
// 控制循环
private boolean loop = true;
// 如果写到 mainMenu() 里,运行时将抛出异常,应该写在属性这一栏
Scanner scanner = new Scanner(System.in);
// 使用字符串拼接的方法
String expression = "-------------------零钱通明细---------------------";
// 收入
double money = 0;
// 余额
double balance = 0;
// 获取时间
Date date = new Date();
// 修改时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
// 支出
double consumeMoney = 0;
// 消费项目名称
String consumeName = "";
// 退出的选择
String choiseExit = "";
//方法
//主菜单
public void mainMenu() {
do{
System.out.println("\n==================零钱通菜单===================");
System.out.println("\t\t\t1 零钱通明细");
System.out.println("\t\t\t2 收益入账");
System.out.println("\t\t\t3 消 费");
System.out.println("\t\t\t4 退 出");
System.out.println("请选择(1-4): ");
choise = scanner.next();
switch (choise) {
case "1":
this.details();
break;
case "2":
this.income();
break;
case "3":
this.consume();
break;
case "4":
this.exit();
break;
default:
System.out.println("选择有误,请重新选择!");
break;
}
} while (loop);
scanner.close();
}
// 零钱通明细
public void details() {
// 使用字符串拼接的方法,存放 零钱通明细 的数据
System.out.println(expression);
}
// 收益到账
public void income() {
System.out.println("----------------------收益到账-------------------------");
System.out.print("金额:");
money = scanner.nextDouble();
// 检测金额是否合理
if (money <= 0) {
System.out.println("收益金额应大于0!");
// 不合理则返回主菜单
// 结束方法
return;
}
// 金额合理则余额 + 收入
balance += money;
// 写入到 明细 中
expression += "\n收益到账\t+" + money + "\t\t" + sdf.format(date) + "\t余额:" + balance;
}
// 消费
public void consume() {
System.out.println("----------------------消费-------------------------");
System.out.print("消费项目:");
// 使用 nextLine() 获取用户的输入,会出现 直接跳过消费项目的获取 的现象
if (scanner.hasNext()) {
consumeName = scanner.next();
}
System.out.print("消费金额:");
if (scanner.hasNextDouble()) {
consumeMoney = scanner.nextDouble();
}
// 检测金额是否合理
if (consumeMoney <= 0 || consumeMoney > balance) {
System.out.println("消费金额应该在0-" + balance + "之间(不包括0)");
// 不合理则返回主菜单
// 结束方法
return;
}
// 金额合理则余额 - 消费
balance -= consumeMoney;
// 写入到 明细 中
expression += "\n" + consumeName + "\t\t-" + consumeMoney + "\t\t" + sdf.format(date) + "\t余额:" + balance;
}
// 退出
public void exit() {
System.out.println("你确定要退出吗?y/n");
choiseExit = scanner.next();
if ("y".equals(choiseExit)) { // 退出系统
System.out.println("退出成功!");
loop = false;
} else if ("n".equals(choiseExit)) { // 返回到主菜单
return;
} else { // 必须输入正确的y/n,否则循环输入指令,直到输入y/n
exit();
}
}
}
SmallChanageSysApp.java
public class SmallChangeSysAPP {
public static void main(String[] args) {
// 创建对象并调用主菜单
new SmallChangeSysOOP().mainMenu();
}
}