Функции программы по обработке исключительных ситуаций



 

При некорректном вводе параметров состояния списка фирм или репортеров программа выдает сообщение о необходимости повторного ввода исходных данных (предусмотрена защита ввода числовой информации с проверкой на то, что введенная информация является числом и это число >=0).При отсутствии исходного файла в специальном окне выводится сообщение о необходимости ввести данные с клавиатуры. При недостатке соответствующих запасов фотоматериалов обслуживание фоторепортеров будет прекращено до нового пополнения.

 


Выходные данные

 

Состав выходных данных

 

Выходные данные содержат следующую информацию:

для фоторепортеров - состав очереди, количество человек в очереди и количество заказов на фото, общее число обслуженных фоторепортеров и выполненных заказов.

для фирм - название фирмы и имеющиеся запасы бумаги и реактивов.

 

Место и форма представления выходных данных

 

Результирующие данные записываются в файл с тем же названием, что и исходный для возможности продолжить моделирование процесса с момента окончания предыдущего сеанса работы программы. Структура выходного файла полностью соответствует структуре входного файла.

Изменение состояния очереди отображается непосредственно на экране в виде рисунка очереди фоторепортеров. Возможен просмотр очереди, как в прямом, так и обратном порядке (клавиши <стрелка влево>, <стрелка вправо>).

 Выходные данные могут быть просмотрены в отдельных окнах: просмотр состояния фирм и фотозапасов (клавиша F2) и очереди необслуженных фоторепортеров (клавиша F4).

Данные о числе обслуженных фоторепортеров и выполненых заказов, числе фоторепортеров в очереди и числе имеющихся у них заказов, а также об общем количестве имеющихся запасов бумаги и реактивов выводятся непосредственно на экран в виде таблицы.

 

Сценарий диалога

 

Общая схема диалога

 

1. Заставка:

Курсовая работа по дисциплине: "Программирование". Тема: "Моделирование работы фотоателье". Выполнил студент группы 8376: Иванов И.И. Для продолжения нажмите <Enter>.

2. Сцена 1 (исходное меню).

3.Сцена 2 (Ввод исходных данных списка фирм - пополнение запасов бумаги и реактивов и название фирмы).

4. Сцена3 (постановка фоторепортеров в очередь - ввод организации репортера и количество необходимыхз аказов).

5. Сцена 4 (Удаление заданной фирмы из списка).

6. Сцена 5 (Просмотр очереди репортеров и списка фирм).

7. Сцена 6 (Результирующая табличка на экране).

 

Описание сцен диалога

 

Сцена 1.

<F1> - Изменение сведений о фирмах и фотоматериалах;

<F2> - Просмотр состояния фирм и фотоматериалов;

<F3> - Удаление фирмы из списка;

<F4> - Просмотр очереди;

<F5> - Ввод данных из файла;

I - Постановка в очередь;

I - Обслуживание клиентов;

- - Просмотр очереди в прямом направлении;

- - Просмотр очереди в обратном напрвлении;

<Esc> - Выход из программы;

 

Сцена 2.

- Название организации;

- Пополнение бумаги;

- Пополнение реактивов;

 

Сцена 3.

- Организация фотрепортера;

- Количество фотографий;

 

Сцена 4.

Название удаляемой фирмы;

 

Сцена 5.

Очередь репортеров:

- Название фирмы;

- Количество заказов;

 

Очередь фирм:

- Название фирмы;

- Запасы бумаги;

- Запасы реактивов;

 

Сцена 6.

Обслужено: репортеров, фото;

В очереди: репортеров, фото;

Запас фотоматериалов: бумага, реактивы.


 

РАЗРАБОТКА СТРУКТУР ДАННЫХ И АЛГОРИТМОВ

 

Алгоритмы

 

Алгоритм kurs:

1. Цикл

1.1. Вывод меню на экран;

1.2. Ввод запроса на выполнение функции <F>;

Если нажата клавиша = стрелка вверх,

Тогда операция "Пополнение очереди репортеров"

Иначе

Если нажата клавиша = стрелка вниз ,

Тогда операция "Обслуживание репортеров в очереди"

Иначе

Если нажата клавиша = <f1>,

Тогда операция "изменение сведений о фирмах и фотоматериалах "

Иначе

Если нажата клавиша = <f2>,

Тогда операция "просмотр состояния фирм и фотоматериалов "

Иначе

Если нажата клавиша = <f3>,

Тогда операция " Удаление из списка фирм"

Иначе

Если нажата клавиша = <f4>,

Тогда операция " просмотр очереди в окне "

Иначе

Если нажата клавиша = <f5>,

Тогда операция "Заполнение данных из файла"

Иначе

Если нажата клавиша = <Стрелка влево>,

Тогда операция "просмотр очереди в прямом направлении"

Иначе

Если нажата клавиша = <Стрелка вправо>,

Тогда операция "Просмотр очереди в обратном направлении"

Иначе

Если нажата клавиша = <ESC>,

Тогда выйти на конец цикла

Конец цикла.

2. Запись данных в файл

Конец kurs;


Алгоритм "Пополнение очереди репортеров"

1.Открытие окна ввода данных;

2. Ввод данных: название организации и заказов фотографий;

Если очередь пуста, создается голова списка и первый элемент списка репортеров (Л2- список) иначе добавление элемента в список фоторепортеров;

3. Закрытие окна;

4. Прорисовка фона;

5. Встать на начало списка;

Цикл вывода фоторепортеров на экран

6.1. Пока не конец списка фоторепортеров производится вывод очередного репортера на экран;

Конец цикла вывода фоторепортеров на экран;

Изменение статуса недообслуженных репортеров;

Установка флага, запрещающий ввод из файла.

Конец "Пополнение очереди репортеров".

 

Алгоритм "Изменение сведений о фирмах и фотоматериалах "

1.Открытие окна ввода данных;

2. Ввод данных: название организации и пополнение бумаги и реактивов;

Если очередь пуста, создается голова списка и первый элемент списка фирм (Л1- список) иначе

3. Встать на начало списка фирм;

4. Цикл "Поиск и заненсение фирмы в список"

4.1. Перебор элементов списка до тех пор пока не встретиться элемент с названием фирмы, соответствующим введенному или очередное название фирмы по алфавиту не будет больше введенного значения;

Если фирма найдена в списке, то проводится коррекция данных,

иначе создание и вставка элемента в список;

Конец цикла "Поиск и занесение фирмы в список"

5. Закрытие окна;

6. Прорисовка фона;

7. Установка флага, запрещающего ввод из файла.

Конец "Изменение сведений о фирмах и фотоматериалах".

 

Алгоритм "Заполнение данных из файла"

1. Открытие файла для чтения;

2. Цикл "Перебор строк файла, соответствующих данным об очереди репортеров"

2.1. Читаем строку из файла (название организации и количество заказов);

2.2. Если строка первая, то создаем голову списка (Л2-списка) и первый элемент списка заполняем информационные поля данными из файла

Иначе добавляем элемент к списку и заполняем соответствующие поля;

Если все элементы очередной строки равны 0, то переход на конец цикла

3. Конец Цикла "Перебор строк файла, соответствующих данным об очереди репортеров"

4."Цикл "Перебор строк файла, соответствующих данным о запасах фотоматериалов"

 

4.1.Читаем строку из файла (название организации, запасы бумаги и реактивов);

4.2.Если это строка следующая после строки с нулями, то создаем голову списка фирм (Л1-список), и заполняем информационные поля первого элемента списка данными из файла,

иначе добавляем элемент к списку и заполняем соответствующие поля;

Если достигнут конец файла, то переход на конец цикла.

5.Конец цикла "Перебор строк файла, соответствующих данным о запасах фотоматериалов"

 6. Установка флага, запрещающего повторный ввод из файла.

Конец "Заполнение данных из файла";

 

Алгоритм "Просмотр состояния фирм и фотоматериалов "

1.Открытие окна ввода данных;

2. Встать на начало списка фирм;

3. Цикл "Просмотра списка фирм"

3.1. Вывод на экран данных о фирме;

3.2.Переход к следующему элементу;

Если достигнут конец списка, то переход на конец цикла.

Конец цикла "Просмотра списка фирм"

4. Закрытие окна;

5. Прорисовка фона;

Конец "Просмотр состояния фирм и фотоматериалов"

 

Алгоритм "Просмотр списка репортеров"

1.Открытие окна ввода данных;

2. Встать на начало списка фоторепортеров;

3. Цикл "Просмотра списка фоторепортеров"

3.1. Вывод на экран данных о репортере;

3.2.Переход к следующему элементу;

Если достигнут конец списка, то переход на конец цикла.

Конец цикла "Просмотра списка фото репортеров"

6. Закрытие окна;

7. Прорисовка фона;

Конец "Просмотр состояния фоторепортеров"

 


Алгоритм "Удаление фирмы из списка"

1.Открытие окна ввода данных;

2. Ввод названия фирмы;

3. Встать на начало списка фирм;

4. Цикл "Поиск фирмы в списке"

4.1. Перебор элементов списка фирм до тех пор пока не будет найдено элемент списка с заданным значением фирмы или пока не будет пройден весь список;

Конец цикла "Поиск фирмы в списке"

5. Если фирма найдена, то удаление соотсетствующего элемента списка

иначе выдача сообщения, что такой фирмы нет;

6. Закрытие окна;

7. Прорисовка фона;

Конец "Удаление фирмы из списка"

 

Алгоритм "Просмотр списка фоторепортеров в прямом направлении"

1.Открытие окна ввода данных;

2. Поиск элемента списка соответствующего адресу текущего положения курсора;

3. Цикл "Вывод элементов списка фоторепортеров"

3.1. Вывод на экран репортера;

3.2. Приращение координат для вывода следующего репортера;

3.3. Если список просмотрен или выведено 6 фоторепортеров, тогда выход на конец цикла;

Конец цикла "Вывод элементов списка фоторепортеров"

8. Закрытие окна;

9. Прорисовка фона;

Конец "Просмотр списка фоторепортеров в прямом направлении"

 

Алгоритм "Просмотр списка фоторепортеров в обратном направлении"

1.Открытие окна ввода данных;

2. Встать на глову списка фоторепортеров;

3. Копируем в память часть экрана, соответствующего очереди репортеров без правого поля экрана, необходимого для размещения одного фоторепортера;

4. Выводим данные изображения в правую часть экрана;

5.В левой части выводим изображение человека следующего в очереди;

6.Прорисовка фона;

Конец "Просмотр списка фоторепортеров в обратном направлении"


Алгоритм "Обслуживание фоторепортеров"

1.Встать на голову списка фоторепортеров;

2.Определение фирмы первого репортера в очереди;

3.Если репортер обыкновенный, то производится поиск в списке фирмы с название obk. При условии, что запасы фирмы(No, Mo) больше заказов фоторепортера Хj, то из запасовфирмы отнимается количество заказов репортера и соответствующий элемент удаляется из списка, если общих запасов не хватает, то количество запасов становится равным 0 и из количества заказов фоторепортера вычитается количество имевшихся запасов и ставится флажок о недообслуженности репортеров,т.е. (Хj> min (No, Mo), тогда Mo- min(No, Mo), No- min (No, Mo)), иначе если первым в очереди стоит фоторепортер из фирмы, то он сначала обслуживается из общих запасов, как обыкновенный, если запасов не хватает, тогда осуществляется поиск фирмы репортера и если фирма найдена, то производится дообслуживание из запасов этой фирмы, т.е. (Хj> min (No, Mo), тогда Mo- min(No, Mo), No- min (No, Mo), Mj-Xj+ min (No, Mo), Nj-Xj+ min (No, Mo) и соответствующий элемент удаляется из списка, иначе репоретер помечается как недообслуженный;

иначе если первый в очереди стоит папарацци, то поиск в списке фоторепортеров не папарацци. Если найден не папарацци, то переход к пункту 2, если таких нет, то обслуживается папарацци, как обыкновенный репортер, т.е. (Хj> min (No, Mo), тогда Mo- min(No, Mo), No- min (No, Mo)) и соответствующий элемент удаляется из списка, иначе репоретер помечается как недообслуженный;

Конец "Обслуживание фоторепортеров"

 

 

Модель структуры данных

 

Для данной задачи в качестве динамических структур данных целесообразно выбрать линейные динамические структуры данных, так как они достаточно просто могут быть реализованы и являются эффективными, потому что они динамично могут изменять свои размеры, позволяют легко реорганизовать порядок элементов, добавлять и удалять элементы, путем редактирования небольшого числа ссылок. Используемая память расходуется оптимально, так как используется динамическая память, во время работы программы происходит выделение требуемого размера памяти и освобождение участков памяти, которые в данный момент не используются.

 


 

На рисунке представлена модель списка фирм и запасов фотоматериалов.

 

tlink1=^tnode1; {Указатель на список фирм}

 tnode1=record {Список фирм}

      name:string[4]; {Название фирмы}

      par1:integer; {Запасы бумаги}

      par2:integer; {Запасы реактивов}

      next:tlink1; {Указатель на следующий элемент списка фирм}

     end;

treplist1=record {тип - элемент "голова списка"}

         head,cur,predcur:tlink1;

         {Указатели на начальный, текущий и предыдущий

        элементы списка фирм}

        end;

tl1list1=^treplist1;{тип - указатель на голову списка фирм}

var

golova:tl1list1; {Адрес головы списка фирм}


 

На рисунке представлена модель двунаправленного списка, реализующая очередь фоторепортеров

 

 

link=^tnode; {Указатель на список фоторепортеров}

tnode= record {Узел списка фоторепортеров}

      org:string[4]; {Организация репортера}

      num:integer;{Порядковый номер в очереди}

      info:integer; {Количество заказов}

      obs:integer;{Указывает на неполное обслуживание (1)}

      next,prev:link; {Указатель на следующие и

            предыдущие элементы списка фоторепортеров}

     end;

treplist=record {тип - элемент "голова списка"}

        head,cur,posl:link;  {Указатели на начальный, текущий и предыдущий

        элементы списка фоторепортеров}

         end;

tl1list=^treplist;{тип - указатель на голову списка фоторепортеров}

var

golova2:tl1list; {Адрес головы списка фоторепортеров}


Дата добавления: 2018-06-27; просмотров: 351; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!