0

私は、ユーザー入力 (姓名、給与、勤務時間) を受け取り、それらの詳細を総額、税金、純額と共に出力する給与計算プログラムに取り組んでいます。

入力、総計算、税計算、正味計算用の個別のモジュールがあります。しかし、これらの各モジュールからのデータが含まれるように配列ストレージを実装する方法がわかりません。

任意の助けをいただければ幸いです

*編集:従業員ごとにデータを(アルファベット順に)ソートできる必要があるため、必要なのは(私が信じている)配列のレコードです。メインモジュール内で初期化されたレコードがあり、レコードに次のように読み取らせたい:

lastName[1], firstName[1] payrate[1] 時間[1] 総[1] 税金[1] 正味[1]

lastName[2], firstName[2] payrate[2] 時間[2] 総[2] 税金[2] 正味[2]

他のモジュールから派生したデータをこの構造に取り込む方法がわかりません。

4

4 に答える 4

1

提供された構造体の提案に加えて...、
あなたの質問は、ファイル(モジュール)間のデータの可視性にも関係しています。これは、あるファイル(通常は.h)で構造体などの情報を作成および定義し、構造体メンバーに値を割り当てて別のファイル(おそらく.c)で使用し、値を変更する方法を明確にする
優れリンクです。 3 番目のファイルで。(おそらく .c も)。

構造体の配列に関しては; それを使用する任意の .c モジュールによってインクルードされるヘッダー ファイルに作成します。次のようになります。

      #define NUM_EMPL 10 //number of employees  

      typedef struct {
        char last[40];
        char first[40];
        float payrate;
        int hours;
        float gross;
        float tax;
        float net;
    } EMPLOYEE;

    extern EMPLOYEE empl[NUM_EMPL], *pEmpl; //'extern' keyword is used only in this file

次に、この構造体が使用されるすべての.c モジュールで、ファイルの先頭 (つまり、関数内ではない場所) に、.h ファイルで定義されている構造体の新しいインスタンスを作成します。

EMPLOYEE empl[NUM_EMPL], *pEmpl; //same as in .h file except without 'extern' keyword    

次に、関数内で、構造体のポインター バージョンを構造体定義の先頭に初期化し、構造体メンバーに値を設定することができます。

void func1(void)
{
    Empl = &empl[0];  // '[0]' guarantees pointer location.

    //finally assign values   
    //(can be put into loop or similar to assign all n employess)
    strcpy(pEmpl[0].last, "Smith");
    strcpy(pEmpl[0].first, "John");
    pEmpl[0].payrate = 100.00;
    pEmpl[0].hours = 40;
    //and so on...
    //pass pointer to struct to another function
    func2(pEmpl);
}

または、構造体へのポインターを引数として受け取ります
(次の関数は、データのファイル間の可視性をより適切に示すために、別の .c ファイルに含めることができます)。

void func2(EMPLOYEE *e)
{
    // assign values   
    //(can be put into loop or similar to assign all n employess)
    strcpy(e[0].last, pEmpl[0].last);
    strcpy(e[0].first, pEmpl[0].first);
    e[0].payrate = pEmpl[0].payrate;
    e[0].hours = pEmpl[0].hours;
    //and so on...
}
于 2013-07-29T23:49:24.387 に答える
0

ユーザーに関するすべてのデータを格納するには、構造体を使用する必要があります。

何かのようなもの :

 struct user 
 {
    char *lastName;
    char *firstName;
    //other variables
 }
于 2013-07-29T22:58:29.007 に答える