Advertisement
Guest User

Untitled

a guest
Nov 20th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.94 KB | None | 0 0
  1. /* Задание № С-11
  2.  
  3. Тема курсовой работы:
  4. "Разработка информационно-справочной системы учёта клиентов рекламной компании"
  5. Система должна предоставлять возможность:
  6.  
  7. - формировать список клиентов, добавляя в имеющийся или создавая новый список
  8. - просматривать всех клиентов рекламной компании
  9. - осуществлять поиск клиентов, чей срок договора истекает на определённую дату
  10. - осуществлять поиск клиентов в заданном округе
  11. - получать информацию о постоянных клиентах рекламной компании
  12.  
  13. Выполнил студент группы П-21,
  14. Самойленко Александр
  15.  
  16. Магистрант: Леонид Седов (undefiened@gmail.com)
  17.  
  18. Руководитель курсовой работы: Соколова Натэлла Юрьевна (sokolovanat@yandex.ru) */
  19.  
  20. /* Алгоритм работы:
  21. 1. Программа предлагает пользователю выбор: работу с готовой БД или создание новой.
  22. 2. Если выбирается новая БД, пользователя просят выполнить её заполнение, если старая - предлагают дополнить или пропустить этот пункт.
  23. 3. Непосредственно работа с БД:
  24. а) поиск клиента по городу
  25. б) поиск по дате истечения договора
  26. в) вывод всех постоянных клиентов компании */
  27.  
  28. #include <iostream>
  29. #include <fstream> // подключение потоков для работы с текстовыми файлами
  30. #include <cstring> // strlen(), strcmp()
  31. #include <iomanip> // setw()
  32.  
  33. using namespace std;
  34.  
  35. int answer;
  36.  
  37. struct Clients {
  38. char surname[12]; // Фамилия
  39. char name[12]; // Имя
  40. char patronymic[12]; // Отчество
  41. char date[11]; // Дата в формате ДД.ММ.ГГГГ
  42. char region[12]; // Город
  43. char regularCustomer[4]; // Постоянный клиент (yes/no)
  44. int number; // Номер клиента в списке
  45. Clients *next = NULL; // Указатель на следующий элемент очереди
  46. };
  47.  
  48. Clients* createQueueFromTxt(ifstream &f) { // Функция создаёт односвязный список (очередь) считывая БД из текстового файла
  49. Clients *p = NULL, *head = NULL;
  50. int number = 2;
  51. while (!f.eof()) { // Пока не конец файла
  52. if (!head) { // Если нет 1-го элемента
  53. head = new Clients;
  54. f >> head->surname >> head->name >> head->patronymic >> head->date >> head->region >> head->regularCustomer;
  55. head->number = 1;
  56. head->next = p;
  57. p = head;
  58. }
  59. else { // Если 1-ый элемент уже создан
  60. Clients *s = new Clients;
  61. f >> s->surname >> s->name >> s->patronymic >> s->date >> s->region >> s->regularCustomer;
  62. s->number = number;
  63. number++;
  64. s->next = NULL;
  65. p->next = s;
  66. p = s;
  67. }
  68. }
  69. return head; // Возвращаем указатель на 1-ый элемент очереди
  70. }
  71.  
  72. void saveChangesInTXT(ofstream &file, Clients *f) {
  73. while (f) {
  74. file.write(f->surname, strlen(f->surname));
  75. file.write(" ", strlen(" "));
  76. file.write(f->name, strlen(f->name));
  77. file.write(" ", strlen(" "));
  78. file.write(f->patronymic, strlen(f->patronymic));
  79. file.write(" ", strlen(" "));
  80. file.write(f->date, strlen(f->date));
  81. file.write(" ", strlen(" "));
  82. file.write(f->region, strlen(f->region));
  83. file.write(" ", strlen(" "));
  84. file.write(f->regularCustomer, strlen(f->regularCustomer));
  85. file.write("\n", strlen("\n"));
  86. f = f->next;
  87. }
  88. cout << "Изменения записаны в файл!\n";
  89. }
  90.  
  91. Clients* addNewClient(Clients *f) {
  92. cout << "Введите нового клиента по образцу, например:\n";
  93. cout << "Ivanov Ivan Ivanovich **.**.**** Moscow no\n";
  94. Clients *s = new Clients;
  95. cin >> s->surname >> s->name >> s->patronymic >> s->date >> s->region >> s->regularCustomer;
  96. if (f) {
  97. int number = 0;
  98. while (f->next) {
  99. number++;
  100. f = f->next;
  101. }
  102. f->next = s;
  103. s->next = NULL;
  104. s->number = number;
  105. }
  106. else {
  107. s->number = 1;
  108. s->next = NULL;
  109. }
  110. return s;
  111. }
  112.  
  113. void editClient(Clients *f, int number) {
  114. while (f){
  115. if (number == f->number) {
  116. cout << "Клиент найден!\n";
  117. cout << "Введите информацию заново, например\n";
  118. cout << "Ivanov Ivan Ivanovich **.**.**** Moscow no\n";
  119. cin >> f->surname >> f->name >> f->patronymic >> f->date >> f->region >> f->regularCustomer;
  120. break;
  121. }
  122. f = f->next;
  123. }
  124. }
  125.  
  126. Clients* removeClient(Clients *f, int number) {
  127. Clients *mem, *first, *rm;
  128. first = mem = f;
  129. bool flag = false;
  130. if (f->number == 1) { // Если нужный клиент в начале очереди
  131. cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
  132. flag = true;
  133. char answer;
  134. cin >> answer;
  135. if (answer == 'y') {
  136. first = first->next;
  137. mem = f;
  138. }
  139. while (f) {
  140. f->number = f->number--;
  141. f = f->next;
  142. }
  143. }
  144. while (f->next) {
  145. if (number == f->number) { // Если нужный клиент не первый и не последний
  146. cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
  147. flag = true;
  148. char answer;
  149. cin >> answer;
  150. if (answer == 'y') {
  151. rm = f;
  152. f = f->next;
  153. mem->next = f;
  154. delete rm;
  155. }
  156. while (f) {
  157. f->number = f->number--;
  158. f = f->next;
  159. }
  160. break;
  161. }
  162. mem = f;
  163. }
  164. if (number == f->number) { // Если нужный клиент в конце
  165. cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
  166. flag = true;
  167. char answer;
  168. cin >> answer;
  169. if (answer == 'y') {
  170. mem->next = NULL;
  171. delete f;
  172. }
  173. }
  174. if (!flag) cout << "Совпадений не найдено!";
  175. return first;
  176. }
  177.  
  178. void queueOutput(Clients *f) { // Функция позволяет вывести односвязный список клиентов в виде таблицы
  179. cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
  180. while (f) {
  181. cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
  182. f = f->next;
  183. }
  184. }
  185.  
  186. void findInQueue(Clients *f, int choice) { // Функция для работы с очередью
  187. switch (choice) {
  188. case 2:
  189. char region[12];
  190. cout << "Введите город: ";
  191. cin >> region;
  192. cout << "Клиенты из города " << region << ":\n";
  193. cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
  194. while (f) { // пока очередь существует. Аналог while(f != NULL)
  195. if (!strcmp(f->region, region)) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
  196. f = f->next;
  197. }
  198. break;
  199. case 3:
  200. char date[11];
  201. cout << "Введите дату: ";
  202. cin >> date;
  203. cout << "Клиенты, договор которых истекает " << date << ":\n";
  204. cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
  205. while (f) {
  206. if (!strcmp(f->date, date)) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
  207. f = f->next;
  208. }
  209. break;
  210. case 4:
  211. cout << "Постоянные клиенты компании:\n";
  212. cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
  213. while (f) {
  214. if (!strcmp(f->regularCustomer, "yes")) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
  215. f = f->next;
  216. }
  217. break;
  218. }
  219. }
  220.  
  221. void mainMenu() {
  222. while (true) {
  223. cout << "** Меню выбора списка **\n";
  224. cout << "1. Создать новый список\n";
  225. cout << "2. Выбрать существующий\n";
  226. cin >> answer;
  227. if ((answer == 1) || (answer == 2)) return;
  228. cout << "Ошибка! Выберите один из предложенных пунктов:\n";
  229. }
  230. }
  231.  
  232. int clientsMenu() {
  233. while (true) {
  234. cout << "** Меню работы с клиентами **\n";
  235. cout << "1. Добавить клиента\n";
  236. cout << "2. Редактировать клиента\n";
  237. cout << "3. Удалить клиента\n";
  238. cout << "4. Вывести список клиентов...\n";
  239. cout << "5. Выбрать другой список\n";
  240. int a;
  241. cin >> a;
  242. if ((a >= 1) && (a <= 5)) answer = a;
  243. else cout << "Ошибка! Введите номер одного из предложенных вариантов!\n";
  244. }
  245. }
  246.  
  247. int main() {
  248. setlocale(LC_ALL, "Russian");
  249.  
  250. char filename[32];
  251. int number;
  252.  
  253. while (true) {
  254. mainMenu();
  255. if (answer == 1) {
  256. cout << "Введите имя файла1: ";
  257. cin >> filename;
  258. ofstream newFile(filename, ios::out | ios::trunc);
  259. if (!newFile) { // Если не удалось создать поток выводим сообщение и закрываем программу с кодом ошибки '1'
  260. cout << "Не удалось создать " << filename << "!";
  261. cout << "Перезапустите программу!\n";
  262. system("pause");
  263. return 1;
  264. }
  265. while (true) {
  266. clientsMenu();
  267. Clients *head = NULL;
  268. switch (answer)
  269. {
  270. case 1:
  271. break;
  272. case 2:
  273. cout << "Введите номер клиента, которого вы хотите редактировать: ";
  274. cin >> number;
  275. break;
  276. case 3:
  277. cout << "Введите номер клиента, которого вы хотите удалить: ";
  278. cin >> number;
  279. break;
  280. case 4:
  281. break;
  282. case 5:
  283. break;
  284. default: cout << "Ошибка! Выберите один из предложенных пунктов:\n";
  285. break;
  286. }
  287. }
  288. }
  289. else {
  290. cout << "Введите имя файла2: ";
  291. cin >> filename;
  292. ifstream oldFile(filename, ios::out); // Создаём поток (файл) для чтения БД
  293. if (!oldFile) { // Если не удалось создать поток выводим сообщение и закрываем программу с кодом ошибки '1'
  294. cout << filename << " не существует!\n";
  295. cout << "Перезапустите программу и укажите верное имя!\n";
  296. system("pause");
  297. return 1;
  298. }
  299. Clients *first = createQueueFromTxt(oldFile);
  300.  
  301. }
  302. }
  303. system("pause");
  304. return 0;
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement