Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit MainFunctions;
- interface
- uses Types;
- procedure OutputMainMenu();
- procedure ReadDataFromFiles(var Ptrs:TAllPointers; var ReadFiles:TReadFiles);
- function ChooseCommand():TCommand;
- procedure ExecuteCommand(Command:TCommand;var Ptrs:TAllPointers;ReadFiles:TReadFiles);
- procedure OneMoreCommand(var ExecuteOneMoreCommand:Boolean);
- procedure SaveChangesInFiles(Ptrs:TAllPointers);
- procedure ClearConsole;
- implementation
- uses
- Windows,
- System.SysUtils,
- HelpFunctions,
- SecondaryFunctions;
- procedure ReadDataFromFiles(var Ptrs: TAllPointers; var ReadFiles:TReadFiles);
- var
- RepeatReadFile, AllFilesRead:Boolean;
- Number:Integer;
- InputAnswer:string;
- begin
- RepeatReadFile := False;
- repeat
- writeln('Какой файл вы хотите считать?');
- writeln('1 - файл со списком книг, 2 - файл со списком читателей, 3 - файл со списком взятых книг');
- writeln('4 - считать все файлы');
- Number := ReturnCorrectInputNumber(1, 4);
- case Number of
- 1:
- begin
- if Not(ReadFiles.BookList) then
- begin
- Ptrs.BookList := ReadDataBookList();
- ReadFiles.BookList := True;
- end
- else
- writeln('Этот файл уже считан!');
- end;
- 2:
- begin
- If Not(ReadFiles.ReaderList)then
- begin
- Ptrs.ReaderList := ReadDataReaderList();
- ReadFiles.ReaderList := True;
- end
- else
- writeln('Этот файл уже считан!');
- end;
- 3:
- begin
- If Not(ReadFiles.TakingBookList)then
- begin
- Ptrs.TakingBookList := ReadDataTakingBookList();
- ReadFiles.TakingBookList := True;
- end
- else
- writeln('Этот файл уже считан!');
- end;
- 4:
- begin
- AllFIlesRead := ReadFiles.BookList and ReadFiles.ReaderList and ReadFiles.TakingBookList;
- if Not(AllFilesRead) then
- begin
- Ptrs.BookList := ReadDataBookList();
- ReadFiles.BookList := True;
- Ptrs.ReaderList := ReadDataReaderList();
- ReadFiles.ReaderList := True;
- Ptrs.TakingBookList := ReadDataTakingBookList();
- ReadFiles.TakingBookList := True;
- end;
- end;
- end;
- AllFIlesRead := ReadFiles.BookList and ReadFiles.ReaderList and ReadFiles.TakingBookList;
- if Not(AllFilesRead) then
- begin
- writeln('Хотите считать еще один файл?(y/n)');
- InputAnswer := ReturnCorrectInputYesNo();
- if (InputAnswer = 'y') then
- RepeatReadFile := True
- else
- RepeatReadFile := False;
- end;
- ClearConsole;
- until not(RepeatReadFile) or AllFilesRead;
- end;
- procedure OutputMainMenu();
- begin
- Writeln('1.Чтение данных из файла');
- Writeln('2.Просмотр всего списка');
- Writeln('3.Сортировка данных в соответствии с заданием');
- Writeln('4.Поиск данных с использованием фильтров');
- Writeln('5.Добавление данных в список');
- Writeln('6.Удаление данных из списка');
- Writeln('7.Редактирование данных');
- Writeln('8.Вывести список должников');
- end;
- procedure ViewList(CurrentList:TListType; Ptrs:TAllPointers);
- begin
- case CurrentList of
- BookList:
- begin
- ClearConsole;
- ViewBookList(Ptrs.BookList);
- end;
- ReaderList:
- begin
- ClearConsole;
- ViewReaderList(Ptrs.ReaderList);
- end;
- TakingBookList:
- begin
- ClearConsole;
- ViewTakingBookList(Ptrs.TakingBookList);
- end
- else
- Writeln('Произошла ошибка');
- end;
- end;
- procedure ExecuteCommand(Command:TCommand; var Ptrs:TAllPointers; ReadFiles:TReadFiles);
- var
- Number :Integer;
- NumberOfResults :Integer;
- begin
- case Command of
- ReadDataFromFile:
- begin
- ClearConsole;
- writeln('Какой файл вы хотите считать?');
- writeln('1 - файл со списком книг, 2 - файл со списком читателей, 3 - файл со списком взятых книг');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1:
- begin
- if Not(ReadFiles.BookList) then
- begin
- Ptrs.BookList := ReadDataBookList();
- ReadFiles.BookList := True;
- end
- else
- Writeln('Этот файл уже считан!');
- end;
- 2:
- begin
- if Not(ReadFiles.ReaderList) then
- begin
- Ptrs.ReaderList := ReadDataReaderList();
- ReadFiles.ReaderList := True;
- end
- else
- Writeln('Этот файл уже считан!');
- end;
- 3:
- begin
- if Not(ReadFiles.TakingBookList) then
- begin
- Ptrs.TakingBookList := ReadDataTakingBookList();
- ReadFiles.TakingBookList := True;
- end
- else
- Writeln('Этот файл уже считан!');
- end;
- end;
- end;
- ViewAllElementsOfList:
- begin
- ClearConsole;
- writeln('Какой список вы хотите просмотреть?');
- writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1: ViewList(BookList,Ptrs);
- 2: ViewList(ReaderList,Ptrs);
- 3: ViewList(TakingBookList,Ptrs);
- end;
- end;
- SortElementsOfList:
- begin
- ClearConsole;
- writeln('Какой список вы хотите отсортировать? ');
- writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1: SortBookList(Ptrs.BookList);
- 2: SortReaderList(Ptrs.ReaderList);
- 3: SortTakingBookList(Ptrs.TakingBookList);
- end;
- end;
- SearchDataInTheList:
- begin
- ClearConsole;
- writeln('По какому критерию искать книгу?');
- writeln('1 - поиск книг по ФИО, 2 - поиск книг по названию');
- Number := ReturnCorrectInputNumber(1, 2);
- case Number of
- 1:
- begin
- SurNameSearch(Ptrs.BookList,NumberOfResults);
- Writeln('Найдено ',NumberOfResults,' результат/ов');
- end;
- 2:
- begin
- BookNameSearch(Ptrs.BookList, NumberOfResults);
- Writeln('Найдено ',NumberOfResults,' результат/ов');
- end
- end;
- end;
- AddNewDataToList :
- begin
- ClearConsole;
- writeln('В какой список вы хотите добавить элемент?');
- writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1: AddNewElementBookList(Ptrs.BookList);
- 2: AddNewElementReaderList(Ptrs.ReaderList);
- 3: AddNewElementTakingBookList(Ptrs.TakingBookList);
- end;
- end;
- DeleteDataFromList:
- begin
- ClearConsole;
- writeln('В каком списке вы хотите удалить данные?');
- writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями ');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1: DeleteElementBookList(Ptrs.BookList);
- 2: DeleteElementReaderList(Ptrs.ReaderList);
- 3: DeleteElementTakingBookList(Ptrs.TakingBookList);
- end;
- end;
- EditDataInTheList:
- begin
- ClearConsole;
- writeln('В каком списке вы хотите редактировать элемент?');
- writeln('1 - список книг, 2 - список читателей, 3 - список книг взятых читателями');
- Number := ReturnCorrectInputNumber(1, 3);
- case Number of
- 1: EditElementBookList(Ptrs.BookList);
- 2: EditElementReaderList(Ptrs.ReaderList);
- 3: EditElementTakingBookList(Ptrs.TakingBookList);
- end;
- end;
- ViewAllDebtors:
- begin
- ClearConsole;
- ViewDebtorList(Ptrs.TakingBookList);
- end;
- end;
- end;
- procedure OneMoreCommand(var ExecuteOneMoreCommand:Boolean);
- var
- Answer:Char;
- begin
- ExecuteOneMoreCommand := False;
- Writeln('Хотите выполнить еще одну команду?(y/n)');
- Answer := ReturnCorrectInputYesNo();
- if (Answer = 'y') then
- ExecuteOneMoreCommand := True
- else
- ExecuteOneMoreCommand := False;
- end;
- function ChooseCommand():TCommand;
- var
- NumberOfCommand:TCommand;
- Number:Integer;
- begin
- Write('Введите номер команды(1/2/3../8): ');
- NumberOfCommand := IncorrectCommand;
- Number := ReturnCorrectInputNumber(1, 8);
- case Number of
- 1 :NumberOfCommand := ReadDataFromFile;
- 2 :NumberOfCommand := ViewAllElementsOfList;
- 3 :NumberOfCommand := SortElementsOfList ;
- 4 :NumberOfCommand := SearchDataInTheList;
- 5 :NumberOfCommand := AddNewDataToList;
- 6 :NumberOfCommand := DeleteDataFromList;
- 7 :NumberOfCommand := EditDataInTheList;
- 8 :NumberOfCommand := ViewAllDebtors;
- end;
- Result := NumberOfCommand;
- end;
- procedure SaveChangesInFiles(Ptrs:TAllPointers);
- var
- Answer:Char;
- Files:TAllFiles;
- begin
- Writeln('Сохранить внесенные изменения?(y/n)');
- Answer := ReturnCorrectInputYesNo();
- if Answer = 'y' then
- begin
- //Запись Данных в файл с книгами
- Assign(Files.BookList,'BookList.txt');
- Rewrite(Files.BookList);
- Ptrs.BookList := Ptrs.BookList^.Address;
- while (Ptrs.BookList <> nil) do
- begin
- write(Files.BookList,Ptrs.BookList^.Book);
- Ptrs.BookList := Ptrs.BookList^.Address;
- end;
- CloseFile(Files.BookList);
- //Запись Данных в файл с читателями
- Assign(Files.ReaderList,'ReaderList.txt');
- Rewrite(Files.ReaderList);
- Ptrs.ReaderList := Ptrs.ReaderList^.Address;
- while (Ptrs.ReaderList <> nil) do
- begin
- write(Files.ReaderList,Ptrs.ReaderList^.Reader);
- Ptrs.ReaderList := Ptrs.ReaderList^.Address;
- end;
- CloseFile(Files.ReaderList);
- //Запись Данных в файл с читателями
- Assign(Files.TakingBookList,'TakingBookList.txt');
- Rewrite(Files.TakingBookList);
- Ptrs.TakingBookList := Ptrs.TakingBookList^.Address;
- while (Ptrs.TakingBookList <> nil) do
- begin
- write(Files.TakingBookList,Ptrs.TakingBookList^.TakingBookInfo);
- Ptrs.TakingBookList := Ptrs.TakingBookList^.Address;
- end;
- writeln('Данные успешно было сохранены!');
- CloseFile(Files.TakingBookList);
- end;
- end;
- procedure ClearConsole;
- var
- cursor: COORD;
- r: cardinal;
- begin
- r := 300;
- cursor.X := 0;
- cursor.Y := 0;
- FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ', 80 * r, cursor, r);
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cursor);
- end;
- //Схема по госту на 24 блока укрупненная, тестирование, считываем файл не создан,
- //считываем файл пустой. если мы будем добавлять в список который пустой,
- //Если в поиске несколько записей(Одного автора) если будем удалить то чего
- //нет, удалять из пустого списка, а потом попробуем добавить если мы сохраняем
- //файлы а они пустые Удаляем первый, последнний , в середине
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement