Функции программы по обработке исключительных ситуаций
При некорректном вводе параметров состояния списка фирм или репортеров программа выдает сообщение о необходимости повторного ввода исходных данных (предусмотрена защита ввода числовой информации с проверкой на то, что введенная информация является числом и это число >=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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!