Advertisement
Courbe_Impliquee

vector.struct.1.1

Nov 15th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <vector>
  5. #include <iomanip>
  6. #include <stdlib.h>
  7. #include <Windows.h>
  8. #include <string>
  9. #include <iterator>
  10. #include <fstream>
  11. #include <algorithm>
  12. using namespace std;
  13.  
  14. struct FIO {
  15. char name[20];
  16. char surname[20];
  17. char patronymic[20];
  18. };
  19. struct Student {
  20. FIO fio;
  21. int group;
  22. int exams;
  23. int mark[7];
  24. char disp[7][20];
  25. };
  26.  
  27.  
  28. void print_info(vector<Student> v) {
  29. for (vector<Student>::iterator iter = v.begin(); iter != v.end(); ++iter) {
  30. cout << setw(25) << left << iter->fio.surname << " " << setw(4) << left << iter->exams;
  31. for (int j = 0; j < iter->exams; j++) {
  32. cout << iter->disp[j] << " ";
  33. }
  34. cout << endl;
  35. cout << setw(10) << left << iter->fio.name << " " << setw(15) << left << iter->fio.patronymic << setw(4) << left << iter->group << " ";
  36. for (int j = 0; j < iter->exams; j++) {
  37. cout << setw(4) << iter->mark[j] << " ";
  38. }
  39. cout << endl << endl;
  40. }
  41. cout << endl;
  42. }
  43. Student motif() {
  44. Student a;
  45. cout << "Введите ФИО студента: ";
  46. cin >> a.fio.surname;
  47. cin >> a.fio.name;
  48. cin >> a.fio.patronymic;
  49.  
  50. cout << "Введите число экзаменов: ";
  51. cin >> a.exams;
  52.  
  53. cout << "Введите номер группы: ";
  54. cin >> a.group;
  55.  
  56. cout << "Введите названия экзаменов: ";
  57. for (int j = 0; j < a.exams; j++) {
  58. cin >> a.disp[j];
  59. }
  60.  
  61. cout << "Введите оценки студента по этим предметам: ";
  62. for (int j = 0; j < a.exams; j++) {
  63. cin >> a.mark[j];
  64. }
  65. return a;
  66. }
  67. void add_info(vector<Student>& v) {
  68. Student help = motif();
  69. v.push_back(help);
  70. }
  71. void delete_info(vector<Student>& v) {
  72. char key1[20];
  73. cout << "Введите ключ,по которому хотите удалить: ";
  74. cin >> key1;
  75. for (int i = 0; i < v.size(); i++) {
  76. if ((strcmp(key1, v[i].fio.name) == 0) || (strcmp(key1, v[i].fio.surname) == 0) || (strcmp(key1, v[i].fio.patronymic) == 0)) {
  77. v.erase(v.begin() + i);
  78. i--;
  79. }
  80. }
  81. cout << endl;
  82. }
  83. void add_info1(vector<Student>& v) {
  84. int i;
  85. cout << "Введите номер строки, перед которой хотите вставить данные: ";
  86. cin >> i;
  87. vector<Student>::iterator iter = v.begin();
  88. Student help = motif();
  89. v.emplace(iter + i, help);
  90. }
  91. void add_info2(vector<Student>& v) {
  92. int i;
  93. cout << "Введите номер строки, после которой хотите вставить данные: ";
  94. cin >> i;
  95. Student help = motif();
  96. vector<Student>::iterator it = v.begin();
  97. v.emplace(it + i + 1, help);
  98. }
  99. void search_info(vector<Student> v) {
  100. char key[20];
  101. cout << "Введите слово для поиска: ";
  102. cin >> key;
  103. vector<Student>::iterator iter;
  104. cout << endl;
  105. for (int i = 0; i < v.size(); i++) {
  106.  
  107. if (strcmp(key, v[i].fio.surname) == 0 || strcmp(key, v[i].fio.name) == 0 || strcmp(key, v[i].fio.patronymic) == 0) {
  108. iter = v.begin();
  109. advance(iter, i);
  110. cout << setw(25) << left << iter->fio.surname << " " << setw(4) << left << iter->exams;
  111. for (int j = 0; j < v[i].exams; j++) {
  112. cout << iter->disp[j] << " ";
  113. }
  114. cout << endl;
  115. cout << setw(10) << left << iter->fio.name << " " << setw(15) << left << iter->fio.patronymic << setw(4) << left << iter->group << " ";
  116. for (int j = 0; j < v[i].exams; j++) {
  117. cout << setw(4) << iter->mark[j] << " ";
  118. }
  119. cout << endl;
  120. cout << endl;
  121. }
  122. cout << endl;
  123. }
  124.  
  125. }
  126. bool comp(Student a, Student b) {
  127. if (strcmp(a.fio.surname, b.fio.surname) < 0) {
  128. return true;
  129. }
  130. return false;
  131. }
  132. bool coolcomp(Student a, Student b) {
  133. if (strcmp(a.fio.surname, b.fio.surname) < 0 || strcmp(a.fio.surname, b.fio.surname) == 0 && strcmp(a.fio.name, b.fio.name) < 0) {
  134. return true;
  135. }
  136. return false;
  137. }
  138. vector<Student> v;
  139. Student stud;
  140. int main() {
  141. setlocale(LC_ALL, "rus");
  142. ifstream fail;
  143. fail.open("students_info.txt", ios::in);
  144.  
  145. int i = 0, n = 0;
  146. int k = -1;
  147. while (k != 10) {
  148. printf(" 1-формирование данных\n 2-добавить данные\n 3-поиск данных по ключу\n 4-удаление данных по ключу\n 5-вставка данных в массив перед i-ой записью\n 6-вставка данных в массив после i-ой записи\n 7-сортировка по фамилии\n 8-сортировка по имени и фамилии\n 9-сохранение данных в файл\n 0-вывод данных\n 10-выход\n");
  149. cin >> k;
  150. if (k == 1) {
  151. while (fail) {
  152. fail >> stud.fio.surname;
  153. fail >> stud.exams;
  154. for (int j = 0; j < stud.exams; j++) {
  155. fail >> stud.disp[j];
  156. }
  157. fail >> stud.fio.name;
  158. fail >> stud.fio.patronymic;
  159. fail >> stud.group;
  160. for (int j = 0; j < stud.exams; j++) {
  161. fail >> stud.mark[j];
  162. }
  163. v.push_back(stud);
  164. }v.pop_back(); fail.close();
  165. }
  166. if (k == 2) {
  167. add_info(v);
  168. }
  169.  
  170. if (k == 3)
  171. search_info(v);
  172.  
  173. if (k == 4) {
  174. delete_info(v);
  175. }
  176.  
  177. if (k == 5) {
  178. add_info1(v);
  179. }
  180. if (k == 6) {
  181. add_info2(v);
  182. }
  183.  
  184. if (k == 7) {
  185. sort(v.begin(), v.end(), comp);
  186. }
  187.  
  188. if (k == 8) {
  189. sort(v.begin(), v.end(), coolcomp);
  190. }
  191.  
  192. if (k == 9) {
  193. ofstream files;
  194. files.open("students_info2.txt", ios::out);
  195. for (int i = 0; i < v.size(); i++) {
  196. files << setw(25) << left << v[i].fio.surname << " " << setw(4) << left << v[i].exams;
  197. for (int j = 0; j < v[i].exams; j++) {
  198. files << v[i].disp[j] << " ";
  199. }
  200. files << endl;
  201. files << setw(10) << left << v[i].fio.name << " " << setw(15) << left << v[i].fio.patronymic << setw(4) << left << v[i].group << " ";
  202. for (int j = 0; j < v[i].exams; j++) {
  203. files << setw(4) << v[i].mark[j] << " ";
  204. }
  205. files << endl;
  206. }
  207. files.close();
  208. }
  209. if (k == 0)
  210. print_info(v);
  211.  
  212. if (k == 10) {
  213. }
  214. }
  215. system("pause");
  216. return 0;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement