Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю - 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); } }
Объяснение кода листинга программы
- Создание структуры для хранения данных о работниках В начале кода определяется структура Worker, которая содержит массив из 5 элементов типа int для хранения количества изделий, собранных работником за каждый день недели, а также строку (char array) для хранения имени работника.
- Функции для работы со структурой Worker
Для удобства работы со структурой Worker определены две функции:
- GetNumDetails - суммирует все элементы массива details заданного работника
- GetNumDetailsMax - находит максимальное значение среди всех элементов массива details
- Чтение данных из файла
В функции main открывается файл
Workers.txt
для чтения. Заголовок каждой строки файла содержит имя работника, а следующие 5 строк содержат числа, соответствующие количеству изделий, собранных работником за каждый день недели. С помощью цикла и функции fscanf данные считываются в массив arr. - Вывод данных Функция PrintWithCondition выводит на экран информацию о каждом работнике в формате: имя работника - общее количество изделий - максимальное количество изделий за день.
- Освобождение памяти и закрытие файла
После выполнения всех операций память, выделенная под массив arr, освобождается с помощью функции free. Файл
Workers.txt
закрывается с помощью функции fclose.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д