2016-11-04 1 views
-2

Ich bin neu zu c und ich habe versucht, einen Code für ein Mitarbeiterregister zu schreiben und habe viele Lösungen online gefunden, aber ich habe noch Fragen, deren Antworten ich noch nicht gefunden habe.Employee Register usinf Datei IO und doppelt verkettete Liste

Ich habe meinen Code unten beigefügt. Probleme: 1. Anfangs versuchte ich direkt Werte in die Datei ohne eine doppelt verknüpfte Liste zu speichern und so könnten Sie Teile dieses Codes auch finden.

2.I versucht haben, wie eine doppelt verknüpfte Liste aus der Datei zu erstellen, aber Wie lagere Sie unterschiedliche Werte einer Zeile in verschiedene Variablen ?: Code in main()

3. tun Sie schreiben die gesamte Liste in die Datei zurück (nach der Eingabe zu nehmen und es in der doppelt verknüpften Liste zu speichern): Code im Einsatz/ist hier

Mein gesamte Code aktualisieren: /*

* C Program to Create Employee Record and Update it 

    */ 

#include <stdio.h> 

#include <stdlib.h> 

#include <string.h> 

#define size 200 



struct emp 

{ 

    int id; 

    char *name; 

char gender; 

char *department; 

int salary; 

struct emp *prev; 

struct emp *next; 



}*emp1, *emp3; 



void display(); 

void create(); 

void update(); 



FILE *fp, *fp1; 

int count = 0; 



void main() 

{ 

    int i, n, ch; 


char line[128]; 
    struct emp *current, *head; 

    head = current = NULL; 
    fp = fopen("register.txt", "r"); 

    while(fgets(line, sizeof(line), fp)) 
{ 
     struct emp *node = malloc(sizeof(LIST)); 
     node->string = strdup(line); // how to store multiple values in a line into multiple fields? 
     node->next =NULL; 
    node->prev=NULL; 

     if(head == NULL) 
    { 
      current = head = node; 
     } 
    else 
    { 
      current = current->next = node; 
     node->left=current; 
     } 
} 
fclose(fp); 
//test print 
for(current = head; current ; current=current->next){ 
    printf("%s", current->string); 
} 
//need free for each node 
return 0; 


    printf("1] Create a new Record\n"); 

    printf("2] Display a Record\n"); 

    printf("3] Update Records\n"); 

    printf("4] Delete a record\n"); 

    printf("5] Exit"); 

    while (1) 

    { 

     printf("\nEnter your choice : "); 

     scanf("%d", &ch); 

     switch (ch) 

     { 

     case 1:  

      //fp = fopen("register.txt", "a"); 

      create(); 

      break; 

     case 2:  

      //fp1 = fopen("register.txt","rb"); 

      display(); 

      break; 

     case 3:  

      //fp1 = fopen("register.txt", "r+"); 

      update(); 

      break; 

    case 4: 

      //fp1 = fopen("register.txt", "r+"); 
    display(); 

    break; 

     case 5: 

      exit(0); 

     } 

    } 

} 



/* To create an employee record */ 

void create() 

{ 

    int i,success1,success2; 

    char *p; 



    emp1 = (struct emp *)malloc(sizeof(struct emp)); 

    emp1->name = (char *)malloc((size)*(sizeof(char))); 

    printf("Enter name of employee : "); 

    //getchar(); 

    scanf(" %[^\n]s", emp1->name); 

    printf("Enter emp id : "); 

    success1 = scanf("%d", &emp1->id); 

while (success1 < 1) 
{ 
    printf("Invalid ID. Enter numbers only!\n");  

    printf("Enter emp id : "); 

    getchar(); 

    //getchar(); 

    success1 = scanf("%d", &emp1->id); 

} 

    printf("Enter gender of employee : "); 

getchar();   

emp1->gender=getchar(); 
printf("%s",&emp1->gender); 

//printf("%s",&emp1->gender); 
//if(emp1->gender=='m') 
//printf("hey"); 
while(1){ 
    if(emp1->gender=='m'||emp1->gender=='M'||emp1->gender=='f'||emp1->gender=='F') 
{ 

    break; 

} 


else 
{ 

    printf("Enter only M or F\n "); 

    printf("Enter gender of employee : "); 

     getchar();   

    emp1->gender=getchar(); 
    //printf("%s",&emp1->gender); 
} 

} 


//getchar(); 

    //printf("Enter department of employee : "); 
    //getchar(); 
    // scanf("%[^\n]s", emp1->department); 

    //getchar(); 

    printf("Enter salary of employee : "); 

    success2 = scanf("%d", &emp1->salary); 

while (success2 < 1) 
{ 
    printf("Enter salary amount in numbers only!\n"); 

    printf("Enter salary of employee : "); 

    getchar(); 

    //getchar(); 

    success2 = scanf("%d", &emp1->salary); 

} 

emp1->prev=head; 
head->next=emp1; 
emp1->next=NULL; 


    /*fwrite(&emp1->id, sizeof(emp1->id), 1, fp); 

     fwrite(emp1->name, size, 1, fp); 

     fwrite(&emp1->gender, sizeof(emp1->gender), 1, fp); 

// fwrite(emp1->department, size, 1, fp); 

     fwrite(&emp1->salary, sizeof(emp1->salary), 1, fp); 

     count++; // count to number of entries of records 

     fclose(fp); 

*/ 

} 



