个人记账管理系统(大二第一学期JAVA期末项目)

项目简介

设置账单条目Account类,定义属性:支出金额expend,收入金额income,时间datestr,账单条目备注remark,账单条目类型type,账单条目流水编号id。

设置用户User类,定义用户信息:帐号昵称UserName,账号密码UserPassword,预算budget,支出金额expendmoney,收入金额incomemoney。设置类属性账单条目计数器count。

在操作台根据菜单选项进行操作,先设置预算,再对账单进行增加、删除、修改、查询等操作。

项目功能

功能 1 :设置本月预算
功能 2 :添加条目
功能 3:查询条目
功能 4 :修改条目
功能 5 :删除条目
功能 6 :查询支出总额
功能 7:查询收入总额

项目代码

index.java 项目主函数

import java.util.Scanner;

public class Index {
    public static void main(String[] args) throws InterruptedException {
        //主题:个人记账管理系统
        User user = new User();

        boolean flag = true;

        while (flag) {
            Thread.sleep(1000);
            System.out.println("*************menu*************");
            System.out.println("1.设置本月预算\n2.添加条目\n3.查询条目\n4.修改条目\n5.删除条目\n6.查询支出总额\n7.查询收入总额\n8.退出系统");
            System.out.println("*****************************");
            System.out.print("请输入想要进行的功能:");
            Scanner scann = new Scanner(System.in);
            int choice1 = scann.nextInt();

            switch (choice1) {
                case 1:
                    //设置本月预算
                    user.setBudget();
                    break;
                case 2:
                    //添加条目
                    user.increase();
                    break;
                case 3:
                    //查询条目
                    user.query();
                    break;
                case 4:
                    //修改条目
                    user.rewrite();
                    break;
                case 5:
                    //删除条目
                    user.delete();
                    break;
                case 6:
                    //查询支出总额
                    user.expendall();
                    break;
                case 7:
                    //查询收入总额
                    user.incomeall();
                    break;
                case 8:
                    //退出系统
                    flag = false;
                    System.out.println("正在退出...");
                    break;
            }
        }
    }
}

用户User类

import java.util.ArrayList;
import java.util.Scanner;

public class User {
    //用户信息
    //账号昵称
    public String UserName;
    //账号密码
    public String UserPassword;
    //预算
    public int budget = 0;
    //支出金额
    public int expendmoney = 0;
    //收入金额
    public int incomemoney = 0;

    public Scanner scan;

    //账单条目计数器
    int count = 0;

    boolean flag2;
    boolean flag3;
    boolean flag4;

    //创建对象集合
    ArrayList<Account> list = new ArrayList<>();


    //用户方法
    //设置用户信息
    public User(){
        scan = new Scanner(System.in);
        System.out.println("———————————个人记账管理系统———————————");
        System.out.print("请输入账号昵称:");
        this.UserName = this.scan.next();
        System.out.print("请输入账号密码:");
        this.UserPassword = scan.next();
        System.out.println("注册成功!");
        System.out.println("注册账号昵称为:"+this.UserName+"    账号密码为:"+this.UserPassword);
        System.out.println("正在进入...");
    }

    //设置每月预算
    public void setBudget(){
        System.out.print("请输入本月预算:");
        this.budget = scan.nextInt();
        System.out.println("设置的预算为:"+this.budget);
    }

    //添加信息
   public Account add(int count){
        Account account = new Account();
       System.out.print("请选择添加类型\t1.收入\t2.支出 :");
       while(true) {
           //增加条目
           int i = scan.nextInt();
           //添加金额
           if (i == 1) {
               account.setIncome();
               break;
           } else if (i == 2) {
               account.setExpend();
               break;
           } else {
               System.out.print("输入错误,请重新输入:");
           }
       }
       //添加时间
       account.datestr = account.getTime();
       //添加备注
       account.setRemark();
       //添加流水编码
       account.id = count;

       System.out.println("添加成功!");
       this.print(account);
       return account;
    }

    //输出
   public void print(Account account) {
       System.out.println("流水编码:"+account.getId()+"\t类型:"+account.getType()+ "\t金额为:" +
               (account.getExpend()+account.getIncome())+"\t时间:"
               +account.getDatestr()+"\t备注:"+account.getRemark());
   }

   //总添加
    public void increase(){
        flag2 = true;
        while(flag2) {
            count++;
            Account account = this.add(count);
            //添加到对象数组中
            list.add(account);

            System.out.print("是否继续添加?(y/n):");
            flag3 = true;
            while (flag3) {
                String choice2 = scan.next();
                if (choice2.equals("n")) {
                    flag2 = false;
                    flag3 = false;
                    //输出总账单
                    System.out.println("总账单:");
                    for (Account a : list) {
                        this.print(a);
                    }
                }else if(choice2.equals("y")){
                    flag3 = false;
                }else {
                    System.out.print("输入错误,请重新输入:");
                }
            }
        }
    }

    //查询
    public void query(){
        flag2 = true;
        int num = 0;
        while(flag2) {
            System.out.print("请输入要查询的流水编码:");
            flag4 = true;
            flag3 = true;
            //获取流水编码
            while(flag4){
                num = scan.nextInt();
                for (Account value:list){
                    if(value.getId() == num){
                        flag3 = false;
                        flag4 = false;
                        break;
                    }
                }
               if(flag3){
                   System.out.print("输入错误,请重新输入:");
               }
            }
            //获取查询对象
            Account account = new Account();
            for (Account value : list) {
                account = value;
                if (account.getId() == num) {
                    this.print(account);
                    break;
                }
            }
            System.out.print("是否继续查询?(y/n):");
            flag3 = true;
            while (flag3) {
                String choice2 = scan.next();
                if (choice2.equals("n")) {
                    flag2 = false;
                    flag3 = false;
                }else if(choice2.equals("y")){
                    flag3 = false;
                }else {
                    System.out.print("输入错误,请重新输入:");
                }
            }
        }
    }

    //修改
    public void rewrite(){
        flag2 = true;
        int num = 0;
        while(flag2) {
            System.out.print("请输入要修改的流水编码:");
            flag4 = true;
            flag3 = true;
            //获取流水编码
            while(flag4){
                num = scan.nextInt();
                for (Account value:list){
                    if(value.getId() == num){
                        flag3 = false;
                        flag4 = false;
                        break;
                    }
                }
                if(flag3){
                    System.out.print("输入错误,请重新输入:");
                }
            }
            //获取修改对象
            Account account = new Account();
            for (Account value : list) {
                account = value;
                if (account.getId() == num) {
                    this.print(account);
                    break;
                }
            }
            //输入修改内容
            System.out.print("请输入想要修改的选项(1.类型\t2.金额\t3.备注):");
            int num1 = scan.nextInt();
            flag3 = true;
            while (flag3){
                if(num1 == 1){
                    account.setType();
                    flag3 = false;
                }else if (num1 == 2){
                    flag3 = false;
                    if(account.type.equals("income")){
                        account.setIncome();
                    }else {
                        account.setExpend();
                    }
                }else if (num1 == 3){
                    flag3 = false;
                    account.setRemark();
                }else {
                    System.out.print("输入错误,请重新输入:");
                }
            }
            //输出修改后的条目
            System.out.print("修改后的条目为:");
            this.print(account);
            System.out.print("是否继续修改?(y/n):");
            flag3 = true;
            while (flag3) {
                String choice2 = scan.next();
                if (choice2.equals("n")) {
                    flag2 = false;
                    flag3 = false;
                }
                else if(choice2.equals("y")){
                    flag3 = false;
                }else {
                    System.out.print("输入错误,请重新输入:");
                }
            }
        }
        //输出总账单
        System.out.println("总账单:");
        for (Account a : list) {
            this.print(a);
        }
    }

    //删除
    public void delete(){
        flag2 = true;
        int num = 0;
        while(flag2) {
            System.out.print("请输入要删除的流水编码:");
            flag4 = true;
            flag3 = true;
            //获取流水编码
            while(flag4){
                num = scan.nextInt();
                for (Account value:list){
                    if(value.getId() == num){
                        flag3 = false;
                        flag4 = false;
                        break;
                    }
                }
                if(flag3){
                    System.out.print("输入错误,请重新输入:");
                }
            }
            //获取删除对象
            Account account = new Account();
            for (Account value : list) {
                account = value;
                if (account.getId() == num) {
                    this.print(account);
                    break;
                }
            }
            System.out.print("是否要删除此条记录(y/n):");
            String choice3 = scan.next();
            if(choice3.equals("y")){
                System.out.println("删除成功!");
                list.remove(account);
            }
            //输出删除后的总账单
            System.out.println("总账单:");
            for (Account a : list) {
                this.print(a);
            }
            System.out.print("是否继续删除?(y/n):");
            String choice2 = scan.next();
            if (choice2.equals("n")) {
                flag2 = false;
            }
        }
    }

    //查询支出总额
    public void expendall(){
        expendmoney = 0;
        for (Account a : list) {
            if (a.type.equals("expend")){
                expendmoney += a.getExpend();
            }
        }
        String str1;
        if (expendmoney>budget){
            str1 = ",超预算"+(expendmoney-budget)+"。";
        }else {
            str1 = ",预算还剩"+(budget-expendmoney)+"。";
        }
        System.out.println("共支出:"+expendmoney+str1);
    }

    //查询收入总额
    public void incomeall(){
        incomemoney = 0;
        for (Account a : list) {
            incomemoney += a.getIncome();
        }
        System.out.println("共收入:"+incomemoney);
    }
}

账单条目Account类

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Account {

    //支出
    public int expend = 0;
    //收入
    public int income = 0;
    //时间
    public String datestr;
    //备注
    public String remark;
    //类型:收入/支出
    public String type;
    //流水编号
    public int id = 0;

    Scanner scanner = new Scanner(System.in);


    //获取时间
    public String getTime() {
        //分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
        Date date = new Date();
        //对日期进行模式化处理
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        datestr = sdf.format(date);
        return datestr;
    }

    //添加支出
    public void setExpend(){
        System.out.print("请输入支出金额:");
        expend = scanner.nextInt();
        this.type = "expend";
    }

    //添加收入
    public void setIncome(){
        System.out.print("请输入收入金额:");
        income = scanner.nextInt();
        this.type = "income";
    }

    //输出id
    public int getId(){
        return id;
    }

    //输出类型
    public String getType(){
        return type;
    }

    //输出支出金额
    public int getExpend(){
        return expend;
    }

    //输出收入金额
    public int getIncome(){
        return income;
    }

    //输出时间
    public String getDatestr(){
        return datestr;
    }

    //输出备注
    public String getRemark(){
        return remark;
    }

    //输入类型
    public String setType(){
        System.out.print("请选择修改后的类型:1.收入 2.支出 :");
        while(true) {
            //增加条目
            int i = scanner.nextInt();
            //添加金额
            if (i == 1) {
                this.type = "income";
                break;
            } else if (i == 2) {
                this.type = "expend";
                break;
            } else {
                System.out.print("输入错误,请重新输入:");
            }
        }
        return this.type;
    }

    //输入备注
    public String setRemark(){
        System.out.print("请输入备注:");
        this.remark = scanner.next();
        return this.remark;
    }
}

代码实现效果

 

 

 

 

 

 

 

 

 项目改进点

  1. 如果多次输入违规数据,应在操作台返回询问:是否继续进行该操作?若是,则提醒用户输入规范数据;若不是,则直接返回上级菜单。
  2. 设置的用户昵称和密码没有在后续操作中用到,可以在修改添加、查询、修改、删除条目时,加上用户登陆验证。
  3. 当未添加条目时,进行查询、修改、删除条目操作会陷入死循环。应该在没有账单条目时,仅能进行设置预算、添加条目、查询支出收入总额、退出系统操作。
  4. 做的系统比较简略,之后有时间再改进。
  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值