Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe bei Projekt (reines C)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.01.2014, 15:46 Uhr
~PepTic
Gast


Hallo erstmal!

Ich muss ein Kontoprogramm erstellen, dies hab ich auch soweit geschafft, aber da ich mehr und mehr auf Fehler gestoßen bin und rumgebastelt habe, hab ich mir den Code ziemlich versaut...

Ich komme einfach nicht weiter, da ich nicht weiß wie ich die Fehler behebe.

Wäre nett wenn mir Jemand helfen könnte

main.c

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "konto.h"
#include <conio.h>
int main(void)
{
    konto konten;
    int auswahl;
    int IDZaehler = 100;
    float guthaben;
    
    do
    {
        printf("-----------------------------------KONTOFUEHRUNG--------------------------------\n");
        printf("Herzlich Willkommen \n");
        printf("------------------- \n\n");
        printf("1) Konto erstellen\n");
        printf("2) Konto anzeigen\n");
        printf("3) Konto loeschen\n");
        printf("4) Ueberweisung\n");
        printf("0) Beenden\n\n");
        printf("------------------- \n");
        printf("Auswahl: ");
        scanf("%i", &auswahl);
        
        
        switch(auswahl)
        {
            case 0:
                speichere_konto(&konten);
                return 0;
                break;
            case 1:
                erstelle_konto(&konten);
                IDZaehler++;
                break;
            case 2:
                printf("Geben sie die Kontonummer ein: ");
                scanf("%d", &konten.kontonummer);
                zeige_konto(&konten);
                break;
            case 3:
                printf("Geben sie die Kontonummer ein: ");
                scanf("%d", &konten.kontonummer);
                loesche_konto(&konten);
                printf("Konto wurde geloescht\n");
                break;
            case 4:
                printf("Geben sie die Kontonummer ein, von der abgebucht werden soll: ");
                scanf("%d", &konten.kontonummer);
                printf("Geben sie die Kontonummer ein, an die ueberwiesen werden soll: ");
                scanf("%d", &konten.kontonummer);
                printf("Geben sie den Betrag ein, der ueberwiesen werden soll: ");
                scanf("%f", &guthaben);
                ueberweisung(guthaben);
                break;
            default:
                break;
        }
        printf("Druecken Sie eine beliebige Taste um vorzufahren");
        getch();
        system("cls");
    } while(auswahl);
        return;
}

void erstelle_konto()
{
    printf("\n\nVorname:     ");
    scanf("%s", &konten->vorname);
    printf("Nachname:    ");
    scanf("%s", &konten->nachname);
    printf("Kontostand:  ");
    scanf("%f", &konten->kontostand);
    printf("Kontonummer: %d\n", &konten->kontonummer);
    printf("Konto wurde erstellt!\n\n\n");
    
}

void loesche_konto() //man kann nichtvorhandene konten löschen
{
    strcpy(konten->vorname, "");
    strcpy(konten->nachname, "");
    konten->kontostand = 0;
}

void zeige_konto()
{
    if(strlen(konten->vorname) == 0 || strlen(konten->nachname) == 0)
    {
        printf("\n\nDieses Konto existiert nicht!\n\n\n");
    }
    else
    {
        printf("\n\nVorname:     %s\n", konten->vorname);
        printf("Nachname:    %s\n", konten->nachname);
        printf("Kontostand:  %.2f\n", konten->kontostand);
        printf("Kontonummer: %d\n\n\n", konten->kontonummer);
    }
}

void speichere_konto()
{
    
    FILE *datei;
    datei = fopen("Konten.txt", "a+");
    
    if(datei == NULL)
    {
        printf("\nFEHLER BEIM SPEICHERN");
    }

    else
    {
        fprintf(datei, "Kontonummer: %d\nVorname:     %s\nNachname:    %s\nKontostand:  %.2f\n\n", konten->kontonummer, konten->vorname, konten->nachname, konten->kontostand);
    }
    fclose(datei);
}

void ueberweisung(float guthaben)
{
    

    if(konten->kontostand - guthaben < 0)
    {
        printf("\n\nNicht genug Guthaben!\n\n");
    }
    else
    {
        konten->kontostand = konten->kontostand - guthaben;
        konten->kontostand = konten->kontostand + guthaben;
        printf("\n\nUeberweisung erfolgreich!\n\n");
    }
}


konto.h

Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>



struct konto
{
    char vorname[20];
    char nachname[20];
    double kontostand;
    int kontonummer;
}konten[1000];
typedef struct konto konto;

void erstelle_konto();
void loesche_konto();
void zeige_konto();
void speichere_konto();
void ueberweisung(float);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.01.2014, 17:14 Uhr
~f.-th.
Gast


Nur Überflogen - Kommentare im Quelltext

konto.h

C++:
#include <stdio.h>  // die Header brauchst du hier, in dieser Datei, doch nicht?
#include <stdlib.h>  // die Header brauchst du hier doch nicht?
#include <conio.h>  // die Header brauchst du hier doch nicht?



struct konto
{
    char vorname[20];
    char nachname[20];
    double kontostand;  // okay hier double
    int kontonummer;
}konten[1000];
typedef struct konto konto;

void erstelle_konto();
void loesche_konto();
void zeige_konto();
void speichere_konto();
void ueberweisung(float);  // warum hier dann float?




main.c ( Ausschnitt )
[/cpp]
void erstelle_konto()
{
printf("\n\nVorname: ");
scanf("%s", &konten->vorname); // scanf("%s", & <= ??? soll das so?
printf("Nachname: ");
scanf("%s", &konten->nachname);
printf("Kontostand: ");
scanf("%f", &konten->kontostand);
printf("Kontonummer: %d\n", &konten->kontonummer);
printf("Konto wurde erstellt!\n\n\n");

}
[/cpp]

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.01.2014, 17:16 Uhr
~f.-th.
Gast


Ein Slash zuviel:

main.c ( Ausschnitt )

C++:
void erstelle_konto()
{
  printf("\n\nVorname: ");
  scanf("%s", &konten->vorname); // scanf("%s", & <= ??? soll das so?
  printf("Nachname: ");
  scanf("%s", &konten->nachname);
  printf("Kontostand: ");
  scanf("%f", &konten->kontostand);
  printf("Kontonummer: %d\n", &konten->kontonummer);
  printf("Konto wurde erstellt!\n\n\n");

}



MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.01.2014, 17:40 Uhr
~PepTic
Gast



Zitat von ~f.-th.:
Ein Slash zuviel:

main.c ( Ausschnitt )

C++:
void erstelle_konto()
{
  printf("\n\nVorname: ");
  scanf("%s", &konten->vorname); // scanf("%s", & <= ??? soll das so?
  printf("Nachname: ");
  scanf("%s", &konten->nachname);
  printf("Kontostand: ");
  scanf("%f", &konten->kontostand);
  printf("Kontonummer: %d\n", &konten->kontonummer);
  printf("Konto wurde erstellt!\n\n\n");

}



MfG f.-th.


na eben das weiß ich ja nicht :/
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.01.2014, 19:44 Uhr
~PepTic
Gast


Hab den Code nochmal überarbeitet:


Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "konto.h"
#include <conio.h>
int main()
{
    int auswahl;
    int IDZaehler = 100;
    int kontoID;
    int kontoID2;
    double guthaben;
    
    do
    {
        printf("-----------------------------------KONTOFUEHRUNG--------------------------------\n");
        printf("Herzlich Willkommen \n");
        printf("------------------- \n\n");
        printf("1) Konto erstellen\n");
        printf("2) Konto anzeigen\n");
        printf("3) Konto loeschen\n");
        printf("4) Ueberweisung\n");
        printf("0) Beenden\n\n");
        printf("------------------- \n");
        printf("Auswahl: ");
        scanf("%i", &auswahl);
        
        
        switch(auswahl)
        {
            case 0:
                speichere_konto(kontoID);
                return 0;
                break;
            case 1:
                erstelle_konto(IDZaehler);
                IDZaehler++;
                break;
            case 2:
                printf("Geben sie die Kontonummer ein: ");
                scanf("%d", &kontoID);
                zeige_konto(kontoID);
                break;
            case 3:
                printf("Geben sie die Kontonummer ein: ");
                scanf("%d", &kontoID);
                loesche_konto(kontoID);
                printf("Konto wurde geloescht\n");
                break;
            case 4:
                printf("Geben sie die Kontonummer ein, von der abgebucht werden soll: ");
                scanf("%d", &kontoID);
                printf("Geben sie die Kontonummer ein, an die ueberwiesen werden soll: ");
                scanf("%d", &kontoID2);
                printf("Geben sie den Betrag ein, der ueberwiesen werden soll: ");
                scanf("%f", &guthaben);
                ueberweisung(kontoID, kontoID2, guthaben);
                break;
            default:
                break;
        }
        printf("Druecken Sie eine beliebige Taste um vorzufahren");
        getch();
        system("cls");
    } while(auswahl);
        return;
}

void erstelle_konto(int ID)
{
    
    printf("\n\nVorname:     ");
    scanf("%s", konten[ID].vorname);
    printf("Nachname:    ");
    scanf("%s", konten[ID].nachname);
    printf("Kontostand:  ");
    scanf("%f", &konten[ID].kontostand);
    printf("Kontonummer: %d\n", ID);
    konten[ID].kontonummer = ID;
    printf("Konto wurde erstellt!\n\n\n");
    
}

