員工信息管理系統

来源:http://www.cnblogs.com/jiavv5/archive/2016/01/05/5103770.html
-Advertisement-
Play Games

/********************************************************** 作者: 劉家 時間:2015年12月24日02:44:48 編譯器:dev ****************************************************...


/**********************************************************

    作者: 劉家

    時間:2015年12月24日02:44:48

    編譯器:dev

***********************************************************/

 

# include <stdio.h>

# include <stdlib.h>

# include <string.h>

 

# define MAX 50

# define MON 6

 

 

 

int count=0; //用於統計職工的總人數

struct Salary_Info

{

int Card_No; //工資卡號

char name[20]; //姓名

float Init_Salary; //應發工資

float Water_Rate; //水費

float Electric_Rate; //電費

float tax; //稅金

float Final_Salary; //實發工資

};

/*下麵每個變數分別代表上面對應變數的變化 (用百分比表示)*/

 

struct Slary_Change{

    float Init_Salary;

    float Water_Rate;

    float Electric_Rate;

    float tax;

    float Final_Salary;

 

} ;

 

/* 次結構體數組用於存放結構體變數中每個成員的平均值,因為是基於月份求的平均值,二我在存放

    數據時 ,是把二維結構體數組的列下標作為月份來存的 而所得的平均值只有一個,所以定

    義一個一維結構體數組存放 存放每一個沒個信息的平均值就可以了

*/

struct Slary_Average{

    float Init_Salary_Average;

    float Water_Rate_Average;

    float Electric_Rate_Average;

    float tax_Average;

    float Final_Salary_Average;

};

 

struct Slary_Average Average[MAX]; //存放每個員工每個信息的平均值

struct Slary_Change Change[MAX][MON]; //存放每個員工每個信息的變化情況

struct Salary_Info Array[MAX][MON]; //存放每個員工的單一信息

 

 

void Load_Information(); //導入數據

void Keep_Information(); //保存數據

 

void Add_Information(); //添加數據

void Change_Information(); //修改信息

void Deleat_Information(); //刪除信息

 

int Find_Information(); //查找員工信息

 

void Output_Infromation(); //關於輸出信息的函數

void Output_One_Infromation(); //輸出單個信息

void Output_All_Infromation(); //輸出全部信息

void Output_Average_Information(int n); //輸出信息的平均值平均值

void Output_Change_Information(int n); //輸出信息的變化率

 

void Sort_Information(); //對員工的信息進行排序

void Echange_Information(int m ,int n); //將兩個員工的所有信息交換

 

void Calculate_Information(); // 計算已經存在的信息

 

 

void Inpu_Main_tValue(); //輸出主菜單

 

 

 

//主函數,將會從這裡選擇功能,進入相應的函數

int main() {

    int i;

    char ch;

    Load_Information();

    do {

 

        Inpu_Main_tValue();

        printf("請選擇功能:");

        scanf("%d",&i);

        switch(i) {

            Inpu_Main_tValue();

            case 1: Output_Infromation();

                break;

            case 2: Add_Information();

                break;

            case 3: Change_Information();

                break;

            case 4: Deleat_Information();

                break;

            case 5: Sort_Information();

                break;

            case 6: Calculate_Information();

                break;

            case 7: Keep_Information();

                break;

            case 8: exit(0);

                break;

        }

    printf("是否返回主菜單?(Y/N)\n");

    scanf(" %c",&ch);    

        

    

    } while( ch=='y'||ch=='Y');

    

}

 

void Load_Information()

{

    int i,j;

    int n;

    FILE * fp;

    char ch [20];

    

    putchar('\n');

    printf("------------------------------------------------------------------------\n");

    printf("| 請選擇信息導入方式 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 1.自動導入本地文件 2.導入指定本地 |\n");

    printf("------------------------------------------------------------------------\n");

    putchar('\n');

    printf("請選擇功能:");

    scanf("%d",&n);

    

    if( n==1 )

    {

        fp = fopen( "Information.txt","rb");

        if( fp==NULL )

            printf("沒有學生信息!\n");

        else

        {

            //導入一個總人數

            fread(&count,sizeof(int),1,fp );

            

            //導入員工的基本信息

            for ( i=0 ; i<count ; i++ )

            {

                for (j=0 ; j<MON ;j++)

                {

                    fread(&Array[i][j],sizeof(struct Salary_Info),1,fp);

                }

            }

            

            //導入一個信息的平均值

            for ( i=0 ; i<count ; i++ )

            {

                fread(&Average[i],sizeof(struct Slary_Average),1,fp);    

            }

            

            //導入員工信息的變化率

            for ( i=0 ; i<count ; i++ )

            {

                for (j=0 ; j<MON ;j++)

                {

                    fread(&Change[i][j],sizeof(struct Slary_Change),1,fp);

                }

            }

            

        }

        

        printf("導入信息成功!\n");

    }

    else if( n==2 )

    {

        printf("請輸入指定文件及其路徑:");

        scanf("%s",&ch);

        fp = fopen( ch,"rb+");    

        fread(&count,sizeof(int),1,fp );

        

            //導入一個總人數

            fread(&count,sizeof(int),1,fp );

            

            //導入員工的基本信息

            for ( i=0 ; i<count ; i++ )

            {

                for (j=0 ; j<MON ;j++)

                {

                    fread(&Array[i][j],sizeof(struct Salary_Info),1,fp);

                }

            }

            

            //導入一個信息的平均值

            for ( i=0 ; i<count ; i++ )

            {

                fread(&Average[i],sizeof(struct Slary_Average),1,fp);    

            }

            

            //導入員工信息的變化率

            for ( i=0 ; i<count ; i++ )

            {

                for (j=0 ; j<MON ;j++)

                {

                    fread(&Change[i][j],sizeof(struct Slary_Change),1,fp);

                }

            }

            

    }

    else

        printf("輸入錯誤!\n");

        

    

    fclose(fp);

 

}

void Keep_Information()

{

    int i,j;

    int n;

    char ch_1[20]; // 用於存放路徑

    char ch_2; //用於選擇迴圈

    FILE * fp;

    fp = fopen( "Information.txt","wb+");

 

if (fp == NULL)

return;

      

      

 

    putchar('\n');

    printf("----------------------------------------------------------\n");

    printf("| 請選擇信息導入方式 |\n");

    printf("----------------------------------------------------------\n");

    printf("| 1.自動保存至本地文件 2.保持至指定本地 |\n");

    printf("----------------------------------------------------------\n");

    putchar('\n');

    printf("請選擇功能:");

    scanf("%d",&n);

    

    if( n==1 )

    {

        

        if( fp==NULL )

            printf("保存失敗!\n");

            

         //保存員工的個數

        fwrite(&count,sizeof(int),1,fp );

        

        //保存員工的基本信息

        for ( i=0 ; i<count ; i++ )

        {

            for (j=0 ; j<MON ;j++)

            {

                fwrite(&Array[i][j],sizeof(struct Salary_Info),1,fp);

            }

        }

        //保存一個信息的平均值

        for ( i=0 ; i<count ; i++ )

        {

            fwrite(&Average[i],sizeof(struct Slary_Average),1,fp);    

        }

        //保存員工信息的變化率

        for ( i=0 ; i<count ; i++ )

        {

            for (j=0 ; j<MON ;j++)

            {

                fwrite(&Change[i][j],sizeof(struct Slary_Change),1,fp);

            }

        }

        

        

    }

    else if( n==2 )

    {

        printf("請輸入指定文件及其路徑:");

        scanf("%s",ch_1);

        fp = fopen( ch_1,"rb+");

            

        //保存員工的個數

        fwrite(&count,sizeof(int),1,fp );

 

        

        //保存員工的基本信息

        for ( i=0 ; i<count ; i++ )

        {

            for (j=0 ; j<MON ;j++)

            {

                fwrite(&Array[i][j],sizeof(struct Salary_Info),1,fp);

            }

        }

        

        //保存一個信息的平均值

        for ( i=0 ; i<count ; i++ )

        {

            fwrite(&Average[i],sizeof(struct Slary_Average),1,fp);    

        }

        

        //保存員工信息的變化率

        for ( i=0 ; i<count ; i++ )

        {

            for (j=0 ; j<MON ;j++)

            {

                fwrite(&Change[i][j],sizeof(struct Slary_Change),1,fp);

            }

        }

    }

    

    else

        printf("輸入錯誤!\n");

      

 

    

    fclose(fp);

}

void Add_Information()

{

    

    int n;

    int i,j;

    

    printf("請輸入要添加員工的人數:");

    scanf("%d",&n);

    putchar('\n');

    

    for ( i=count ; i<count+n ; i++ )

    {

        

        printf("請輸入第%d個員工的信息:\n",i+1);

        

        printf("姓名: ");

            scanf("%s",Array[i][0].name);

        

        printf("工資卡號:");

            scanf("%d",&Array[i][0].Card_No);

        putchar('\n');

 

        for ( j=0 ; j<MON ; j++ )

        {

 

            printf("請輸入第%d個員工第%d個月的信息。\n",i+1,j+1);    

            

            

            printf("應發工資:");

                scanf("%f",&Array[i][j].Init_Salary);

            

            printf("水費: ");

                scanf("%f",&Array[i][j].Water_Rate);

            

            printf("電費: ");

                scanf("%f",&Array[i][j].Electric_Rate);

                

            

        }

     }

     count = count + n; //更新總人數

    

     /*將每個員工後面3個月的姓名與工資卡號複製*/

     for ( i=0 ; i<count ; i++ )

     {

         Array[i][2].Card_No = Array[i][1].Card_No = Array[i][0].Card_No;

         //Array[i][2].name = Array[i][1].name = Array[i][0].name;

     }

    

}

void Inpu_Main_tValue(){

    

    printf("一共有%d個職工信息。\n",count);

    putchar('\n');

    printf("------------------------------------------------------------------------\n");

    printf("| 主菜單 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 1.瀏覽信息 2.添加信息 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 3.修改信息 4.刪除信息 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 5.排序信息 6.統計信息 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 7.保存信息 8.退出系統(不保存) |\n");

    printf("------------------------------------------------------------------------\n");

    putchar('\n');

 

}

/*總的選擇輸出函數,將會由其引導各種輸出*/

 

void Output_Infromation()

{

    int i;

    char ch;

    

    printf("註意:使用此功能之前必須要先統計信息。\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 1.瀏覽所有員工的基本信息 2.瀏覽單個員工的基本信息 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 3.瀏覽所有員工信息的平均值 4.瀏覽單個員工信息的平均值 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 5.瀏覽所有員工信息的變化率 6.瀏覽單個員工信息的變化率 |\n");

    printf("------------------------------------------------------------------------\n");

    

    printf("請選擇輸出方式:");

    scanf("%d",&i);

    

    /*    此處設計的不合理,在輸出基本信息的時候我定義個2個函數分別輸出 單一和所有信息

         而信息的平均值我就,先調用函數,然後在函數值判斷怎麼輸出

    */

    

    if( i==2 )

        Output_One_Infromation();

    else if( i==1 )

        Output_All_Infromation();

    else if( i==3||i==4)

    {

        Output_Average_Information(i);

    }

    else if ( i==5 || i==6 )

{

        Output_Change_Information(i);

}

        

    else

        printf("選擇錯誤!");

    return ;

    

    

}

 

 

int Find_Information()

{

    int i;

    int Id_Number; //存放工資卡卡號

    int n;

    char Name[20]; //存放姓名

    

    printf("------------------------------------------------------------------------\n");

    printf("| 1.按工資卡號查找 2.按姓名查找 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("請選擇查找方式:");

    scanf("%d",&n);

    

    if ( n==1)

    {

        printf("請輸入工資卡號:");

        scanf("%d",&Id_Number);

        

        for ( i=0 ; i<count ; i++ )

        {

            if( Array[i][0].Card_No==Id_Number)

                return i;    

        }

        

        /*如果未查到,則返回-1,後面函數在接收返回值的時候也會進行檢查*/

        

        if( i==count )

        {

            printf("未查到該員工!\n");

            return -1;

        }

        

    }

    else if(n==2)

    {

        printf("請輸入要查找的員工的姓名:");

        scanf("%s",&Name);

        

        for ( i=0 ; i<count ; i++ )

        {

            if( strcmp(Array[i][0].name,Name)==0)

                return i;    

        }

        

        /*如果未查到,則返回-1,後面函數在接收返回值的時候也會進行檢查*/

        

        if( i==count )

        {

            printf("未查到該員工!\n");

            return -1;

        }

        

        

    }

    else

    {

        printf("輸入錯誤!\n");

        return -1;

    }

      

      

    

    return i;

}

 

void Output_One_Infromation()

{

    int n;

    int i,j;

      

    

    printf("請先找到該員工。\n");

    n = Find_Information();

    

    if( n == -1 )

        printf("未找到該員工");    

    

    printf("姓名:%s\n",Array[n][0].name);

    printf("工資卡:%d\n",Array[n][0].Card_No);

    putchar('\n');

    printf("------------------------------------------------------------------------\n");

    printf("| 月份 應發工資 水費 電費 稅金 實發工資 |\n");

    printf("------------------------------------------------------------------------\n");

        

    for ( i=0 ; i<MON ; i++ )

    {

        

        printf(" %4.1d %4.1f %4.1f %4.1f %4.1f %4.1f ",

                i+1,Array[n][i].Init_Salary,Array[n][i].Water_Rate,Array[n][i].Electric_Rate

                ,Array[n][i].tax,Array[n][i].Final_Salary);

    }

    putchar('\n');

    

}

 

//輸出所有一個的基本信息

void Output_All_Infromation()

{

    int i,j;

    putchar('\n');

    printf("------------------------------------------------------------------------\n");

    printf("| 月份 應發工資 水費 電費 稅金 實發工資 |\n");

    printf("------------------------------------------------------------------------\n");

        

    

    for ( i=0 ; i<count ; i++ )

    {

        

        printf("第%d個人的信息:",i+1);

        printf("姓名:%s",Array[i][0].name);

        printf(" 工資卡號:%d\n",Array[i][0].Card_No);

        putchar('\n');

        

        

        for (j=0 ; j<MON ; j++ )

        {

            printf(" %4.1d %4.1f %4.1f %4.1f %4.1f %4.1f ",

                j+1,Array[i][j].Init_Salary,Array[i][j].Water_Rate,Array[i][j].Electric_Rate

                ,Array[i][j].tax,Array[i][j].Final_Salary);

            putchar('\n');

        }

        putchar('\n');

    }

    

}

void Output_Average_Information(int i)

{

    int j ;

    printf("------------------------------------------------------------------------\n");

    printf("| 員工信息平均值統計 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 姓名 工資卡號 應發工資 水費 電費 稅金 實發工資 |\n");

    printf("------------------------------------------------------------------------\n");

    if( i==3 )

    {

    

        for ( i=0 ; i<count ; i++)

        {

            printf(" %s %4d %4.1f %4.1f %4.1f %4.1f %4.1f ",Array[i][0].name,

                Array[i][0].Card_No,Average[i].Init_Salary_Average,Average[i].Water_Rate_Average,

                Average[i].Electric_Rate_Average,Average[i].tax_Average,Average[i].Final_Salary_Average);

                

            putchar('\n');    

        }

    }

    

    if( i==4 )

    {

        int n;

        printf("請先找出要瀏覽員工:");

        n = Find_Information();

        if( n==-1)

            printf("未找到該員工!\n");

        else

        {

            printf(" %s %4d %4.1f %4.1f %4.1f %4.1f %4.1f %4.1f",Array[i][0].name,

                Array[i][0].Card_No,Average[i].Init_Salary_Average,Average[i].Water_Rate_Average,

                Average[i].Electric_Rate_Average,Average[i].tax_Average,Average[i].Final_Salary_Average);

                

            putchar('\n');    

        }        

    }

    

}

 

 

//輸出信息的變化率

void Output_Change_Information(int n)

{

    int i,j;

 

    

    if( n==5)

    {

        

        printf("------------------------------------------------------------------------\n");

        printf("| 月份 應發工資 水費 電費 稅金 實發工資 |\n");

        printf("------------------------------------------------------------------------\n");

        

        for ( i=0 ; i<count ; i++ )

        {

            printf("變化率:");

            printf("姓名:%s 工資卡號: %d\n",Array[i][0].name,Array[i][0].Card_No);

            putchar('\n');

            for ( j=1 ; j<MON ; j++ )

            {

        printf(" %d \t %2.1f% \t %2.1f% \t %2.1f% \t %2.1f% \t %2.1f% ",

                j+1,Change[i][j].Init_Salary,Change[i][j].Water_Rate,Change[i][j].Electric_Rate

                ,Change[i][j].tax,Change[i][j].Final_Salary);

                putchar('\n');

            }

        }

 

    }

      

    

}

void Sort_Information()

{

    int i,j;

    int n;

    printf(" 註意:使用此功能錢,必須先使用 6.統計信息!\n");

    printf("------------------------------------------------------------------------\n");

    printf("| 1.按平均工資排序 2.按平均工資增長率排序 |\n");

    printf("------------------------------------------------------------------------\n");

    printf("請選擇排序方式:");

    scanf("%d",&n);

    

    if( n==1 )

    {

        for ( i=0 ; i<count ; i++ )

        {

            for ( j=i+1 ; j<count ; j++ )

            {

                if( Average[i].Final_Salary_Average>Average[j].Final_Salary_Average);

                

                /*    次出設計的不怎麼好,因為每次交換來個員工的基本信息之後都會對所有信

                    息進行一次計算,應該再寫一個對2個員工的信息進行計算的函數,但是

                    我不想寫了。

                */

                Echange_Information(i,j);

            }

        }

    }

    else if( n==2 )

    {

        

    }

    else

    {

        printf("輸入錯誤!\n");

        return;

    }

    printf("排序成功!\n");

}

 

/* 交換2個員工的說有信息 */

void Echange_Information(int m ,int n)

{

    int i;

    struct Salary_Info temp_1;

    

    /*    此處已經確定2個員工的序號(結構體數組的行下標)

        只需要交換該員工所對應的每個結構體類型的,每個月的

        數據即可

    */

    

    for ( i=0 ; i<MON ; i++ )

    {

        /*交換每個學生原始信息*/

        temp_1 = Array[m][i];

        Array[m][i] =Array[n][i];

        Array[n][i] = temp_1;

     /* 為了避免將每個員工每個月的每種信息進行交換

            我選擇值叫換基本的信息,比如平均值,變化率

            什麼的,我選擇在交換基本信息之後重新計算

            

         */    

 

        

    }

        

}

 

void Change_Information()

{

    int i,j;

    int n;

    int flag;

    printf("請先找出要修改的信息!\n");

    n = Find_Information();

    

    if( n==-1 )

    {

        printf("未找到該員工!\n");

        return ;

    }

    else

    {

        char ch;

          

        

            printf("姓名:%s\n",Array[n][0].name);

            printf("工資卡:%d\n",Array[n][0].Card_No);

            putchar('\n');

            printf("------------------------------------------------------------------------\n");

            printf("| 月份 應發工資 水費 電費 稅金 實發工資 |\n");

            printf("------------------------------------------------------------------------\n");

            

        for ( i=0 ; i<MON ; i++ )

        {

            

            printf(" %4.1d %4.1f %4.1f %4.1f %4.1f %4.1f ",

                    i+1,Array[i][0].Init_Salary,Array[i][0].Water_Rate,Array[i][0].Electric_Rate

                    ,Array[i][0].tax,Array[i][0].Final_Salary);

     putchar('\n');

        }

          

      

        

        printf("是否修改以上信息?(Y/N)\n");

        scanf(" %c",&ch);

        

        /**正式修改信息*/

        if(ch=='Y'||ch=='y')

        {

                printf("請輸入該員工的新信息。\n");

            

            printf("姓名: ");

                scanf("%s",Array[n][0].name);

            

            printf("工資卡號:");

                scanf("%d",&Array[n][0].Card_No);

            putchar('\n');

      

            for ( j=0 ; j<MON ; j++ )

            {

      

                printf("請輸入該員工員工第%d個月的信息。\n",j+1);    

                

                

                printf("應發工資:");

                    scanf("%f",&Array[n][j].Init_Salary);

                

                printf("水費: ");

                    scanf("%f",&Array[n][j].Water_Rate);

                

                printf("電費: ");

                    scanf("%f",&Array[n][j].Electric_Rate);

                    

                

            }

        }

        else

        {

            return;    

        }    

        

            

    }

}

void Deleat_Information()

{

    int n,i,j;

    char ch;

    

    printf("請先找出你要刪除的信息!\n");

    n = Find_Information();

    if( n == -1 )

    {

        printf("未找到該員工!\n");

        return ;

    }

    

    putchar('\n');

    printf("姓名:%s\n",Array[n][0].name);

    printf("工資卡:%d\n",Array[n][0].Card_No);

        putchar('\n');

        printf("------------------------------------------------------------------------\n");

        printf("| 月份 應發工資 水費 電費 稅金 實發工資 |\n");

        printf("------------------------------------------------------------------------\n");

        

    for ( i=0 ; i<MON ; i++ )

    {

        

        printf(" %4.1d %4.1f %4.1f %4.1f %4.1f %4.1f ",

                i+1,Array[n][i].Init_Salary,Array[n][i].Water_Rate,Array[n][i].Electric_Rate

                ,Array[n][i].tax,Array[n][i].Final_Salary);

                putchar('\n');

    }

    putchar('\n');

    

    printf("是否刪除以上信息?(Y/N)\n");

    scanf(" %c",&ch);

    

    if ( ch=='Y'||ch == 'y')

    {

        

        for( i=n ; i<count-1 ; i++ )

        {

            for ( j=0 ; j<MON ; j++ )

            {

                Array[i][j] = Array[i+1][j];    

            }    

        }

        count--;

        printf("刪除成功!\n");

    }

    else

    {

        return ;

    }

      

    

    

}

 

/*計算各個員工的信息的平均值,變換*/

void Calculate_Information()

{

    int i,j;

    

    char ch;

    

    /* 計算每個員工每個月應該繳納的稅金 */

    for ( i=0 ; i<count ; i++ )

    {

        for( j=0 ; j<MON ; j++ )

        {

            if( Array[i][j].Init_Salary<=800 )

                Array[i][j].tax=0;

            

            else if( Array[i][j].Init_Salary>800&& Array[i][j].Init_Salary<1400)

                Array[i][j].tax = ( Array[i][j].Init_Salary-800)*float(0.05);

            

            else if ( Array[i][j].Init_Salary>1400 )

                Array[i][j].tax = ( Array[i][j].Init_Salary-1400)*float(0.1);                

        }    

    }

    

    

    /*計算每個員工每個月最後得到的工資*/

    

    for ( i=0 ; i<count ; i++ )

    {

        for ( j=0 ; j<MON ; j++ )

        {

            Array[i][j].Final_Salary = Array[i][j].Init_Salary - Array[i][j].Electric_Rate-

            Array[i][j].Water_Rate - Array[i][j].tax;

        }

    }

      

    

    /*計算每個員工每個信息的平均值*/

    

    /*分別定義出用於存放沒個信息總數值的變數*/

    

    float Average_Sum_Init_Salary;

    float Average_Sum_Water_Rate;

    float Average_Sum_Electric_Rate;

    float Average_Sum_tax;

    float Average_Sum_Final_Salary;

    

    for ( i=0 ; i<count ; i++ )

    {

        for( j=0 ; j<MON ; j++ )

        {

            Average_Sum_Init_Salary += Array[i][j].Init_Salary;

            Average_Sum_Water_Rate+= Array[i][j].Water_Rate;

            Average_Sum_Electric_Rate += Array[i][j].Electric_Rate;

            Average_Sum_tax+= Array[i][j].tax;

            Average_Sum_Final_Salary += Array[i][j].Final_Salary;

        }

        

        /*每個員工的每個信息的平均值*/

        

        Average[i].Init_Salary_Average = Average_Sum_Init_Salary / MON;

        Average[i].Water_Rate_Average = Average_Sum_Water_Rate / MON;

        Average[i].Electric_Rate_Average = Average_Sum_Electric_Rate / MON;

        Average[i].tax_Average = Average_Sum_tax / MON;

        Average[i].Final_Salary_Average = Average_Sum_Final_Salary /MON;

        

        

        /*在計算玩平均值後要講總和這個變數的值初始化為0,不然後面會出錯*/

        

            Average_Sum_Init_Salary=0;

            Average_Sum_Water_Rate=0;

            Average_Sum_Electric_Rate=0;

            Average_Sum_tax=0;

            Average_Sum_Final_Salary=0;    

                

    }

      

    

    /*計算每個員工每個月於前一個月的變化率*/

    

    for( i=0 ; i<count ; i++ )

    {

        

        

        /*分別計算每個員工種信息每個月的變化率*/

        for ( j=1 ; j<MON ; j++ )

        {

        

            Change[i][j].Init_Salary = (Array[i][j].Init_Salary - Array[i][j-1].Init_Salary) / Array[i][j].Init_Salary;

            Change[i][j].Electric_Rate = (Array[i][j].Electric_Rate - Array[i][j-1].Electric_Rate) / Array[i][j].Electric_Rate;

            Change[i][j].Water_Rate = (Array[i][j].Water_Rate - Array[i][j-1].Water_Rate) / Array[i][j].Water_Rate;

            Change[i][j].tax = (Array[i][j].tax - Array[i][j-1].tax) / Array[i][j].tax;

            Change[i][j].Final_Salary = (Array[i][j].Final_Salary - Array[i][j-1].Init_Salary) / Array[i][j].Final_Salary;

        

        }

    }

    printf("計算結束!\n");

            

}

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //1、創建主線程(串列) dispatch_async(dispatch_get_main_queue(), ^{ //刷新界面代碼 }); //2、創建非同步線程(並行) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT...
  • 一,效果圖。二,工程圖。三,代碼。RootViewController.h#import #import "SVSegmentedControl.h"@interface RootViewController : UIViewController{ UIScrollView *scrollVi...
  • //1.設置背景 //tf.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; //2.設置輸入框的樣式 /* UITextBorderStyleNone, 預設樣式,無樣式 UITextBorder...
  • 前言:之前公司app在騰訊開放平臺認領應用時,涉及了一個問題:就是給空白包簽名。然後再上傳上去審核。騰訊開放平臺的官方說明如下,如何簽名:jarsgner-verbose-keystore[keystorePath]-singnedjar [apkOut] [apkln] [alias]jarsgn...
  • 前些時間空閑,寫了個簡單的小小工具類,即圖片的裁剪,動畫改變frame隱藏;本類直接提供一個類方法調用,傳入3個參數即可,代碼非常簡單,誰都可以看懂;參數說明:第一個參數:你要將裁剪後的圖片添加到哪個視圖上執行動畫,傳入當前view即可;第二個參數:傳入一張你要進行裁剪的圖片;第三個參數:背景圖,可...
  • hi剛看了唐人街探案,5星好評啊親。由於是早就約好的,也不好推辭(雖然是和男的..),但該寫的還是得擠時間寫。明天早上老師的項目結題,雖然和我關係不大,但不要添亂就好!!1、PHP一、PHP基礎(三)1.3.2 Int整型。幾個點:進位問題(2,8,16);溢出——溢出後自動轉為float型;整.....
  • 什麼是SocketSocket的概念很簡單,它是網路上運行的兩個程式間雙向通訊的一端,既可以接收請求,也可以發送請求,利用它可以較為方便地編寫網路上數據的傳遞。所以簡而言之,Socket就是進程通信的端點,Socket之間的連接過程可以分為幾步:1、伺服器監聽伺服器端Socket並不定位具體的客戶端...
  • 本章節主要說明Python的運算符。Python算術運算符以下假設變數a為10,變數b為20:Python比較運算符 以下假設變數a為10,變數b為20:Python賦值運算符 以下假設變數a為10,變數b為20:Python位運算符 按位運算符是把數字看作二進位來進行計算的。Python中的按位運...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...