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)セールスマンIDに1を入力します。3)四半期ごとの売上高に1を入力します。

四半期売上高の最初のセールスマンはすべて1に変わると思いますが、そうではありませんでした。私のコードの何が問題になっていますか?

テキストファイル https://www.dropbox.com/s/p5nsdc9j8nwyduu/sales.txt

4

1 に答える 1

0

あなたのアプローチは間違っています。ファイル内の正確な場所に注意を払わずに、同じファイルの読み取りと書き込みを混在させようとしています。古いファイルから読み込んで、新しいファイルに書き込む方がよいでしょう。

于 2012-11-06T14:51:13.563 に答える