Advertisement
Guest User

Untitled

a guest
May 18th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 37.86 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <fstream>
  6. #include <iostream>
  7. using namespace std;
  8.  
  9. struct abonent {
  10. int id;
  11. char fio[2000];
  12. char adres[2000];
  13. char telefon[2000];
  14. abonent *next;
  15. };
  16. struct tarif {
  17. int id;
  18. char name[2000];
  19. float cena_min;
  20. float cena_min_mejgorod;
  21. tarif *next;
  22. };
  23. struct tdate {
  24. int year;
  25. int month;
  26. int day;
  27. };
  28. struct dogovor {
  29. int id;
  30. int id_abonent;
  31. int id_tarif;
  32. tdate date;
  33. int tip_telephone;
  34. int lgota;
  35. dogovor *next;
  36. };
  37. struct razgovor {
  38. int id;
  39. int dlitelnost;
  40. int tip;
  41. int id_abonent;
  42. tdate date;
  43. razgovor *next;
  44. };
  45.  
  46. class systemATC {
  47. private:
  48. abonent *headListAbonent;
  49. tarif *headListTarif;
  50. dogovor *headListDogovor;
  51. razgovor *headListRazgovor;
  52. int id_abonent, id_tarif, id_dogovor, id_razgovor;
  53. public:
  54. systemATC() {
  55. this->headListAbonent = NULL;
  56. this->headListTarif = NULL;
  57. this->headListDogovor = NULL;
  58. this->headListRazgovor = NULL;
  59. this->id_abonent = 0;
  60. this->id_tarif = 0;
  61. this->id_dogovor = 0;
  62. this->id_razgovor = 0;
  63. }
  64. ~systemATC() {}
  65. void addAbonent(){
  66. abonent *n = (abonent*)malloc(sizeof(abonent)*100);
  67. n->id = this->id_abonent++;
  68. cin.get();
  69. printf("Input fio\n");
  70. cin.getline(n->fio, 100);
  71.  
  72. printf("Input Adres\n");
  73. cin.getline(n->adres, 100);
  74.  
  75. printf("Input telephone\n");
  76. cin.getline(n->telefon, 100);
  77.  
  78. n->next = this->headListAbonent;
  79. this->headListAbonent = n;
  80.  
  81. printf("Abonent add id: %d\n", n->id);
  82. return;
  83. }
  84. void addTarif(){
  85. tarif *n = (tarif*)malloc(sizeof(tarif)*100);
  86. cin.get();
  87. n->id = this->id_tarif++;
  88. printf("Input name\n");
  89. cin.getline(n->name, 100);
  90.  
  91. printf("Input cena min\n");
  92. if(!scanf("%f", &n->cena_min)) {
  93. printf("Invalid cena!\n");
  94. return;
  95. }
  96.  
  97. printf("Input cena min mejgorod\n");
  98. if(!scanf("%f", &n->cena_min_mejgorod)) {
  99. printf("Invalid cena!\n");
  100. return;
  101. }
  102. n->next = this->headListTarif;
  103. this->headListTarif = n;
  104. printf("Tarif Add id: %d\n", n->id);
  105. return;
  106. }
  107. void addDogovor() {
  108. dogovor *n = (dogovor*)malloc(sizeof(dogovor)*100);
  109. cin.get();
  110.  
  111. n->id = this->id_dogovor++;
  112.  
  113. while(true) {
  114. printf("Input id abonent\n");
  115. if(!scanf("%d", &n->id_abonent)) {
  116. printf("Invalid id abonent!\n");
  117. return;
  118. };
  119. if(this->isAbonent(n->id_abonent)){
  120. break;
  121. } else {
  122. printf("Not id abonent\n");
  123. }
  124. }
  125.  
  126. if(this->isDogovorAbonentId(n->id_abonent)) {
  127. printf("Mojno zaklushit tolko 1 dogovor na 1 abonenta!\n");
  128. return;
  129. }
  130.  
  131. while(true) {
  132. printf("Input id tarif\n");
  133. if(!scanf("%d", &n->id_tarif)) {
  134. printf("Invalid id tarif!\n");
  135. return;
  136. }
  137. if(n->id_tarif == -1) {
  138. break;
  139. }
  140. if(this->isTarif(n->id_tarif)){
  141. break;
  142. } else {
  143. printf("Not id tarif\n");
  144. }
  145. }
  146.  
  147. while(true) {
  148. printf("Input data year.month.day\n");
  149. if(!scanf("%d.%d.%d", &n->date.year, &n->date.month, &n->date.day)) {
  150. cin.get();
  151. printf("Invalid date\n");
  152. return;
  153. }
  154.  
  155. if(n->date.year == -1 || n->date.month == -1 || n->date.day == -1) {
  156. break;
  157. }
  158.  
  159. if(this->isDate(n->date.year, n->date.month, n->date.day)) {
  160. break;
  161. } else {
  162. printf("Invalid date!\n");
  163. }
  164. }
  165.  
  166. printf("Input tip_telephone(0 or 1)\n");
  167. while(true) {
  168. if(!scanf("%d", &n->tip_telephone)) {
  169. printf("Invalid tip!\n");
  170. return;
  171. }
  172. if((n->tip_telephone == 1) || (n->tip_telephone == 0)) {
  173. break;
  174. } else {
  175. printf("Error input tip!\n");
  176. }
  177. }
  178.  
  179. printf("Input lgota(0 or 1)\n");
  180. while(true) {
  181. if(!scanf("%d", &n->lgota)) {
  182. printf("Invalid tip!\n");
  183. return;
  184. }
  185. if((n->lgota == 1) || (n->lgota == 0)) {
  186. break;
  187. } else {
  188. printf("Error input lgota!\n");
  189. }
  190. }
  191. n->next = this->headListDogovor;
  192. this->headListDogovor = n;
  193.  
  194. printf("Dogovor add id: %d\n", n->id);
  195. return;
  196. }
  197. void addRazgovor() {
  198. razgovor *n = (razgovor*)malloc(sizeof(razgovor)*100);
  199. cin.get();
  200.  
  201. n->id = this->id_razgovor++;
  202.  
  203. printf("Input dlitelnost\n");
  204. if(!scanf("%d", &n->dlitelnost)) {
  205. printf("Invalid dlitelnost!\n");
  206. return;
  207. }
  208. n->dlitelnost = abs(n->dlitelnost);
  209.  
  210.  
  211. printf("Input tip\n");
  212. while(true) {
  213. if(!scanf("%d", &n->tip)) {
  214. printf("Invalid tip!\n");
  215. return;
  216. }
  217. if((n->tip == 1) || (n->tip == 0)) {
  218. break;
  219. } else {
  220. printf("Error input tip!\n");
  221. }
  222. }
  223.  
  224. while(true) {
  225. printf("Input id abonent\n");
  226. if(!scanf("%d", &n->id_abonent)) {
  227. printf("Invalid tip!\n");
  228. return;
  229. }
  230. if(n->id_abonent == -1) {
  231. break;
  232. }
  233. if(this->isAbonent(n->id_abonent)){
  234. break;
  235. } else {
  236. printf("Not id abonent\n");
  237. }
  238. }
  239.  
  240. while(true) {
  241. printf("Input data year.month.day\n");
  242. if(!scanf("%d.%d.%d", &n->date.year, &n->date.month, &n->date.day)) {
  243. printf("Invalid tip!\n");
  244. return;
  245. }
  246.  
  247. if(n->date.year == -1 || n->date.month == -1 || n->date.day == -1) {
  248. break;
  249. }
  250.  
  251. if(this->isDate(n->date.year, n->date.month, n->date.day)) {
  252. break;
  253. } else {
  254. printf("Invalid date!\n");
  255. }
  256. }
  257.  
  258. n->next = this->headListRazgovor;
  259. this->headListRazgovor = n;
  260.  
  261. printf("Razgovor add id: %d\n", n->id);
  262. return;
  263. }
  264. void printAbonent() {
  265. abonent *root = this->headListAbonent;
  266.  
  267. while(root) {
  268. if(root == NULL) return;
  269. printf("Abonent id = %d\nFio: %s\nAdres: %s\nTelephone: %s\n",
  270. root->id,
  271. root->fio,
  272. root->adres,
  273. root->telefon);
  274. root = root->next;
  275. }
  276.  
  277. return;
  278. }
  279. void printAbonentToId(int id){
  280. if(!this->isAbonent(id)) {
  281. printf("Not abonent");
  282. return;
  283. } else {
  284. abonent *root = this->headListAbonent;
  285. while (root) {
  286. if(root->id == id) {
  287. printf("Abonent id = %d\nFio: %s\nAdres: %s\nTelephone: %s\n",
  288. root->id,
  289. root->fio,
  290. root->adres,
  291. root->telefon);
  292. return;
  293. }
  294. }
  295. }
  296.  
  297. return;
  298. }
  299. void printTarif() {
  300. tarif *root = this->headListTarif;
  301.  
  302. while(root) {
  303. if(root == NULL) return;
  304. printf("Tarif id = %d\nName: %s\nCena min: %0.2f\nCena min Mejgorod: %0.2f\n",
  305. root->id,
  306. root->name,
  307. root->cena_min,
  308. root->cena_min_mejgorod);
  309. root = root->next;
  310. }
  311.  
  312. return;
  313. }
  314. void printDogovor() {
  315. dogovor *root = this->headListDogovor;
  316.  
  317. while (root) {
  318. if(root == NULL) return;
  319. printf("Dogovor id = %d\nId abonent: %d\nId tarif: %d\nDate: %d.%d.%d\nTip telephone: %d\nLgota: %d\n",
  320. root->id,
  321. root->id_abonent,
  322. root->id_tarif,
  323. root->date.year,
  324. root->date.month,
  325. root->date.day,
  326. root->tip_telephone,
  327. root->lgota);
  328. root = root->next;
  329. }
  330.  
  331. return;
  332. }
  333. void printRazgovor() {
  334. razgovor *root = this->headListRazgovor;
  335.  
  336. while(root) {
  337. printf("Razgovor id = %d\nDlitelnost: %d\nTip: %d\nId abonent: %d\nDate: %d.%d.%d\n",
  338. root->id,
  339. root->dlitelnost,
  340. root->tip,
  341. root->id_abonent,
  342. root->date.year,
  343. root->date.month,
  344. root->date.day);
  345. root = root->next;
  346. }
  347.  
  348. return;
  349. }
  350. bool isAbonent(int id) {
  351. abonent *root = this->headListAbonent;
  352. while(root){
  353. if(root->id == id)
  354. return true;
  355. root = root->next;
  356. }
  357. return false;
  358. }
  359. bool isTarif(int id) {
  360. tarif *root = this->headListTarif;
  361. while(root){
  362. if(root->id == id)
  363. return true;
  364. root = root->next;
  365. }
  366. return false;
  367. }
  368. bool isDogovor(int id) {
  369. dogovor *root = this->headListDogovor;
  370. while(root){
  371. if(root->id == id)
  372. return true;
  373. root = root->next;
  374. }
  375. return false;
  376. }
  377. bool isDogovorAbonentId(int id) {
  378. dogovor *root = this->headListDogovor;
  379. while(root){
  380. if(root->id_abonent == id)
  381. return true;
  382. root = root->next;
  383. }
  384. return false;
  385. }
  386. bool isRazgovorAbonentId(int id) {
  387. razgovor *root = this->headListRazgovor;
  388. while(root){
  389. if(root->id_abonent == id)
  390. return true;
  391. root = root->next;
  392. }
  393. return false;
  394. }
  395.  
  396. bool isDogovorTarifId(int id) {
  397. dogovor *root = this->headListDogovor;
  398. while(root){
  399. if(root->id_tarif == id)
  400. return true;
  401. root = root->next;
  402. }
  403. return false;
  404. }
  405.  
  406. bool isDate(int year, int month, int day) {
  407. if((year > 1000) && (year < 3000) && (month >= 1) && (month <= 12) && (day >= 1) && (day <= 31)){
  408. return true;
  409. } else {
  410. return false;
  411. }
  412. }
  413. void removeAbonent(abonent *&root, int id) {
  414. if(root == NULL)
  415. return;
  416.  
  417. if(root->id == id) {
  418. if(this->isDogovorAbonentId(root->id)) {
  419. printf("Nelza udalit abonenta imeushego dogovor\n");
  420. return;
  421. }
  422. root = root->next;
  423. printf("Delete Abonent Id = %d\n", id);
  424. return;
  425. }
  426.  
  427. this->removeAbonent(root->next, id);
  428. }
  429. void removeTarif(tarif *&root, int id) {
  430. if(root == NULL)
  431. return;
  432.  
  433. if(root->id == id) {
  434. if(this->isDogovorTarifId(root->id)) {
  435. printf("nevosmogno udalit tarif, else na nego imeetsa dogovor\n");
  436. return;
  437. }
  438. root = root->next;
  439. printf("Delete Tarif Id = %d\n", id);
  440. return;
  441. }
  442.  
  443. this->removeTarif(root->next, id);
  444. }
  445. void removeDogovor(dogovor *&root, int id) {
  446. if(root == NULL)
  447. return;
  448.  
  449. if(root->id == id) {
  450. if(this->isRazgovorAbonentId(root->id_abonent)) {
  451. printf("nevosmogno udalit dogovor, else u abonenta est razgovors!\n");
  452. }
  453. root = root->next;
  454. printf("Delete Dogovor Id = %d\n", id);
  455. return;
  456. }
  457.  
  458. this->removeDogovor(root->next, id);
  459. }
  460. void removeRazgovor(razgovor *&root, int id) {
  461. if(root == NULL)
  462. return;
  463.  
  464. if(root->id == id) {
  465. root = root->next;
  466. printf("Delete Razgovor Id = %d\n", id);
  467. return;
  468. }
  469.  
  470. this->removeRazgovor(root->next, id);
  471. }
  472. void editAbonent(abonent *&root, int id) {
  473. if(root == NULL)
  474. return;
  475.  
  476. if(root->id == id) {
  477. printf("\nEdit Abonent id = %d\nFio: %s\nAdres: %s\nTelephone: %s\n",
  478. root->id,
  479. root->fio,
  480. root->adres,
  481. root->telefon);
  482. cin.get();
  483. printf("Input fio\n");
  484. cin.getline(root->fio, 100);
  485.  
  486. printf("Input Adres\n");
  487. cin.getline(root->adres, 100);
  488.  
  489. printf("Input telephone\n");
  490. cin.getline(root->telefon, 100);
  491. printf("Abonent id: %d good edit\n", root->id);
  492. return;
  493. }
  494. this->editAbonent(root->next, id);
  495. }
  496. void editTarif(tarif *&root, int id) {
  497. if(root == NULL)
  498. return;
  499.  
  500. if(root->id == id) {
  501. printf("\nEdit Tarif id = %d\nName: %s\nCena min: %0.2f\nCena min Mejgorod: %0.2f\n",
  502. root->id,
  503. root->name,
  504. root->cena_min,
  505. root->cena_min_mejgorod);
  506.  
  507. cin.get();
  508.  
  509. printf("Input name\n");
  510. cin.getline(root->name, 100);
  511.  
  512. printf("Input cena min\n");
  513. if(!scanf("%f", &root->cena_min)) {
  514. printf("Invalid cena!\n");
  515. return;
  516. }
  517.  
  518. printf("Input cena min mejgorod\n");
  519. if(!scanf("%f", &root->cena_min_mejgorod)) {
  520. printf("Invalid cena!\n");
  521. return;
  522. }
  523.  
  524. printf("Tarif id: %d good edit\n", root->id);
  525.  
  526. return;
  527. }
  528. this->editTarif(root->next, id);
  529. }
  530. void editDogovor(dogovor *&root, int id) {
  531. if(root == NULL)
  532. return;
  533.  
  534. if(root->id == id) {
  535. printf("Edit Dogovor id = %d\nId abonent: %d\nId tarif: %d\nDate: %d.%d.%d\nTip telephone: %d\nLgota: %d\n",
  536. root->id,
  537. root->id_abonent,
  538. root->id_tarif,
  539. root->date.year,
  540. root->date.month,
  541. root->date.day,
  542. root->tip_telephone,
  543. root->lgota);
  544.  
  545. while(true) {
  546. printf("Input id abonent\n");
  547. if(!scanf("%d", &root->id_abonent)) {
  548. printf("Invalid id abonent!\n");
  549. return;
  550. };
  551. if(this->isAbonent(root->id_abonent)){
  552. break;
  553. } else {
  554. printf("Not id abonent\n");
  555. }
  556. }
  557.  
  558. while(true) {
  559. printf("Input id tarif\n");
  560. if(!scanf("%d", &root->id_tarif)) {
  561. printf("Invalid id tarif!\n");
  562. return;
  563. }
  564. if(root->id_tarif == -1) {
  565. break;
  566. }
  567. if(this->isTarif(root->id_tarif)){
  568. break;
  569. } else {
  570. printf("Not id tarif\n");
  571. }
  572. }
  573.  
  574. while(true) {
  575. printf("Input data year.month.day\n");
  576. if(!scanf("%d.%d.%d", &root->date.year, &root->date.month, &root->date.day)) {
  577. cin.get();
  578. printf("Invalid date\n");
  579. return;
  580. }
  581.  
  582. if(root->date.year == -1 || root->date.month == -1 || root->date.day == -1) {
  583. break;
  584. }
  585.  
  586. if(this->isDate(root->date.year, root->date.month, root->date.day)) {
  587. break;
  588. } else {
  589. printf("Invalid date!\n");
  590. }
  591. }
  592.  
  593. printf("Input tip_telephone(0 or 1)\n");
  594. while(true) {
  595. if(!scanf("%d", &root->tip_telephone)) {
  596. printf("Invalid tip!\n");
  597. return;
  598. }
  599. if((root->tip_telephone == 1) || (root->tip_telephone == 0)) {
  600. break;
  601. } else {
  602. printf("Error input tip!\n");
  603. }
  604. }
  605.  
  606. printf("Input lgota(0 or 1)\n");
  607. while(true) {
  608. if(!scanf("%d", &root->lgota)) {
  609. printf("Invalid tip!\n");
  610. return;
  611. }
  612. if((root->lgota == 1) || (root->lgota == 0)) {
  613. break;
  614. } else {
  615. printf("Error input lgota!\n");
  616. }
  617. }
  618.  
  619. printf("dogovor id: %d good edit\n", root->id);
  620.  
  621. return;
  622. }
  623. this->editDogovor(root->next, id);
  624. }
  625. void editRazgovor(razgovor *&root, int id) {
  626. if(root == NULL)
  627. return;
  628.  
  629. if(root->id == id) {
  630. printf("Edit Razgovor id = %d\nDlitelnost: %d\nTip: %d\nId abonent: %d\nDate: %d.%d.%d\n",
  631. root->id,
  632. root->dlitelnost,
  633. root->tip,
  634. root->id_abonent,
  635. root->date.year,
  636. root->date.month,
  637. root->date.day);
  638.  
  639. cin.get();
  640.  
  641. printf("Input dlitelnost\n");
  642. if(!scanf("%d", &root->dlitelnost)) {
  643. printf("Invalid dlitelnost!\n");
  644. return;
  645. }
  646.  
  647. printf("Input tip\n");
  648. while(true) {
  649. if(!scanf("%d", &root->tip)) {
  650. printf("Invalid tip!\n");
  651. return;
  652. }
  653. if((root->tip == 1) || (root->tip == 0)) {
  654. break;
  655. } else {
  656. printf("Error input tip!\n");
  657. }
  658. }
  659.  
  660. while(true) {
  661. printf("Input id abonent\n");
  662. if(!scanf("%d", &root->id_abonent)) {
  663. printf("Invalid tip!\n");
  664. return;
  665. }
  666. if(root->id_abonent == -1) {
  667. break;
  668. }
  669. if(this->isAbonent(root->id_abonent)){
  670. break;
  671. } else {
  672. printf("Not id abonent\n");
  673. }
  674. }
  675.  
  676. while(true) {
  677. printf("Input data year.month.day\n");
  678. if(!scanf("%d.%d.%d", &root->date.year, &root->date.month, &root->date.day)) {
  679. printf("Invalid tip!\n");
  680. return;
  681. }
  682.  
  683. if(root->date.year == -1 || root->date.month == -1 || root->date.day == -1) {
  684. break;
  685. }
  686.  
  687. if(this->isDate(root->date.year, root->date.month, root->date.day)) {
  688. break;
  689. } else {
  690. printf("Invalid date!\n");
  691. }
  692. }
  693.  
  694.  
  695. printf("Razgovor id: %d good edit\n", root->id);
  696. return;
  697. }
  698. this->editRazgovor(root->next, id);
  699. }
  700. void searchAbonent(char data[]) {
  701. abonent *root = this->headListAbonent;
  702.  
  703. while(root != NULL) {
  704. if(!strcmp(root->fio, data) || !strcmp(root->adres, data) || !strcmp(root->telefon, data)) {
  705. this->printAbonentToId(root->id);
  706. }
  707.  
  708. root = root->next;
  709. }
  710. return;
  711. }
  712. void searchTarif(char name[]) {
  713. tarif *root = this->headListTarif;
  714.  
  715. while(root) {
  716. if(!strcmp(root->name, name)) {
  717. printf("Tarif id = %d\nName: %s\nCena min: %0.2f\nCena min Mejgorod: %0.2f\n",
  718. root->id,
  719. root->name,
  720. root->cena_min,
  721. root->cena_min_mejgorod);
  722. }
  723.  
  724. root = root->next;
  725. }
  726. return;
  727. }
  728.  
  729. tarif* getTarif(int id) {
  730. tarif *root = this->headListTarif;
  731. while(root) {
  732. if(root->id == id) {
  733. return root;
  734. }
  735. root = root->next;
  736. }
  737. return NULL;
  738. }
  739. dogovor* getDogovorIdAbonent(int id) {
  740. dogovor *root = this->headListDogovor;
  741. while(root) {
  742. if(root->id_abonent == id) {
  743. return root;
  744. }
  745. root = root->next;
  746. }
  747. return NULL;
  748. }
  749. void statAbonentMonth() {
  750. if(!this->headListAbonent ||
  751. !this->headListDogovor ||
  752. !this->headListRazgovor ||
  753. !this->headListTarif) {
  754. printf("Not data!\n");
  755. return;
  756. }
  757. int id;
  758. printf("Input Abonent Id:\n");
  759. scanf("%d", &id);
  760. abonent *rootAbonent = this->headListAbonent;
  761. dogovor *rootDogovor = NULL;
  762. tarif *rootTarif = NULL;
  763. razgovor *rootRazgovor = NULL;
  764. float month[15], cena;
  765. while(rootAbonent) {
  766. if(rootAbonent->id == id) {
  767. for(int i = 1; i <= 12; i++) {
  768. month[i] = 0;
  769. }
  770. rootDogovor = this->getDogovorIdAbonent(rootAbonent->id);
  771. rootTarif = this->getTarif(rootDogovor->id_tarif);
  772. rootRazgovor = this->headListRazgovor;
  773.  
  774. printf("Abonent ID = %d | FIO: %s | telefon: %s | tip telefon: %d | lgota: %d |\n",
  775. rootAbonent->id,
  776. rootAbonent->fio,
  777. rootAbonent->telefon,
  778. rootDogovor->tip_telephone,
  779. rootDogovor->lgota);
  780.  
  781. while(rootRazgovor) {
  782. if(rootRazgovor->id_abonent == rootAbonent->id) {
  783. if((bool)rootRazgovor->tip) {
  784. cena = rootTarif->cena_min_mejgorod;
  785. } else {
  786. cena = rootTarif->cena_min;
  787. }
  788. if((bool)rootDogovor->tip_telephone) {
  789. cena = cena * 0.6;
  790. }
  791. if((bool)rootDogovor->lgota) {
  792. cena = cena * 0.5;
  793. }
  794. month[rootRazgovor->date.month] += cena * rootRazgovor->dlitelnost/60;
  795.  
  796. printf("Razgovor id: %d tip: %d, dlitelnost: %d, date: %d.%d.%d, cena: %0.2f\n",
  797. rootRazgovor->id,
  798. rootRazgovor->tip,
  799. rootRazgovor->dlitelnost,
  800. rootRazgovor->date.year,
  801. rootRazgovor->date.month,
  802. rootRazgovor->date.day,
  803. cena * rootRazgovor->dlitelnost / 60);
  804. }
  805.  
  806. rootRazgovor = rootRazgovor->next;
  807. }
  808. for(int i = 1; i <= 12; i++) {
  809. printf("Month %d = %0.2f\n",
  810. i,
  811. month[i]);
  812. }
  813. }
  814. rootAbonent = rootAbonent->next;
  815. }
  816. return;
  817. }
  818.  
  819. int countAbonent() {
  820. abonent *root = this->headListAbonent;
  821. int i = 0;
  822. while(root) {
  823. i++;
  824. root = root->next;
  825. }
  826. return i;
  827. }
  828. int countTarif() {
  829. tarif *root = this->headListTarif;
  830. int i = 0;
  831. while(root) {
  832. i++;
  833. root = root->next;
  834. }
  835. return i;
  836. }
  837. int countDogovor() {
  838. dogovor *root = this->headListDogovor;
  839. int i = 0;
  840. while(root) {
  841. i++;
  842. root = root->next;
  843. }
  844. return i;
  845. }
  846. int countRazgovor() {
  847. razgovor *root = this->headListRazgovor;
  848. int i = 0;
  849. while(root) {
  850. i++;
  851. root = root->next;
  852. }
  853. return i;
  854. }
  855.  
  856. void load() {
  857. ifstream file;
  858. char fileName[100];
  859. printf("Vvedite path to file base ATC to load >> ");
  860. cin >> fileName;
  861. // file.open("I:/1.txt", ios::in);
  862. file.open(fileName, ios::in);
  863. int n;
  864. file >> n;
  865. for(int i = 0; i < n; i++) {
  866. abonent *root = (abonent*)malloc(sizeof(abonent));
  867. file >> root->id;
  868. file.get();
  869. file.getline(root->fio, sizeof(root->fio));
  870. file.getline(root->adres, sizeof(root->adres));
  871. file.getline(root->telefon, sizeof(root->telefon));
  872. root->next = this->headListAbonent;
  873. this->headListAbonent = root;
  874. }
  875. this->id_abonent = this->headListAbonent->id + 1;
  876.  
  877. file >> n;
  878. for(int i = 0; i < n; i++) {
  879. tarif *root = (tarif*)malloc(sizeof(tarif));
  880. file >> root->id;
  881. file.get();
  882. file.getline(root->name, sizeof(root->name));
  883. file >> root->cena_min;
  884. file >> root->cena_min_mejgorod;
  885. root->next = this->headListTarif;
  886. this->headListTarif = root;
  887. }
  888. this->id_tarif = this->headListTarif->id + 1;
  889.  
  890. file >> n;
  891. for(int i = 0; i < n; i++) {
  892. dogovor *root = (dogovor*)malloc(sizeof(dogovor));
  893. file >> root->id;
  894. file >> root->id_abonent;
  895. file >> root->id_tarif;
  896. file >> root->date.year;
  897. file >> root->date.month;
  898. file >> root->date.day;
  899. file >> root->tip_telephone;
  900. file >> root->lgota;
  901. root->next = this->headListDogovor;
  902. this->headListDogovor = root;
  903. }
  904. this->id_dogovor = this->headListDogovor->id + 1;
  905.  
  906.  
  907. file >> n;
  908. for(int i = 0; i < n; i++) {
  909. razgovor *root = (razgovor*)malloc(sizeof(razgovor));
  910. file >> root->id;
  911. file >> root->dlitelnost;
  912. file >> root->tip;
  913. file >> root->id_abonent;
  914. file >> root->date.year;
  915. file >> root->date.month;
  916. file >> root->date.day;
  917. root->next = this->headListRazgovor;
  918. this->headListRazgovor = root;
  919.  
  920. }
  921. this->id_razgovor = this->headListRazgovor->id;
  922.  
  923. printf("Base load!\n");
  924.  
  925. file.close();
  926. }
  927. void save() {
  928. ofstream file;
  929. char fileName[100];
  930. printf("Vvedite path to file base ATC to save >> ");
  931. cin >> fileName;
  932. // file.open("I:/.txt", ios::out);
  933. file.open(fileName, ios::out);
  934.  
  935. file << this->countAbonent() << endl;
  936. abonent *rootAb = this->headListAbonent;
  937. while(rootAb) {
  938. file << rootAb->id << endl;
  939. file << rootAb->fio << endl;
  940. file << rootAb->adres << endl;
  941. file << rootAb->telefon << endl;
  942. rootAb = rootAb->next;
  943. }
  944. file << this->countTarif() << endl;
  945. tarif *rootTa = this->headListTarif;
  946. while(rootTa) {
  947. file << rootTa->id << endl;
  948. file << rootTa->name << endl;
  949. file << rootTa->cena_min << endl;
  950. file << rootTa->cena_min_mejgorod << endl;
  951. rootTa = rootTa->next;
  952. }
  953. file << this->countDogovor() << endl;
  954. dogovor *rootDo = this->headListDogovor;
  955. while(rootDo) {
  956. file << rootDo->id << endl;
  957. file << rootDo->id_abonent << endl;
  958. file << rootDo->id_tarif << endl;
  959. file << rootDo->date.year << endl;
  960. file << rootDo->date.month << endl;
  961. file << rootDo->date.day << endl;
  962. file << rootDo->tip_telephone << endl;
  963. file << rootDo->lgota << endl;
  964. rootDo = rootDo->next;
  965. }
  966.  
  967. file << this->countRazgovor() << endl;
  968. razgovor *rootRa = this->headListRazgovor;
  969. while(rootRa) {
  970. file << rootRa->id << endl;
  971. file << rootRa->dlitelnost << endl;
  972. file << rootRa->tip << endl;
  973. file << rootRa->id_abonent << endl;
  974. file << rootRa->date.year << endl;
  975. file << rootRa->date.month << endl;
  976. file << rootRa->date.day << endl;
  977. rootRa = rootRa->next;
  978. }
  979.  
  980. printf("Base save!\n");
  981. }
  982.  
  983. void help(int act) {
  984. printf("Select the action:\n");
  985. switch(act) {
  986. case 0:
  987. printf("1 - Abonent\n2 - Tarif\n3 - Dogovor\n4 - Razgovor\n5 - Statistic\n6 - Base\n0 - exit\n");
  988. break;
  989. case 1:
  990. printf("1 - add abonent\n2 - print abonent\n3 - remove abonent\n4 - print to id abonent\n5 - search abonent input fio or adres or telefon:\n6 - edit abonent\n0 - exit\n");
  991. break;
  992. case 2:
  993. printf("1 - add tarif\n2 - print tarif\n3 - remove tarif\n4 - edit tarif\n5 - search tarif to name:\n0 - exit\n");
  994. break;
  995. case 3:
  996. printf("1 - add dogovor\n2 - print dogovor\n3 - remove dogovor\n4 - edit dogovor\n0 - exit\n");
  997. break;
  998. case 4:
  999. printf("1 - add razgovor\n2 - print razgovor\n3 - remove razgovor\n4 - edit razgovor\n0 - exit\n");
  1000. break;
  1001. case 5:
  1002. printf("1- load\n2 - save\n");
  1003. default:
  1004. break;
  1005. };
  1006.  
  1007. return;
  1008. }
  1009.  
  1010. void start() {
  1011. printf("Welcome to ATC!\n");
  1012.  
  1013. int act, tmp;
  1014. char tmp1[2000];
  1015. while(true) {
  1016. this->help(0);
  1017. printf(">> ");
  1018. if(scanf("%d", &act)) {
  1019. switch(act) {
  1020. case 1:
  1021. cin.clear();
  1022. this->help(1);
  1023. printf("Abonent >> ");
  1024. if(scanf("%d", &act)) {
  1025. switch(act) {
  1026. case 1:
  1027. this->addAbonent();
  1028. break;
  1029. case 2:
  1030. this->printAbonent();
  1031. break;
  1032. case 3:
  1033. printf("Input Id Abonent to remove:\n");
  1034. scanf("%d", &tmp);
  1035. this->removeAbonent(this->headListAbonent, tmp);
  1036. break;
  1037. case 4:
  1038. printf("Input id Abonent:\n");
  1039. scanf("%d", &tmp);
  1040. this->printAbonentToId(tmp);
  1041. break;
  1042. case 5:
  1043. cin.get();
  1044. printf("Input fio or adres or telefon:\n");
  1045. cin.getline(tmp1, 100);
  1046. this->searchAbonent(tmp1);
  1047. break;
  1048. case 6:
  1049. printf("Input id Abonent to edit:\n");
  1050. scanf("%d", &tmp);
  1051. this->editAbonent(this->headListAbonent, tmp);
  1052. break;
  1053. case 0:
  1054. break;
  1055. default:
  1056. printf("Invalid act\n");
  1057. break;
  1058. }
  1059. }
  1060. break;
  1061. case 2:
  1062. this->help(2);
  1063. printf("Tarif >> ");
  1064. if(scanf("%d", &act)) {
  1065. switch(act) {
  1066. case 1:
  1067. this->addTarif();
  1068. break;
  1069. case 2:
  1070. this->printTarif();
  1071. break;
  1072. case 3:
  1073. printf("Input Id Tarif to remove:\n");
  1074. scanf("%d", &tmp);
  1075. this->removeTarif(this->headListTarif, tmp);
  1076. break;
  1077. case 4:
  1078. printf("Input Id Tarif to edit:\n");
  1079. scanf("%d", &tmp);
  1080. this->editTarif(this->headListTarif, tmp);
  1081. break;
  1082. case 5:
  1083. cin.get();
  1084. printf("Input name Tarif:\n");
  1085. cin.getline(tmp1, 100);
  1086. this->searchTarif(tmp1);
  1087. break;
  1088. case 0:
  1089. break;
  1090. default:
  1091. printf("Invalid act\n");
  1092. break;
  1093. }
  1094. }
  1095. break;
  1096.  
  1097. case 3:
  1098. this->help(3);
  1099. printf("Dogovor >> ");
  1100. if(scanf("%d", &act)) {
  1101. switch(act) {
  1102. case 1:
  1103. this->addDogovor();
  1104. break;
  1105. case 2:
  1106. this->printDogovor();
  1107. break;
  1108. case 3:
  1109. printf("Input Id Dogovor to remove:\n");
  1110. scanf("%d", &tmp);
  1111. this->removeDogovor(this->headListDogovor, tmp);
  1112. break;
  1113. case 4:
  1114. printf("Input Id Dogovor to edit:\n");
  1115. scanf("%d", &tmp);
  1116. this->editDogovor(this->headListDogovor, tmp);
  1117. break;
  1118. case 0:
  1119. break;
  1120. default:
  1121. printf("Invalid act\n");
  1122. break;
  1123. }
  1124. }
  1125. break;
  1126.  
  1127. case 4:
  1128. this->help(4);
  1129. printf("Razgovor >> ");
  1130. if(scanf("%d", &act)) {
  1131. switch(act) {
  1132. case 1:
  1133. this->addRazgovor();
  1134. break;
  1135. case 2:
  1136. this->printRazgovor();
  1137. break;
  1138. case 3:
  1139. printf("Input Id Razgovor to remove:\n");
  1140. scanf("%d", &tmp);
  1141. this->removeRazgovor(this->headListRazgovor, tmp);
  1142. break;
  1143. case 4:
  1144. printf("Input Id Razgovor to edit:\n");
  1145. scanf("%d", &tmp);
  1146. this->editRazgovor(this->headListRazgovor, tmp);
  1147. break;
  1148. case 0:
  1149. break;
  1150. default:
  1151. printf("Invalid act\n");
  1152. break;
  1153. }
  1154. }
  1155. break;
  1156. case 5:
  1157. this->statAbonentMonth();
  1158. break;
  1159. case 6:
  1160. this->help(5);
  1161. printf("Base >> ");
  1162. if(scanf("%d", &act)) {
  1163. switch(act) {
  1164. case 1:
  1165. this->load();
  1166. break;
  1167. case 2:
  1168. this->save();
  1169. break;
  1170. case 0:
  1171. break;
  1172. default:
  1173. printf("Invalid act\n");
  1174. break;
  1175. }
  1176. }
  1177. break;
  1178. case 0:
  1179. printf("Bye!\n");
  1180. return;
  1181. break;
  1182. default:
  1183. printf("Invalid act\n");
  1184. break;
  1185. }
  1186. }
  1187. }
  1188. }
  1189. };
  1190. int main() {
  1191. systemATC sys[10];
  1192. int act = 0;
  1193.  
  1194. while(1) {
  1195. printf("ATC NUM(1 to 5), exit(0) >> ");
  1196. if(!scanf("%d", &act)) {
  1197. printf("Invalid ACT!\n");
  1198. return 0;
  1199. }
  1200. if(act == 0) {
  1201. printf("Bye!\n");
  1202. return 0;
  1203. }
  1204. if((act > 5) || (act < 0)) {
  1205. printf("Invalid!\n");
  1206. continue;
  1207. }
  1208.  
  1209. sys[act].start();
  1210. }
  1211. return 0;
  1212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement