Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Datensätze löschen

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
04.11.2005, 22:08 Uhr
~ico
Gast


Habne Frage kenn mich mit personen löschen nicht ganz aus verstehe Algorythmus kann aber in C nicht umsetzen. Seht euch mal an:

Schreiben Sie ein Programm, das einen Kleinunternehmer bei der Gehaltsverrechnung unterstützt, wobei bei den Angestellten folgende Daten gespeichert werden:
Vor- und Zuname, Wohnort, Gehalt.
Nach Eingabe der Informationen von beliebig vielen Angestellten in eine Datei (nur 1x durchzuführen) soll in der Datei als erste Information die Anzahl der Angestellten abgespeichert werden. Danach soll genau diese Anzahl der Angestellten in ein Array von Strukturen eingelesen werden (dynam. Speicherverwaltung). Ein weiterer Punkt soll die Möglichkeit bieten, eine Person aus der Datei zu entfernen. Hierzu müssen Sie zuerst feststellen, ob die zu löschende Person auch tatsächlich in der Liste vorhanden ist. Ist dies der Fall, so sehen sie am besten in der Struktur ein Flag „aktiv“ vor, das mit den Werten 0 (nicht aktiv) und 1 (aktiv) belegt werden kann. Wenn sie nun die Daten rückspeichern, so müssen sie bei den Personen kontrollieren, ob diese noch aktiv ist, oder nicht.

Menüpunkte:

< Daten von Datei einlesen ........................................ 1 >
< Gehaltsliste ausgeben ............................................. 2 >
< Person löschen ....................................................... 3 > => bei diesem Punkt funktioniert es nicht, verweis: case 3
< Daten in Datei schreiben ........................................ 4 >
< Programm beenden ................................................. 5 >

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

struct arbeiter{
    char vorname[50];
    char nachname[50];
    char wohnort[50];
    int grundgehalt;
    int aktiv;
};

int anz_arbeiter(int anzahl);
int allocate(struct arbeiter **daten, int anzahl);
int eingabe_arbeiter(struct arbeiter *daten, int anzahl);
int output_gehalt(struct arbeiter *daten, int anzahl);
int arbeitern_search(struct arbeiter *daten, int anzahl);


int main(int argc, char **argv){

    struct arbeiter *d;
    char weiter='j', hilf[50], *eptr=NULL;
    int anz=0,menu=0, menu1anz=0, menurestanz=0;

    do{
        if(argc!=1){
            exit(EXIT_FAILURE);
        }

        printf("< Daten von Datei einlesen ..........................................     1 >\n");
        printf("< Gehaltsliste ausgeben .............................................    2 >\n");
        printf("< Person loeschen ....................................................    3 >\n");
        printf("< Daten in Datei schreiben ..........................................    4 >\n");
        printf("< Programm beenden ..................................................    5 >\n\n\n");


        printf("Menupunkt(1-6): ");
        gets(hilf);
        menu=strtol(hilf,&eptr,10);
        if((eptr==hilf)||(*eptr!='\0')){
            exit(1);
        }

        switch(menu){
        case 1:

            if(menu1anz==0){
                clrscr();
                anz=anz_arbeiter(anz);
                allocate(&d, anz);
                eingabe_arbeiter(d, anz);
                menu1anz++;
                menurestanz++;
            }
            else{
                fprintf(stderr,"\nNur einmal im Programm moeglich\n");
            }
            break;

        case 2:

            if(menurestanz==1){
                output_gehalt(d, anz);
            }
            else{
                fprintf(stderr,"\nZuerst Menuepunkt 1 dann die restlichen\n");                
            }
            break;

        case 3:

            if(menurestanz==1){
                arbeitern_search(d, anz);
            }
            else{
                fprintf(stderr,"\nZuerst Menuepunkt 1 dann die restlichen\n");                
            }
            break;
        }

        printf("Noch einen Menuepunkt(j/n)?\n");
        weiter=getch();
        clrscr();
    }
    while((weiter=='j')||(weiter=='J'));
    
    return 0;
}

/*Name: anz_person
Parameter: int anzahl
Description: legt Anzahl fest
Rückgabewert: anzahl
*/


int anz_arbeiter(int anzahl){

    char hilf[50], *eptr=NULL;

    printf("Anzahl: ");
    gets(hilf);
    anzahl=strtol(hilf,&eptr,10);
    if((eptr==hilf)||(*eptr!='\0')){
        exit(1);
    }

    return anzahl;
}

/*Name: allocate
Parameter: struct arbeiter **daten, int anzahl
Description: reserviert Speicherplatz
Rückgabewert: return 0
*/


int allocate(struct arbeiter **daten, int anzahl){

    if((*daten=(struct arbeiter *) calloc(anzahl,sizeof(struct arbeiter)))==NULL){
        exit(1);
    }

    return 0;
}

int eingabe_arbeiter(struct arbeiter *daten, int anzahl){

    int i=0;
    FILE *fp=NULL;
    char hilf[50], *eptr=NULL;

    if((fp=fopen("daten.txt","wt"))==NULL){
        exit(1);
    }

    else{
        for(i=0;i<anzahl;i++){
            fflush(stdin);
            printf("Geben Sie bitte den Vorname ein: ");
            gets(daten[i].vorname);
            fprintf(fp,"Vorname: %s\n",daten[i].vorname);
            fflush(stdin);
            printf("Geben Sie bitte den Nachname ein: ");
            gets(daten[i].nachname);
            fprintf(fp,"Nachname: %s\n",daten[i].nachname);
            fflush(stdin);
            printf("Geben Sie bitte den Wohnort ein: ");
            gets(daten[i].wohnort);
            fprintf(fp,"Wohnort: %s\n", daten[i].wohnort);
            fflush(stdin);
            printf("Geben Sie bitte Grundgehalt ein: ");
            gets(hilf);
            daten[i].grundgehalt=strtol(hilf,&eptr,10);
            fprintf(fp,"Grundgehalt: %d", daten[i].grundgehalt);
            fflush(stdin);            
        }
    }

    if(fclose(fp)!=NULL){
        exit(1);
    }

    return 0;
}

int output_gehalt(struct arbeiter *daten, int anzahl){

    int i=0;

    for(i=0;i<anzahl;i++){
        printf("Vorname: %s\n", daten[i].vorname);
        printf("Nachname: %s\n", daten[i].nachname);
        printf("Gehalt: %d\n\n", daten[i].grundgehalt);
    }
    
    return 0;
}

int arbeitern_search(struct arbeiter *daten, int anzahl){

    char search_vorname[50], search_nachname[50];
    int i=0, anzgefunden=0;
    
    
    
    clrscr();
    printf("Geben Sie den Vornamen der gesuchten Person ein: ");
    gets(search_vorname);
    printf("Geben Sie den Nachnamen der gesuchten Person ein: ");
    gets(search_nachname);

    for(i=0;i<anzahl;i++){
        
        if((strcmp(search_vorname, daten[i].vorname)==0)&&(strcmp(search_nachname, daten[i].nachname)==0)){
            printf("\nGefunden!!!\n");
            printf("Vorname: %s\n", daten[i].vorname);
            printf("Nachname: %s\n", daten[i].nachname);
            printf("Wohnort: %s\n", daten[i].wohnort);
            printf("Grundgehalt: %d\n\n", daten[i].grundgehalt);

            daten[i].aktiv=1;

            anzgefunden++;
            
        }

        if((strcmp(search_vorname, daten[i].vorname)==1)&&(strcmp(search_nachname, daten[i].nachname)==1)){
            daten[i].aktiv=0;
            printf("\nNicht gefunden!!!\n");
        }

        if(daten[i].aktiv=1){
            
            

        }
        printf("Vorname: %s", daten[i].vorname);
    
    }

    
        

    //printf("Anzahl der Gefundenen Personen: %d\n", anzgefunden);
    
    return 0;
}

/*Name: person_write
Parameter: struct person *daten, int anzahl
Description: schreibt person in eine textdatei hinaus
Rückgabewert: return 0
*/


int person_write(struct arbeiter *daten, int anzahl){

    int i=0;
    FILE *fp=NULL;

    if((fp=fopen("daten.txt","at"))==NULL){
        exit(1);
    }
    else{
        for(i=0;i<anzahl;i++){
            fflush(stdin);
            printf("Geben Sie bitte den Vorname ein: ");
            gets(daten[i].vorname);
            fprintf(fp,"Vorname: %s\n",daten[i].vorname);
            fflush(stdin);
            printf("Geben Sie bitte den Nachname ein: ");
            gets(daten[i].nachname);
            fprintf(fp,"Nachname: %s\n",daten[i].nachname);
            fflush(stdin);
            printf("Geben Sie bitte den Wohnort ein: ");
            gets(daten[i].wohnort);
            fprintf(fp,"Wohnort: %s\n",daten[i].wohnort);
            fflush(stdin);
            printf("Geben Sie bitte den Grundgehalt ein: ");
            gets(daten[i].grundgehalt);
            fprintf(fp,"Grundgehalt: %d\n",daten[i].grundgehalt);
            fflush(stdin);
        }
    }

    return 0;
}


Dieser Post wurde am 04.11.2005 um 22:09 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.11.2005, 13:02 Uhr
~f.-th.
Gast


erstellst du einen datensatz setzt du "daten[i].aktiv=1;"
benötigst du in nicht mehr (rente, gefeuert oder falscheingabe) setzt du aktiv=0
beim suchen und darstellen hast du dann die wahl alle sätze, nur aktive oder nur nicht
aktive (&-verknüpfung).
willst du einen datensatz total löschen dann benennst du die datensatzdatei um und
kopierst die benötigten info's unter dem alten dateinamen.
ich hab jetzt nicht alles nachgesehen nur ein paar anmerkungen:
wenn ich mich recht erinnere: resultat strcmp= -1, 0, +1, sieh was dein compiler möchte!
und noch ein paar sachen siehe code


C++:
int arbeitern_search(struct arbeiter *daten, int anzahl){

    char search_vorname[50], search_nachname[50];
    int i=0, anzgefunden=0;
    
    
    
    clrscr();
    printf("Geben Sie den Vornamen der gesuchten Person ein: ");
    gets(search_vorname);
    printf("Geben Sie den Nachnamen der gesuchten Person ein: ");
    gets(search_nachname);

    for(i=0;i<anzahl;i++){
        
        if((strcmp(search_vorname, daten[i].vorname)==0)&&(strcmp(search_nachname, daten[i].nachname)==0)){
            printf("\nGefunden!!!\n");
            printf("Vorname: %s\n", daten[i].vorname);
            printf("Nachname: %s\n", daten[i].nachname);
            printf("Wohnort: %s\n", daten[i].wohnort);
            printf("Grundgehalt: %d\n\n", daten[i].grundgehalt);

            daten[i].aktiv=1;        // ??

            anzgefunden++;
            
        }

        if((strcmp(search_vorname, daten[i].vorname)==1)&&(strcmp(search_nachname, daten[i].nachname)==1)){
            daten[i].aktiv=0;        // ??
            printf("\nNicht gefunden!!!\n");
        }

        if(daten[i].aktiv=1){
            
        // hier was einfügen - daten[i].aktiv=0 wenn löschmarke setzen            

        }
        printf("Vorname: %s", daten[i].vorname);

    // für endgültiges löschen fragen und dann wie oben beschrieben
    }

    
        

    //printf("Anzahl der Gefundenen Personen: %d\n", anzgefunden);
    
    return 0;
}



mfg f.-th.


Bearbeitung:

Codetags fehlerhaft


Dieser Post wurde am 06.11.2005 um 14:26 Uhr von mike editiert.
 
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: