0

我正在开发一个工资单程序,该程序接受用户输入(名字/姓氏、工资率和工作时间)并输出这些详细信息以及总额、税收和净额。

我有单独的输入模块、计算总值、计算税和计算净值;但我不确定如何实现数组存储,以便它包含来自每个模块的数据。

任何帮助,将不胜感激

*编辑:我需要能够按员工对数据进行排序(按字母顺序),所以我需要(我相信)是数组的记录。我在主模块中初始化了记录,并希望记录读取如下内容:

姓[1],名字[1] 工资率[1] 小时[1] 总[1] 税[1] 净[1]

姓[2],名字[2] 工资[2] 小时[2] 总[2] 税[2] 净[2]

我不知道如何将其他模块的派生数据提取到这个结构中。

4

4 回答 4

4

您可以只创建一个全局结构来保存该数据。

struct payroll_info
{
    char *fname;
    char *lname;
    ...
};

然后,您可以只制作这个结构的数组并使用qsort()

于 2013-07-29T22:55:19.210 回答
1

除了已提供的结构建议...,
您的问题还与文件(模块)之间数据的可见性有关。
是一个很好的链接,它将阐明如何在一个文件(通常是 .h)中创建和定义结构等信息,为结构成员分配值并在另一个文件(可能是 .c)中使用它们并修改值在第三个文件中。(可能也是一个.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

If the modules are on different binary files,
then you can share the data using the extern keyword like so:

  1. Declare the array in a single place in the code float paychecks[12].
  2. In order to access the data from another file, declare it like so in the importing file
    extern float[] paycheks
  3. Do the above(2) in each file that you wish to use the paychecks array.

You should now have a single copy of the array - with everyone seeing/pointing-to the same array.

于 2013-07-29T23:00:21.280 回答
0

您应该使用结构来存储有关用户的所有数据。

就像是 :

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