2016-11-04 5 views
-2

私はCの新人です。従業員登録用のコードを書こうとしていて、多くの解決策をオンラインで見つけましたが、回答がまだ見つかりませんでした。従業員登録usinfファイルIOと二重リンクリスト

私は以下のコードを添付しました。問題: 1.はじめに二重リンクリストを使わずに直接値をファイルに格納しようとしましたが、そのコードの一部も見つかる可能性があります。

2.Iはどうすればよい

3. )(あなたがメインで異なる変数?:コードに行の異なる値を保存するにはどうすればよいのファイルから二重リンクリストを作成しようとしているが、されていますあなたは(入力を取り、二重リンクリストに格納した後に)戻ってファイルにリスト全体を記述します。コードの挿入に/

私のコード全体を更新するには、ここにある: /*

* 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 

    } 

} 

} 

何か助けていただきありがとうございます。ありがとう:)

+0

必要な変更を加えてコード全体を投稿できるとよいでしょう。お願いします!ありがとうございました! – Ana

+0

いいえあなたの不完全なコードを批判的に分析することはできません( 'LIST'は未定義です)。特定の質問をし、問題を示す[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 –

+0

はリストではありません。申し訳ありませんが、構造体のemp – Ana

答えて

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); 

     } 

    } 

} 

これはmain()にあります。ファイルからすべての変数のすべての値を取得したい

+0

構造体は次のとおりです。 'struct emp { int id; char * name; \t char gender; \t char * department; \t int salary; \t struct emp * prev; \t struct emp * next; \t \t } * emp1、* emp3; ' – Ana

関連する問題