Advertisement
Guest User

Untitled

a guest
May 30th, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. const int N = 50; // размер строк
  6.  
  7. struct Person
  8. {
  9. char name[N];
  10. char surname[N];
  11. char secondName[N];
  12. int birthYear;
  13. char gender;
  14. char birthPlace[N];
  15. char workPlace[N];
  16. char job[N];
  17.  
  18. Person* next; // указывает на следующего человека
  19. };
  20.  
  21. Person *top; // указывает на первого человека
  22.  
  23.  
  24.  
  25. // функции главного меню
  26. void mainMenu(); // выводит главное меню
  27. int willContinue(); // спрашивает продолжить ли
  28.  
  29.  
  30. // функции работы по списком
  31. void Push(); // добавляет человека в список
  32. void Add(); // функция добавления человека в записную книжку
  33. void Delete(); // удаляет по имени и фамилии
  34. void Show(Person* Person);//отображает отдельный элемент
  35. void ShowAll(); // отображает записную книгу в виде таблицы
  36.  
  37.  
  38. //функции поиска по каталогу
  39. void SearchYoungest(); // ищет самого молодого человека в записной книге
  40. void SearchByJob(); // ищет по профессии
  41. void SearchByBirthPlace(); // ищет по месту рождения
  42. void SearchByWorkPlace(); // ищет по месту работы
  43.  
  44.  
  45. //функции работы с каталогом
  46. void CountByWorkPlace(); // считает ко-во работников по месту работы
  47. void SortByYear(); // выводит отсортированый по году рождения список
  48.  
  49.  
  50. //функции работы с файлом
  51. void SaveToFile(); // сохраняет стек в файл
  52. void LoadFromFile(); // загружает стек из файла
  53.  
  54.  
  55. void main()
  56. {
  57. setlocale(LC_ALL, "Russian");
  58. int program = 1; // переменная , отвечающая за выход из цикла
  59. int vibor;
  60. while (program)
  61. {
  62. mainMenu();
  63. cout << "Введите ваш выбор: ";
  64. cin >> vibor;
  65. switch (vibor)
  66. {
  67. case 1:
  68. Add();
  69. if (willContinue())
  70. {
  71. program = 1;
  72. }
  73. else
  74. {
  75. program = 0;
  76. }
  77. break;
  78. case 2:
  79. ShowAll();
  80. if (willContinue()) // возвращает 1 или 0
  81. {
  82. program = 1;
  83. }
  84. else
  85. {
  86. program = 0;
  87. }
  88. break;
  89.  
  90.  
  91.  
  92. case 3:
  93. SearchYoungest();
  94. if (willContinue())
  95. {
  96. program = 1;
  97. }
  98. else
  99. {
  100. program = 0;
  101. }
  102. break;
  103.  
  104. case 4:
  105. Delete();
  106. if (willContinue())
  107. {
  108. program = 1;
  109. }
  110. else
  111. {
  112. program = 0;
  113. }
  114. break;
  115.  
  116. case 5:
  117. SearchByJob();
  118. if (willContinue())
  119. {
  120. program = 1;
  121. }
  122. else
  123. {
  124. program = 0;
  125. }
  126. break;
  127.  
  128. case 6:
  129. SearchByBirthPlace();
  130. if (willContinue())
  131. {
  132. program = 1;
  133. }
  134. else
  135. {
  136. program = 0;
  137. }
  138. break;
  139.  
  140. case 7:
  141. SearchByWorkPlace();
  142. if (willContinue())
  143. {
  144. program = 1;
  145. }
  146. else
  147. {
  148. program = 0;
  149. }
  150. break;
  151.  
  152. case 8:
  153. SortByYear();
  154. if (willContinue())
  155. {
  156. program = 1;
  157. }
  158. else
  159. {
  160. program = 0;
  161. }
  162. break;
  163.  
  164. case 9:
  165. CountByWorkPlace();
  166. if (willContinue())
  167. {
  168. program = 1;
  169. }
  170. else
  171. {
  172. program = 0;
  173. }
  174. break;
  175.  
  176. case 10:
  177. SaveToFile();
  178. if (willContinue())
  179. {
  180. program = 1;
  181. }
  182. else
  183. {
  184. program = 0;
  185. }
  186. break;
  187.  
  188. case 11:
  189. LoadFromFile();
  190. if (willContinue())
  191. {
  192. program = 1;
  193. }
  194. else
  195. {
  196. program = 0;
  197. }
  198. break;
  199.  
  200.  
  201. case 0: // программа выключается
  202. program = 0;
  203. break;
  204.  
  205. default:
  206. cout << endl << "Вы ввели неверный код. Попробуйте ещё раз." << endl;
  207. system("pause");
  208. break;
  209.  
  210. }
  211.  
  212. }
  213. }
  214.  
  215. void mainMenu()
  216. {
  217. system("cls");
  218. cout << "\tКурсовая работа\t|\tАИ-152\t|\t Величко А.Г." << endl;
  219. cout << "-------------------------------------------------------------" << endl << endl;
  220. cout << "Программа для работы с записной книгой " << endl;
  221. cout << "Управление реализуется с помощью клавиатуры." << endl << "Введите код действия и нажмите ENTER." << endl;
  222. cout << "-------------------------------------------------------------" << endl << endl;
  223. cout << "Главное меню: " << endl;
  224.  
  225. cout << "1. Добавление элемента." << endl;
  226. cout << "2. Вывод записей книги в виде таблицы." << endl;
  227. cout << "3. Поиск самого младшего человека." << endl;
  228. cout << "4. Удаление заданных элементов. " << endl;
  229. cout << "5. Вывод всех элементов, имеющих заданную профессию ." << endl;
  230. cout << "6. Вывод списка людей, которые родились в заданном городе. " << endl;
  231. cout << "7. Вывод списка людей, которые работают в заданнном предприятии. " << endl;
  232. cout << "8. Сортировка списка по полю -год рождения-. " << endl;
  233. cout << "9. Вычисление количества людей, работающих в заданном предприятии. " << endl;
  234. cout << "10. Сохранение записной книжки в файл. " << endl;
  235. cout << "11. Загрузка записной книжки из файла. " << endl;
  236. cout << "0. Выйти из программы." << endl;
  237. cout << endl;
  238. }
  239.  
  240.  
  241.  
  242. int willContinue()
  243. {
  244. int answer;
  245. cout << endl << "Продолжить работу?" << endl;
  246. cout << "1. Да" << endl;
  247. cout << "2. Нет (выйти из программы)" << endl;
  248. while (true)
  249. {
  250. cout << endl;
  251. cout << "Введите ваш выбор: ";
  252. cin >> answer;
  253. if (answer == 1)
  254. {
  255. return 1;
  256. }
  257. else if (answer == 2)
  258. {
  259. return 0;
  260. }
  261. else
  262. {
  263. cout << endl << "Вы ввели неверный код. Попробуйте ещё раз." << endl;
  264. system("pause");
  265. }
  266. }
  267. }
  268.  
  269. void Push()
  270. {
  271. Person *temp;
  272. temp = (Person*)malloc(sizeof(Person));
  273. cout << "Введите имя: " << endl;
  274. scanf("%s", temp->name);
  275. cout << "Введите фамилию :" << endl;
  276. scanf("%s", temp->surname);
  277. cout << "Введите отчество :" << endl;
  278. scanf("%s", temp->secondName);
  279. cout << "Введите год рождения :" << endl;
  280. cin >> temp->birthYear;
  281. cout << "Введите пол (F если женщина, M если мужчина)" << endl;
  282. cin >> temp->gender;
  283. cout << "Введите место рождения:" << endl;
  284. scanf("%s", temp->birthPlace);
  285. cout << "Введите место работы:" << endl;
  286. scanf("%s", temp->workPlace);
  287. cout << "Введите должность:" << endl;
  288. scanf("%s", temp->job);
  289.  
  290. temp->next = top;
  291. top = temp;
  292.  
  293.  
  294.  
  295. }
  296.  
  297. void Add()
  298. {
  299. Push();
  300. }
  301.  
  302. void Delete() //Данная функция воспринимает нашу очередь как список,
  303. //поскольку в очереди доступ есть только к верхнему элементу
  304. //а для поиска нам придется пройти по всей очереди
  305. {
  306. cout << "Введите имя человека для удаления" << endl;
  307. char name1[50];
  308. scanf("%s", name1);
  309. cout << "Введите фамилию человека для удаления" << endl;
  310. char surname1[50];
  311. scanf("%s", surname1);
  312. int udalen = 0;
  313. Person *temp1 = top;
  314. Person *temp2;
  315. if (temp1 == NULL) // голова пустая, списка нет
  316. {
  317. cout << "Список пуст!" << endl;
  318. return;
  319. }
  320.  
  321. if (strcmp(temp1->name, name1) == 0)
  322. {
  323. if (strcmp(temp1->surname, surname1) == 0)
  324. {
  325. top = top->next;
  326. free(temp1);
  327. udalen = 1;
  328.  
  329. }
  330. }
  331. else
  332. {
  333. while (temp1->next != NULL)
  334. {
  335. temp2 = temp1->next;
  336. if (strcmp(temp2->name, name1) == 0)
  337. {
  338. if (strcmp(temp2->surname, surname1) == 0)
  339. {
  340. temp1->next = temp2->next;
  341. free(temp2);
  342.  
  343. udalen = 1;
  344. break;
  345.  
  346.  
  347. }
  348. }
  349. temp1 = temp1->next;
  350.  
  351. }
  352. }
  353.  
  354. if (udalen == 1)
  355. {
  356. cout << "Объект удален" << endl;
  357. }
  358. else
  359. {
  360. cout << "Объект не найден в списке" << endl;
  361. }
  362.  
  363. }
  364.  
  365. void Show(Person* Person)
  366. {
  367. cout << setw(10) << Person->name << " | " << setw(15) << Person->surname << " | " << setw(15) << Person->secondName << " | " << setw(13) << Person->birthYear << " | ";
  368. if (Person->gender == 'F')
  369. {
  370. cout << "Женский";
  371. } else
  372. {
  373. cout << "Мужской";
  374. }
  375. cout << " | " << setw(18) << Person->birthPlace << " | " << setw(20) << Person->workPlace << " | " << setw(15) << Person->job << "" << endl;
  376.  
  377. }
  378.  
  379. void ShowAll()
  380. {
  381. Person *temp = top;
  382. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  383. cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
  384. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  385. while (temp!=NULL)
  386. {
  387. Show(temp);
  388. temp = temp->next;
  389. }
  390. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  391. }
  392.  
  393.  
  394.  
  395.  
  396. void SearchYoungest()
  397. {
  398. cout << "Список самых молодых людей (рожденных в ";
  399. int min = top->birthYear; // вдруг минимальный это самый верхний человек
  400. Person *temp = top; // начинаем проход с вершины
  401. while (temp != NULL) // пока элемент не пустой
  402. {
  403. if (temp->birthYear>min) // если год рождения человека больше чем миимальный
  404. {
  405. min = temp->birthYear; // минимум равен году рождения текущего узла
  406. }
  407. temp = temp->next;
  408. }
  409. temp = top; //возвращаемся в начало списка
  410. cout << min << " году):" << endl;
  411. while (temp != NULL)
  412. {
  413. if (temp->birthYear==min)
  414. {
  415. cout << temp->name << " " << temp->surname << endl;
  416. }
  417. temp = temp->next;
  418. }
  419.  
  420. }
  421.  
  422. void SearchByJob()
  423. {
  424. int found = 0;
  425. Person *temp = top;
  426. cout << "Введите искомую профессию: " << endl;
  427. char* tempJob = new char[50];
  428. scanf("%s", tempJob);
  429. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  430. cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
  431. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  432. while (temp != NULL)
  433. {
  434. if (strcmp(temp->job, tempJob) == 0)
  435. {
  436. Show(temp);
  437. found = 1;
  438. }
  439. temp = temp->next;
  440. }
  441. if (found==0)
  442. {
  443. cout << "Элементы с заданной профессией не найдены!" << endl;
  444. }
  445. }
  446.  
  447. void SearchByBirthPlace()
  448. {
  449.  
  450. int found = 0;
  451. Person *temp = top;
  452. cout << "Введите место рождения: " << endl;
  453. char* tempPlace = new char[50];
  454. scanf("%s", tempPlace);
  455. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  456. cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
  457. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  458. while (temp != NULL)
  459. {
  460. if (strcmp(temp->birthPlace, tempPlace) == 0)
  461. {
  462. Show(temp);
  463. found = 1;
  464. }
  465. temp = temp->next;
  466. }
  467. if (found == 0)
  468. {
  469. cout << "Элементы с заданным местом рождения не найдены!" << endl;
  470. }
  471. }
  472.  
  473. void SearchByWorkPlace()
  474. {
  475. Person *temp = top;
  476. int found = 0;
  477. cout << "Введите искомое место работы: " << endl;
  478. char* place = new char[50];
  479. scanf("%s", place);
  480. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  481. cout << " Имя | Фамилия | Отчество | Год рождения | Пол | Место рождения | Место работы | Должность " << endl;
  482. cout << "-----------------------------------------------------------------------------------------------------------------------------------------" << endl;
  483. while (temp != NULL)
  484. {
  485. if (strcmp(temp->workPlace, place) == 0)
  486. {
  487. Show(temp);
  488. found = 1;
  489. }
  490.  
  491. temp = temp->next;
  492. }
  493. if (found == 0)
  494. {
  495. cout << "Элементы с заданным местом работы не найдены!" << endl;
  496. }
  497. }
  498.  
  499.  
  500.  
  501.  
  502. void CountByWorkPlace()
  503. {
  504. Person *temp = top;
  505. int count = 0;
  506. cout << "Введите искомое место работы: " << endl;
  507. char* place = new char[50];
  508. scanf("%s", place);
  509. while (temp != NULL)
  510. {
  511.  
  512. if (strcmp(temp->workPlace, place) == 0)
  513. {
  514. count++;
  515. }
  516.  
  517. temp = temp->next;
  518. }
  519. cout << "Количество работников в организации \"" << place << "\" = " << count << endl;
  520. }
  521.  
  522. void SortByYear()
  523. {
  524. Person *a = NULL;
  525. Person *b = NULL;
  526. Person *c = NULL;
  527. Person *e = NULL;
  528. Person *tmp = NULL;
  529.  
  530. while (e != top->next)
  531. {
  532. c = a = top;
  533. b = a->next;
  534. while (a != e)
  535. {
  536. if (a->birthYear > b->birthYear)
  537. {
  538. if (a == top)
  539. {
  540. tmp = b->next;
  541. b->next = a;
  542. a->next = tmp;
  543. top = b;
  544. c = b;
  545. }
  546. else
  547. {
  548. tmp = b->next;
  549. b->next = a;
  550. a->next = tmp;
  551. c->next = b;
  552. c = b;
  553. }
  554. }
  555. else
  556. {
  557. c = a;
  558. a = a->next;
  559. }
  560. b = a->next;
  561. if (b == e)
  562. e = a;
  563. }
  564. }
  565. }
  566.  
  567.  
  568.  
  569.  
  570. void SaveToFile()
  571. {
  572. FILE *f;
  573. f = fopen("D:\\Записная книжка\\data.txt", "w+");
  574. if (f == NULL)
  575. {
  576. printf("Невозможно открыть файл!\n");
  577. return;
  578. }
  579. Person* temp = top;
  580. while (temp != NULL)
  581. {
  582. fprintf(f, "%s ", temp->name);
  583. fprintf(f, "%s ", temp->surname);
  584. fprintf(f, "%s ", temp->secondName);
  585. fprintf(f, "%s ", temp->job);
  586. fprintf(f, "%c ", temp->gender);
  587. fprintf(f, "%d ", temp->birthYear);
  588. fprintf(f, "%s ", temp->birthPlace);
  589. fprintf(f, "%s", temp->workPlace);
  590. fprintf(f, "\n");
  591. temp = temp->next;
  592. }
  593. fclose(f);
  594. }
  595.  
  596. void LoadFromFile()
  597. {
  598. FILE *f;
  599. f = fopen("D:\\Записная книжка\\data.txt", "r+");
  600. if (f == NULL)
  601. {
  602. printf("Невозможно открыть файл!\n");
  603. return;
  604. }
  605. Person* temp = NULL;
  606.  
  607. while (!feof(f))
  608. {
  609. temp = (Person*)malloc(sizeof(Person));
  610. cout << "zaebis" << endl;
  611. fscanf(f, "%s", temp->name);
  612. cout << "zaebis!!" << endl;
  613. fscanf(f, "%s", temp->surname);
  614. fscanf(f, "%s", temp->secondName);
  615. fscanf(f, "%s", temp->job);
  616. fscanf(f, "%c", &temp->gender);
  617. fscanf(f, "%d", &temp->birthYear);
  618. fscanf(f, "%s", temp->birthPlace);
  619. fscanf(f, "%s", temp->workPlace);
  620. temp->next = top;
  621. top = temp;
  622. }
  623. fclose(f);
  624. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement