2012-11-06 59 views
1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


// number of salesman 
#define SIZE 100 
// salesman_type structure definition 
typedef struct{ 
     int ID; // salesman id 
     char id_txt[6]; // salesman id for txt file 
     char name[50]; // salesman name 
     double hor_total; // total sales amount of a salesman 
    }salesman_type; // end structure salesman_type 

salesman_type salesman[SIZE];// synonym for salesman_type 

// function prototype 
int sale_menu(); 
void modifySales(); 

// sales processing system menu function 
int sale_menu() 
{ 
    int menu; 
    system("cls"); 
    printf("Sales Processing System\n"); 
    printf("-----------------------\n\n"); 
    printf("1. Add Salesman Records\n"); 
    printf("2. Reports Generation\n"); 
    printf("3. Modify Salesman Records\n"); 
    printf("4. Delete Salesman Records\n\n"); 
    printf("0. Exit\n"); 
    printf("Your choice: "); 
    scanf("%d", &menu); 
    return menu; 
    printf("\n"); 
}// end function sale_menu 

// modify salesman records function 
void modifySales() 
{ 
    FILE *salesPtr; // sales.txt file pointer 
    FILE *salesmanPtr; // salesman.txt file pointer 
    int a = 1, b, modify; // counter 
    double sale[SIZE][4]; // quartely sales amount 

    // fopen opens the file; exits program if file cannot be opened 
    if ((salesPtr = fopen("sales.txt","r+")) == NULL) 
    { 
     printf("Cannot open sales.txt\n"); // display error message 
     system("pause"); // pause program before it exits 
     exit(-1); // end program 
    } // end if 
    else 
    { 
     // prompt and read salesman id 
     printf("\nSalesman ID (NO.): "); 
     scanf("%d",&modify); 

     // if it is not required salesman id 
     while (a != modify) 
     { 
      fscanf(salesPtr,"%*[^\n]\n"); 
      a++; 
     } 

     fscanf(salesPtr,"%*[^|]|", salesman[0].id_txt); 
     // read quarterly sales amount 
     for (b=0; b<4; b++) 
     { 
      // prompt and read quarterly sales amount 
      printf("Quarter %d: ", b+1); 
      scanf("%lf",&sale[0][b]); 
      // end with "|" symbol if b is less than 3 
      if(b<3) 
      { 
       fprintf(salesPtr,"%.2f|",sale[0][b]); 
      } 
      else 
      { 
       fprintf(salesPtr,"%.2f\n",sale[0][b]); 
      } 
     } // end for 
    } // end else 
    fclose(salesPtr); // fclose close the file 
} // end function modifySales 

// function main begins program execution 
int main() 
{ 
    // variable declaration 
    int a, b, c = 0, last; // counter 
    int getMenu = 10, getReport = 10; // menu selector 

    while (getMenu != 0) 
    { 
     // call and assign sale_menu function to getMenu 
     // Execute command based on user input 
     switch(getMenu = sale_menu()) 
     { 
      case 1: 
       break; 
      case 2: 
       break; 
      case 3: 
       modifySales(); 
       break; 
     } // end switch 
    }// end while 
    return 0; 
} // end main 

步驟來重現問題 1)選擇3.修改推銷員記錄 2)輸入1業務員ID 3)季度銷售金額使用R +修改文本文件

我希望所有輸入1第一季度銷售額的銷售員全部變爲1但沒有。我的代碼有什麼問題?

文本文件 https://www.dropbox.com/s/p5nsdc9j8nwyduu/sales.txt

+0

不要忘記以更新模式打開的文件受多個規則的約束(第7.21.5.3節#7)。 – md5

+0

您的sales.txt不是您所期望的 - 它將html/javascript另存爲文本... –

回答

0

你的做法是錯誤的。您正試圖混合讀取和寫入相同的文件,而不關注您正在編寫的文件中的確切位置。從舊文件讀取並寫入新文件會更好。

+0

如果我仍然想使用r +,是否有解決方案來實現目標? – user1803038