用结构计算工资增量的C程序

C program for salary increment calculation using structure

我想为 C 程序编写代码,它将:

  1. 创建将存储员工详细信息的结构。
  2. 将 5 条不同的员工记录插入数据库。
  3. 如果服务年限增加 10%,则更新工资 是10年以上。否则,增加 7%。
  4. 显示所有员工的数据。

我的编码满足了项目1,2和4。对于项目3,我不知道如何编写编码。谁能赐教一下?

代码下方

#include <stdio.h>
#include <stdlib.h>
 
typedef struct{ 
    char employee_name[30];
    int employee_number;
    int salary;
    int service_year 
} Employee;
 
int main()
{
    int i, n=5;
 
    Employee employees[n];
 
    //Taking each employee detail as input
 
    printf("Enter %d Employee Details \n \n",n);
    for(i=0; i<5; i++){
 
        printf("Employee %d:- \n",i+1);
        //Name
        printf("Name: ");
        scanf("%s",employees[i].employee_name);
        //ID
        printf("Id: ");
        scanf("%d",&employees[i].employee_number);
        //Salary
        printf("Salary: ");
        scanf("%d",&employees[i].salary);
        //Year of service_year
        printf("Year of Service: ");
        scanf("%d",&employees[i].service_year);
    }
 
    //Displaying Employee details
 
    printf("-------------- All Employees Details ---------------\n");
 
    for(i=0; i<n; i++){
 
        printf("Employee Name \t: ");
        printf("%s \n",employees[i].employee_name);
 
        printf("Employee Number \t: ");
        printf("%d \n",employees[i].employee_number);
 
        printf("Salary \t: ");
        printf("%d \n",employees[i].salary);
        
        printf("Year of Service \t: ");
        printf("%d \n",employees[i].service_year);
 
        printf("\n");
    }
 
    return 0;
}

为了实现你的第三个目标,我只创建了一个方法来接收员工结构的地址,然后我检查他的服务年限,最后加上 10% 或 7%。在这种方法中,我在引入员工数据时直接增加了薪水,但是随时可以随时调用increment()

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    
  char employee_name[30];
  int employee_number;
  float salary;
  int service_year
  
} Employee;
void increment (Employee * current);
int main ()
{
  int i, n = 5;

  Employee employees[n];

//Taking each employee detail as input

  printf ("Enter %d Employee Details \n \n", n);
  for (i = 0; i < 5; i++)
    {

      printf ("Employee %d:- \n", i + 1);
      //Name
      printf ("Name: ");
      scanf ("%s", employees[i].employee_name);
      //ID
      printf ("Id: ");
      scanf ("%d", &employees[i].employee_number);
      //Salary
      printf ("Salary: ");
      scanf ("%f", &employees[i].salary);
      //Year of service_year
      printf ("Year of Service: ");
      scanf ("%d", &employees[i].service_year);
      //printf ("Incrementing the salary according the years of service");
      increment (&employees[i]);

    }

//Displaying Employee details

  printf ("-------------- All Employees Details ---------------\n");

  for (i = 0; i < n; i++)
    {

      printf ("Employee Name \t: ");
      printf ("%s \n", employees[i].employee_name);

      printf ("Employee Number \t: ");
      printf ("%d \n", employees[i].employee_number);

      printf ("Salary \t: ");
      printf ("%f \n", employees[i].salary);

      printf ("Year of Service \t: ");
      printf ("%d \n", employees[i].service_year);

      printf ("\n");
    }

  return 0;

}

void increment (Employee * current)
{
  if (current->service_year >= 10)
    current->salary += current->salary * 0.1;
  else
    current->salary += current->salary * 0.07;
}

我使用随机员工获得的一个输出。对于我的商品,并检查这是否有效,他们所有人的工资都是 100。

Enter 5 Employee Details 
 
Employee 1:- 
Name: Toni
Id: 23
Salary: 100
Year of Service: 10
Employee 2:- 
Name: Pedro
Id: 15
Salary: 100
Year of Service: 5
Employee 3:- 
Name: Juan
Id: 78
Salary: 100
Year of Service: 15
Employee 4:- 
Name: Ramon
Id: 55
Salary: 100
Year of Service: 1
Employee 5:- 
Name: Ester
Id: 44
Salary: 100
Year of Service: 55
-------------- All Employees Details ---------------
Employee Name   : Toni 
Employee Number     : 23 
Salary  : 110 
Year of Service     : 10 

Employee Name   : Pedro 
Employee Number     : 15 
Salary  : 107 
Year of Service     : 5 

Employee Name   : Juan 
Employee Number     : 78 
Salary  : 110 
Year of Service     : 15 

Employee Name   : Ramon 
Employee Number     : 55 
Salary  : 107 
Year of Service     : 1 

Employee Name   : Ester 
Employee Number     : 44 
Salary  : 110 
Year of Service     : 55 

尝试使用浮点数作为salary变量,因为与0.10.07相乘后,会丢失信息。
您还需要将 printfscanf 中的格式说明符更改为 %f,因为变量 salary 现在的类型是 float

这是指导您的代码片段。

员工结构

typedef struct
{
    
  char employee_name[30];
  int employee_number;
  float salary;
  int service_year
  
} Employee;

计算增量

// Calculate the increment in salary
for(i=0; i<5; i++){
    if(employees[i].service_year >= 10)
       employees[i].salary+=(0.1)*employees[i].salary;
    else if(employees[i].service_year >=0 && employees[i].service_year < 10)
       employees[i].salary+=(0.07)*employees[i].salary;
}

For item 3 i have no idea how to write the coding.
Update the salary by adding a 10% increment if the years of service is 10 years and more. Otherwise, add a 7% increment.

对于具有 .

的整数问题,我会避免浮点数学运算

添加辅助函数来计算加薪。

编程的一个关键部分是将任务划分为可管理的辅助函数。请注意下面的两个分别处理工资调整的一个单独方面。如果明年进行更复杂的计算调整并且不会弄乱其他代码,则调整起来很容易。

int increase_percent(int salary, int percent) {
  int half = percent >= 0 ? 100/2 : -100/2;
  return (salary * percent + half)/100; // add half for a rounded quotient
}

int increase_tenure(int salary, int years) {
  int percent = years >= 10 ? 10 : 7;
  return increase_percent(salary, percent);
}

// Usage
employees[i].salary += increase_tenure(employees[i].salary, employees[i].service_year);