void loesche_konto(int ID) //man kann nichtvorhandene konten löschen
{
    strcpy(konten[ID].vorname, "");
    strcpy(konten[ID].nachname, "");
    konten[ID].kontostand = 0;
}

void zeige_konto(int ID)
{
    if(strlen(konten->vorname) == 0 || strlen(konten->nachname) == 0)
    {
        printf("\n\nDieses Konto existiert nicht!\n\n\n");
    }
    else
    {
        printf("\n\nVorname:     %s\n", konten[ID].vorname);
        printf("Nachname:    %s\n", konten[ID].nachname);
        printf("Kontostand:  %.2f\n", konten[ID].kontostand);
        printf("Kontonummer: %d\n\n\n", konten[ID].kontonummer);
    }
}

void speichere_konto(int ID)
{
    
    FILE *datei;
    datei = fopen("Konten.txt", "a+");
    
    if(datei == NULL)
        
    {
        printf("\nFEHLER BEIM SPEICHERN");
        return;
    }

    else
    {
        fprintf(datei, "Kontonummer: %d\nVorname:     %s\nNachname:    %s\nKontostand:  %.2f\n\n", konten[ID].kontonummer, konten[ID].vorname, konten[ID].nachname, konten[ID].kontostand);
    }
    fclose(datei);
    
}

void ueberweisung(int vonID, int zuID, double guthaben)
{
    

    if(konten->kontostand - guthaben < 0)
    {
        printf("\n\nNicht genug Guthaben!\n\n");
    }
    else
    {
        konten[vonID].kontostand = konten[vonID].kontostand - guthaben;
        konten[zuID].kontostand = konten[zuID].kontostand + guthaben;
        printf("\n\nUeberweisung erfolgreich!\n\n");
    }
}




Code:
struct konto
{
    char vorname[20];
    char nachname[20];
    double kontostand;
    int kontonummer;
}konten[1000];
typedef struct konto konto;

void erstelle_konto(int);
void loesche_konto(int);
void zeige_konto(int);
void speichere_konto(int);
void ueberweisung(int, int, double);




Wenn ich jetzt Konto anzeigen auswähle, sagt er mir es existiert nicht.
in die Datei wird es aber geschrieben, nur der Kontostand ist 0.00

bekomme außerdem diesen Compilerfehler:
Nicht initialisierter Speicher "kontoID" wird verwendet.: Lines: 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29, 31, 32

und

Die möglicherweise nicht initialisierte lokale Variable "kontoID" wurde verwendet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.01.2014, 20:59 Uhr
~f.-th.
Gast


Dein Compiler hat recht


C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "konto.h"
#include <conio.h>

int main(void)
{
    int auswahl;
    int IDZaehler = 100;
    int kontoID;
    int kontoID2;
    double guthaben;
    
    do
    {
        printf("-----------------------------------KONTOFUEHRUNG--------------------------------\n");
        printf("Herzlich Willkommen \n");
        printf("------------------- \n\n");
        printf("1) Konto erstellen\n");
        printf("2) Konto anzeigen\n");
        printf("3) Konto loeschen\n");
        printf("4) Ueberweisung\n");
        printf("0) Beenden\n\n");
        printf("------------------- \n");
        printf("Auswahl: ");
        scanf("%i", &auswahl);
        
        
        switch(auswahl)
        {
            case 0:
                speichere_konto(kontoID);  // du willst hier speichern, aber wie gross ist kontoID?
                return 0;  // ?
                break;  // diese Zeile wird dank der vorigen nie erreicht
            case 1:



MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.01.2014, 22:35 Uhr
~PepTic
Gast


kontoID soll eigentlich die, im Programm erstellten Konten, beinhalten.
Wie bekomm ich das denn hin?

return 0 funktioniert aber, oder was sollte ich da hinschreiben?

Das erstellte Konto wird erst in die Datei geschrieben, wenn ich Konto Anzeigen auswähle, dennoch wird im Ausgabefenster "Dieses Konto existiert nicht!" ausgegeben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.01.2014, 19:46 Uhr
~PepTic
Gast


Jetzt passt soweit alles, nur möchte ich, dass ich zu Beginn des Programms auf den Inhalt der Datei zugreifen und ihn verwenden kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.01.2014, 00:24 Uhr
Hans
Library Walker
(Operator)


Hi,

Nun ja, dann solltest Du vor der do-Schleife die Datei lesen. Also:

C++:
datei = fopen("Konten.txt", "r"); // Datei zum lesen öffnen
// Falls die Datei nicht existiert, irgendwie drauf reagieren
// Wenn sie existiert, Inhalt lesen.


Die Fehlerbehandlung solltest Du unbedingt mit einbauen, denn sonst wird das Programm mit einer Fehlermeldung seitens des Betribssystems beendet, falls die Datei nicht existiert. Oder es stürzt ab.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: