Eingabespeicherung bei Fahrtenbuch



  • teil das ding doch erstmal in schöne functionen ein, denn das gabs auch schon in c dann schauen wir weiter 🙂



  • @functioner: Ich weiß nicht was du hast du Programm ist in zwei Funktionen aufgeteilt:
    in die Funktion Fahrtenbuch Eintrag und Uebersicht.

    @ f.-th.:
    Hier habe ich mal einen kleinen Auschnitt aus einen Taschenrechner von mir:

    #include "stdafx.h"
    #include <iostream>
    #include <math.h>
    using namespace std;
    
    //+, -, *, /, %, Quadrat, Wurzel
    void main()
    {
    int izahl1 = 0,
    	izahl2 = 0,
    	izahl3 = 0,
    	izahl4 = 0,
    	izmenge = 0,
    	iergebnis;
    float fergebnis;
    char auswahl,
    	 entscheidung = 0;
    
    do
    {
    printf("Bitte Waehlen sie eine Rechenart aus:\n + = addieren \n - = subtrahieren \n * = multiplizieren \n / = dividieren \n %% = Modulo \n Q = Quadrat \n W = Wurzel\n>>\a\a\a\a\a\a\a\a\a\a");
    cin >> auswahl;
    
    switch(auswahl)
    {
    case'+':	printf("Wieviel Zahlen moechten sie addieren?(min. 2 maximal 4)");
    			cin >> izmenge;
    			if(izmenge == 2)
    			{
    				printf("Bitte zwei Zahlen eingeben:\n");
    				cin >> izahl1;
    				cin >> izahl2;
    				iergebnis = izahl1 + izahl2;
    				printf("Das Ergebnis ist: %d\n",iergebnis); 
    			}
    
    			if(izmenge == 3)
    			{
    				printf("Bitte drei Zahlen eingeben:\n");
    				cin >> izahl1;
    				cin >> izahl2;
    				cin >> izahl3;
    				iergebnis = izahl1 + izahl2 + izahl3;
    				printf("Das Ergebnis ist: %d\n", iergebnis);
    
    			}
    
    			if(izmenge == 4)
    			{
    				printf("Bitte vier Zahlen eingeben:\n");
    				cin >> izahl1;
    				cin >> izahl2;
    				cin >> izahl3;
    				cin >> izahl4;
    				iergebnis = izahl1 + izahl2 + izahl3 + izahl4;
    				printf("Das Ergebnis ist: %d\n", iergebnis);
    
    			}
    			break;
    hoffe das hilft der weiter mir zu helfen
    


  • bei deinem ersten programm sollte _keine_ function länger als 10 zeilen sein also 160 / 10 = 16 und nicht 2...



  • @functioner: die länge der Funktionen ist total irrelevant für meine frage.



  • Extension „dat“ zusammensetzen. Beispiel: Juni2010.dat.

    Wäre die Struktur FBJJJJMM.dat als Dateiname nicht besser?
    Die läßt sich sortieren.

    struct Fahrtenbuch Eintrag()
    {
      struct Fahrtenbuch Fahrt;
      ...
      return Fahrt;
    }
    

    kann schieflaufen, besser (wenn auch dann immer noch nicht threadsafe)

    struct Fahrtenbuch Eintrag()
    {
      static struct Fahrtenbuch Fahrt;
      ...
      return Fahrt;
    }
    


  • könnte man den namen auch mit sprintf ändern??
    wenn ja wie?



  • Kann man machen, ist aber nicht das Hauptproblem.
    Folgender Ansatz sollte helfen:

    typedef struct
    {
        char Monat[20];
        int TagDerFahrt;
        float Startzeit;
        float Endzeit;
        int gKilometer;
        char Ziel[50];
        char GrundFahrt[50];
    }  Fahrt;
    
    Fahrt Eintrag();
    void Uebersicht(Fahrt);
    
    main()
    {
    	int auswahl;
    	Fahrt fahrt;
    	while(1)
    		switch(puts(
    "Willkommen zu Ihren Fahrtenbuch\n"
    "Was moechten Sie tun???\n"
    "1 = einen Eintrag in das Fahrtenbuch machen\n2 = Uebersicht vom Fahrtenbuch\nsonst = Ende\n"
    "Auswahl:"),(auswahl=getchar())=='\n'?getchar():auswahl) {
        case '1': fahrt = Eintrag(); break;
        case '2': Uebersicht(fahrt); break;
        default: return 0;
    	}
    	return 1;
    }
    

    Die eigentliche Funktionalität gehört in die Funktionen, dass Hauptprogramm kümmert sich nur um die Benutzerschnittstelle.



  • habe die Funktion Uebersicht überarbeitet sie ist zwar fertig bloß gibt er mir diese Fehler aus:

    error C2664: 'fwrite': Konvertierung des Parameters 4 von 'char [20]' in 'FILE *' nicht möglich
    error C2664: 'fseek': Konvertierung des Parameters 1 von 'char [20]' in 'FILE *' nicht möglich
    error C2664: 'fread': Konvertierung des Parameters 4 von 'char [20]' in 'FILE *' nicht möglich
    error C2664: 'fclose': Konvertierung des Parameters 1 von 'char [20]' in 'FILE *' nicht möglich

    Quelltext:

    void Uebersicht(struct Fahrtenbuch Fahrt)
    {
    	char datei[20]="test.txt", textpuffer[100];
    	int rueck = 0;
    	FILE * fp;
    	sprintf(datei,"%d %s.dat",Fahrt.Jahr,Fahrt.Monat);
    
    	fp=fopen(datei,"a+");
    
    	if(datei == NULL)
    	{
    		printf("Fehler beim Oeffnen der Datei! \n");
    	}
    	else
    	{
    		rueck = fwrite(&Fahrt, sizeof(Fahrt), 1, datei);
    
    		if(rueck != 0)
    		{
    			//filepointer an anfang setzen
    			fseek(datei, 0, SEEK_SET);
    			rueck = fread(&Fahrt, sizeof(Fahrt), 1, datei);
    
    			if(rueck != 0)
    			{
    				printf("|Tag der Fahrt|Startzeit|Endzeit|gefahr.Kilometer|   Ziel   |GrundDerFahrt|\n");
    	printf("|-------------|---------|-------|----------------|----------|-------------|\n");
    	printf("|%d           |%.2f     |%.2f   |%d              |%s        |%s           |\n",Fahrt.TagDerFahrt,Fahrt.Startzeit,Fahrt.Endzeit,Fahrt.gKilometer,Fahrt.Ziel,Fahrt.GrundFahrt);
    
    			}
    		}
    		else
    		{
    			printf("Fehler beim Schreiben in Datei! \n");
    		}
    
    		fclose(datei);
    	}
    
    }
    

    Bitte um Verbesserungsvorschläge



  • Die Fehlermeldungen sind doch wohl eindeutig.
    Ersetze dort mal datei durch fp.



  • THX für die Hilfe funktioniert ohne Fehler.


Anmelden zum Antworten