Advertisement
Guest User

Untitled

a guest
May 31st, 2016
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <cstdio>
  5. #include <fstream>
  6. using namespace std;
  7.  
  8. struct Student
  9. {
  10. string Name;
  11. bool Type;
  12. float Scholarship;
  13. int Marks[5];
  14. Student* StudentNext;
  15. };
  16.  
  17. struct Group
  18. {
  19. string NumOfGroup;
  20. int Quantity;
  21. int QuantityOfContractor;
  22. Student* StudentTop;
  23. Group* GroupNext;
  24. } *List = NULL;
  25.  
  26. struct Queue
  27. {
  28. Student* QueInfo;
  29. Queue* QueNext;
  30. } *Root = NULL;
  31.  
  32. struct Table
  33. {
  34. float AverageMark;
  35. Group *GroupInfo;
  36. Table *TableNext;
  37. } *TableTop = NULL;
  38.  
  39. void MainPage();
  40. void Menu();
  41. void Choose();
  42. Group *ConsoleInput();
  43. Group *FileInput();
  44. void GroupAdd();
  45. void GroupEdit();
  46. void GroupDelete();
  47. void ChangeGroupName();
  48. void StudentAdd();
  49. void StudentEdit();
  50. void StudentDelete();
  51. void FirstPersonalTask();
  52. void PutInQue(Student *StudentContractor);
  53. void ShowFirstTask();
  54. void SecondPersonalTask();
  55. float Average(Group *Current);
  56. void ShowSecondTask();
  57. void ConsoleOutput();
  58. void FileOutput();
  59.  
  60. int main()
  61. {
  62. MainPage();
  63. return 0;
  64. }
  65.  
  66. void MainPage()
  67. {
  68. while(1)
  69. {
  70. Menu();
  71. Choose();
  72. }
  73. }
  74.  
  75. void Menu()
  76. {
  77. cout << "==========CourseWork==========\n";
  78. cout << "Press 1 for Console input.\n";
  79. cout << "Press 2 for File input.\n";
  80. cout << "Press 3 for edit a group.\n";
  81. cout << "Press 4 for output in lexicographical order of all contractors who have twos on exams.\n";
  82. cout << "Press 5 for output number of group then average mark on group ";
  83. cout << "and last quantity of contractor in this group.\n";
  84. cout << "Press 6 for console output.\n";
  85. cout << "Press 7 for file output.\n";
  86. cout << "Press 0 for exit.\n";
  87. cout << "Enter your choice: ";
  88. }
  89.  
  90. void Choose()
  91. {
  92. int choice;
  93. cin >> choice;
  94. switch(choice)
  95. {
  96. case 1:
  97. {
  98. List = ConsoleInput();
  99. break;
  100. }
  101. case 2:
  102. {
  103. List = FileInput();
  104. break;
  105. }
  106. case 3:
  107. {
  108. GroupEdit();
  109. break;
  110. }
  111. case 4:
  112. {
  113. FirstPersonalTask();
  114. break;
  115. }
  116. case 5:
  117. {
  118. SecondPersonalTask();
  119. break;
  120. }
  121. case 6:
  122. {
  123. ConsoleOutput();
  124. break;
  125. }
  126. case 7:
  127. {
  128. FileOutput();
  129. break;
  130. }
  131. case 0:
  132. {
  133. exit(EXIT_SUCCESS);
  134. }
  135. default:
  136. {
  137. cout << "Wrong key.\n";
  138. MainPage();
  139. }
  140. }
  141. }
  142.  
  143. Group *ConsoleInput()
  144. {
  145. string str;
  146. Group *GroupTop = List, *GroupBack = List, *GroupCreate = NULL;
  147. Student *StudentCreate = NULL, *StudentBack = NULL;
  148. while(1)
  149. {
  150. cout << "Enter exit for quit.\n";
  151. cout << "Enter the group number: ";
  152. cin.ignore();
  153. cin.clear();
  154. getline(cin, str);
  155. if(str != "exit")
  156. {
  157. GroupCreate = new Group;
  158. GroupCreate->NumOfGroup = str;
  159. GroupCreate->Quantity = 0;
  160. GroupCreate->QuantityOfContractor = 0;
  161. GroupCreate->StudentTop = NULL;
  162. GroupCreate->GroupNext = NULL;
  163. if(!GroupTop)
  164. {
  165. GroupTop = GroupCreate;
  166. GroupBack = GroupCreate;
  167. }
  168. else
  169. {
  170. while(GroupBack->GroupNext) GroupBack = GroupBack->GroupNext;
  171. GroupBack->GroupNext = GroupCreate;
  172. GroupBack = GroupCreate;
  173. }
  174. while (1)
  175. {
  176. cout << "Enter NextGroup for add new group.\n";
  177. cout << "Enter exit for quit.\n";
  178. cout << "Enter the student name: ";
  179. cin.ignore();
  180. cin.clear();
  181. getline(cin, str);
  182. if(str == "exit")
  183. return GroupTop;
  184. if(str != "NextGroup")
  185. {
  186. GroupCreate->Quantity++;
  187. StudentCreate = new Student;
  188. StudentCreate->Name = str;
  189. cout << "Enter his marks: ";
  190. for(int i = 0; i < 5; i++) cin >> StudentCreate->Marks[i];
  191. cout << "Enter his scholarship: ";
  192. cin >> StudentCreate->Scholarship;
  193. cout << "0 - state, 1 - contractor.\n";
  194. cout << "Enter his type: ";
  195. cin >> StudentCreate->Type;
  196. if(StudentCreate->Type) GroupCreate->QuantityOfContractor++;
  197. if(!GroupCreate->StudentTop)
  198. {
  199. GroupCreate->StudentTop = StudentCreate;
  200. StudentBack = StudentCreate;
  201. }
  202. else
  203. {
  204. StudentBack->StudentNext = StudentCreate;
  205. StudentBack = StudentCreate;
  206. }
  207. }
  208. else
  209. {
  210. StudentBack->StudentNext = NULL;
  211. break;
  212. }
  213. }
  214. }
  215. else
  216. {
  217. if(GroupBack)
  218. GroupBack->GroupNext = NULL;
  219. break;
  220. }
  221. }
  222. return GroupTop;
  223. }
  224. //???????
  225. Group *FileInput()
  226. {
  227. char buff[30];
  228. cout << "Enter the name of file: ";
  229. cin >> buff;
  230. string str;
  231. string test;
  232. ifstream fin(buff);
  233. if(!fin.is_open())
  234. {
  235. cout << "File doesn't open this file.\n";
  236. return NULL;
  237. }
  238. Group *GroupTop = List, *GroupCreate = NULL, *GroupBack = List;
  239. Student *StudentRoot = NULL, *StudentCreate = NULL, *StudentBack = NULL;
  240. while(1)
  241. {
  242. cout << "Group number (exit for leave)";
  243. cout << "Student name (NextGroup for add new group).\n";
  244. cout << "His marks.\n";
  245. cout << "His scholarship.\n";
  246. cout << "His status(0 - state, 1 - contractor).\n";
  247. fin >> str;
  248. //getline(fin, str);
  249. cout << "Group: " << str << '\n';
  250. cin >> test;
  251. if(str != "exit")
  252. {
  253. GroupCreate = new Group;
  254. GroupCreate->NumOfGroup = str;
  255. GroupCreate->Quantity = 0;
  256. GroupCreate->QuantityOfContractor = 0;
  257. GroupCreate->StudentTop = NULL;
  258. GroupCreate->GroupNext = NULL;
  259. StudentRoot = GroupCreate->StudentTop;
  260. if(!GroupTop)
  261. {
  262. GroupTop = GroupCreate;
  263. GroupBack = GroupCreate;
  264. }
  265. else
  266. {
  267. while(GroupBack->GroupNext) GroupBack = GroupBack->GroupNext;
  268. GroupBack->GroupNext = GroupCreate;
  269. GroupBack = GroupCreate;
  270. }
  271. while (1)
  272. {
  273. fin >> str;
  274. //getline(fin, str);
  275. cout << "Student: " << str << '\n';
  276. cin >> test;
  277. if(str == "exit")
  278. {
  279. fin.close();
  280. return GroupTop;
  281. }
  282. if(str != "NextGroup")
  283. {
  284. GroupCreate->Quantity++;
  285. StudentCreate = new Student;
  286. StudentCreate->Name = str;
  287. for(int i = 0; i < 5; i++)
  288. {
  289. fin >> StudentCreate->Marks[i];
  290. cout << StudentCreate->Marks[i];
  291. }
  292. cin >> test;
  293. cout << endl;
  294. fin >> StudentCreate->Scholarship;
  295. cout << "Student scholarship: " << StudentCreate->Scholarship << '\n';
  296. cin >> test;
  297. fin >> StudentCreate->Type;
  298. cout << "Student type: " << StudentCreate->Type << '\n';
  299. cin >> test;
  300. if(StudentCreate->Type)
  301. GroupCreate->QuantityOfContractor++;
  302. if(!StudentRoot)
  303. {
  304. StudentRoot = StudentCreate;
  305. StudentBack = StudentCreate;
  306. }
  307. else
  308. {
  309. StudentBack->StudentNext = StudentCreate;
  310. StudentBack = StudentCreate;
  311. }
  312. }
  313. else
  314. {
  315. StudentBack->StudentNext = NULL;
  316. break;
  317. }
  318. }
  319. }
  320. else
  321. {
  322. if(GroupBack)
  323. GroupBack->GroupNext = NULL;
  324. break;
  325. }
  326. }
  327. fin.close();
  328. return GroupTop;
  329. }
  330.  
  331. void GroupEdit()
  332. {
  333. cout << "Press 1 for change group name.\n";
  334. cout << "Press 2 for delete group.\n";
  335. cout << "Press 3 for student add.\n";
  336. cout << "Press 4 for student edit.\n";
  337. cout << "Press 5 for student delete.\n";
  338. cout << "Press 0 for back";
  339. int choice;
  340. cin >> choice;
  341. switch(choice)
  342. {
  343. case 1:
  344. {
  345. ChangeGroupName();
  346. break;
  347. }
  348. case 2:
  349. {
  350. GroupDelete();
  351. break;
  352. }
  353. case 3:
  354. {
  355. StudentAdd();
  356. break;
  357. }
  358. case 4:
  359. {
  360. StudentEdit();
  361. break;
  362. }
  363. case 5:
  364. {
  365. StudentDelete();
  366. break;
  367. }
  368. case 0:
  369. {
  370. return;
  371. }
  372. }
  373. }
  374.  
  375. void ChangeGroupName()
  376. {
  377. string NewGroupName, OldGroupName;
  378. cout << "Enter old group name: ";
  379. cin >> OldGroupName;
  380. cout << "Enter new group name: ";
  381. cin >> NewGroupName;
  382. Group *GroupTop = List, *GroupCurrent = List;
  383. if(!GroupTop)
  384. {
  385. cout << "This group wasn't created.\n";
  386. return;
  387. }
  388. else
  389. {
  390. while(GroupCurrent->GroupNext)
  391. {
  392. if(GroupCurrent->NumOfGroup == OldGroupName)
  393. {
  394. GroupCurrent->NumOfGroup = NewGroupName;
  395. }
  396. GroupCurrent = GroupCurrent->GroupNext;
  397. }
  398. }
  399. }
  400.  
  401. void GroupDelete()
  402. {
  403. string _NumOfGroup;
  404. cout << "Enter the group number: ";
  405. cin >> _NumOfGroup;
  406. Student *StudCurrent, *StudParent;
  407. Group *GroupCurrent, *GroupParent;
  408. GroupCurrent = List;
  409. while (GroupCurrent)
  410. {
  411. GroupParent = GroupCurrent;
  412. if (GroupCurrent->NumOfGroup == _NumOfGroup)
  413. {
  414. StudParent = StudCurrent = GroupCurrent->StudentTop;
  415. while (StudCurrent)
  416. {
  417. StudCurrent = StudCurrent->StudentNext;
  418. delete StudParent;
  419. StudParent = StudCurrent;
  420. }
  421. if(GroupCurrent == List)
  422. {
  423. GroupCurrent = GroupCurrent->GroupNext;
  424. delete List;
  425. List = GroupCurrent;
  426. break;
  427. }
  428. else
  429. {
  430. GroupParent->GroupNext = GroupCurrent->GroupNext;
  431. delete GroupCurrent;
  432. GroupCurrent = GroupParent->GroupNext;
  433. break;
  434. }
  435. }
  436. GroupCurrent = GroupCurrent->GroupNext;
  437. }
  438. }
  439.  
  440. void StudentAdd()
  441. {
  442. string _NumOfGroup;
  443. cout << "Enter the group number: ";
  444. cin >> _NumOfGroup;
  445. Group *GroupCurrent = List;
  446. Student *StudentCurrent = NULL, *StudentParent = NULL, *StudentCreate = NULL;
  447. while(GroupCurrent)
  448. {
  449. if(GroupCurrent->NumOfGroup == _NumOfGroup)
  450. {
  451. StudentCreate = new Student;
  452. cout << "Enter the studet name: ";
  453. cin.ignore();
  454. cin.clear();
  455. getline(cin, StudentCreate->Name);
  456. cout << "Enter his status: ";
  457. cin >> StudentCreate->Type;
  458. cout << "Enter his scholarship: ";
  459. cin >> StudentCreate->Scholarship;
  460. cout << "Enter his marks: ";
  461. for(int i = 0; i < 5; i++) cin >> StudentCreate->Marks[i];
  462. StudentCreate->StudentNext = NULL;
  463. StudentCurrent = GroupCurrent->StudentTop;
  464. while(StudentCurrent)
  465. {
  466. StudentParent = StudentCurrent;
  467. StudentCurrent = StudentCurrent->StudentNext;
  468. }
  469. StudentParent->StudentNext = StudentCreate;
  470. GroupCurrent->Quantity++;
  471. if(StudentCreate->Type)
  472. GroupCurrent->QuantityOfContractor++;
  473. }
  474. }
  475. }
  476.  
  477. void StudentEdit()
  478. {
  479. string _NumOfGroup, _Name;
  480. cout << "Enter the group number: ";
  481. cin >> _NumOfGroup;
  482. cout << "Enter the student name: ";
  483. cin.ignore();
  484. cin.clear();
  485. getline(cin, _Name);
  486. Group *GroupCurrent = List;
  487. Student *StudentCurrent;
  488. while(GroupCurrent)
  489. {
  490. if(GroupCurrent->NumOfGroup == _NumOfGroup)
  491. {
  492. while(StudentCurrent)
  493. {
  494. if(StudentCurrent->Name == _Name)
  495. {
  496. cout << "Enter his status: ";
  497. cin >> StudentCurrent->Type;
  498. cout << "Enter his scholarship: ";
  499. cin >> StudentCurrent->Scholarship;
  500. cout << "Enter his marks: ";
  501. for(int i = 0; i < 5; i++) cin >> StudentCurrent->Marks[i];
  502. }
  503. StudentCurrent = StudentCurrent->StudentNext;
  504. }
  505. }
  506. GroupCurrent = GroupCurrent->GroupNext;
  507. }
  508. }
  509.  
  510. void StudentDelete()
  511. {
  512. string _NumOfGroup, _Name;
  513. cout << "Enter the group number: ";
  514. cin >> _NumOfGroup;
  515. cout << "Enter the student name: ";
  516. cin.clear();
  517. getline(cin, _Name);
  518. Group *GroupCurrent = List;
  519. Student *StudentCurrent, *StudentParent;
  520. while(GroupCurrent)
  521. {
  522. if(GroupCurrent->NumOfGroup == _NumOfGroup)
  523. {
  524. StudentCurrent = GroupCurrent->StudentTop;
  525. while(StudentCurrent)
  526. {
  527. StudentParent = StudentCurrent;
  528. if(StudentCurrent->Name == _Name)
  529. {
  530. if(StudentCurrent->Type)
  531. GroupCurrent->QuantityOfContractor--;
  532. StudentParent->StudentNext = StudentCurrent->StudentNext;
  533. delete StudentCurrent;
  534. StudentCurrent = StudentParent->StudentNext;
  535. }
  536. StudentCurrent = StudentCurrent->StudentNext;
  537. }
  538. }
  539. GroupCurrent = GroupCurrent->GroupNext;
  540. }
  541. }
  542.  
  543. void FirstPersonalTask()
  544. {
  545. Group *GroupCurrent = List;
  546. Student *StudentCurrent = NULL;
  547. while(GroupCurrent)
  548. {
  549. StudentCurrent = GroupCurrent->StudentTop;
  550. while(StudentCurrent)
  551. {
  552. if(StudentCurrent->Type)
  553. {
  554. for(int i = 0; i < 5; i++)
  555. {
  556. if(StudentCurrent->Marks[i] == 2)
  557. {
  558. PutInQue(StudentCurrent);
  559. break;
  560. }
  561. }
  562. }
  563. StudentCurrent = StudentCurrent->StudentNext;
  564. }
  565. GroupCurrent = GroupCurrent->GroupNext;
  566. }
  567. ShowFirstTask();
  568. }
  569.  
  570. void PutInQue(Student *StudentContractor)
  571. {
  572. Queue *Create = new Queue;
  573. Create->QueInfo = StudentContractor;
  574. Create->QueNext = NULL;
  575. Queue *QueCurrent;
  576. if(!Root)
  577. {
  578. Root = Create;
  579. }
  580. else
  581. {
  582. QueCurrent = Root;
  583. if(Create->QueInfo->Name < Root->QueInfo->Name)
  584. {
  585. Create->QueNext = Root;
  586. Root = Create;
  587. }
  588. else
  589. {
  590. while(QueCurrent)
  591. {
  592. if((!QueCurrent->QueNext) && (Create->QueInfo->Name > QueCurrent->QueInfo->Name))
  593. {
  594. QueCurrent->QueNext = Create;
  595. break;
  596. }
  597. if((Create->QueInfo->Name < QueCurrent->QueNext->QueInfo->Name) && (Create->QueInfo->Name > QueCurrent->QueInfo->Name))
  598. {
  599. Create->QueNext = QueCurrent->QueNext;
  600. QueCurrent->QueNext = Create;
  601. break;//?
  602. }
  603. else
  604. {
  605. QueCurrent = QueCurrent->QueNext;
  606. }
  607. }
  608. }
  609. }
  610. }
  611.  
  612. void ShowFirstTask()
  613. {
  614. Queue *Current = Root;
  615. while(Current)
  616. {
  617. cout << Current->QueInfo->Name << '\n';
  618. Current = Current->QueNext;
  619. }
  620. cout << endl;
  621. }
  622.  
  623. void SecondPersonalTask()
  624. {
  625. Group *GroupCurrent = List;
  626. Table *TableCurrent, *TableCreate;
  627. while(GroupCurrent)
  628. {
  629. TableCreate = new Table;
  630. TableCreate->GroupInfo = GroupCurrent;
  631. TableCreate->AverageMark = Average(GroupCurrent);
  632. TableCreate->TableNext = NULL;
  633. cout << "1\n";
  634. if(!TableTop)
  635. {
  636. TableTop = TableCreate;
  637. }
  638. else
  639. {
  640. TableCurrent = TableTop;
  641. if(TableCreate->AverageMark > TableTop->AverageMark)
  642. {
  643. TableCreate->TableNext = TableTop;
  644. TableTop = TableCreate;
  645. }
  646. else
  647. {
  648. while(TableCurrent)
  649. {
  650. cout << "2\n";
  651. if((!TableCurrent->TableNext) && (TableCreate->AverageMark < TableCurrent->AverageMark))
  652. {
  653. TableCurrent->TableNext = TableCreate;
  654. break;
  655. }
  656. if((TableCurrent->AverageMark > TableCreate->AverageMark) && (TableCurrent->TableNext->AverageMark < TableCreate->AverageMark))
  657. {
  658. TableCreate->TableNext = TableCurrent->TableNext;
  659. TableCurrent->TableNext = TableCreate;
  660. break;
  661. }
  662. else
  663. TableCurrent = TableCurrent->TableNext;
  664. }
  665. }
  666. }
  667. GroupCurrent = GroupCurrent->GroupNext;
  668. }
  669. ShowSecondTask();
  670. }
  671.  
  672. float Average(Group *Current)
  673. {
  674. int Average = 0;
  675. Student *StudentCurrent = Current->StudentTop;
  676. while(StudentCurrent)
  677. {
  678. cout << "0\n";
  679. for(int i = 0; i < 5; i++)
  680. Average += StudentCurrent->Marks[i];
  681. StudentCurrent = StudentCurrent->StudentNext;
  682. }
  683. return Average = Average / (5 * Current->Quantity);
  684. }
  685.  
  686. void ShowSecondTask()
  687. {
  688. Table *TableCurrent = TableTop;
  689. while(TableCurrent)
  690. {
  691. cout << "Number of group: " << TableCurrent->GroupInfo->NumOfGroup << '\t';
  692. cout << "Average: " << TableCurrent->AverageMark << '\t';
  693. cout << "Quantity of contractors: " << TableCurrent->GroupInfo->QuantityOfContractor << '\n';
  694. TableCurrent = TableCurrent->TableNext;
  695. }
  696. }
  697.  
  698. void ConsoleOutput()
  699. {
  700. Group *GroupCurrent;
  701. Student *StudentCurrent;
  702. GroupCurrent = List;
  703. while(GroupCurrent)
  704. {
  705. StudentCurrent = GroupCurrent->StudentTop;
  706. cout << "Number of group: " << GroupCurrent->NumOfGroup << '\n';
  707. while(StudentCurrent)
  708. {
  709. cout << "Student name: " << StudentCurrent->Name << '\n';
  710. cout << "his type: " << StudentCurrent->Type << '\n';
  711. cout << "his scholarship " << StudentCurrent->Scholarship << '\n';
  712. cout << "his marks: ";
  713. for(int i = 0; i < 5; i++)
  714. {
  715. cout << StudentCurrent->Marks[i] << ", ";
  716. }
  717. cout << '\n';
  718. StudentCurrent = StudentCurrent->StudentNext;
  719. }
  720. GroupCurrent = GroupCurrent->GroupNext;
  721. }
  722. }
  723.  
  724. void FileOutput()
  725. {
  726. char buff[30];
  727. cin >> buff;
  728. ofstream fout(buff);
  729. Group *GroupCurrent;
  730. Student *StudentCurrent;
  731. GroupCurrent = List;
  732. while(GroupCurrent)
  733. {
  734. StudentCurrent = GroupCurrent->StudentTop;
  735. fout << "Number of group: " << GroupCurrent->NumOfGroup << '\n';
  736. while(StudentCurrent)
  737. {
  738. fout << "Student name: " << StudentCurrent->Name << '\n';
  739. fout << "his type: " << StudentCurrent->Type << '\n';
  740. fout << "his scholarship: " << StudentCurrent->Scholarship << '\n';
  741. fout << "his marks: ";
  742. for(int i = 0; i < 5; i++)
  743. {
  744. fout << StudentCurrent->Marks[i] << ", ";
  745. }
  746. fout << '\n';
  747. StudentCurrent = StudentCurrent->StudentNext;
  748. }
  749. GroupCurrent = GroupCurrent->GroupNext;
  750. }
  751. fout.close();
  752. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement