This software records your daily expense and income. I use several Microsoft Access database files (*.mdb) to store data. To prevent an oversize database file, I split the database into several parts.
Futures:
- Easy to track your income and expenses
- Display pie chart and column chart illustrate cash flow
- Password protect
Next version futures:
- It will provide you with up-to-date exchange rates.
void __fastcall TForm1::LoadDB() { chart_change_flag = 0; ADOTable_DB->TableName = Now().FormatString("yyyymm"); ADOTable_DB->Active = true; TStrings *List = new TStringList; ADOConnection_DB->GetTableNames(List); ADOConnection_DB->Open(); DBGrid_Main->Visible = false; CalcMoney(); DBGrid_Main->Visible = true; ADOQuery_DB->Close(); ADOQuery_DB->SQL->Text = "select * from " + ADOTable_DB->TableName + " order by Date,ID"; ADOQuery_DB->Open(); ADOQuery_DB->Last(); GridSize(0); delete List; }
void __fastcall TForm1::ListAllYear() { TStringList *sList; AnsiString dir_path = ex_path + "\\data\\" + Edit1->Text; LoadAllFiles(dir_path, sList); // TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>; AnsiString pop_db; sel_other_table = new AnsiString*[allYear.Length() / 4]; AllYearCount = allYear.Length() / 4; EachYearMonthCount = new int[allYear.Length() / 4]; for (int i = 0; i < allYear.Length() / 4; i++) { TMenuItem *m = new TMenuItem(this); m->Caption = allYear.SubString(1 + i * 4, 4); pop_db = ex_path + "\\data\\" + Edit1->Text + "\\" + Edit1->Text + "(" + allYear.SubString(1 + i * 4, 4) + ").mdb"; ADOConnection_DB->Close(); ADOQuery_DB->Active = false; ADOConnection_DB->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pop_db + ";Persist Security Info=False"; sel_db_path = pop_db; sel_db_month = Now().FormatString("yyyymm"); ADOConnection_DB->Connected = true; m->Tag = i; PopupMenu_DynamicMonth->Items->Add(m); TStrings *List = new TStringList; ADOConnection_DB->GetTableNames(List); sel_other_table[i] = new AnsiString[List->Count]; EachYearMonthCount[i] = List->Count; for (int j = 0; j < List->Count; j++) { TMenuItem *subm = new TMenuItem(this); sel_other_table[i][j] = List->Strings[j]; AnsiString table_name = List->Strings[j]; subm->Caption = table_name; PopupMenu_DynamicMonth->Items->Items[i]->Add(subm); subm->Tag = j; subm->OnClick = PopupMenuItemsClick; } delete List; } }
AnsiString __fastcall TForm1::GetMoneyByDay(AnsiString year, AnsiString month,AnsiString day) { Application->ProcessMessages(); AnsiString returnMoney = ""; ADOConnection_NoGrid->Close(); // new_db ADOConnection_NoGrid->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sel_db_path + ";Persist Security Info=False"; ADOQuery_NoGrid->Close(); ADOTable_NoGrid->TableName = year + month; // Now().FormatString("yyyymm"); TStrings *List = new TStringList; ADOConnection_NoGrid->GetTableNames(List); ADOQuery_NoGrid->Close(); // Now().FormatString("yyyymm") ADOQuery_NoGrid->SQL->Text = "select " + all_table + " from " + ADOTable_NoGrid->TableName + " where IO='income' and date='" + year + "/" + month + "/" + day + "'"; ADOQuery_NoGrid->ExecSQL(); ADOQuery_NoGrid->Open(); int total_IncomeMoney = 0; for (int k = 0; k < ADOQuery_NoGrid->RecordCount; k++) { total_IncomeMoney = total_IncomeMoney + DataSource_NoGrid->DataSet->Fields->Fields[8]->Text.ToDouble(); DataSource_NoGrid->DataSet->Next(); } returnMoney = returnMoney + IntToStr(total_IncomeMoney) + "\n"; ADOQuery_NoGrid->Close(); ADOTable_NoGrid->TableName = year + month; // Now().FormatString("yyyymm"); TStrings *ListOutcome = new TStringList; ADOConnection_NoGrid->GetTableNames(ListOutcome); ADOQuery_NoGrid->Close(); // Now().FormatString("yyyymm") ADOQuery_NoGrid->SQL->Text = "select " + all_table + " from " + ADOTable_NoGrid->TableName + " where io='ougoing' and date='" + year + "/" + month + "/" + day + "'"; ADOQuery_NoGrid->ExecSQL(); ADOQuery_NoGrid->Open(); int total_OutcomeMoney = 0; for (int k = 0; k < ADOQuery_NoGrid->RecordCount; k++) { total_OutcomeMoney = total_OutcomeMoney + DataSource_NoGrid->DataSet->Fields->Fields[8]->Text.ToDouble(); DataSource_NoGrid->DataSet->Next(); } if (total_OutcomeMoney != 0) returnMoney = returnMoney + "-" + IntToStr(total_OutcomeMoney) + "\n"; if (total_OutcomeMoney == 0) returnMoney = returnMoney + IntToStr(total_OutcomeMoney) + "\n"; return returnMoney; }