Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <float.h>
- #include <Windows.h>
- #define MaxQty 300 //Максимальное кол-во приборов
- struct gauge { //Измерение
- char ValueName[50]; //Название изм. величины
- float MinLim; //Нижний предел
- float MaxLim; //Верхний предел
- float Error; //Погрешность
- };
- struct temp { //Диапазон температур
- float Tmin; //Нижний предел
- float Tmax; //Верхний предел
- };
- struct sizeDev { //Габариты
- float Length; //Длина
- float Height; //Высота
- float Width; //Ширина
- };
- struct device { //Прибор
- char Name[50]; //Наименование прибора
- struct sizeDev Size;//Габариты
- float Weight; //Вес
- struct temp Temp; //Диапазон температур
- struct gauge Gauge1;//Измеряемая величина 1
- struct gauge Gauge2;//Измеряемая величина 2
- int isNotNull;
- };
- struct device Devices[MaxQty]; //Приборы
- int qtyDev = 0; //Текущее кол-во приборов
- /*Меню*/
- int Menu() {
- printf("Меню:\n");
- printf("1. Вывод данных о приборах\n");
- printf("2. Вывод данных по критерию\n");
- printf("3. Ввод данных о приборе\n");
- printf("4. Удалить данные о приборе по номеру\n");
- printf("5. Удалить данные о всех приборах\n");
- printf("6. Запись в файл\n");
- printf("7. Чтения из файла\n");
- return 0;
- }
- /*Выбор пункта меню*/
- int Check() {
- int del;
- char key = getch();
- switch (key) {
- case '1':
- Output(FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX, FLT_MIN, FLT_MAX);
- break;
- case '2':
- Input();
- break;
- case '3':
- //Вывод по критерию
- Sort();
- break;
- case '4':
- printf("Введите номер прибора, для удаления\n");
- scanf("%d", &del);
- if (del < 0 || del > 299) printf("Номер выход за пределы массива\n");
- if (DeleteAtID(del))
- printf("Удалено успешно");
- else
- printf("Не существует данных о приборе %d", del);
- break;
- case '5':
- DeleteAll();
- break;
- case '6':
- WriteToFile();
- break;
- case '7':
- ReadFromFile();
- break;
- default:
- printf("%c", key);
- return 0;
- break;
- }
- return 0;
- }
- /*Функция вывода данных*/
- int Output(float length, float height, float width, float weight, float tmin, float tmax) {
- int qty = 0;
- printf("\n № | Название | Габариты | Вес | Tmin | Tmax | Величина |Н. пред.|В. пред.|Погрешность| Величина |Н. пред.|В. пред.|Погрешность\n");
- int i;
- for (i = 0; i < MaxQty; i++) {
- if (Devices[i].isNotNull && Devices[i].Size.Length < length /*&& Devices[i].Size.Height < height && Devices[i].Size.Width < width && Devices[i].Weight < weight && Devices[i].Temp.Tmin > tmin && Devices[i].Temp.Tmax < tmax*/) {
- printf("%3d | %-10.10s | %5.2f %5.2f %5.2f | %5.2f | %5.2f | %5.2f", i, Devices[i].Name, Devices[i].Size.Length, Devices[i].Size.Height, Devices[i].Size.Width, Devices[i].Weight, Devices[i].Temp.Tmin, Devices[i].Temp.Tmax);
- printf(" | %-10.10s | %6.2f | %6.2f | %9.2f", Devices[i].Gauge1.ValueName, Devices[i].Gauge1.MinLim, Devices[i].Gauge1.MaxLim, Devices[i].Gauge1.Error);
- printf(" | %-10.10s | %6.2f | %6.2f | %9.2f\n", Devices[i].Gauge2.ValueName, Devices[i].Gauge2.MinLim, Devices[i].Gauge2.MaxLim, Devices[i].Gauge2.Error);
- qty++;
- }
- }
- printf("Показано приборов %d из %d\n\n",qty, qtyDev);
- return 0;
- }
- int Sort() {
- float length, height, width;
- float weight;
- float tmin, tmax;
- printf("Введите критерий сортировки");
- printf("Длина x Высота x Ширина: ");
- scanf("%f %f %f", &length, &height, &width);
- printf("Введите вес: ");
- scanf("&f", &weight);
- do{
- printf("Введите tmin и tmax (tmin<tmax): ");
- scanf("&f &f", &tmin, &tmax);
- } while (tmin > tmax);
- Output(length, height, width, weight, tmin, tmax);
- return 0;
- }
- /*Функция ввода данных*/
- int Input() {
- printf("Ввод данных о приборе\n");
- printf("Название прибора: ");
- scanf("%s", Devices[qtyDev].Name);
- printf("Габариты прибора(ДxВxШ), через пробел: ");
- scanf("%f %f %f", &Devices[qtyDev].Size.Length, &Devices[qtyDev].Size.Height, &Devices[qtyDev].Size.Width);
- printf("Вес прибора: ");
- scanf("%f", &Devices[qtyDev].Weight);
- printf("Диапазон температур(Tmin, Tmax), через пробел: ");
- scanf("%f %f", &Devices[qtyDev].Temp.Tmin, &Devices[qtyDev].Temp.Tmax);
- printf("Измеряемые величины: \n");
- printf("Название первой измеряемой величины: ");
- scanf("%s", &Devices[qtyDev].Gauge1.ValueName);
- printf("Нижний предел: ");
- scanf("%f", &Devices[qtyDev].Gauge1.MinLim);
- printf("Верхний предел: ");
- scanf("%f", &Devices[qtyDev].Gauge1.MaxLim);
- printf("Погрешность: ");
- scanf("%f", &Devices[qtyDev].Gauge1.Error);
- printf("Название второй измеряемой величины: ");
- scanf("%s", &Devices[qtyDev].Gauge2.ValueName);
- printf("Нижний предел: ");
- scanf("%f", &Devices[qtyDev].Gauge2.MinLim);
- printf("Верхний предел: ");
- scanf("%f", &Devices[qtyDev].Gauge2.MaxLim);
- printf("Погрешность: ");
- scanf("%f", &Devices[qtyDev].Gauge2.Error);
- Devices[qtyDev].isNotNull = 1;
- qtyDev++;
- return 0;
- }
- /*Инициализирование значениями по умолчанию
- Удалить*/
- int Initialize() {
- strcpy(Devices[0].Name, "прибор1");
- Devices[0].Weight = 5.5;
- Devices[0].Size.Length = 20.5;
- Devices[0].Size.Height = 2.5;
- Devices[0].Size.Width = 20.7;
- Devices[0].Temp.Tmin = 5;
- Devices[0].Temp.Tmax = 25;
- strcpy(Devices[0].Gauge1.ValueName, "Вел. 1.1");
- Devices[0].Gauge1.MinLim = 5;
- Devices[0].Gauge1.MaxLim = 10;
- Devices[0].Gauge1.Error = 2;
- strcpy(Devices[0].Gauge2.ValueName, "Вел. 1.2");
- Devices[0].Gauge2.MinLim = 20;
- Devices[0].Gauge2.MaxLim = 50;
- Devices[0].Gauge2.Error = 1;
- Devices[0].isNotNull = 1;
- qtyDev++;
- //-----------------------------------
- strcpy(Devices[1].Name, "прибор2");
- Devices[1].Weight = 5;
- Devices[1].Size.Length = 21.6;
- Devices[1].Size.Height = 60;
- Devices[1].Size.Width = 55.5;
- Devices[1].Temp.Tmin = 50;
- Devices[1].Temp.Tmax = 70;
- strcpy(Devices[1].Gauge1.ValueName, "Вел. 2.1");
- Devices[1].Gauge1.MinLim = 1;
- Devices[1].Gauge1.MaxLim = 11;
- Devices[1].Gauge1.Error = 0.5;
- strcpy(Devices[1].Gauge2.ValueName, "Вел. 2.2");
- Devices[1].Gauge2.MinLim = 1;
- Devices[1].Gauge2.MaxLim = 5;
- Devices[1].Gauge2.Error = 0.2;
- Devices[1].isNotNull = 1;
- qtyDev++;
- //----------------------------------
- strcpy(Devices[2].Name, "прибор3");
- Devices[2].Weight = 5.5;
- Devices[2].Size.Length = 90;
- Devices[2].Size.Height = 75.5;
- Devices[2].Size.Width = 80.5;
- Devices[2].Temp.Tmin = 10;
- Devices[2].Temp.Tmax = 24;
- strcpy(Devices[2].Gauge1.ValueName, "Вел. 3.1");
- Devices[2].Gauge1.MinLim = 50;
- Devices[2].Gauge1.MaxLim = 600;
- Devices[2].Gauge1.Error = 2.5;
- strcpy(Devices[2].Gauge2.ValueName, "Вел. 3.2");
- Devices[2].Gauge2.MinLim = 10;
- Devices[2].Gauge2.MaxLim = 800;
- Devices[2].Gauge2.Error = 5.6;
- Devices[2].isNotNull = 1;
- qtyDev++;
- return 0;
- }
- /*Удаление данных по ID*/
- int DeleteAtID(int del)
- {
- if (Devices[del].isNotNull == 0) {
- return 0;
- }
- else {
- strcpy(Devices[del].Name, "");
- Devices[del].Weight = 0;
- Devices[del].Size.Length = 0;
- Devices[del].Size.Height = 0;
- Devices[del].Size.Width = 0;
- Devices[del].Temp.Tmin = 0;
- Devices[del].Temp.Tmax = 0;
- strcpy(Devices[del].Gauge1.ValueName, "");
- Devices[del].Gauge1.MinLim = 0;
- Devices[del].Gauge1.MaxLim = 0;
- Devices[del].Gauge1.Error = 0;
- strcpy(Devices[del].Gauge2.ValueName, "");
- Devices[del].Gauge2.MinLim = 0;
- Devices[del].Gauge2.MaxLim = 0;
- Devices[del].Gauge2.Error = 0;
- Devices[del].isNotNull = 0;
- qtyDev--;
- return 1;
- }
- }
- /*Удаление всех данных*/
- int DeleteAll() {
- int i;
- for (i = 0; i < 300; i++) DeleteAtID(i);
- printf("Данные удалены\n");
- return 0;
- }
- int ReadFromFile() {
- register int i;
- FILE *fp;
- float balance[100];
- /* открытие для чтения */
- if ((fp = fopen("Data", "rb")) == NULL) {
- printf("Error! Неполучилось открыть файл.");
- return 1;
- }
- DeleteAll();
- /* чтение за раз всего массива balance */
- fread(Devices, sizeof(struct device), 300, fp);
- int q;
- for (q = 0; q < 300; q++) Devices[q].isNotNull == 1 ? ++qtyDev : 0;
- fclose(fp);
- return 0;
- }
- int WriteToFile() {
- register int i;
- FILE *fp;
- /* открытие на запись */
- if ((fp = fopen("Data", "wb")) == NULL) {
- printf("Error! Неполучилось открыть файл.");
- return 1;
- }
- /* сохранение всех данных*/
- fwrite(Devices, sizeof(struct device), 300, fp);
- fclose(fp);
- return 0;
- }
- main() {
- /*Распознование кириллицы*/
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- /*Установка размера окна консоли*/
- HWND hwnd;
- char Title[1024];
- GetConsoleTitle(Title, 1024);
- hwnd = FindWindow(NULL, Title);
- MoveWindow(hwnd, 0, 0, 1300, 700, TRUE);
- Initialize();
- for (;;) {
- Menu();
- Check();
- }
- getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement