记账软件
【注】控制台端的小练习
增删改查都已完成,这就是个小练习,我也是在B站的直播课上学的,后来要了人家打代码注释,自己完善了功能,供大家学习。
以下是完整的代码,我实在idea上执行的,任意软甲只要能执行java程序都可以运行。
欢迎大家指导,或者有什么好的项目欢迎大家一起学习!!!
注:此练习我没用数据库,我把数据存在了内存中,这个是我的小练习,大家可以试试要是存在了数据库就更简单了!
这个是定义的实体。
package cn.tx;
public class Bill {
/**
* 简称
*/
private String name;
/**
* 账户
*/
private String account;
/**
* 收入支出类型
*/
private String type;
/**
* 发生额
*/
private double total;
/**
* 账单的时间
*/
private String time;
/**
* 备注
*/
private String desc;
public Bill() {
}
public Bill(String name,double total, String account, String type, String time, String desc) {
this.name = name;
this.account = account;
this.type = type;
this.total = total;
this.time = time;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
这个是代码:
全部复制完整运行:
package cn.tx;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MainMenu {
//创建一个集合,存储记账的所有信息
static List<Bill> billList = new ArrayList<>();
/**
* 做了一个数据的初始化
*/
static{
billList.add(new Bill("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
billList.add(new Bill("吃饭支出",247,"交行","支出","2021-03-02","家庭聚餐"));
billList.add(new Bill("工资收入",12345,"现金","收入","2021-03-15","开工资了"));
billList.add(new Bill("服装支出",1998,"现金","支出","2021-04-02","买衣服"));
billList.add(new Bill("吃饭支出",325,"现金","支出","2021-06-18","朋友聚餐"));
billList.add(new Bill("股票收入",8000,"工行","收入","2021-7-28","股票大涨"));
billList.add(new Bill("股票收入",5000,"工行","收入","2021-8-28","股票又大涨"));
billList.add(new Bill("工资收入",5000,"交行","收入","2021-9-28","又开工资了"));
billList.add(new Bill("礼金支出",5000,"现金","支出","2021-11-28","朋友结婚"));
billList.add(new Bill("其他支出",1560,"现金","支出","2021-12-29","丢钱了"));
billList.add(new Bill("交通支出",2300,"交行","支出","2020-10-29","油价还在涨啊"));
billList.add(new Bill("吃饭支出",1000,"工行","支出","2020-9-29","又吃饭"));
billList.add(new Bill("工资收入",1000,"现金","收入","2020-11-30","开资"));
billList.add(new Bill("交通支出",2000,"现金","支出","2020-7-30","机票好贵"));
billList.add(new Bill("工资收入",5000,"现金","收入","2020-5-30","又开资"));
}
public static void main(String[] args) {
run();
}
public static void showOneLevelMenu(){
//显示主菜单
System.out.println("------------------拓薪记账宝-------------------");
System.out.println("1. 添加财务 2.删除财务 3.查询财务 4. 退出系统");
System.out.println("请输入要操作的序号[1-4]");
}
/**
* 启动记账软件
*/
public static void run(){
showOneLevelMenu();
//创建扫描器对象
Scanner s = new Scanner(System.in);
//创建一个标志
boolean flag = true;
while (flag){
//获得输入的整数
int op = s.nextInt();
//等值判断
switch (op){
case 1:
addBill();
break;
case 2:
// System.out.println("删除");
delBill();
break;
case 3:
select();
break;
case 4:
System.out.println("退出, 88");
flag = false;
break;
}
}
}
//删除记录
private static void delBill() {
System.out.println("记账宝>>删除");
System.out.println("[提示] 要删除的元素只需要-1即可,索引起始为0,意思是从0开始,eg:要删除15只需要输入Id = 14即可!!!");
System.out.println("提示:请输入要删除的记账对应的ID:");
Scanner scanner = new Scanner(System.in);
int Id = scanner.nextInt();
System.out.println("删除成功!");
billList.remove(Id);
showOneLevelMenu();
// print(bill);
// billList.stream().filter(bill -> {
// return bill.getName().;
// })
}
/**
* 添加账单
*/
private static void addBill() {
System.out.println("记账宝>>添加");
System.out.println("提示:请输入名头");
Scanner scanner = new Scanner(System.in);
Bill bill = new Bill();
String name = scanner.next();
bill.setName(name);
System.out.println("提示:请输入账户");
String account = scanner.next();
bill.setAccount(account);
System.out.println("提示:请输入类型");
String type = scanner.next();
bill.setType(type);
System.out.println("提示:请输入金额");
double total = scanner.nextDouble();
bill.setTotal(total);
System.out.println("提示:请输入时间");
String time = scanner.next();
bill.setTime(time);
System.out.println("提示:请输入描述");
String desc = scanner.next();
bill.setDesc(desc);
billList.add(bill);
System.out.println("添加成功");
showOneLevelMenu();
}
/**
* 查询方法
*/
private static void select() {
System.out.println("记账宝>>查询");
System.out.println("查询方式:1.查询所有 2. 日期查询 3. 类型");
System.out.println("提示:输入查询方式[1-3]");
Scanner scanner = new Scanner(System.in);
int op = scanner.nextInt();
switch (op){
case 1:
selectAll();
break;
case 2:
selectByDate();
break;
case 3:
selectByType();
break;
}
showOneLevelMenu();
}
/**
* 根据支出和收入的类型查询
*/
private static void selectByType() {
System.out.println("查询》类型查询");
System.out.println("提示:支出,收入");
Scanner scanner = new Scanner(System.in);
String type = scanner.next();
List<Bill> bills = billList.stream().filter(bill -> {
return bill.getType().equals(type);
}).collect(Collectors.toList());
print(bills);
}
/**
* 按着日期查询:
* 开始日期: yyyy-MM-dd
* 结束日期: yyyy-MM-dd
*/
private static void selectByDate() {
System.out.println("查询》日期查询");
System.out.println("提示:请输入开始日期");
Scanner scanner = new Scanner(System.in);
//2020-01-01
String start = scanner.next();
System.out.println("输入结束日期");
//2020-12-31
String end = scanner.next();
//把输入的日期字符串转行成日期对象
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//从记账 大集合中筛选, 在jdk1.8之前集合都不能支持筛选,1.8之后 lamda表达式功能就可以做集合查询
Stream<Bill> stream = billList.stream();//给一个集合创建一个管道流
//.filter对管道流做过滤
List<Bill> bills = stream.filter(bill -> {
//获得每一个账单的时间
String time = bill.getTime();
try {
//把我们输入的开始和结束时间的字符串转成日期对象
Date startTime = format.parse(start);
Date endTime = format.parse(end);
//获得的每一个账单的时间
Date billTime = format.parse(time);
//判断时间的区间
if (billTime.after(startTime) && billTime.before(endTime)) {
return true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return false;
//把管道流筛选后的结果创建一个新的集合
}).collect(Collectors.toList());
print(bills);
}
/**
* 查询所有
*/
private static void selectAll() {
print(billList);
}
/**
* 创建一个公用的方法:打印账单
* @param bills
*/
public static void print(List<Bill> bills){
System.out.println("------------------------------查询结果--------------------------------");
System.out.println("ID\t\t名头\t\t\t账户\t\t类型\t\t金额\t\t\t时间\t\t\t\t备注");
for (int i = 0; i < bills.size(); i++) {
Bill bill = bills.get(i);
System.out.println(i+1 + "\t\t" + bill.getName() + "\t\t" + bill.getAccount() + "\t\t" + bill.getType()+ "\t\t" + bill.getTotal()
+ "\t\t" + bill.getTime() + "\t\t" + bill.getDesc());
}
}
}