Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая запись содержит поля: фамилия сборщик, количество изделий, которые были собраны им в понедельник, вторник, ..., пятницу. Вывести по фамилии сборщиков общее количество деталей, собранных им за неделю и день, когда он достиг наибольшей производительности труда.

Решение задачи: «Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю»

textual
Листинг программы
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
 
 
#define  DAYS 5
 
typedef struct
{
    char name[64];
    int details[DAYS];
}Worker;
 
 
int GetNumDetails(const Worker *worker )
{
    int num = 0;
    int i = 0;
    for(i = 0; i < DAYS; i++)
        num += worker->details[i];
    return num;
}
 
int GetNumDetailsMax(const Worker *worker )
{
    int m = 0;
    int i = 0;
    for(i = 0; i < DAYS; i++)
        if(worker->details[i] > m)
            m= worker->details[i];
    return m;
}
 
int GetNumEntries(FILE* f)
{
    int num = 0;
    char tmp[80];
    while(fgets(tmp,80,f)!= NULL)
        num++;
    fseek(f,0,SEEK_SET);
    return num;
}
 
void PrintWithCondition(const Worker *arr, int len)
{
    int i = 0;
    puts("Name Number Maximum:");
    puts("--------------------");
    for(i = 0; i < len; i++)
    {
        printf("%s ",arr[i].name);
        printf("%d ",GetNumDetails(&arr[i]));
        printf("%d \n",GetNumDetailsMax(&arr[i]));
    }
}
 
 
int main(void)
{
    FILE* f = fopen("Workers.txt","r");
    Worker *arr = NULL;
    int numEntries = 0;
    int i = 0;
    if(!f)
        puts("Error in opening file");
    else
    {
        numEntries = GetNumEntries(f);
        arr = (Worker *)malloc(sizeof(Worker) * numEntries);
 
        for(i = 0; i < numEntries; i++)
        {
            fscanf(f,"%s %d %d %d %d %d\n",
                   arr[i].name, &arr[i].details[0], &arr[i].details[1],
                    &arr[i].details[2],&arr[i].details[3], &arr[i].details[4]);
        }
 
        PrintWithCondition(arr, numEntries);
 
        free(arr);
        fclose(f);
    }
}

Объяснение кода листинга программы

  1. Создание структуры для хранения данных о работниках В начале кода определяется структура Worker, которая содержит массив из 5 элементов типа int для хранения количества изделий, собранных работником за каждый день недели, а также строку (char array) для хранения имени работника.
  2. Функции для работы со структурой Worker Для удобства работы со структурой Worker определены две функции:
    • GetNumDetails - суммирует все элементы массива details заданного работника
    • GetNumDetailsMax - находит максимальное значение среди всех элементов массива details
  3. Чтение данных из файла В функции main открывается файл Workers.txt для чтения. Заголовок каждой строки файла содержит имя работника, а следующие 5 строк содержат числа, соответствующие количеству изделий, собранных работником за каждый день недели. С помощью цикла и функции fscanf данные считываются в массив arr.
  4. Вывод данных Функция PrintWithCondition выводит на экран информацию о каждом работнике в формате: имя работника - общее количество изделий - максимальное количество изделий за день.
  5. Освобождение памяти и закрытие файла После выполнения всех операций память, выделенная под массив arr, освобождается с помощью функции free. Файл Workers.txt закрывается с помощью функции fclose.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы