Guest User

Untitled

a guest
Dec 11th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4.  
  5. #define MAX 150
  6.  
  7. struct avto {
  8. char brand_model[50];
  9. int year;
  10. float capacity;
  11. int horsepower;
  12. float mileage;
  13. };
  14.  
  15. void init_list(struct avto avto_list[]);
  16. int delete(int kolavt), list(int kolavt, struct avto avto_list[]), enter(int kolavt, struct avto avto_list[]), menu_select(void), find_free(struct avto avto_list[]), check_vvod(int kolpunkt);
  17.  
  18. int main(void) {
  19. char choice;
  20. struct avto avto_list[MAX], avto_list2[MAX], help;
  21. help.brand_model[0] = '/0';
  22.  
  23. int kolavt = 0;
  24. setlocale(LC_ALL, "Russian");
  25. init_list(avto_list); /* инициализация массива структур */
  26. init_list(avto_list2);
  27. for (;;) {
  28. choice = menu_select();
  29. switch (choice) {
  30. case 1: kolavt = enter(kolavt, avto_list);
  31. break;
  32. case 2: kolavt = delete(kolavt, avto_list);
  33. break;
  34. case 3: list(kolavt, avto_list);
  35. break;
  36. case 4: sort_list(kolavt, avto_list, help, avto_list2);
  37. break;
  38. case 5: exit(0);
  39. }
  40. }
  41.  
  42. return 0;
  43. }
  44.  
  45. /*Проверка ввода целочисленных значений*/
  46. int check_vvod(int kolpunkt) {
  47. int vvod = 0;
  48. char c = 0;
  49. while ((scanf_s("%d%c", &vvod, &c, 1) != 2) || (vvod < 1) || (vvod > kolpunkt) || (c != 'n')) {
  50. printf("Введенное значение некорректно! Попробуйте еще: ");
  51. if (c != 'n') while (getchar() != 'n');
  52. c = 0;
  53. }
  54. return vvod;
  55. }
  56.  
  57. /*Проверка ввода дробных значений*/
  58. float check_vvod2(float value) {
  59. float vvod = 0;
  60. char c = 0;
  61. while ((scanf_s("%f%c", &vvod, &c, 1) != 2) || (vvod < 1) || (vvod > value) || (c != 'n')) {
  62. printf("Введенное значение некорректно! Попробуйте еще: ");
  63. if (c != 'n') while (getchar() != 'n');
  64. c = 0;
  65. }
  66. return vvod;
  67. }
  68.  
  69. /* Инициализация базы авто. */
  70. void init_list(struct avto avto_list[])
  71. {
  72. for (int t = 0; t < MAX; t++) avto_list[t].brand_model[0] = '';
  73. }
  74.  
  75. /* Получения значения, выбранного пользователем в меню. */
  76. int menu_select(void)
  77. {
  78. system("cls");
  79. char s[20];
  80. int c;
  81. printf("1. Добавить автомобиль в базуn");
  82. printf("2. Удалить автомобиль из базыn");
  83. printf("3. Вывести список всех автомобилейn");
  84. printf("4. Вывести список всех автомобилей, отсортированных по какому-либо полюn");
  85. printf("5. ВыходnnВвод: ");
  86. c = check_vvod(5);
  87. system("cls");
  88. return c;
  89. }
  90.  
  91. /* Добавление автомобиля в базу. */
  92. int enter(int kolavt, struct avto avto_list[]) {
  93. int slot;
  94. char s[80];
  95.  
  96. slot = find_free(avto_list);
  97.  
  98. if (slot == -1) {
  99. printf("nСписок заполнен");
  100. system("pause");
  101. return;
  102. }
  103.  
  104. printf("Введите марку и модель: ");
  105. gets(avto_list[slot].brand_model);
  106.  
  107. printf("Введите год выпуска: ");
  108. avto_list[slot].year = check_vvod(2020);
  109. //gets(avto_list[slot].year);
  110.  
  111. printf("Введите объем двигателя: ");
  112. avto_list[slot].capacity = check_vvod2(30);
  113. //gets(avto_list[slot].capacity);
  114.  
  115. printf("Введите количество лошадинных сил: ");
  116. avto_list[slot].horsepower = check_vvod(1000);
  117. //gets(avto_list[slot].horsepower);
  118.  
  119. printf("Введите пробег: ");
  120. avto_list[slot].mileage = check_vvod2(10000000);
  121. //gets(avto_list[slot].mileage);
  122.  
  123. kolavt++;
  124. return kolavt;
  125. }
  126.  
  127. /* Поиск свободной структуры для занесения нового авто. */
  128. int find_free(struct avto avto_list[])
  129. {
  130. register int t;
  131.  
  132. for (t = 0; avto_list[t].brand_model[0] && t < MAX; t++);
  133.  
  134. if (t == MAX) return -1; /* свободных структур нет */
  135. return t;
  136. }
  137.  
  138. /* Удаление адреса выбранного автомобиля из базы. */
  139. int delete(int kolavt, struct avto avto_list[])
  140. {
  141. if (kolavt == 0) {
  142. printf("Машин в базе нет!n");
  143. system("pause");
  144. }
  145. else {
  146. int slot;
  147. printf("Введите № записи, которую хотите удалить: ");
  148. slot = check_vvod(kolavt);
  149. avto_list[slot - 1].brand_model[0] = '';
  150. if (slot < MAX) {
  151. for (int i = slot - 1; i < kolavt - 1; i++) {
  152. avto_list[i] = avto_list[i + 1];
  153. }
  154. avto_list[kolavt - 1].brand_model[0] = '';
  155. }
  156. kolavt--;
  157. return kolavt;
  158. }
  159. }
  160.  
  161. /* Вывод списка автомобилей на экран. */
  162. int list(int kolavt, struct avto avto_list[]) {
  163. float nalog = 0;
  164. if (kolavt <= 0) {
  165. printf("Машин в списке нет!");
  166. }
  167. else {
  168. for (int t = 0; t < kolavt; t++) {
  169. if (avto_list[t].brand_model[0]) {
  170. printf("%d автомобиль:n", t + 1);
  171. printf("Марка, модель: %sn", avto_list[t].brand_model);
  172. printf("Год выпуска: %in", avto_list[t].year);
  173. printf("Объем двигателя (м^3): %.2fn", avto_list[t].capacity);
  174. printf("Количество л/с: %in", avto_list[t].horsepower);
  175. printf("Пробег (км): %.2fn", avto_list[t].mileage);
  176. if (avto_list[t].horsepower < 100) {
  177. nalog = avto_list[t].horsepower * 7;
  178. }
  179. else {
  180. if ((avto_list[t].horsepower >= 100) && (avto_list[t].horsepower < 250)) {
  181. nalog = avto_list[t].horsepower * 14;
  182. }
  183. else {
  184. if (avto_list[t].horsepower >= 250) {
  185. nalog = avto_list[t].horsepower * 30;
  186. }
  187. }
  188. }
  189. printf("Данная машина облагается налогом в размере: %.2f руб.nn", nalog);
  190. }
  191. }
  192. }
  193. printf("nn");
  194. system("pause");
  195. }
  196.  
  197. /* Вывод списка с сортировкой на экран. */
  198. int sort_list(int kolavt, struct avto avto_list[], struct avto help, struct avto avto_list2[]) {
  199. float nalog = 0;
  200. char res1[10];
  201. char res2[10];
  202. if (kolavt <= 0) {
  203. printf("Машин в списке нет!");
  204. }
  205. else {
  206. printf("Выберите поле, по которому будет произведена сортировка:nn1. Маркаn2. Год выпускаn3. Объем двигателяn4. Количество л/сn5. Пробегn6. НалогnnВвод: ");
  207. int menu = check_vvod(6);
  208. switch (menu) {
  209. case 1:
  210. system("cls");
  211. for (int i = 0; i <= kolavt; i++) {
  212. avto_list2[i] = avto_list[i];
  213. }
  214. printf("Список, отсортированный по марке автомобилей:nn");
  215. for (int i = 0; i < kolavt; i++)
  216. for (int j = kolavt - 1; j > i; j--)
  217. if (strcmp(avto_list2[j].brand_model, avto_list2[j - 1].brand_model) < 0)
  218. {
  219. help = avto_list2[j];
  220. avto_list2[j] = avto_list2[j - 1];
  221. avto_list2[j - 1] = help;
  222. }
  223. list(kolavt, avto_list2);
  224. break;
  225. case 2:
  226. system("cls");
  227. for (int i = 0; i <= kolavt; i++) {
  228. avto_list2[i] = avto_list[i];
  229. }
  230. printf("Список, отсортированный по году выпуска автомобилей:nn");
  231. for (int i = 0; i < kolavt; i++)
  232. for (int j = kolavt - 1; j > i; j--)
  233. if (avto_list2[j].year < avto_list2[j - 1].year)
  234. {
  235. help = avto_list2[j];
  236. avto_list2[j] = avto_list2[j - 1];
  237. avto_list2[j - 1] = help;
  238. }
  239. list(kolavt, avto_list2);
  240. break;
  241. case 3:
  242. system("cls");
  243. for (int i = 0; i < kolavt; i++) {
  244. avto_list2[i] = avto_list[i];
  245. }
  246. printf("Список, отсортированный по объему двигателя автомобилей:nn");
  247. for (int i = 0; i <= kolavt; i++)
  248. for (int j = kolavt - 1; j > i; j--)
  249. if (avto_list2[i].capacity > avto_list2[j].capacity)
  250. {
  251. help = avto_list2[j];
  252. avto_list2[j] = avto_list2[i];
  253. avto_list2[i] = help;
  254. }
  255. list(kolavt, avto_list2);
  256. break;
  257. case 4:
  258. system("cls");
  259. for (int i = 0; i < kolavt; i++) {
  260. avto_list2[i] = avto_list[i];
  261. }
  262. printf("Список, отсортированный по количеству л/с автомобиля:nn");
  263. for (int i = 0; i <= kolavt; i++)
  264. for (int j = kolavt - 1; j > i; j--)
  265. if (avto_list2[i].horsepower > avto_list2[j].horsepower)
  266. {
  267. help = avto_list2[j];
  268. avto_list2[j] = avto_list2[i];
  269. avto_list2[i] = help;
  270. }
  271. list(kolavt, avto_list2);
  272. break;
  273. case 5:
  274. system("cls");
  275. for (int i = 0; i <= kolavt; i++) {
  276. avto_list2[i] = avto_list[i];
  277. }
  278. printf("Список, отсортированный по пробегу автомобилей:nn");
  279. for (int i = 0; i < kolavt; i++)
  280. for (int j = kolavt - 1; j > i; j--)
  281. if (avto_list2[i].mileage > avto_list2[j].mileage)
  282. {
  283. help = avto_list2[j];
  284. avto_list2[j] = avto_list2[i];
  285. avto_list2[i] = help;
  286. }
  287. list(kolavt, avto_list2);
  288. break;
  289. case 6:
  290. system("cls");
  291. int nalog[MAX], nalog2;
  292. for (int i = 0; i <= kolavt; i++) {
  293. avto_list2[i] = avto_list[i];
  294. if (avto_list2[i].horsepower < 100) {
  295. nalog[i] = avto_list2[i].horsepower * 7;
  296. }
  297. else {
  298. if ((avto_list2[i].horsepower >= 100) && (avto_list[i].horsepower < 250)) {
  299. nalog[i] = avto_list2[i].horsepower * 14;
  300. }
  301. else {
  302. if (avto_list2[i].horsepower >= 250) {
  303. nalog[i] = avto_list2[i].horsepower * 30;
  304. }
  305. }
  306. }
  307. }
  308. printf("Список, отсортированный по размеру налога на автомобили:nn");
  309. for (int i = 0; i < kolavt; i++)
  310. for (int j = kolavt - 1; j > i; j--)
  311. if (nalog[i] > nalog[j])
  312. {
  313. help = avto_list2[j];
  314. avto_list2[j] = avto_list2[i];
  315. avto_list2[i] = help;
  316. nalog2 = nalog[j];
  317. nalog[j] = nalog[i];
  318. nalog[i] = nalog2;
  319. }
  320. list(kolavt, avto_list2);
  321. break;
  322. }
  323. }
  324. }
Add Comment
Please, Sign In to add comment