/* Display the records in the file */ 

void display() 

{  

    emp1=(struct emp *)malloc(1*sizeof(struct emp));  

    emp1->name=(char *)malloc(size*sizeof(char)); 

    int i = 1,opt,num; 
char *strng; 

emp1=head; 

    if (fp1 == NULL)  

    { 

    printf("\nFile not opened for reading"); 

    return; 

} 

printf("\n1.View by employee name\n2.View by employee ID\n3.View by salary\n4.View by Department\n5.Exit\n"); 

scanf(" %d", &opt); 

switch(opt){ 

case 1: 

     printf("Enter employee name: "); 

    scanf(" %[^\n]s", strng); 

    while(emp1->next!=NULL) 
    { 
     if(emp1->name==strng)    
      printf("\nEmployee Name: %s\nEmployee ID: %d\nEmployee Gender: %s\nEmployee Salary: %d",emp3->name,emp3->id,&emp1->gender,emp1->salary); 
     else emp1=emp1->next; 
    } 



//////OTHER CASES SIMILAR WAY 





} 




    //fclose(fp1); 

    //free(emp3->name); 

    //free(emp3); 

} 



void update() 

{ 

    int id, flag = 0, i = 1; 

    char s[size]; 



    if (fp1 == NULL) 

    { 

     printf("File cant be opened"); 

     return; 

    } 

    printf("Enter employee id to update : "); 

    scanf("%d", &id); 

    emp1 = (struct emp *)malloc(1*sizeof(struct emp)); 

    emp1->name=(char *)malloc(size*sizeof(char)); 

    while(emp1->next!=NULL) 

    { 


     if (id == emp1->id) 

     { 
    printf("Enter new values"); 
    ////All values will be taken and stored in emp1 

    } 

} 

} 

Jede Hilfe wird geschätzt und sehr benötigt !! Danke :)

+0

abrufen Es wäre toll, wenn Sie die erforderlichen Änderungen vornehmen und den gesamten Code veröffentlichen könnten. Bitte! Vielen Dank! – Ana

+0

Nein Ich kann Ihren unvollständigen Code nicht kritisch analysieren ("LIST" ist nicht definiert). Bitte stellen Sie eine bestimmte Frage und veröffentlichen Sie das [minimale, vollständige und überprüfbare Beispiel] (http://stackoverflow.com/help/mcve), das das Problem zeigt. –

+0

nicht LISTE. Entschuldigung, struct emp – Ana

Antwort

0
 void main() 

{ 

    int i, n, ch; 
struct emp *current, *head; 

char line[128]; 


    head = current = NULL; 
    fp = fopen("register.txt", "r"); 

    while(fgets(line, sizeof(line), fp)) 
{ 
     struct emp *node = malloc(sizeof(struct emp)); 
     node-> = strdup(line); // how to store multiple values in a line into multiple fields? node->(variables) 
     node->next =NULL; 
    node->prev=NULL; 

     if(head == NULL) 
    { 
      current = head = node; 
     } 
    else 
    { 
      current = current->next = node; 
     node->prev=current; 
     } 
} 
fclose(fp); 
//test print 
for(current = head; current ; current=current->next){ 
    printf("%s", current->);//current->(nodes) 
} 
//need free for each node 
//return 0; 


    printf("1] Create a new Record\n"); 

    printf("2] Display a Record\n"); 

    printf("3] Update Records\n"); 

printf("4] Delete a record\n"); 

    printf("5] Exit"); 

    while (1) 

    { 

     printf("\nEnter your choice : "); 

     scanf("%d", &ch); 

     switch (ch) 

     { 

     case 1:  

      //fp = fopen("register.txt", "a"); 

      create(); 

      break; 

     case 2:  

      //fp1 = fopen("register.txt","rb"); 

      display(); 

      break; 

     case 3:  

      //fp1 = fopen("register.txt", "r+"); 

      update(); 

      break; 

    case 4: 

      //fp1 = fopen("register.txt", "r+"); 
    display(); 

    break; 

     case 5: 

      exit(0); 

     } 

    } 

} 

Dies ist in main(). Ich möchte alle Werte aller Variablen aus der Datei

+0

Die Struktur ist: 'struct emp { int id; char * Name; \t char Geschlecht; \t char * Abteilung; \t int Gehalt; \t Struktur emp * prev; \t Struktur emp * next; \t \t } * emp1, * emp3; ' – Ana

Verwandte Themen