Ausgabe eines einzelenen Mitarbeiters aus einer .dat datei
-
Hallo ich möchte aus einer dat-datei wo ich voher mitarbeiter gespeichert habe einen direkt auslesen wie mach ich das?
-
Datei öffnen,
Daten auslesen,
Datei schließen.PS. Meine Glaskugel wird gerade kalibriert, Kaffe trinke ich nicht und die Hühnerknochen sind auch noch nicht auf 2012 eingestellt.
-
Und wo hast Du Deine Runen wieder verlegt?
-
was für runen?
-
Waldorf schrieb:
Und wo hast Du Deine Runen wieder verlegt?
Sind bei der Wintersonnenwendfeier verloren gegangen.
@sebl11
Du sollst nicht meine Runen suchen, sondern dein Problem besser Erklären.
Am besten mit Beispiel wie du die Daten erzeugt hast.
Ansonsten: http://www.c-plusplus.net/forum/136013
-
Nur ein paar Klicks:
http://www.runenorakel-online.de/
-
ich weiß nicht wie ich das herausfinde "Ausgabe eines einzelenen Mitarbeiters"
Hier der ganze Quellcode:
#include <stdio.h> #include <malloc.h> #include <string.h> #include <ctype.h> #define EINGABELAENGE 20 void clearInput(void); void addNewAccount(void); void listAll(void); void deleteAccount(void); void cleanUp(void); void saveAccounts(void); void loadAccounts(void); struct account { int number; char lastname[EINGABELAENGE + 1]; char firstname[EINGABELAENGE + 1]; float balance; struct account* next; }; struct account* firsta; int anum = 0; char* filename = "bank.dat"; int main (int argc, char*argv[] ) { char ch; firsta=NULL; loadAccounts(); if (argc == 2) { printf("ok"); } else { printf("error"); return -1; } char *dateiName = argv[1]; do { clearInput(); puts("Bitte geben Sie einen Ziffer ein f\x81r die Auswahl des Programmes"); puts("----------------------------------------------------------------------------"); puts("1. Dateneingabe"); puts("2. Tabellarische Datenausgabe"); puts("3. Datei"); puts("4. Programmende"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); ch=getchar(); ch=toupper(ch); system("cls"); switch (ch) { case '1': puts("1. Aufnahme eines neuen Mitarbeiters"); puts("2. Stundeneingabe fuer erfasste Mitarbeiter."); puts(" Bereits vorhandene Stunden sollen sofort aufaddiert werden."); puts("3. Loeschen eines Mitarbeiters"); puts("4. Zurueck zum Hauptmenue"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); { char ch1; do { ch1=getchar(); ch1=toupper(ch1); switch (ch1) { case '1': puts("----------------------------------------------------------------------------"); clearInput(); addNewAccount(); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '2': puts("----------------------------------------------------------------------------"); listAll(); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '3': puts("----------------------------------------------------------------------------"); deleteAccount(); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '4': saveAccounts(); system("cls"); default: break; } } while(ch1 != '4'); break; } case '2': puts("1. Ausgabe aller Mitarbeiter"); puts("2. Ausgabe eines einzelenen Mitarbeiters"); puts("3. Zurueck zum Hauptmenue"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); { char ch1; do { ch1=getchar(); ch1=toupper(ch1); switch (ch1) { case '1': puts("----------------------------------------------------------------------------"); listAll(); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '2': puts("----------------------------------------------------------------------------"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '3': saveAccounts(); system("cls"); default: break; } } while(ch1 != '3'); break; } case '3': puts("1. Speicherung der Mitarbeiterliste"); puts("2. Laden der Mitarbeiterliste"); puts("3. Zurueck zum Hauptmenue"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); { char ch1; do { ch1=getchar(); ch1=toupper(ch1); switch (ch1) { case '1': puts("----------------------------------------------------------------------------"); saveAccounts(); puts(" !!!Gespeichert!!!"); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '2': puts("----------------------------------------------------------------------------"); listAll(); puts("----------------------------------------------------------------------------"); puts(" Auswahl bitte Eingeben: "); puts("----------------------------------------------------------------------------"); break; case '3': system("cls"); default: break; } } while(ch1 != '3'); break; } case '4': saveAccounts(); default: break; } } while(ch != '4'); return 0; } void clearInput(void) { fflush(stdin); } char* entferneNL(char* string) { char* string2 = string; while (*string2) { if (*string2 == '\n') *string2 = '\0'; string2++; } return string; } void addNewAccount(void) { struct account* currenta; struct account* newa; newa = malloc(sizeof(struct account)); /* * Ist das der erste Datensatz? * Falls ja, dann alle Zeiger darauf einrichten */ if (firsta==NULL) firsta = currenta = newa; /* * Andernfalls das Ende der Liste finden * und die neue Struktur am Ende einfuegen */ else { currenta = firsta; while (currenta->next != NULL) currenta = currenta->next; /* der letzte Datensatz wurde gefunden */ currenta->next = newa; /* die Adresse des neuen speichern */ currenta = newa; } /* Jetzt die Struktur fuellen */ anum++; printf("%27s: %5i\n", "Verzeichnissnummer", anum); currenta->number = anum; printf("%27s: ", "Nachname des Mitarbeiters"); fgets(currenta->lastname, EINGABELAENGE, stdin); entferneNL(currenta->lastname); printf("%27s: ", "Vorname des Mitarbeiters"); fgets(currenta->firstname, EINGABELAENGE, stdin); entferneNL(currenta->firstname); printf("%27s: ", "Stunden"); scanf("%f", ¤ta->balance); /* * der neue Datensatz ist das letzte Element * der Liste, also auch kennzeichnen */ currenta->next = NULL; } void listAll(void) { struct account* currenta; if (firsta == NULL) puts("Keine Datensaetze!"); else { printf("----------------------------------------------------------------------------\n"); printf("%-20s %-20s %-20s %-11s\n", "Verzeichnissnr.", "Nachname", "Vorname", "Stundenzahl"); currenta = firsta; do { printf("%7d: %17s %20s %25.2f\n", currenta->number, currenta->lastname, currenta->firstname, currenta->balance); } while ((currenta = currenta->next) != NULL); } } void deleteAccount(void) { int record; struct account* previousa; struct account* currenta; if (firsta == NULL) { puts("Keine Datensaetze in der Datenbank!"); return; } listAll(); printf("Zu loeschende Verzeichnissnummer eingeben: "); scanf("%d", &record); currenta = firsta; while (currenta != NULL) { if (currenta->number == record) { if(currenta == firsta) firsta = currenta->next; else previousa->next = currenta->next; free(currenta); printf("Konto %d geloescht!\n", record); return; } else { previousa = currenta; currenta = currenta->next; } } printf("Konto %d wurde nicht gefunden, keine Loeschung.\n", record); } void cleanUp(void) { struct account* currenta; struct account* removea; currenta = firsta; while (currenta) { removea = currenta; currenta = currenta->next; free(removea); } } void saveAccounts(void) { FILE* datafile; struct account* currenta = firsta; if (currenta == NULL) return; datafile = fopen(filename, "w"); if (datafile == NULL) { printf("Schreibfehler in Datei %s\n", filename); return; } while (currenta != NULL) { fwrite(currenta, sizeof(struct account), 1, datafile); currenta = currenta->next; } fclose(datafile); } void loadAccounts(void) { FILE* datafile; struct account* newa; struct account* currenta; firsta = NULL; datafile = fopen(filename, "r"); if (datafile) { firsta = malloc(sizeof(struct account)); currenta = firsta; while (1) { newa = malloc(sizeof(struct account)); fread(currenta, sizeof(struct account), 1, datafile); if (currenta->next == NULL) break; currenta->next = newa; currenta = newa; } fclose(datafile); anum = currenta->number; } }
-
sebl11 schrieb:
also ich poste jetzt mal den ganzen quellcode ok
Das ist nicht gerade viel.
-
DirkB schrieb:
Met, Met bis keiner mehr steht.
-
Wie wäre es mit Einer Funktion ähnlich listAll, der du einen Namen übergibst.
void listSingle(char *Name);
In der kannst du dann mit strcmp den Mitarbeiter suchen.
Überleg dir mal ob du den Rückgabewert und die Parameter der Funktionen nicht besser nutzen kannst.
Torfrock schrieb:
Unser Häuptling heißt Rote Locke
-
DirkB schrieb:
Überleg dir mal ob du den Rückgabewert und die Parameter der Funktionen nicht besser nutzen kannst.
wie soll ich die bessere benutzen?
-
Indem du sie überhaupt benutzt.
Vermeide globale Variable.Z.B. saveAccounts()
Der kannst du den Dateinamen und den Anfang der Liste übergeben.
Zurück kommt dann der Status ob das Speichern geklappt hat oder nicht.
Denn Userkommunikation hat in so einer Funktion nichts verloren.int saveAccounts(char *filename, struct account* currenta) { // gibt 0 bei Erfolg zurück // -1 bei Fehler bei fopen // -2 bei leerer Liste FILE* datafile; ... return 0; }