
回复
使用鸿蒙系统中的 Room 数据库来存储和管理应用的数据。Room 提供了一种抽象层,使 SQLite 的操作更加简便。
使用图表库(如 MPAndroidChart)对财务数据进行可视化展示,包括柱状图、饼图等。
graph TD;
A[开始] --> B[用户输入收入/支出]
B --> C[数据保存至 Room 数据库]
C --> D{是否要生成报告?}
D -- 是 --> E[从数据库读取数据]
E --> F[数据处理和统计]
F --> G[显示图表]
D -- 否 --> H[返回首页]
G --> I[结束]
H --> I
// Entity 类
@Entity(tableName = "transactions")
public class Transaction {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "type")
public String type; // "income" 或 "expense"
@ColumnInfo(name = "amount")
public double amount;
@ColumnInfo(name = "date")
public Date date;
}
// DAO 接口
@Dao
public interface TransactionDao {
@Insert
void insert(Transaction transaction);
@Query("SELECT * FROM transactions WHERE date BETWEEN :startDate AND :endDate")
List<Transaction> getTransactionsByDateRange(Date startDate, Date endDate);
}
// Database 类
@Database(entities = {Transaction.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract TransactionDao transactionDao();
}
public void displayChart(List<Transaction> transactions) {
BarChart barChart = findViewById(R.id.barChart);
List<BarEntry> entries = new ArrayList<>();
for (int i = 0; i < transactions.size(); i++) {
entries.add(new BarEntry(i, transactions.get(i).amount));
}
BarDataSet dataSet = new BarDataSet(entries, "Transactions");
BarData barData = new BarData(dataSet);
barChart.setData(barData);
barChart.invalidate(); // Refresh chart
}
@RunWith(AndroidJUnit4.class)
public class DatabaseTest {
private AppDatabase db;
private TransactionDao transactionDao;
@Before
public void createDb() {
Context context = ApplicationProvider.getApplicationContext();
db = Room.inMemoryDatabaseBuilder(context, AppDatabase.class).build();
transactionDao = db.transactionDao();
}
@After
public void closeDb() {
db.close();
}
@Test
public void writeReadTest() {
Transaction transaction = new Transaction();
transaction.type = "income";
transaction.amount = 100.0;
transaction.date = new Date();
transactionDao.insert(transaction);
List<Transaction> transactions = transactionDao.getTransactionsByDateRange(new Date(0), new Date());
assertEquals(transactions.get(0).amount, 100.0, 0);
}
}
这款记账应用能够方便用户记录和管理个人财务,并通过图表直观展示收支情况。它利用Room数据库进行数据管理,结合MPAndroidChart进行数据可视化,具有很高的实用性。
未来可以进一步完善:
希望这个项目能为您的鸿蒙开发之路带来帮助!