Advertisement
Guest User

Untitled

a guest
May 30th, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <float.h>
  3. #include <Windows.h>
  4.  
  5. #define MaxQty 300 //Максимальное кол-во приборов
  6.  
  7.  
  8. struct gauge { //Измерение
  9. char ValueName[50]; //Название изм. величины
  10. float MinLim; //Нижний предел
  11. float MaxLim; //Верхний предел
  12. float Error; //Погрешность
  13. };
  14. struct temp { //Диапазон температур
  15. float Tmin; //Нижний предел
  16. float Tmax; //Верхний предел
  17. };
  18. struct sizeDev { //Габариты
  19. float Length; //Длина
  20. float Height; //Высота
  21. float Width; //Ширина
  22. };
  23. struct device { //Прибор
  24. char Name[50]; //Наименование прибора
  25. struct sizeDev Size;//Габариты
  26. float Weight; //Вес
  27. struct temp Temp; //Диапазон температур
  28. struct gauge Gauge1;//Измеряемая величина 1
  29. struct gauge Gauge2;//Измеряемая величина 2
  30.  
  31. int isNotNull;
  32. };
  33.  
  34. struct device Devices[MaxQty]; //Приборы
  35. int qtyDev = 0; //Текущее кол-во приборов
  36.  
  37. /*Меню*/
  38. int Menu() {
  39. printf("Меню:\n");
  40. printf("1. Вывод данных о приборах\n");
  41. printf("2. Вывод данных по критерию\n");
  42. printf("3. Ввод данных о приборе\n");
  43. printf("4. Удалить данные о приборе по номеру\n");
  44. printf("5. Удалить данные о всех приборах\n");
  45. printf("6. Запись в файл\n");
  46. printf("7. Чтения из файла\n");
  47.  
  48. return 0;
  49. }
  50. /*Выбор пункта меню*/
  51. int Check() {
  52. int del;
  53. char key = getch();
  54. switch (key) {
  55. case '1':
  56. Output(FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX, FLT_MIN, FLT_MAX);
  57. break;
  58. case '2':
  59. Input();
  60. break;
  61. case '3':
  62. //Вывод по критерию
  63. Sort();
  64. break;
  65. case '4':
  66. printf("Введите номер прибора, для удаления\n");
  67. scanf("%d", &del);
  68. if (del < 0 || del > 299) printf("Номер выход за пределы массива\n");
  69. if (DeleteAtID(del))
  70. printf("Удалено успешно");
  71. else
  72. printf("Не существует данных о приборе %d", del);
  73. break;
  74. case '5':
  75. DeleteAll();
  76. break;
  77. case '6':
  78. WriteToFile();
  79. break;
  80. case '7':
  81. ReadFromFile();
  82. break;
  83. default:
  84. printf("%c", key);
  85. return 0;
  86. break;
  87. }
  88.  
  89.  
  90. return 0;
  91. }
  92. /*Функция вывода данных*/
  93. int Output(float length, float height, float width, float weight, float tmin, float tmax) {
  94. int qty = 0;
  95. printf("\n № | Название | Габариты | Вес | Tmin | Tmax | Величина |Н. пред.|В. пред.|Погрешность| Величина |Н. пред.|В. пред.|Погрешность\n");
  96. int i;
  97. for (i = 0; i < MaxQty; i++) {
  98. 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*/) {
  99. 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);
  100. 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);
  101. 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);
  102. qty++;
  103. }
  104. }
  105. printf("Показано приборов %d из %d\n\n",qty, qtyDev);
  106. return 0;
  107. }
  108. int Sort() {
  109. float length, height, width;
  110. float weight;
  111. float tmin, tmax;
  112. printf("Введите критерий сортировки");
  113. printf("Длина x Высота x Ширина: ");
  114. scanf("%f %f %f", &length, &height, &width);
  115. printf("Введите вес: ");
  116. scanf("&f", &weight);
  117. do{
  118. printf("Введите tmin и tmax (tmin<tmax): ");
  119. scanf("&f &f", &tmin, &tmax);
  120. } while (tmin > tmax);
  121. Output(length, height, width, weight, tmin, tmax);
  122. return 0;
  123. }
  124. /*Функция ввода данных*/
  125. int Input() {
  126. printf("Ввод данных о приборе\n");
  127. printf("Название прибора: ");
  128. scanf("%s", Devices[qtyDev].Name);
  129. printf("Габариты прибора(ДxВxШ), через пробел: ");
  130. scanf("%f %f %f", &Devices[qtyDev].Size.Length, &Devices[qtyDev].Size.Height, &Devices[qtyDev].Size.Width);
  131. printf("Вес прибора: ");
  132. scanf("%f", &Devices[qtyDev].Weight);
  133. printf("Диапазон температур(Tmin, Tmax), через пробел: ");
  134. scanf("%f %f", &Devices[qtyDev].Temp.Tmin, &Devices[qtyDev].Temp.Tmax);
  135. printf("Измеряемые величины: \n");
  136. printf("Название первой измеряемой величины: ");
  137. scanf("%s", &Devices[qtyDev].Gauge1.ValueName);
  138. printf("Нижний предел: ");
  139. scanf("%f", &Devices[qtyDev].Gauge1.MinLim);
  140. printf("Верхний предел: ");
  141. scanf("%f", &Devices[qtyDev].Gauge1.MaxLim);
  142. printf("Погрешность: ");
  143. scanf("%f", &Devices[qtyDev].Gauge1.Error);
  144. printf("Название второй измеряемой величины: ");
  145. scanf("%s", &Devices[qtyDev].Gauge2.ValueName);
  146. printf("Нижний предел: ");
  147. scanf("%f", &Devices[qtyDev].Gauge2.MinLim);
  148. printf("Верхний предел: ");
  149. scanf("%f", &Devices[qtyDev].Gauge2.MaxLim);
  150. printf("Погрешность: ");
  151. scanf("%f", &Devices[qtyDev].Gauge2.Error);
  152. Devices[qtyDev].isNotNull = 1;
  153. qtyDev++;
  154. return 0;
  155. }
  156. /*Инициализирование значениями по умолчанию
  157. Удалить*/
  158. int Initialize() {
  159. strcpy(Devices[0].Name, "прибор1");
  160. Devices[0].Weight = 5.5;
  161. Devices[0].Size.Length = 20.5;
  162. Devices[0].Size.Height = 2.5;
  163. Devices[0].Size.Width = 20.7;
  164. Devices[0].Temp.Tmin = 5;
  165. Devices[0].Temp.Tmax = 25;
  166. strcpy(Devices[0].Gauge1.ValueName, "Вел. 1.1");
  167. Devices[0].Gauge1.MinLim = 5;
  168. Devices[0].Gauge1.MaxLim = 10;
  169. Devices[0].Gauge1.Error = 2;
  170. strcpy(Devices[0].Gauge2.ValueName, "Вел. 1.2");
  171. Devices[0].Gauge2.MinLim = 20;
  172. Devices[0].Gauge2.MaxLim = 50;
  173. Devices[0].Gauge2.Error = 1;
  174. Devices[0].isNotNull = 1;
  175. qtyDev++;
  176. //-----------------------------------
  177. strcpy(Devices[1].Name, "прибор2");
  178. Devices[1].Weight = 5;
  179. Devices[1].Size.Length = 21.6;
  180. Devices[1].Size.Height = 60;
  181. Devices[1].Size.Width = 55.5;
  182. Devices[1].Temp.Tmin = 50;
  183. Devices[1].Temp.Tmax = 70;
  184. strcpy(Devices[1].Gauge1.ValueName, "Вел. 2.1");
  185. Devices[1].Gauge1.MinLim = 1;
  186. Devices[1].Gauge1.MaxLim = 11;
  187. Devices[1].Gauge1.Error = 0.5;
  188. strcpy(Devices[1].Gauge2.ValueName, "Вел. 2.2");
  189. Devices[1].Gauge2.MinLim = 1;
  190. Devices[1].Gauge2.MaxLim = 5;
  191. Devices[1].Gauge2.Error = 0.2;
  192. Devices[1].isNotNull = 1;
  193. qtyDev++;
  194. //----------------------------------
  195. strcpy(Devices[2].Name, "прибор3");
  196. Devices[2].Weight = 5.5;
  197. Devices[2].Size.Length = 90;
  198. Devices[2].Size.Height = 75.5;
  199. Devices[2].Size.Width = 80.5;
  200. Devices[2].Temp.Tmin = 10;
  201. Devices[2].Temp.Tmax = 24;
  202. strcpy(Devices[2].Gauge1.ValueName, "Вел. 3.1");
  203. Devices[2].Gauge1.MinLim = 50;
  204. Devices[2].Gauge1.MaxLim = 600;
  205. Devices[2].Gauge1.Error = 2.5;
  206. strcpy(Devices[2].Gauge2.ValueName, "Вел. 3.2");
  207. Devices[2].Gauge2.MinLim = 10;
  208. Devices[2].Gauge2.MaxLim = 800;
  209. Devices[2].Gauge2.Error = 5.6;
  210. Devices[2].isNotNull = 1;
  211. qtyDev++;
  212. return 0;
  213. }
  214. /*Удаление данных по ID*/
  215. int DeleteAtID(int del)
  216. {
  217. if (Devices[del].isNotNull == 0) {
  218. return 0;
  219. }
  220. else {
  221. strcpy(Devices[del].Name, "");
  222. Devices[del].Weight = 0;
  223. Devices[del].Size.Length = 0;
  224. Devices[del].Size.Height = 0;
  225. Devices[del].Size.Width = 0;
  226. Devices[del].Temp.Tmin = 0;
  227. Devices[del].Temp.Tmax = 0;
  228. strcpy(Devices[del].Gauge1.ValueName, "");
  229. Devices[del].Gauge1.MinLim = 0;
  230. Devices[del].Gauge1.MaxLim = 0;
  231. Devices[del].Gauge1.Error = 0;
  232. strcpy(Devices[del].Gauge2.ValueName, "");
  233. Devices[del].Gauge2.MinLim = 0;
  234. Devices[del].Gauge2.MaxLim = 0;
  235. Devices[del].Gauge2.Error = 0;
  236. Devices[del].isNotNull = 0;
  237. qtyDev--;
  238. return 1;
  239. }
  240. }
  241. /*Удаление всех данных*/
  242. int DeleteAll() {
  243. int i;
  244. for (i = 0; i < 300; i++) DeleteAtID(i);
  245.  
  246. printf("Данные удалены\n");
  247.  
  248. return 0;
  249. }
  250. int ReadFromFile() {
  251. register int i;
  252. FILE *fp;
  253. float balance[100];
  254.  
  255. /* открытие для чтения */
  256. if ((fp = fopen("Data", "rb")) == NULL) {
  257. printf("Error! Неполучилось открыть файл.");
  258. return 1;
  259. }
  260.  
  261. DeleteAll();
  262. /* чтение за раз всего массива balance */
  263. fread(Devices, sizeof(struct device), 300, fp);
  264. int q;
  265. for (q = 0; q < 300; q++) Devices[q].isNotNull == 1 ? ++qtyDev : 0;
  266.  
  267. fclose(fp);
  268. return 0;
  269. }
  270. int WriteToFile() {
  271. register int i;
  272. FILE *fp;
  273.  
  274. /* открытие на запись */
  275. if ((fp = fopen("Data", "wb")) == NULL) {
  276. printf("Error! Неполучилось открыть файл.");
  277. return 1;
  278. }
  279.  
  280. /* сохранение всех данных*/
  281. fwrite(Devices, sizeof(struct device), 300, fp);
  282. fclose(fp);
  283.  
  284. return 0;
  285. }
  286.  
  287. main() {
  288. /*Распознование кириллицы*/
  289. SetConsoleCP(1251);
  290. SetConsoleOutputCP(1251);
  291.  
  292. /*Установка размера окна консоли*/
  293. HWND hwnd;
  294. char Title[1024];
  295. GetConsoleTitle(Title, 1024);
  296. hwnd = FindWindow(NULL, Title);
  297. MoveWindow(hwnd, 0, 0, 1300, 700, TRUE);
  298.  
  299. Initialize();
  300.  
  301. for (;;) {
  302. Menu();
  303. Check();
  304. }
  305. getch();
  306. return 0;
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement