Шаг 65.
Microsoft Visual C++ 2010. Язык С/С++. ... Программы со структурами. Программа упрощенного расчета заработной платы одному работнику

    На этом шаге мы приведем текст такой программы.

    В этой программе создана функция расчета, которой передается в качестве параметра указатель на структуру. Результат расчет показан рисунке 1.

// 65_1.cpp: главный файл проекта.

#include "stdafx.h"
#include <clocale>     //обязательно для функции setlocale()

#include <stdio.h> //for getchar(),putchar()
#include <conio.h>
#include <stdlib.h> //for atoi()
#include <string.h>

#define eof -1
#define MAXLINE 1000
using namespace System;

//--- Ввод строки с клавиатуры ---
int getline(char s[], int lim) 
{
	int c,i;
	for(i=0; i<lim-1 && (c=getchar()) != eof && c != '\n'; i++)
		s[i] = c; 
	s[i] = '\0';
	i++;    //для учета количества 
	
	return i;
}


struct zrp //структура данных по зарплате
{
	char *name;       //имя работника
	float stavka;     //оплата за один рабочий день
	float nalog;      //величина налога
} emp[] = {"Иванов", 200, 0.1, 
	   "Петров",300,0.2, 
	   "Сидоров", 400, 0.3 };
//3десь задан массив экземпляров структур: одна структура 
//содержит данные на одного работника. Массив сразу проинициализирован.

//Функция начисления зарплаты одному работнику. 
//RabDn - количество отработанных дней*
float zarplata(zrp *z, int RabDn)
{ return(z->stavka * RabDn * (1 - z->nalog)); }

void main()
{
	setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами
	                             //для корректного вывода кириллицы
	char c, s[MAXLINE];
	zrp *p1;
	//определение размера массива:
	int RazmMas = sizeof(emp)/sizeof(zrp); 
	do {
		//ввод номера работника: 
        m:      printf("Задайте номер работника >"); 
		getline(s, MAXLINE); 
		int i=atoi(s);
		if(i < RazmMas)   //контроль количества заданных элементов массива 
			p1=&emp[i]; 
		else 
			goto m;
		//ввод количества отработанных дней:
		printf("Количество отработанных дней >"); 
		getline(s, MAXLINE); 
		i=atoi(s);
		float zp =  zarplata(p1, i); //обращение к функции расчета зарплаты 
		printf ("%s %6.2f\n",p1->name, zp) ;
	}
	while( (c=getchar() ) != eof);
	//конец цикла do...while
}
Архив проекта можно взять здесь.

    На следующем шаге мы рассмотрим рекурсию в структурах.




Предыдущий шаг Содержание Следующий шаг