当前位置:   article > 正文

使用java实现记账小程序_记账本的小程序代码怎么写

记账本的小程序代码怎么写

前言

作为java初学者,程序里面可能会有一些写的不好的地方,请见谅。作为一个从C++转Java的初学者,还不会使用Java中的文件读写,所以后面的代码中,是将数据存储在一个列表中的,而一般涉及大量数据存储的程序,一般是将数据存储在数据库或者文件中的。好啦,不说了,我们开始吧~



一、定义存储数据的类

定义一个Bills类用来存储记录,记录一条账务,我们需要有:账务类别、金额、使用的账户、收入或支出类型、时间、备注。

直接看代码吧。

  1. public class Bills {
  2. private String name; //类别
  3. private double total; //金额
  4. private String account; //账户
  5. private String type; //类型
  6. private String time; //时间
  7. private String desc; //备注
  8. public Bills() {
  9. }
  10. public Bills(String name, double total, String account, String type, String time, String desc) {
  11. this.name = name;
  12. this.total = total;
  13. this.account = account;
  14. this.type = type;
  15. this.time = time;
  16. this.desc = desc;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public double getTotal() {
  25. return total;
  26. }
  27. public void setTotal(double total) {
  28. this.total = total;
  29. }
  30. public String getAccount() {
  31. return account;
  32. }
  33. public void setAccount(String account) {
  34. this.account = account;
  35. }
  36. public String getType() {
  37. return type;
  38. }
  39. public void setType(String type) {
  40. this.type = type;
  41. }
  42. public String getTime() {
  43. return time;
  44. }
  45. public void setTime(String time) {
  46. this.time = time;
  47. }
  48. public String getDesc() {
  49. return desc;
  50. }
  51. public void setDesc(String desc) {
  52. this.desc = desc;
  53. }
  54. }


二、菜单

记账程序主要有添加账务、删除账务、查询账务、退出系统这几个基本功能。菜单我们直接打印就行了。

  1. public static void showMain()
  2. {
  3. System.out.println("----------------------随手记----------------------");
  4. System.out.println("1.添加账务 2.删除账务 3.查询账务 4.退出系统");
  5. System.out.println("请输入功能序号【1-4】");
  6. }

 有了菜单后,我们还需要根据菜单选择对应的功能,然后执行该功能。所以我们需要用户输入自己的选择,然后使用switch-case语句判断。

  1. public static void run()
  2. {
  3. showMain();
  4. boolean flag=true;
  5. //创建扫描器
  6. Scanner scanner=new Scanner(System.in);
  7. while(flag)
  8. {
  9. //获得输入的选项
  10. int op=scanner.nextInt();
  11. switch (op){
  12. case 1:
  13. addBills();
  14. break;
  15. case 2:
  16. delBills();
  17. break;
  18. case 3:
  19. select();
  20. break;
  21. case 4:
  22. flag=false;
  23. break;
  24. default:
  25. System.out.println("请重新输入:");
  26. }
  27. }
  28. System.out.println("退出系统");
  29. }

三、创建集合

在开始对于数据的操作之前,我们还需要创建一个集合来存储数组,而数组中就是我们初始化的账务数据。

  1. static List<Bills> billList=new ArrayList<>();
  2. static {
  3. billList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
  4. billList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
  5. billList.add(new Bills("工资收入",12345,"现金","收入","2021-03-15","发工资"));
  6. billList.add(new Bills("交通支出",100,"交行","支出","2021-03-20","坐高铁"));
  7. }

四、添加账务

创建一个Bills对象来存储用户输入的临时数据,然后将这条数据追加到集合中。

  1. private static void addBills()
  2. {
  3. Scanner inScanner=new Scanner(System.in);
  4. Bills bills=new Bills();
  5. System.out.println("请输入类别:");
  6. bills.setName(inScanner.next());
  7. System.out.println("请输入账户:");
  8. bills.setAccount(inScanner.next());
  9. System.out.println("请输入支出类型:");
  10. bills.setType(inScanner.next());
  11. System.out.println("请输入金额:");
  12. bills.setTotal(inScanner.nextDouble());
  13. System.out.println("请输入时间:");
  14. bills.setTime(inScanner.next());
  15. System.out.println("请输入备注:");
  16. bills.setDesc(inScanner.next());
  17. billList.add(bills);
  18. System.out.println("添加账务成功!");
  19. showMain();
  20. }

五、查询账务 

和刚才的菜单选择一样,我们需要先判断用户选择的是哪种查询,有三种查询方式:1.查询所有        2.按时间区间查询        3.收入和支出类型查询

  1. private static void select()
  2. {
  3. System.out.println("随手记》账务查询");
  4. System.out.println("1.查询所有 2.按时间区间来查询 3.收入和支出类型查询");
  5. Scanner scanner=new Scanner(System.in);
  6. int op=scanner.nextInt();
  7. switch (op){
  8. case 1:selectAll();
  9. break;
  10. case 2:selectByDate();
  11. break;
  12. case 3:selectByType();
  13. break;
  14. }
  15. //展示上一级的主菜单
  16. showMain();
  17. }

1.查询所有

我们需要先设置打印的格式。

  1. public static void print(List<Bills> billsList)
  2. {
  3. System.out.println("ID\t\t类别\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");
  4. for(int i=0;i<billsList.size();i++)
  5. {
  6. Bills bills=billsList.get(i);
  7. System.out.println(i+1+"\t\t"+bills.getName()+"\t\t"+bills.getAccount()+"\t\t"+bills.getType()
  8. +"\t\t"+bills.getTotal()+"\t\t"+bills.getTime()+"\t\t"+bills.getDesc());
  9. }
  10. }

打印所有记录。

  1. private static void selectAll()
  2. {
  3. print(billList);
  4. }

2.按时间区间查询 

  1. private static void selectByDate()
  2. {
  3. //创建一个时间格式化的对象
  4. SimpleDateFormat format=new SimpleDateFormat("yyy-MM-dd");
  5. System.out.println("随手记>>账务查询>>按照时间区间来查询");
  6. Scanner scanner=new Scanner(System.in);
  7. System.out.println("请输入:开始时间");
  8. String start=scanner.next();
  9. System.out.println("请输入:结束时间");
  10. String end=scanner.next();
  11. List<Bills> billsList=billList.stream().filter(bills -> {
  12. String time=bills.getTime();
  13. //把字符串解析成具体时间
  14. try
  15. {
  16. Date startDate=format.parse(start);
  17. Date endDate=format.parse(end);
  18. Date timeDate=format.parse(time);
  19. if(timeDate.before(endDate)&&timeDate.after(startDate))
  20. {
  21. return true;
  22. }
  23. }
  24. catch (ParseException e)
  25. {
  26. e.printStackTrace();
  27. }
  28. return false;
  29. }).collect(Collectors.toList());
  30. print(billsList);
  31. }

3.按类型查询

  1. private static void selectByType()
  2. {
  3. System.out.println("随手记>>账务查询>>收入和支出的类型");
  4. System.out.println("请输入:收入或者支出");
  5. Scanner scanner=new Scanner(System.in);
  6. //收入,支出
  7. String type=scanner.next();
  8. //集合stream流,集合的筛选
  9. List<Bills> billsList=billList.stream()
  10. .filter(bills -> {
  11. String type1=bills.getType();
  12. return type1.equals(type);
  13. }).collect(Collectors.toList());
  14. print(billsList);
  15. }

六、删除账务

  1. private static void delBills()
  2. {
  3. Scanner inScanner=new Scanner(System.in);
  4. int id=inScanner.nextInt();
  5. billList.remove(id-1);
  6. System.out.println("删除成功!");
  7. showMain();
  8. }

七、完整代码

Bills.java

  1. package cn.tx;
  2. public class Bills {
  3. private String name; //类别
  4. private double total; //金额
  5. private String account; //账户
  6. private String type; //类型
  7. private String time; //时间
  8. private String desc; //备注
  9. public Bills() {
  10. }
  11. public Bills(String name, double total, String account, String type, String time, String desc) {
  12. this.name = name;
  13. this.total = total;
  14. this.account = account;
  15. this.type = type;
  16. this.time = time;
  17. this.desc = desc;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. public double getTotal() {
  26. return total;
  27. }
  28. public void setTotal(double total) {
  29. this.total = total;
  30. }
  31. public String getAccount() {
  32. return account;
  33. }
  34. public void setAccount(String account) {
  35. this.account = account;
  36. }
  37. public String getType() {
  38. return type;
  39. }
  40. public void setType(String type) {
  41. this.type = type;
  42. }
  43. public String getTime() {
  44. return time;
  45. }
  46. public void setTime(String time) {
  47. this.time = time;
  48. }
  49. public String getDesc() {
  50. return desc;
  51. }
  52. public void setDesc(String desc) {
  53. this.desc = desc;
  54. }
  55. }

MainMenu.java

  1. package cn.tx;
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.Scanner;
  7. import java.util.List;
  8. import java.util.stream.Collectors;
  9. import java.util.stream.Stream;
  10. public class MainMenu {
  11. //创建一个集合来存储数组
  12. static List<Bills> billList=new ArrayList<>();
  13. //类加载时会第一时间执行,在billList里面加入初始化数据
  14. static {
  15. billList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
  16. billList.add(new Bills("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
  17. billList.add(new Bills("工资收入",12345,"现金","收入","2021-03-15","发工资"));
  18. billList.add(new Bills("交通支出",100,"交行","支出","2021-03-20","坐高铁"));
  19. }
  20. public static void main(String[] args){
  21. run();
  22. }
  23. public static void showMain()
  24. {
  25. System.out.println("----------------------随手记----------------------");
  26. System.out.println("1.添加账务 2.删除账务 3.查询账务 4.退出系统");
  27. System.out.println("请输入功能序号【1-4】");
  28. }
  29. public static void run()
  30. {
  31. showMain();
  32. boolean flag=true;
  33. //创建扫描器
  34. Scanner scanner=new Scanner(System.in);
  35. while(flag)
  36. {
  37. //获得输入的选项
  38. int op=scanner.nextInt();
  39. switch (op){
  40. case 1:
  41. addBills();
  42. break;
  43. case 2:
  44. delBills();
  45. break;
  46. case 3:
  47. select();
  48. break;
  49. case 4:
  50. flag=false;
  51. break;
  52. default:
  53. System.out.println("请重新输入:");
  54. }
  55. }
  56. System.out.println("退出系统");
  57. }
  58. private static void delBills()
  59. {
  60. Scanner inScanner=new Scanner(System.in);
  61. int id=inScanner.nextInt();
  62. billList.remove(id-1);
  63. System.out.println("删除成功!");
  64. showMain();
  65. }
  66. private static void addBills()
  67. {
  68. Scanner inScanner=new Scanner(System.in);
  69. Bills bills=new Bills();
  70. System.out.println("请输入类别:");
  71. bills.setName(inScanner.next());
  72. System.out.println("请输入账户:");
  73. bills.setAccount(inScanner.next());
  74. System.out.println("请输入支出类型:");
  75. bills.setType(inScanner.next());
  76. System.out.println("请输入金额:");
  77. bills.setTotal(inScanner.nextDouble());
  78. System.out.println("请输入时间:");
  79. bills.setTime(inScanner.next());
  80. System.out.println("请输入备注:");
  81. bills.setDesc(inScanner.next());
  82. billList.add(bills);
  83. System.out.println("添加账务成功!");
  84. showMain();
  85. }
  86. //三种查询 1.查询所有 2.按时间区间来查询 3.收入和支出类型查询
  87. private static void select()
  88. {
  89. System.out.println("随手记》账务查询");
  90. System.out.println("1.查询所有 2.按时间区间来查询 3.收入和支出类型查询");
  91. Scanner scanner=new Scanner(System.in);
  92. int op=scanner.nextInt();
  93. switch (op){
  94. case 1:selectAll();
  95. break;
  96. case 2:selectByDate();
  97. break;
  98. case 3:selectByType();
  99. break;
  100. }
  101. //展示上一级的主菜单
  102. showMain();
  103. }
  104. private static void selectAll()
  105. {
  106. print(billList);
  107. }
  108. private static void selectByDate()
  109. {
  110. //创建一个时间格式化的对象
  111. SimpleDateFormat format=new SimpleDateFormat("yyy-MM-dd");
  112. System.out.println("随手记>>账务查询>>按照时间区间来查询");
  113. Scanner scanner=new Scanner(System.in);
  114. System.out.println("请输入:开始时间");
  115. String start=scanner.next();
  116. System.out.println("请输入:结束时间");
  117. String end=scanner.next();
  118. List<Bills> billsList=billList.stream().filter(bills -> {
  119. String time=bills.getTime();
  120. //把字符串解析成具体时间
  121. try
  122. {
  123. Date startDate=format.parse(start);
  124. Date endDate=format.parse(end);
  125. Date timeDate=format.parse(time);
  126. if(timeDate.before(endDate)&&timeDate.after(startDate))
  127. {
  128. return true;
  129. }
  130. }
  131. catch (ParseException e)
  132. {
  133. e.printStackTrace();
  134. }
  135. return false;
  136. }).collect(Collectors.toList());
  137. print(billsList);
  138. }
  139. private static void selectByType()
  140. {
  141. System.out.println("随手记>>账务查询>>收入和支出的类型");
  142. System.out.println("请输入:收入或者支出");
  143. Scanner scanner=new Scanner(System.in);
  144. //收入,支出
  145. String type=scanner.next();
  146. //集合stream流,集合的筛选
  147. List<Bills> billsList=billList.stream()
  148. .filter(bills -> {
  149. String type1=bills.getType();
  150. return type1.equals(type);
  151. }).collect(Collectors.toList());
  152. print(billsList);
  153. }
  154. public static void print(List<Bills> billsList)
  155. {
  156. System.out.println("ID\t\t类别\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");
  157. for(int i=0;i<billsList.size();i++)
  158. {
  159. Bills bills=billsList.get(i);
  160. System.out.println(i+1+"\t\t"+bills.getName()+"\t\t"+bills.getAccount()+"\t\t"+bills.getType()
  161. +"\t\t"+bills.getTotal()+"\t\t"+bills.getTime()+"\t\t"+bills.getDesc());
  162. }
  163. }
  164. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/311151
推荐阅读
相关标签
  

闽ICP备14008679号