Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 13.25 KB | None | 0 0
  1. unit MainFunctions;
  2.  
  3. interface
  4. uses Types;
  5.  
  6. procedure OutputMainMenu();
  7. procedure ReadDataFromFiles(var Ptrs:TAllPointers; var ReadFiles:TReadFiles);
  8. function  ChooseCommand():TCommand;
  9. procedure ExecuteCommand(Command:TCommand;var Ptrs:TAllPointers;ReadFiles:TReadFiles);
  10. procedure OneMoreCommand(var ExecuteOneMoreCommand:Boolean);
  11. procedure SaveChangesInFiles(Ptrs:TAllPointers);
  12. procedure ClearConsole;
  13.  
  14. implementation
  15.  
  16. uses
  17.   Windows,
  18.   System.SysUtils,
  19.   HelpFunctions,
  20.   SecondaryFunctions;
  21.  
  22. procedure ReadDataFromFiles(var Ptrs: TAllPointers; var ReadFiles:TReadFiles);
  23. var
  24.   RepeatReadFile, AllFilesRead:Boolean;
  25.   Number:Integer;
  26.   InputAnswer:string;
  27.  
  28. begin
  29.  
  30.   RepeatReadFile := False;
  31.  
  32.   repeat
  33.  
  34.     writeln('Какой файл вы хотите считать?');
  35.     writeln('1 - файл со списком книг, 2 - файл со списком читателей, 3 - файл со списком взятых книг');
  36.     writeln('4 - считать все файлы');
  37.  
  38.     Number := ReturnCorrectInputNumber(1, 4);
  39.  
  40.     case Number of
  41.    
  42.       1:
  43.         begin
  44.  
  45.         if Not(ReadFiles.BookList) then
  46.           begin
  47.             Ptrs.BookList := ReadDataBookList();
  48.             ReadFiles.BookList := True;
  49.           end
  50.             else
  51.               writeln('Этот файл уже считан!');
  52.  
  53.         end;
  54.  
  55.       2:
  56.         begin
  57.  
  58.         If Not(ReadFiles.ReaderList)then
  59.           begin
  60.             Ptrs.ReaderList := ReadDataReaderList();
  61.             ReadFiles.ReaderList := True;
  62.           end
  63.             else
  64.               writeln('Этот файл уже считан!');
  65.  
  66.         end;
  67.  
  68.       3:
  69.         begin
  70.  
  71.         If Not(ReadFiles.TakingBookList)then
  72.           begin
  73.             Ptrs.TakingBookList := ReadDataTakingBookList();
  74.             ReadFiles.TakingBookList := True;
  75.           end
  76.             else
  77.               writeln('Этот файл уже считан!');
  78.  
  79.         end;
  80.  
  81.       4:
  82.         begin
  83.  
  84.           AllFIlesRead :=  ReadFiles.BookList and ReadFiles.ReaderList and ReadFiles.TakingBookList;
  85.           if Not(AllFilesRead) then
  86.             begin
  87.  
  88.               Ptrs.BookList := ReadDataBookList();
  89.               ReadFiles.BookList := True;
  90.  
  91.               Ptrs.ReaderList := ReadDataReaderList();
  92.               ReadFiles.ReaderList := True;
  93.  
  94.               Ptrs.TakingBookList := ReadDataTakingBookList();
  95.               ReadFiles.TakingBookList := True;
  96.  
  97.             end;
  98.  
  99.         end;
  100.  
  101.     end;
  102.  
  103.     AllFIlesRead :=  ReadFiles.BookList and ReadFiles.ReaderList and ReadFiles.TakingBookList;
  104.  
  105.     if Not(AllFilesRead) then
  106.     begin
  107.     writeln('Хотите считать еще один файл?(y/n)');
  108.  
  109.     InputAnswer := ReturnCorrectInputYesNo();
  110.  
  111.     if (InputAnswer = 'y') then
  112.      RepeatReadFile := True
  113.       else
  114.         RepeatReadFile := False;
  115.     end;
  116.  
  117.  
  118.  
  119.     ClearConsole;
  120.  
  121.   until not(RepeatReadFile) or AllFilesRead;
  122.  
  123. end;
  124. procedure OutputMainMenu();
  125. begin
  126.  
  127.   Writeln('1.Чтение данных из файла');
  128.   Writeln('2.Просмотр всего списка');
  129.   Writeln('3.Сортировка данных в соответствии с заданием');
  130.   Writeln('4.Поиск данных с использованием фильтров');
  131.   Writeln('5.Добавление данных в список');
  132.   Writeln('6.Удаление данных из списка');
  133.   Writeln('7.Редактирование данных');
  134.   Writeln('8.Вывести список должников');
  135.  
  136. end;
  137. procedure ViewList(CurrentList:TListType; Ptrs:TAllPointers);
  138.  
  139. begin
  140.   case CurrentList of
  141.  
  142.     BookList:
  143.       begin
  144.         ClearConsole;
  145.         ViewBookList(Ptrs.BookList);
  146.       end;
  147.  
  148.     ReaderList:
  149.       begin
  150.         ClearConsole;
  151.         ViewReaderList(Ptrs.ReaderList);
  152.       end;
  153.  
  154.     TakingBookList:
  155.       begin
  156.         ClearConsole;
  157.         ViewTakingBookList(Ptrs.TakingBookList);
  158.       end
  159.  
  160.     else
  161.       Writeln('Произошла ошибка');
  162.  
  163.   end;
  164.  
  165. end;
  166. procedure ExecuteCommand(Command:TCommand; var Ptrs:TAllPointers; ReadFiles:TReadFiles);
  167.  
  168. var
  169.  Number :Integer;
  170.  NumberOfResults :Integer;
  171.  
  172. begin
  173.  
  174.   case Command of
  175.  
  176.     ReadDataFromFile:
  177.         begin
  178.  
  179.           ClearConsole;
  180.           writeln('Какой файл вы хотите считать?');
  181.           writeln('1 - файл со списком книг, 2 - файл со списком читателей, 3 - файл со списком взятых книг');
  182.  
  183.           Number := ReturnCorrectInputNumber(1, 3);
  184.  
  185.           case Number of
  186.  
  187.             1:
  188.             begin
  189.  
  190.               if Not(ReadFiles.BookList) then
  191.                 begin
  192.  
  193.                   Ptrs.BookList := ReadDataBookList();
  194.                   ReadFiles.BookList := True;
  195.  
  196.                 end
  197.                   else
  198.                     Writeln('Этот файл уже считан!');
  199.  
  200.             end;
  201.  
  202.             2:
  203.             begin
  204.  
  205.               if Not(ReadFiles.ReaderList) then
  206.                 begin
  207.  
  208.                   Ptrs.ReaderList := ReadDataReaderList();
  209.                   ReadFiles.ReaderList := True;
  210.  
  211.                 end
  212.                   else
  213.                     Writeln('Этот файл уже считан!');
  214.  
  215.             end;
  216.  
  217.             3:
  218.             begin
  219.  
  220.               if Not(ReadFiles.TakingBookList) then
  221.                 begin
  222.  
  223.                   Ptrs.TakingBookList := ReadDataTakingBookList();
  224.                   ReadFiles.TakingBookList := True;
  225.  
  226.                 end
  227.                   else
  228.                     Writeln('Этот файл уже считан!');
  229.  
  230.             end;
  231.  
  232.           end;
  233.  
  234.         end;
  235.  
  236.     ViewAllElementsOfList:
  237.         begin
  238.  
  239.           ClearConsole;
  240.           writeln('Какой список вы хотите просмотреть?');
  241.           writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
  242.  
  243.           Number := ReturnCorrectInputNumber(1, 3);
  244.  
  245.           case Number of
  246.  
  247.             1: ViewList(BookList,Ptrs);
  248.             2: ViewList(ReaderList,Ptrs);
  249.             3: ViewList(TakingBookList,Ptrs);
  250.  
  251.           end;
  252.  
  253.         end;
  254.  
  255.     SortElementsOfList:
  256.         begin
  257.  
  258.           ClearConsole;
  259.           writeln('Какой список вы хотите отсортировать? ');
  260.           writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
  261.  
  262.           Number := ReturnCorrectInputNumber(1, 3);
  263.  
  264.           case Number of
  265.  
  266.             1: SortBookList(Ptrs.BookList);
  267.             2: SortReaderList(Ptrs.ReaderList);
  268.             3: SortTakingBookList(Ptrs.TakingBookList);
  269.  
  270.           end;
  271.  
  272.         end;
  273.  
  274.     SearchDataInTheList:
  275.         begin
  276.  
  277.           ClearConsole;
  278.           writeln('По какому критерию искать книгу?');
  279.           writeln('1 - поиск книг по ФИО, 2 - поиск книг по названию');
  280.  
  281.           Number := ReturnCorrectInputNumber(1, 2);
  282.  
  283.           case Number of
  284.           1:
  285.             begin
  286.  
  287.               SurNameSearch(Ptrs.BookList,NumberOfResults);
  288.               Writeln('Найдено ',NumberOfResults,' результат/ов');
  289.  
  290.             end;
  291.  
  292.           2:
  293.             begin
  294.  
  295.               BookNameSearch(Ptrs.BookList, NumberOfResults);
  296.               Writeln('Найдено ',NumberOfResults,' результат/ов');
  297.  
  298.             end
  299.  
  300.           end;
  301.  
  302.         end;
  303.  
  304.     AddNewDataToList :
  305.         begin
  306.  
  307.           ClearConsole;
  308.           writeln('В какой список вы хотите добавить элемент?');
  309.           writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
  310.  
  311.           Number := ReturnCorrectInputNumber(1, 3);
  312.  
  313.           case Number of
  314.  
  315.             1: AddNewElementBookList(Ptrs.BookList);
  316.             2: AddNewElementReaderList(Ptrs.ReaderList);
  317.             3: AddNewElementTakingBookList(Ptrs.TakingBookList);
  318.  
  319.           end;
  320.  
  321.         end;
  322.  
  323.     DeleteDataFromList:
  324.         begin
  325.           ClearConsole;
  326.           writeln('В каком списке вы хотите удалить данные?');
  327.           writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
  328.  
  329.           Number := ReturnCorrectInputNumber(1, 3);
  330.  
  331.           case Number of
  332.  
  333.             1: DeleteElementBookList(Ptrs.BookList);
  334.             2: DeleteElementReaderList(Ptrs.ReaderList);
  335.             3: DeleteElementTakingBookList(Ptrs.TakingBookList);
  336.  
  337.           end;
  338.  
  339.         end;
  340.  
  341.  
  342.  
  343.     EditDataInTheList:
  344.         begin
  345.           ClearConsole;
  346.           writeln('В каком списке вы хотите редактировать элемент?');
  347.           writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями');
  348.  
  349.           Number := ReturnCorrectInputNumber(1, 3);
  350.  
  351.           case Number of
  352.  
  353.             1: EditElementBookList(Ptrs.BookList);
  354.             2: EditElementReaderList(Ptrs.ReaderList);
  355.             3: EditElementTakingBookList(Ptrs.TakingBookList);
  356.  
  357.           end;
  358.  
  359.         end;
  360.  
  361.     ViewAllDebtors:
  362.         begin
  363.  
  364.           ClearConsole;
  365.           ViewDebtorList(Ptrs.TakingBookList);
  366.  
  367.         end;
  368.   end;
  369. end;
  370. procedure OneMoreCommand(var ExecuteOneMoreCommand:Boolean);
  371. var
  372.   Answer:Char;
  373.  
  374. begin
  375.  
  376.   ExecuteOneMoreCommand := False;
  377.   Writeln('Хотите выполнить еще одну команду?(y/n)');
  378.   Answer := ReturnCorrectInputYesNo();
  379.  
  380.   if (Answer = 'y') then
  381.      ExecuteOneMoreCommand := True
  382.       else
  383.         ExecuteOneMoreCommand := False;
  384.  
  385. end;
  386. function  ChooseCommand():TCommand;
  387. var
  388.   NumberOfCommand:TCommand;
  389.   Number:Integer;
  390.  
  391. begin
  392.  
  393.   Write('Введите номер команды(1/2/3../8): ');
  394.   NumberOfCommand := IncorrectCommand;
  395.   Number := ReturnCorrectInputNumber(1, 8);
  396.  
  397.   case Number of
  398.  
  399.       1 :NumberOfCommand := ReadDataFromFile;
  400.       2 :NumberOfCommand := ViewAllElementsOfList;
  401.       3 :NumberOfCommand := SortElementsOfList ;
  402.       4 :NumberOfCommand := SearchDataInTheList;
  403.       5 :NumberOfCommand := AddNewDataToList;
  404.       6 :NumberOfCommand := DeleteDataFromList;
  405.       7 :NumberOfCommand := EditDataInTheList;
  406.       8 :NumberOfCommand := ViewAllDebtors;
  407.  
  408.   end;
  409.  
  410.   Result := NumberOfCommand;
  411.  
  412. end;
  413. procedure SaveChangesInFiles(Ptrs:TAllPointers);
  414. var
  415.   Answer:Char;
  416.   Files:TAllFiles;
  417.  
  418. begin
  419.  
  420.   Writeln('Сохранить внесенные изменения?(y/n)');
  421.  
  422.   Answer := ReturnCorrectInputYesNo();
  423.  
  424.   if Answer = 'y' then
  425.     begin
  426.  
  427.       //Запись Данных в файл с книгами
  428.       Assign(Files.BookList,'BookList.txt');
  429.       Rewrite(Files.BookList);
  430.       Ptrs.BookList := Ptrs.BookList^.Address;
  431.  
  432.         while (Ptrs.BookList <> nil) do
  433.           begin
  434.          
  435.             write(Files.BookList,Ptrs.BookList^.Book);
  436.             Ptrs.BookList := Ptrs.BookList^.Address;
  437.            
  438.           end;
  439.  
  440.       CloseFile(Files.BookList);
  441.  
  442.       //Запись Данных в файл с читателями
  443.       Assign(Files.ReaderList,'ReaderList.txt');
  444.       Rewrite(Files.ReaderList);
  445.       Ptrs.ReaderList := Ptrs.ReaderList^.Address;
  446.  
  447.  
  448.         while (Ptrs.ReaderList <> nil) do
  449.           begin
  450.  
  451.             write(Files.ReaderList,Ptrs.ReaderList^.Reader);
  452.             Ptrs.ReaderList := Ptrs.ReaderList^.Address;
  453.  
  454.           end;
  455.  
  456.       CloseFile(Files.ReaderList);
  457.  
  458.       //Запись Данных в файл с читателями
  459.       Assign(Files.TakingBookList,'TakingBookList.txt');
  460.       Rewrite(Files.TakingBookList);
  461.       Ptrs.TakingBookList := Ptrs.TakingBookList^.Address;
  462.  
  463.  
  464.         while (Ptrs.TakingBookList <> nil) do
  465.           begin
  466.  
  467.             write(Files.TakingBookList,Ptrs.TakingBookList^.TakingBookInfo);
  468.             Ptrs.TakingBookList := Ptrs.TakingBookList^.Address;
  469.  
  470.           end;
  471.  
  472.       writeln('Данные успешно было сохранены!');
  473.  
  474.       CloseFile(Files.TakingBookList);
  475.  
  476.     end;
  477.  
  478. end;
  479. procedure ClearConsole;
  480. var
  481.   cursor: COORD;
  482.   r: cardinal;
  483.  
  484. begin
  485.  
  486.   r := 300;
  487.   cursor.X := 0;
  488.   cursor.Y := 0;
  489.   FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', 80 * r, cursor, r);
  490.   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);
  491.  
  492. end;
  493.  
  494. //Схема по госту на 24 блока укрупненная, тестирование, считываем файл не создан,
  495. //считываем файл пустой. если мы будем добавлять в список который пустой,
  496. //Если в поиске несколько записей(Одного автора) если будем удалить то чего
  497. //нет, удалять из пустого списка, а потом попробуем добавить если мы сохраняем
  498. //файлы а они пустые  Удаляем первый, последнний , в середине
  499.  
  500. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement