/********************************************************************/
/* Datei / Version|.../auswertung.cpp / 1.0 */
/* Autor / Erstellt|Christian Hayer / 31.05.2003 */
/* |Michael Luik */
/* Autor / Update| */
/*----------------------|-------------------------------------------*/
/* Copyright|FHTE - IT2a (Gruppe: PetrolSoft) */
/* Internet|http://it.chayer.de/petrolsoft */
/* Email|petrolsoft@it.chayer.de */
/*----------------------|-------------------------------------------*/
/* Aufgabe|Berechnung und Ausgabe von Statistikwerten */
/*----------------------|-------------------------------------------*/
/* Eingang|keine */
/*----------------------|-------------------------------------------*/
/* Ausgang|Tankdaten mit Statistikwerten */
/*----------------------|-------------------------------------------*/
/* Verwendete Funktionen|OnKillFocus(); OnCreate(); OnInitDialog() */
/*----------------------|-------------------------------------------*/
/* Globale Variablen|db3, tdset3, start_kmStand */
/*----------------------|-------------------------------------------*/
/* Fehlerbehandlung|keine */
/********************************************************************/
/********************************************************************/
/* */
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU General Public License as */
/* published by the Free Software Foundation; either version 2 */
/* of the License, or (at your option) any later version. */
/* */
/********************************************************************/
/////////////////////////////////////////////////////////////////////////////
// Auswertung.cpp : implementation file
//
#include "stdafx.h"
#include "Spritkostenverwaltung.h"
#include "SpritkostenverwaltungView.h"
#include "Auswertung.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CDaoDatabase db3; // Datenbank-Variable
CDaoRecordset tdset3(&db3); // RecordSet zuweisen
long Start_kmStand; // Variable für Berechnung von diversen Statistikwerten
/////////////////////////////////////////////////////////////////////////////
// CAuswertung dialog
CAuswertungView::CAuswertungView(CWnd* pParent /*=NULL*/)
: CDialog(CAuswertungView::IDD, pParent)
{
//{{AFX_DATA_INIT(CAuswertungView)
m_FrzBesitzer = _T("");
m_FrzBezeichnung = _T("");
m_FrzDaten = _T("");
m_km_ges = _T("");
m_kosten_ges = _T("");
m_kosten_schnitt = _T("");
m_preis_schnitt = _T("");
m_sprit_ges = _T("");
m_sprit_schnitt = _T("");
//}}AFX_DATA_INIT
}
BEGIN_MESSAGE_MAP(CAuswertungView, CDialog)
//{{AFX_MSG_MAP(CAuswertungView)
ON_WM_CREATE()
ON_WM_KILLFOCUS()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CAuswertungView::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAuswertungView)
DDX_Control(pDX, IDC_Tankdaten, m_TankdatenC);
DDX_Text(pDX, IDC_FrzBesitzer, m_FrzBesitzer);
DDX_Text(pDX, IDC_FrzBezeichnung, m_FrzBezeichnung);
DDX_Text(pDX, IDC_FrzDaten, m_FrzDaten);
DDX_Text(pDX, IDC_TD_km_ges, m_km_ges);
DDX_Text(pDX, IDC_TD_Kosten_ges, m_kosten_ges);
DDX_Text(pDX, IDC_TD_Kosten_schnitt, m_kosten_schnitt);
DDX_Text(pDX, IDC_TD_Preis_schnitt, m_preis_schnitt);
DDX_Text(pDX, IDC_TD_Sprit_ges, m_sprit_ges);
DDX_Text(pDX, IDC_TD_Sprit_schnitt, m_sprit_schnitt);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CAuswertung message handlers
/////////////////////////////////////////////////////////////////////////////
// Wird beim Aufruf des Dialogs ausgeführt
int CAuswertungView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CString sql,Titeltext; // locale CString Variablen
CString FrzID,Fahrzeug,Besitzer,Fahrzeugdaten,Anmerkung; // Variablen für Felder
COleVariant var; // Variable für Datenaustausch mit RecordSet
var.ChangeType(VT_BSTR, NULL);
db3.Open("PetrolSoft_DB.mdb"); // Datenbank öffnen
sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),searchID);
tdset3.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // RecordSet mit Fahrzeugdaten öffnen
if(!tdset3.IsEOF()) // If not EOF
{
// Fahrzeugdaten aud RecSet auslesen
tdset3.GetFieldValue("Fahrzeugbezeichnung",var);
Fahrzeug = (LPCSTR)var.pbstrVal;
tdset3.GetFieldValue("Fahrzeugdaten",var);
Fahrzeugdaten = (LPCSTR)var.pbstrVal;
tdset3.GetFieldValue("Besitzer",var);
Besitzer = (LPCSTR)var.pbstrVal;
tdset3.GetFieldValue("kmStand",var);
Start_kmStand = (long)var.lVal;
// Variablen den Feldern zuweisen
m_FrzBezeichnung = Fahrzeug;
m_FrzBesitzer = Besitzer;
m_FrzDaten = Fahrzeugdaten;
Titeltext = "Auswertung der Tankdaten - " + Fahrzeug;
SetWindowText(Titeltext); // Dialog-Caption schreiben
}
tdset3.Close(); // RecordSet der Fahrzeuge schließen
return 0;
} // OnCreate()
/////////////////////////////////////////////////////////////////////////////
// Wird beim "Schließen" des Dialogs ausgeführt
void CAuswertungView::OnKillFocus(CWnd* pNewWnd)
{
CDialog::OnKillFocus(pNewWnd);
tdset3.Close(); // RecordSet schließen
db3.Close(); // Datenbank schließen
} // OnKillFocus()
/////////////////////////////////////////////////////////////////////////////
// wird beim initialisieren des Dialogs ausgeführt
BOOL CAuswertungView::OnInitDialog()
{
CDialog::OnInitDialog();
// Spalten in die Listbox einfügen
m_TankdatenC.InsertColumn(0,"Datum",LVCFMT_RIGHT,68,LVCFMT_CENTER); // Spalte für Datum anlagen
m_TankdatenC.InsertColumn(1,"km-Stand",LVCFMT_RIGHT,80,LVCFMT_CENTER); // Spalte für km-Stand anlagen
m_TankdatenC.InsertColumn(2,"Spritmenge",LVCFMT_RIGHT,70,LVCFMT_CENTER); // Spalte für Spritmenge anlagen
m_TankdatenC.InsertColumn(3,"Kosten",LVCFMT_RIGHT,70,LVCFMT_CENTER); // Spalte für Spritkosten anlagen
m_TankdatenC.InsertColumn(4,"gefahren km",LVCFMT_RIGHT,80,LVCFMT_CENTER); // Spalte für gefahrene Strecke anlagen
m_TankdatenC.InsertColumn(5,"Verbrauch/100km",LVCFMT_RIGHT,100,LVCFMT_CENTER); // Spalte für Verbrauch anlagen
m_TankdatenC.InsertColumn(6,"Kosten/100km",LVCFMT_RIGHT,85,LVCFMT_CENTER); // Spalte für Kosten anlagen
ListView_SetExtendedListViewStyle(m_TankdatenC,LVS_EX_GRIDLINES); // Gitternetz einfügen
RefreshList(); // List mit Werten füllen
return TRUE;
} // OnInitDialog()
/////////////////////////////////////////////////////////////////////////////
// Liste aktualisieren
void CAuswertungView::RefreshList()
{
COleVariant var,i_var,c_var,d_var; // Variablen für den Datenaustausch mit der DB
var.ChangeType(VT_BSTR, NULL);
i_var.ChangeType(VT_R4, NULL);
d_var.ChangeType(VT_DATE, NULL);
CString sql,strItem; // locale CString-Variablen
CString Datum,Stand; // Variablen für Listenausgabe
int i=0; // locale int-Variable
long last_Stand=0, gefahrene_km; // long-Variablen für Listenausgabe
float Spritmenge,Spritkosten; // float-Variablen für Listenausgabe
float Spritmenge_ges=0, Kosten_ges=0, km_ges=0, preis_schnitt, kosten_schnitt, sprit_schnitt; // float-Variablen für Statistikwerte
m_TankdatenC.DeleteAllItems(); // Listbox zurücksetzen
sql.Format(_T("SELECT * FROM Tankdaten WHERE Fahrzeug_ID = %d ORDER BY kmStand"),searchID); // Tankdaten zu dem ausgewählten Fahrzeug aus DB lesen
tdset3.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL); // RecordSet öffnen
while(!tdset3.IsEOF()) // bis zum Ende des RecordSet ausführen
{
// Werte aus dem RecordSet auslesen
tdset3.GetFieldValue("Datum",d_var);
Datum = COleDateTime(d_var).Format();
m_TankdatenC.InsertItem(0,Datum,0);
tdset3.GetFieldValue("kmStand",i_var);
strItem.Format(_T("%d km"), i_var.lVal);
m_TankdatenC.SetItemText(0,1,strItem);
if (last_Stand == 0) last_Stand = Start_kmStand;
gefahrene_km = (long)i_var.lVal - last_Stand;
strItem.Format(_T("%d km"), gefahrene_km);
m_TankdatenC.SetItemText(0,4,strItem);
last_Stand = (long)i_var.lVal;
km_ges += gefahrene_km;
tdset3.GetFieldValue("Spritmenge",i_var);
Spritmenge = (float)i_var.dblVal;
strItem.Format(_T("%5.2f l"),Spritmenge);
m_TankdatenC.SetItemText(0,2,strItem);
Spritmenge_ges += Spritmenge;
tdset3.GetFieldValue("Kosten",i_var);
Spritkosten = (float)i_var.dblVal;
strItem.Format(_T("%5.2f EUR"),Spritkosten);
m_TankdatenC.SetItemText(0,3,strItem);
Kosten_ges += Spritkosten;
// Statistikwerte berechnen und ausgeben
strItem.Format(_T("%5.2f l"), (Spritmenge / gefahrene_km * 100));
m_TankdatenC.SetItemText(0,5,strItem);
strItem.Format(_T("%5.2f EUR"), (Spritkosten / gefahrene_km * 100));
m_TankdatenC.SetItemText(0,6,strItem);
i++;
tdset3.MoveNext(); // zum nächsten Datensatz
}
if (i > 0) // wenn Datensatze vorhanden
{
// Statistikwerte berechnen
preis_schnitt = Kosten_ges / Spritmenge_ges;
kosten_schnitt = Kosten_ges / km_ges * 100;
sprit_schnitt = Spritmenge_ges / km_ges * 100;
// Statistikwerte ausgeben
UpdateData(TRUE);
m_km_ges.Format(_T("%9.0f km"),km_ges);
m_kosten_ges.Format(_T("%6.2f EUR"),Kosten_ges);
m_sprit_ges.Format(_T("%6.2f l"),Spritmenge_ges);
m_preis_schnitt.Format(_T("%5.2f EUR"),preis_schnitt);
m_kosten_schnitt.Format(_T("%5.2f EUR"),kosten_schnitt);
m_sprit_schnitt.Format(_T("%5.2f l"),sprit_schnitt);
UpdateData(FALSE);
}
else // Wenn keine Daten vorhanden => Meldung ausgeben
{
AfxMessageBox(_T("Für dieses Fahrzeug stehen noch keine Tankdaten zur Verfügung."));
}
} // RefreshList()