一、对照参考代码之后体会到自己面向过程的思维。

     * 示例代码学习经验* 1. 抽象出变量对象 details明细、账户收支* 2. 抽象出方法:* 读取收支金额:readNumber()* 读取收支明细:readString()* 读取输入选择:readMenuSelection()* 读取exit选项:readConfirmSelection()* 3. 抽象出类:方法类、实现类
import java.util.ArrayList;
import java.util.Scanner;/*** @Auther:sommer1111* @date 2020/5/1 10:39*/
public class Homespend {/**需求:* -----------------家庭收支记账软件----------------1 收支明细2 登记收入3 登记支出4 退 出请选择(1-4):_• 假设家庭起始的生活基本金为10000元。• 每次登记收入(菜单2)后,收入的金额应累加到基本金上,并记录本次收入明细,以便后续的查询。• 每次登记支出(菜单3)后,支出的金额应从基本金中扣除,并记录本次支出明细,以便后续的查询。• 查询收支明细( 菜单1)时,将显示所有的收入、支出名细列表.*/// 需求分析:// 1.抽象出变量:lifeMoney、list明细// 2.如何更新变量// 3.抽象出类:FamilyAccount类,分类讨论switch case(1 2 3 4)public static void main(String[] args) {/**总结:1.卡在如何更新lifeMoney、list明细,本来打算写成一个方法的。但是发现用方法无法更新。解决办法:改写成类。get方法得到变化lifeMoney、list,再将值用构造器传值的方法完成更新2.输入4退出时发现,一直进不了if(s="n"||s="N")这个循环里面原来,String判断相等用equals,int相等才是用==——>考虑优化:用map3.list保存明细,非常low4.优化:用户输入判定优化、抛异常。代码繁杂。*/int lifeMoney = 10000;ArrayList<String> list = new ArrayList<>();System.out.println("-----------------家庭收支记账软件----------------");System.out.println("        1 收支明细");System.out.println("        2 登记收入");System.out.println("        3 登记支出");System.out.println("        4 退 出");while(true){System.out.print("请选择(1-4):");FamilyAccount familyAccount = new FamilyAccount(lifeMoney,list);int i = new Scanner(System.in).nextInt();if(i == 4){System.out.print("确认是否退出(Y/N):");String s3 = new Scanner(System.in).next();//这里犯了一个大错,String用equals判断是否相等if(s3.equalsIgnoreCase("N")){System.out.print("请选择(1-4):");int i1 = new Scanner(System.in).nextInt();familyAccount.choose(i1);//更新:list、lifeMoneylist=familyAccount.getList();lifeMoney = familyAccount.getLifeMoney();}else{//可以加上判断的优化,如果非y/n抛异常System.out.println("本次记账结束,祝您生活愉快!");break;}}else{//可以加上判断的优化,如果非数字抛异常、非1-4抛异常familyAccount.choose(i);list = familyAccount.getList();lifeMoney = familyAccount.getLifeMoney();}}}
}class FamilyAccount{private int lifeMoney = 10000;private ArrayList<String> list = new ArrayList<>();public int getLifeMoney() {return lifeMoney;}public void setLifeMoney(int lifeMoney) {this.lifeMoney = lifeMoney;}public ArrayList<String> getList() {return list;}public void setList(ArrayList<String> list) {this.list = list;}public FamilyAccount(int lifeMoney,ArrayList<String> list) {this.lifeMoney = lifeMoney;this.list = list;}public FamilyAccount() {}public void choose(int i){switch(i){case (1):System.out.println("-----------------当前收支明细记录----------------");System.out.println("起始资金为:10000元");System.out.println("收支 账户余额 收支金额 说 明");//循环输出for (int j = 0; j < list.size(); j++) {System.out.println(list.get(j));}break;case (2):System.out.print("收入金额为:");int i1 = new Scanner(System.in).nextInt();System.out.print("收入明细:");String s1 = new Scanner(System.in).next();//更新lifeMoney = lifeMoney + i1;list.add("收入   " + lifeMoney + "   " + i1 + "   " + s1);break;case (3):System.out.print("支出金额为:");int o2 = new Scanner(System.in).nextInt();System.out.print("支出明细:");String s2 = new Scanner(System.in).next();//更新lifeMoney = lifeMoney - o2;list.add("支出   " + lifeMoney + "   " + o2 + "   " + s2);break;}}}

二、参考代码

public class FamilyAccount {public static void main(String[] args) {String details = "收支\t账户金额\t收支金额\t说    明\n";int balance = 10000;boolean loopFlag = true;do {System.out.println("\n-----------------家庭收支记账软件-----------------\n");System.out.println("                   1 收支明细");System.out.println("                   2 登记收入");System.out.println("                   3 登记支出");System.out.println("                   4 退    出\n");System.out.print("                   请选择(1-4):");char key = Utility.readMenuSelection();System.out.println();switch (key) {case '1':System.out.println("-----------------当前收支明细记录-----------------");System.out.println(details);System.out.println("--------------------------------------------------");break;case '2':System.out.print("本次收入金额:");int amount1 = Utility.readNumber();System.out.print("本次收入说明:");String desc1 = Utility.readString();balance += amount1;details += "收入\t" + balance + "\t\t" +amount1 + "\t\t" + desc1 + "\n";System.out.println("---------------------登记完成---------------------");break;case '3':System.out.print("本次支出金额:");int amount2 = Utility.readNumber();System.out.print("本次支出说明:");String desc2 = Utility.readString();balance -= amount2;details += "支出\t" + balance + "\t\t" +amount2 + "\t\t" + desc2 + "\n";System.out.println("---------------------登记完成---------------------");break;case '4':System.out.print("确认是否退出(Y/N):");char yn = Utility.readConfirmSelection();if (yn == 'Y') loopFlag = false;break;}} while (loopFlag);}
}
import java.util.Scanner;
/**
Utility工具类:
将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
*/
public class Utility {private static Scanner scanner = new Scanner(System.in);/**用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。*/public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1);c = str.charAt(0);if (c != '1' && c != '2' && c != '3' && c != '4') {System.out.print("选择错误,请重新输入:");} else break;}return c;}/**用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。*/public static int readNumber() {int n;for (; ; ) {String str = readKeyBoard(4);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}/**用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。*/public static String readString() {String str = readKeyBoard(8);return str;}/**用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。*/public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("选择错误,请重新输入:");}}return c;}private static String readKeyBoard(int limit) {String line = "";while (scanner.hasNext()) {line = scanner.nextLine();if (line.length() < 1 || line.length() > limit) {System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}
}

java基础实战项目一:实现家庭记账本的简易记账功能相关推荐

