Загрузка данных


/*
9. В базе данных хранятся сведения о ремонтах техники: заказчик, название, производитель, дата выполнения (при наличии)
Структура входного файла in.txt
Винни-Пух Принтер Samsung 25.11.2022
Пятачок Монитор LG 12.11.2022
Кенга Микроволновка LG 31.12.3000
...
Определить процент невыполненных ремонтов по каждому производителю, упорядочив по наименованию производителя
Структура выходного файла out.txt
Производитель Процент
LG 50%
Samsung 0%
*/
/** Задание Гусятинер Л.Б., КМПО, 2022 */
/** Решение Гусятинер Л.Б., КМПО,  */
/** Для КТ-2 301 / 302 / 305 / 306 / 309 / 315 ИС-23 */
/** Этап 1 из 5. Чтение из файла в массив и эхо-печать */
// 12:57 - 13:11 (0 часов 14 минут)
/** Этап 2 из 5. Частичное выполнение задания. Без сортировки */
// 13:33 - 13:58 (0 часов 25 минут) Итого: 0 часов 39 минут 
/** Этап 3 из 5. Функции. Сортировка. */
// 8:40 - 8:58 (0 часов 18 минут) Итого: 0 часов 57 минут

#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <time.h>
#define AR_LEN 100

/*
struct Time {
int h;
int m;
};
*/
/*
struct Trip {
char bus_no[20];
struct Time time;
char station[50];
};
*/
struct Date {
	int day;
	int month;
	int year;
};

struct Repair {
	char orderer[50];
	char name[50];
	char creator[20];
	char data[20];  // добавлено поле data
};

int lt(struct Repair a, struct Repair b);
// возвращает true, если a < b лексикографически
void swap(struct Repair *pa, struct Repair *pb);
void ar_sort(struct Repair ar[], int n);
// выбором
void ar_print(struct Repair ar[], int n, FILE *f_out);
void ar_percant(struct Repair ar[], int n, FILE *f_out);
int main(void) {
	setlocale(LC_ALL, "");
	struct Repair ar[AR_LEN];
	FILE *f_in = fopen("in.txt", "r");
	FILE *f_out = fopen("out.txt", "w");
//	struct Repair repair = {0, 0};
	int count = 0;
	while (
		fscanf(f_in,"%s %s %s %s",
			ar[count].orderer, 
			ar[count].name, 
			ar[count].creator, 
			ar[count].data) == 4 && 
		AR_LEN > count) {
			printf("===>%s\n", ar[count].data);
		count = count + 1;
	}
	ar_print(ar, count, f_out);
	ar_sort(ar, count);
	fprintf(f_out, "\n===процент не");
	char create[AR_LEN][20];
	int total [AR_LEN] = {0};
	int notdone [AR_LEN] = {0};
	int creat_count = 0;
	fclose(f_in);
	fclose(f_out);
	return 0;
}

int lt(struct Repair a, struct Repair b) {
	// возвращает true, если a < b лексикографически
	return strcmp(a.orderer, b.orderer) < 0;
}

void swap(struct Repair *pa, struct Repair *pb) {
	struct Repair temp = *pa;
	*pa = *pb;
	*pb = temp;
}

void ar_sort(struct Repair ar[], int n) {
	// выбором
	int i;
	int j;
	for (i = 0; i < n-1; ++i) {
		int imin = i;
		for (j = i+1; j < n; ++j) {
			if (lt(ar[j], ar[imin])) {
				imin = j;
			}
		}
		if (i != imin) {
			swap(&ar[i], &ar[imin]);
		}
	}
}

void ar_print(struct Repair ar[], int n, FILE *f_out) {
	int i;
	for (i = 0; i < n; ++i) {
		fprintf(f_out,"%s %s %s %s\n", ar[i].orderer, ar[i].name, ar[i].creator, ar[i].data);
		printf("=======>%s\n", ar[i].name);
	}
}

void ar_percant(struct Repair ar[], int n, FILE *f_out) {
	fprintf(f_out, "\n===процент не");
	int i;
	for (i = 0; i < n; ++i) {
		if (strcmp(ar[i].data, "20.04.2026") > 0){
		
		}
	}
}