#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
struct rab {
	char* master;
	double cost;
};
struct auto1 {
	char* number;
	double km;
	rab process;
};
int prov(double n) {
	char* s = (char*)malloc(50 * sizeof(char));
	fgets(s, 255, stdin);
	if (s[0] == '\n')
		return 0;
	else return 1;
}
int proverka_indiv(auto1* a, int n, char* num) {
	int k = 0;
	for (int i = 0; i < n; i++)
		if (strcmp(a[i].number, num) == 0)
			k++;
	if (k == 0)
		return 0;
	else return 1;
}
void delet_n(char*& a) {
	int i = 0;
	while (a[i] != '\n')
		i++;
	a[i] = '\0';
}
void input(auto1*& a, int& n) {
	double w;
	int q, fl = 0, e;
	printf_s("Введите количество клиентов в банке: ");
	e = n;
	do {
		while (scanf_s("%lf", &w) == 0 || w < 0 || prov(w) == 1) {
			printf_s("Вы ввели не то, что надо. Повторите. Ваш ответ: ");
			rewind(stdin);
		}
		q = w;
		if (w - q != 0) {
			printf_s("Вы ввели дробное число, а надо целое. Повторите.\n");
			continue;
		}
		if (q == 0)
			return;
		a = (auto1*)realloc(a, (n + q) * sizeof(auto1));
		fl = 1;
		for (int i = n; i < q + n; i++) {
			a[i].process.master = (char*)malloc(50 * sizeof(char));
			a[i].number = (char*)malloc(50 * sizeof(char));
			double e, pl = 0;
			char* poiu = (char*)malloc(50 * sizeof(char));
			printf_s("\n  Дата последнего изменения: ");
			rewind(stdin);
			int k = 0;
			do {
				fgets(poiu, 255, stdin);
				delet_n(poiu);
				k = 1;
			} while (proverka_indiv(a, i + 1, poiu) > 0);
			a[i].number = poiu;
			printf_s("  номер счёта: ");
			while (scanf_s("%lf", &a[i].km) == 0 || a[i].km < 0 || prov(a[i].km) == 1) {
				printf_s("Вы ввели не то, что надо. Повторите. Ваш ответ: ");
				rewind(stdin);
			}
			printf_s("  ФИО клиента: ");
			rewind(stdin);
			fgets(a[i].process.master, 255, stdin);
			delet_n(a[i].process.master);
			printf_s("  сумма на счёте($): ");
			while (scanf_s("%lf", &a[i].process.cost) == 0 || a[i].process.cost < 0 || prov(a[i].process.cost) == 1) {
				printf_s("Вы ввели не то, что надо. Повторите. Ваш ответ: ");
				rewind(stdin);
			}
		}
	} while (fl == 0);
	n += q;
}
void output(auto1* a, int n) {
	printf_s("Дата последнего изменения\t\t\t\tномер счёта\t\t\t\tклиент\t\t\t\tсумма на счёте\n");
	for (int i = 0; i < n; i++)
		printf_s("%-31s %-31.2lf %-31s %-31.2lf\n", a[i].number, a[i].km, a[i].process.master, a[i].process.cost);

	//printf_s("%10s\t\t%15s\t\t%7.2lf\t%15s\t\t%20s\t\t%7.2lf\n", a[i].number, a[i].mark, a[i].km, a[i].process.master, a[i].process.work, a[i].process.cost);

}

int main() {
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	struct auto1* cs = (auto1*)malloc(sizeof(auto1));
	int buf = 1, flag = 0, n = 0, a;
	double w;
	do {
		rewind(stdin);
		printf_s("что вы хотите сделать?(варианты ответа 1-3)\n  1.Ввод\n  2.Вывод на экран\n 3.Завершить работу\nВаш Ответ: ");
		while (scanf_s("%lf", &w) == 0 || w < 0 || w > 8 || prov(w) == 1) {
			printf_s("Вы ввели не то, что надо или данного пункта нет в списке задач. Повторите. Ваш ответ: ");
			rewind(stdin);
		}
		a = w;
		if (w - a != 0) {
			printf_s("Вы ввели дробное число, а надо целое. Повторить.\n");
			continue;
		}
		system("CLS");
		switch (a) {
		case 1: input(cs, n); break;
		case 2:if (n != 0)output(cs, n); else printf_s("Вы ещё не ввели данные про авто."); break;
		case 3: buf = 0; break;
		}
		if (buf != 0) {
			double e;
			printf_s("Вы хотите вернуться в меню?\n  1.да\n  2.нет(выйти из программы)\nВаш ответ: ");
			while (scanf_s("%lf", &e) == 0 || (e != 2 && e != 1) || prov(e) == 1) {
				printf_s("Вы ввели не то, что надо. Повторите. Ваш ответ: ");
				rewind(stdin);
			}
			if (e == 2)
				buf = 0;
			rewind(stdin);
		}
		system("CLS");
	} while (buf == 1);
}