Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "funktionen.h"
- #include "fhswf_service.h"
- #include "service.h"
- void dateiinhalt_loeschen(struct Student *person, int anzahl, FILE* meine_datei)
- {
- int nummer, ueberspringen, fehler, auswahl = -1;
- char eingabem[EINGABELIMIT] = { 0 };
- char ende[5] = { "ende" };
- char beenden[20];
- do
- {
- printf("\nGeben sie 'ende' ein um abzubrechen");
- printf("\nWelcher Eintrag soll geloescht werden [matrikelnummer] ", anzahl - 1);
- scanf("%s", eingabem);
- tastaturpuffer_leeren();
- strcpy(beenden, eingabem);
- fehler = checkInput_int(eingabem, strlen(eingabem)); // fehleingaben abfangen
- nummer = atoi(eingabem);
- rewind(meine_datei);
- for (int index = 0; index < anzahl; index++)
- {
- datei_lesen(person, meine_datei);
- if (person->matrikelnummer == nummer)
- {
- auswahl = index;
- index = anzahl;
- }
- }
- if (strcmp(beenden, ende) == 0)
- {
- fehler = 0;
- auswahl = 1;
- }
- if (fehler > 0 || auswahl < 0)
- {
- printf("Fehler in der Eingabe !\n");
- getchar();
- }
- } while (fehler > 0 || auswahl < 0);
- // überspringt die zeichen die nicht verändert werden sollen
- ueberspringen = (auswahl * MAXBYTES);
- rewind(meine_datei);
- fseek(meine_datei, ueberspringen, SEEK_SET);
- strcpy(person->name, "GELOESCHT");
- strcpy(person->vorname, "GELOESCHT");
- person->mathe_z = 0;
- person->programmieren_z = 0;
- person->datenstrukturen_z = 0;
- person->matrikelnummer = -1;
- fwrite(person, 76, 1, meine_datei);
- }
- //-------------------Datei oeffnen zum Lesen und Schreiben -----------------------
- FILE* datei_oeffnen()
- {
- FILE* meine_datei;
- meine_datei = fopen(DATEINAME, "ab+");
- // wenn nicht erfolgreich --> Fehler zurückgeben und Programm beenden
- if (!meine_datei)
- {
- return(NULL);
- }
- return(meine_datei);
- }
- //-------------------Datei oeffnen zum Lesen und Schreiben -----------------------
- FILE* datei_oeffnen_aendern()
- {
- FILE* meine_datei;
- meine_datei = fopen(DATEINAME, "rb+");
- // wenn nicht erfolgreich --> Fehler zurückgeben und Programm beenden
- if (!meine_datei)
- {
- return(NULL);
- }
- return(meine_datei);
- }
- //-------------------Dateigroesse bestimmen ----------------------
- int get_dateigroesse(FILE* meine_datei)
- {
- int dummy = 0, anzahl = 0;
- // da beim Öffnen Dateipositionszeiger ggf. am Ende
- rewind(meine_datei);
- // Datei lesen und Einträge zählen
- do
- {
- fread(&dummy, 1, 1, meine_datei);
- anzahl++;
- } while (!feof(meine_datei));
- dummy = 0;
- // da feof() erst nach Zugriff über Dateiende Wert ändert
- anzahl--;
- anzahl = anzahl / MAXBYTES;
- // Dateipositionszeiger wieder auf Anfang
- rewind(meine_datei);
- return(anzahl);
- }
- //----------------------Daten aus Datei lesen -----------------------------
- void datei_lesen(struct Student *person1, FILE* meine_datei)
- {
- int index, groesse;
- groesse = sizeof(struct Student);
- // Daten aus Datei lesen und in Feld schreiben
- fread(person1, groesse, 1, meine_datei);
- }
- //-----------------------------Daten eingeben -------------------------------
- int daten_eingeben(struct Student *person, FILE* meine_datei, int fall)
- {
- int laenge;
- int anzahl1;
- char eingabeN[EINGABELIMIT] = { 0 };
- char eingabeV[EINGABELIMIT] = { 0 };
- char eingabe_matrikelnummer[EINGABELIMIT] = { 0 };
- char eingabe_zensuren[EINGABELIMIT] = { 0 };
- char matrikelnummer_feld[EINGABELIMIT] = { 0 };
- int matrikelnummer, input, fehler;
- float mathe_z;
- float datenstruktur_z;
- float programmieren_z;
- char ende[5] = { "ende" };
- int restart = 0; int index = 0;
- if (fall == 1)
- {
- printf("Die Eingabe wird mit \"ende\" beendet.");
- do
- {
- restart = 0;
- for (int index = 0; index < EINGABELIMIT; index++)
- {
- eingabeN[index] = 0;
- eingabeV[index] = 0;
- }
- printf("\nName eingaben: ");
- gets_s(eingabeN);
- if (!strcmp(eingabeN, ende))
- continue;
- printf("Vorname eigeben: ");
- gets_s(eingabeV);
- if (eingabeN[0] == 0 || eingabeV == 0)
- {
- printf("Fehleingabe!");
- restart = 1;
- }
- do
- {
- printf("Matrikelnummer eingeben: ");
- scanf("%s", eingabe_matrikelnummer);
- tastaturpuffer_leeren();
- fehler = checkInput_int(eingabe_matrikelnummer, strlen(eingabe_matrikelnummer));
- laenge = strlen(eingabe_matrikelnummer);
- if (laenge != maximum)
- {
- printf("\nMatrikelnummer muss aus %i Zahlen bestehen!\n", maximum);
- fehler++;
- }
- matrikelnummer = atoi(eingabe_matrikelnummer);
- anzahl1 = get_dateigroesse(meine_datei);
- for (int index = 0; index < anzahl1; index++)
- {
- datei_lesen(person, meine_datei);
- if (person->matrikelnummer == matrikelnummer)
- {
- index = anzahl1;
- fehler++;
- printf("\nIdentische Matrikelnummer existiert bereits!\n");
- }
- }
- for (int index = 0; index < get_dateigroesse(meine_datei) + 1; index++)
- {
- if (matrikelnummer_feld[index] == matrikelnummer)
- {
- printf("\nLeider Falsche Matrikelnummer! \n");
- printf("Jede Matrikelnummer darf nur einmal vorhanden sein!! \n\n");
- fehler++;
- }
- if (matrikelnummer_feld[index] == 0 && fehler == 0)
- {
- matrikelnummer_feld[index] = matrikelnummer;
- }
- }
- } while (fehler > 0);
- do
- {
- printf("Mathe Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- mathe_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- do
- {
- printf("Programmieren Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- programmieren_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- do
- {
- printf("Datenstruktur Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- datenstruktur_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- if (restart == 0)
- {
- strcpy(person->vorname, eingabeV);
- strcpy(person->name, eingabeN);
- person->matrikelnummer = matrikelnummer;
- person->mathe_z = mathe_z;
- person->programmieren_z = programmieren_z;
- person->datenstrukturen_z = datenstruktur_z;
- datei_schreiben(person, meine_datei);
- }
- } while (restart == 1 || strcmp(eingabeN, ende));
- return 0;
- }
- else
- {
- do
- {
- restart = 0;
- for (index = 0; index < EINGABELIMIT; index++)
- {
- eingabeN[index] = 0;
- eingabeV[index] = 0;
- }
- do
- {
- printf("Mathe Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- mathe_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- do
- {
- printf("Programmieren Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- programmieren_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- do
- {
- printf("Datenstruktur Zensur eingeben: ");
- scanf("%s", eingabe_zensuren);
- tastaturpuffer_leeren();
- fehler = checkInput_float(eingabe_zensuren, strlen(eingabe_zensuren));
- datenstruktur_z = atof(eingabe_zensuren);
- } while (fehler > 0);
- person->mathe_z = mathe_z;
- person->programmieren_z = programmieren_z;
- person->datenstrukturen_z = datenstruktur_z;
- } while (restart == 1);
- return(1);
- }
- }
- //Daten in Datei schreiben
- void datei_schreiben(struct Student *person, FILE* meine_datei)
- {
- // Dateipositionszeiger ans Ende
- fseek(meine_datei, 0, SEEK_END);
- // Feldelemente in Datei schreiben
- fwrite(person, 76, 1, meine_datei);
- }
- //Schreibt neuen zensuren in die Datei
- void datei_schreiben_ersetzen(struct Student *person, FILE* meine_datei)
- {
- fwrite(&person->mathe_z, 4, 1, meine_datei);
- fwrite(&person->programmieren_z, 4, 1, meine_datei);
- fwrite(&person->datenstrukturen_z, 4, 1, meine_datei);
- }
- //Dateiinhalt ändern
- void dateiinhalt_aendern(struct Student *person, int anzahl, FILE* meine_datei)
- {
- int position_neu, position, ueberspringen, auswahl = -1;// Variable zum Navigieren in der Datei
- int nummer, neuer_wert, fehler = 0; // Variablen für neuen Wert
- char zeichen, eingabem[EINGABELIMIT] = { 0 };
- int durchlauf = 0;
- char beenden[20];
- char ende[5] = { "ende" };
- rewind(meine_datei); // Dateipositionszeiger auf Anfang
- position = 0;
- // Schleife für mehrere Änderungen
- do
- {
- // Schleife für Fehleingaben
- do
- {
- printf("\nGeben sie 'ende' ein um abzubrechen");
- printf("\nWelcher Eintrag soll veraendert werden [matrikelnummer] ", anzahl - 1);
- scanf("%s", eingabem);
- tastaturpuffer_leeren();
- strcpy(beenden, eingabem);
- fehler = checkInput_int(eingabem, strlen(eingabem)); // fehleingaben abfangen
- nummer = atoi(eingabem);
- rewind(meine_datei);
- for (int index = 0; index < anzahl; index++)
- {
- datei_lesen(person, meine_datei);
- if (person->matrikelnummer == nummer)
- {
- auswahl = index;
- index = anzahl;
- }
- }
- if (strcmp(beenden, ende) == 0)
- {
- fehler = 0;
- auswahl = 1;
- }
- if (fehler > 0 || auswahl < 0)
- {
- printf("Fehler in der Eingabe !\n");
- getchar();
- }
- } while (fehler > 0 || auswahl < 0);
- if (strcmp(beenden, ende) == 0)
- {
- zeichen = 'N';
- continue;
- }
- ueberspringen = (auswahl * MAXBYTES) + 64;
- rewind(meine_datei);
- fseek(meine_datei, ueberspringen, SEEK_SET);
- daten_eingeben(person, meine_datei, 2);
- datei_schreiben_ersetzen(person, meine_datei);
- printf("\nNoch eine Aenderung ? J/N ");
- scanf("%c", &zeichen);
- tastaturpuffer_leeren();
- // wandeln in Großbuchstaben
- zeichen = toupper(zeichen);
- durchlauf++;
- } while (zeichen == 'J');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement