2025.4.15(周二)

package com.example.myapplication5.Service;
/* 统计当前月份收支来源(分类),包括金额和占比*/
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.example.myapplication5.Bean.Income;
import com.example.myapplication5.Bean.Outcome;
import com.example.myapplication5.Bean.ShanData;
import com.example.myapplication5.Bean.Tips;
import com.example.myapplication5.Father.MyActivity;
import com.example.myapplication5.LoginActivity;
import com.example.myapplication5.R;
import com.example.myapplication5.Service.CountIncomeByMonth;
import com.example.myapplication5.Utils.CurrentTime;
import com.example.myapplication5.View.ShanView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DataManageActivity extends MyActivity implements View.OnClickListener{
int[] myOut = new int[4]; // 支出有四项(餐饮、交通、娱乐、购物)
int[] myIn = new int[5];  // 收入有四项 (外快、兼职、工资、津贴)
    int currentMonth = CurrentTime.getCurrentMonth();
    int currentYear = CurrentTime.getCurrentYear();
     ShanView shanView,shanView2;
     Button btnCountIncomeByMonth,btnCountOutcomeByMonth,btn3,btn4;
     LinearLayout llFunction;
     TextView tvTip;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data_manage);
//        初始化数据
        initOut();
        initIn();
        initView();
        /* ShanView shanView = UIUtil.findView(view, R.id.shanView); */
        shanView = findViewById(R.id.shanView_countOutcomeByClasses);
        shanView.setMaxNum(5);// 设置可以显示的最大数值 该数值之后的会合并为其他
        shanView.setRadius(205);// 设置圆盘半径
        shanView.setTextDescript("本月支出");
        initShanViewMyOutcome();

        shanView2 = findViewById(R.id.shanView_countIncomeByClasses);
        shanView2.setMaxNum(5);// 设置可以显示的最大数值 该数值之后的会合并为其他
        shanView2.setRadius(205);// 设置圆盘半径
        shanView2.setTextDescript("本月收入");
        initShanViewMyIncome();
    }

    private void initView() {
        btnCountIncomeByMonth = findViewById(R.id.btn_countIncomeByMonth);
        btnCountOutcomeByMonth = findViewById(R.id.btn_countOutcomeByMonth);
        btn3 = findViewById(R.id.btn3);
        btn4 = findViewById(R.id.btn4);
        btnCountIncomeByMonth.setOnClickListener(this);
        btnCountOutcomeByMonth.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        tvTip = findViewById(R.id.tv_tip);
    }


    // 给list<bean>赋值
    private void initShanViewMyOutcome() {

        ArrayList<ShanData> listData = new ArrayList<ShanData>();
        listData.clear();
        ShanData shanData = new ShanData();// 数据实体类
        shanData.setData(myOut[0]);
        shanData.setText("餐饮");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myOut[1]);
        shanData.setText("交通");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myOut[2]);
        shanData.setText("娱乐");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myOut[3]);
        shanData.setText("购物");
        listData.add(shanData);
        shanView.setData(listData);// 将list数据传递到view中
    }

    private void initShanViewMyIncome() {
        ArrayList<ShanData> listData = new ArrayList<ShanData>();
        listData.clear();
        ShanData shanData = new ShanData();// 数据实体类
        shanData.setData(myIn[0]);
        shanData.setText("外快");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myIn[1]);
        shanData.setText("兼职");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myIn[2]);
        shanData.setText("工资");
        listData.add(shanData);

        shanData = new ShanData();
        shanData.setData(myIn[3]);
        shanData.setText("津贴");
        listData.add(shanData);
        shanView2.setData(listData);// 将list数据传递到view中
    }
//  支出分类数据键值对
    private void initOut() {
        myOut[0] = CountOutcomeByClass(myOut,"餐饮");
        myOut[1] = CountOutcomeByClass(myOut,"交通");
        myOut[2] = CountOutcomeByClass(myOut,"娱乐");
        myOut[3] = CountOutcomeByClass(myOut,"购物");
    }
//  收入分类数据键值对
    private void initIn() {
        myIn[0] = CountIncomeByClasses(myIn,"外快");
        myIn[1] = CountIncomeByClasses(myIn,"兼职");
        myIn[2] = CountIncomeByClasses(myIn,"工资");
        myIn[3] = CountIncomeByClasses(myIn,"津贴");
    }


    //统计个人支出数据
    private int CountOutcomeByClass(int[] myOut,String classes) {
/*        select class,sum(outcome.money) as money from outcome where name = '小明' group by class;
        简化版 select sum(outcome.money) as money from outcome where name = '小明' and class = '餐饮';*/

        String sql = "select sum(outcome.money) as money from outcome where class = '"+classes+"' and name = '"+ LoginActivity.name +"' and date like '%"+currentYear+"-"+currentMonth+"-%'";
        System.out.println(sql);
        int count = dbprocess2.queryMoney(sql);
        System.out.println(classes+"的支出:"+ count);
        return count;
    }
//    统计个人收入数据
    private int CountIncomeByClasses(int[] myIn,String classes) {
        String sql = "select sum(income.money) as money from income where class = '"+classes+"' and name = '"+ LoginActivity.name +"'and date like '%"+currentYear+"-"+currentMonth+"-%'";
        System.out.println(sql);
        int count = dbprocess2.queryMoney(sql);
        System.out.println(classes+"的收入:"+ count);
        return count;
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        switch(v.getId()){
            case R.id.btn_countIncomeByMonth:
                intent.setClass(this, CountIncomeByMonth.class);
                startActivity(intent);
                break;
            case R.id.btn_countOutcomeByMonth:
                intent.setClass(this, CountOutcomeByMonthActivity.class);
                startActivity(intent);
                break;
            case R.id.btn3:
                if(btn3.isSelected()){
                    btn3.setSelected(false);
                    shanView2.setVisibility(View.GONE);
                }else{
                    btn3.setSelected(true);
                    shanView2.setVisibility(View.VISIBLE);
                }
                break;
            case R.id.btn4:
                if(btn4.isSelected()){
                    btn4.setSelected(false);
                    shanView.setVisibility(View.GONE);
                }else{
                    btn4.setSelected(true);
                    shanView.setVisibility(View.VISIBLE);
                }
                break;
        }
//        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //导入菜单布局
        getMenuInflater().inflate(R.menu.data_manage, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            findViewById(R.id.tv_tip).setVisibility(View.GONE);
        //创建菜单项的点击事件
        switch (item.getItemId()) {
            case R.id.income:
//                Toast.makeText(this, "季节收入", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.setClass(this, CountIncomeByMonth.class);
                startActivity(intent);
                break;
            case R.id.outcome:
//                Toast.makeText(this, "季节支出", Toast.LENGTH_SHORT).show();
                Intent intent2 = new Intent();
                intent2.setClass(this, CountOutcomeByMonthActivity.class);
                startActivity(intent2);
                break;
            case R.id.icome_from:
//                Toast.makeText(this, "收入来源", Toast.LENGTH_SHORT).show();
                if(btn3.isSelected()){
                    btn3.setSelected(false);
                    shanView2.setVisibility(View.GONE);
                }else{
                    btn3.setSelected(true);
                    shanView2.setVisibility(View.VISIBLE);
                }
                break;
            case R.id.outcome_to:
//                Toast.makeText(this, "支出方向", Toast.LENGTH_SHORT).show();
                if(btn4.isSelected()){
                    btn4.setSelected(false);
                    shanView.setVisibility(View.GONE);
                }else{
                    btn4.setSelected(true);
                    shanView.setVisibility(View.VISIBLE);
                }
                break;
            case R.id.tips_manage:
//                Toast.makeText(this, "便签管理", Toast.LENGTH_SHORT).show();
                Intent intent3 = new Intent();
                intent3.setClass(this, TipsManageActivity.class);
                startActivity(intent3);
                break;
            case R.id.export_database:
//                Toast.makeText(this, "数据导出", Toast.LENGTH_SHORT).show();
                exportToTxt();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void exportToTxt() {
        exportIncomeToTxt();
        exportOutcomeToTxt();
        exportTipsToTxt();
        Toast.makeText(this, "文件导出成功!请到files文件夹下查看", Toast.LENGTH_SHORT).show();
    }

    private void exportTipsToTxt() {
        SQLiteDatabase db=helper.getWritableDatabase();
        String sql = "select * from tips";
        Cursor cursor = db.rawQuery(sql, null);
        List<Tips> list = new ArrayList<>();
        while(cursor.moveToNext()){
            Tips tips = new Tips();
            tips.set_id(cursor.getString(0));
            tips.setInfo(cursor.getString(2));
            list.add(tips);
            System.out.println((tips.get_id()+","+tips.getInfo()+"\r\n"));
        }
        cursor.close();
        db.close();

        StringBuffer buffer = new StringBuffer();
        buffer.append("id,便签内容\r\n");
        for(Tips tips:list){
            buffer.append(tips.get_id()+","+tips.getInfo()+"\r\n");
        }

//                String data =new String(buffer.toString().getBytes("utf-8"), "ansi") ;
        String data = buffer.toString();
//            System.out.println(111);
        String filename = "我的便签_"+CurrentTime.getCurrentTime()+".txt";
        FileOutputStream fos;
        try {
            fos = openFileOutput(filename,MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
//                System.out.println(111);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void exportOutcomeToTxt() {
        SQLiteDatabase db=helper.getWritableDatabase();
        String sql = "select * from outcome";
        Cursor cursor = db.rawQuery(sql, null);
        List<Outcome> list = new ArrayList<>();
        while(cursor.moveToNext()){
            Outcome outcome = new Outcome();
            outcome.set_id(cursor.getString(0));
            outcome.setMoney(cursor.getString(2));
            outcome.setDate(cursor.getString(3));
            outcome.setClasses(cursor.getString(4));
            outcome.setLocation(cursor.getString(5));
            outcome.setComment(cursor.getString(6));
            list.add(outcome);
            System.out.println((outcome.get_id()+","+outcome.getMoney()+","+outcome.getDate()+","+outcome.getClasses()+","+outcome.getLocation()+","+outcome.getComment()+"\r\n"));
        }
        cursor.close();
        db.close();

        StringBuffer buffer = new StringBuffer();
        buffer.append("id,金额,时间,类别,地点,备注\r\n");
        for(Outcome outcome:list){
            buffer.append(outcome.get_id()+","+outcome.getMoney()+","+outcome.getDate()+","+outcome.getClasses()+","+outcome.getLocation()+","+outcome.getComment()+"\r\n");
        }

//                String data =new String(buffer.toString().getBytes("utf-8"), "ansi") ;
        String data = buffer.toString();
//            System.out.println(111);
        String filename = "支出账单_"+CurrentTime.getCurrentTime()+".txt";
        FileOutputStream fos;
        try {
            fos = openFileOutput(filename,MODE_PRIVATE);
            fos.write(data.getBytes());
            fos.close();
//                System.out.println(111);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void exportIncomeToTxt() {
        SQLiteDatabase db=helper.getWritableDatabase();
        String sql = "select * from income";
        Cursor cursor = db.rawQuery(sql, null);
        List<Income> list = new ArrayList<>();
        while(cursor.moveToNext()){
            Income income = new Income();
            income.set_id(cursor.getString(0));
            income.setMoney(cursor.getString(2));
            income.setDate(cursor.getString(3));
            income.setClasses(cursor.getString(4));
            income.setPayer(cursor.getString(5));
            income.setComment(cursor.getString(6));
            list.add(income);
            System.out.println((income.get_id()+","+income.getMoney()+","+income.getDate()+","+income.getClasses()+","+income.getPayer()+","+income.getComment()+"\r\n"));
        }
        cursor.close();
        db.close();

        StringBuffer buffer = new StringBuffer();
        buffer.append("id,金额,时间,类别,付款方,备注\r\n");
        for(Income income:list){
            buffer.append(income.get_id()+","+income.getMoney()+","+income.getDate()+","+income.getClasses()+","+income.getPayer()+","+income.getComment()+"\r\n");
        }

//                String data =new String(buffer.toString().getBytes("utf-8"), "ansi") ;
            String data = buffer.toString();
//            System.out.println(111);
            String filename = "收入账单_"+CurrentTime.getCurrentTime()+".txt";
            FileOutputStream fos;
            try {
                fos = openFileOutput(filename,MODE_PRIVATE);
                fos.write(data.getBytes());
                fos.close();
//                System.out.println(111);
            } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

posted @ 2025-04-17 09:05  记得关月亮  阅读(13)  评论(0)    收藏  举报