  1. Java基础必须项目一(家庭收入支出软件,详细注释,并且添加日期记录功能)

    本软件是模拟家庭收入支出软件,所以登记的数据没有和数据库交互,不能保留.学习这个小项目只是为了熟悉Java中知识点的运用并且了解一些编程的思修.本人也是小白一枚,所以代码都有注释,可以帮助你更好的理清 ...

  2. java爬虫教程 百度云_java视频教程java爬虫实战项目httpclient hbase springmvc solr

    资源内容: java视频教程java爬虫实战项目httpclient hbase springmvc solr|____猫了个咪-更多IT精品课程.html|____猫了个咪--it视频论坛.url| ...

  3. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

  4. Java基础实战(一):万年历

    文章目录 题目:已知1900年1月1日是星期一,求2019年10月的日历. 1.已知1900.1.1是星期一,那么2019.10.1是星期几呢? 2.从1900.1.1 到 2019.10.1 有多少 ...

  5. Java开发实战项目分享

    序言 很多学生问我如何学好Java,感觉Java的知识点太多,无从下手.Java发展几十年由于其历史悠久,从传统项目研发到移动端.互联网分布式系统的研发都有其深厚的技术底蕴,所以我们学习Java应该信 ...

  6. Java-超市收银系统(Java基础知识项目)

    超市收银系统: 该系统主要是针对Java基础知识的练习项目 设计目标是面向小超市 系统主要分为两个模块:会员登入模块.员工登录模块 其中员工登录中还有其他许多小模块,如会员管理.上下班打卡等 其中比较 ...

  7. java宠物系统实战项目

    嗨喽,大家好,今天又要给大家整一波福利了! 不管我们要学习哪种语言都希望能第一时间看到成效,能做出实际的东西来,那么这里所说的实际东西当然就是项目啦!不用我说大家也知道,学编程语言不做项目是不行的,自 ...

  8. 很哇塞的Java系列实战项目!

    推荐一款不错的Spring Cloud Alibaba微服务大厂项目!掌握它,能够直接写到简历里...啥也不说了.上图!     该电商项目是一套高并发.高性能.高吞吐量的三高项目,项目基于目前最前沿 ...

  9. Java基础小项目shopping

    java练习小项目 题目如下: 1. 商店中,进货员进货(列出能够进货的食品,进货员选择进货的食品,确定进货的数量),进货结束后, 列出进货的食品清单 2. 商店中,售货员售货,顾客来购买食品(列出能 ...

最新文章

  1. java开发培训中消息中间件的优势有哪些
  2. 最大流学习笔记(1)
  3. Jürgen Schmidhuber眼中的深度学习十年,以及下一个十年展望
  4. weekend110(Hadoop)的 第二天笔记
  5. 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路
  6. gradle生命周期
  7. 数据结构与算法——选择排序
  8. python工作目录_Python目录的基本操作
  9. OpenShift 4 - 通过DaemonSet在指定Node上运行守护程序
  10. rc.local介绍(linux启动系列之一)
  11. [No000072]Windows环境变量列表
  12. [译]用javascript实现一门编程语言-词法分析
  13. 怎样建立个人邮箱账号?个人邮箱有什么功能?
  14. google计费接入,Billing结算库支付
  15. 《东周列国志》第七十三回 伍员吹箫乞吴市 专诸进炙刺王僚
  16. ubuntu上的图片编辑工具-Pinta(品他病)
  17. 启动kafka过一会进程自动挂掉问题原因
  18. 手机如何借用笔记本网络上网
  19. JavaScript动画1-速度动画
  20. C++红与黑/蘑菇阵

热门文章

  1. 最适合深夜失眠听的歌,听了最容易入睡的歌曲推荐
  2. cyclone iv 器件手册_GaN器件的直接驱动配置
  3. CSS——CSS盒子模型(重点※)
  4. Kafka有多个broker的例子——重点是Replicas和lsr和Leader位置
  5. java盘古分词_.NET使用Lucene.Net和盘古分词类库实现中文分词
  6. 蒲公英wifi怎么卸载干净_蒲公英wifi怎么卸载干净
  7. Workbench螺栓连接的模拟方法
  8. 螺栓扭矩查找表excel下载
  9. php复姓怎么排序,怎样“按姓氏笔画排列”? 复姓和少数民族姓氏如何排列? 男女同名谁在前...
  10. 细说API - 认证、授权和凭证